IRCaBot 2.1.0
GPLv3 © acetone, 2021-2022
#dev
/2024/01/20
~R4SAS
~orignal
~villain
@onon
&N00B
+Xeha
+r00tobo
+relaybot
+whothefuckami
AreEnn
HackerMan
KabaOS
Leastr
Most2
Nausicaa
Vort
WayBest
`
acetone
anon2
b3t4f4c3
karamba_i2p
nemiga
not_bob
osoznayka
poriori
profetikla
segfault
soos
teeth
tolik
un
unwr
weko
orignal weko я думаю что ту багу с взиамными реконнектами починил
weko orignal: это хорошо, посмотрю что выйдет...
orignal там лажа была
orignal явная
orignal кстати отсюда наверное и лишние сессии появилялись
weko Получается мои действия:
weko 1. Починить чтобы вообще работало, а не крашалось
weko 2. Проверить, всплывает ли AEAD и Garlic без перегрузки треда
weko 3. Проверить с openssl 1.1.1
weko 4. Проверить фикс реконнектов, работает ли фикс; если работает, то помогает ли с Garlic
orignal AEAD это другая проблема
orignal счас пока реконнекты
orignal с Garelic нет не поможет
weko Ну да это другая
orignal там мохоже что то внути openssl лоамется
weko Просто порядок такой будет
weko В таком порядке было добавлено
weko orignal: возможно вполне
` Посоны, дайте напомните домен жабаффской Ирки?
` irc.postman?
Vort у меня "Garlic: Can't handle ECIES-X25519-AEAD-Ratchet message" в логах полно, при том, что версия OpenSSL - 3.0.8
Vort так что это какая-то давняя проблема
weko Vort: но вопрос по какой причине у тебя это... По той же, или по другой?
Vort плохо понимаю вопрос
Vort я обновился до 2.50.2-19 и всё равно лезет. об этом речь или нет?
weko Vort: скорее уж откатился
weko Не знаю уж
weko Лось предлагает 1.1.1
Vort ну у тебя контроллируемые условия, так лучше, конечно, проверять
Vort но я думаю что и с 1.1.1 будет та же фигня
weko [11:03:23] <Vort> ну у тебя контроллируемые условия, так лучше, конечно, проверять
weko Относительно основной сети - да
weko Я сначала хочу узнать, будет ли AEAD ошибка в ntcp2 без перегрузки
weko Но прикол с Garlic вылезает и без этой ошибки и без перегрузки
weko Vort: учитывая что это вылезает в основой сети, я думаю что этот баг довольно критический
Vort не пойму, почему ты говоришь о Garlic и AEAD в логах как о разных проблемах. ты видел другие ошибки с Garlic что ли?
Vort пока не станет понятна причина, сложно рассуждать о критичности. я думаю, что исправление мало что глобально улучшит, но чинить всё равно надо - хотя бы что бы не мешалось
weko Vort: потому что есть AEAD ошибка в NTCP2, а есть в Garlic
Vort а, понял. в NTCP2 она на уровне error ?
weko Vort: критично как минимум мне для теста. 22MB/s выдаёт, но виснет через время.
weko Vort: warning
weko Но это не так важно
weko Потому что это рвёт сессию
weko А далее пишет про Unreachable, проблемы с одновременным переподключением, Garlic
weko При чём, что важно, сессию может разорвать по другой причине
weko И будет тоже самое
Vort у меня логи у основного узла только error, так что NTCP2 варианта я не видел
Vort попробую сейчас второй узел собрать и запустить с warning
weko Я могу тебе закинуть архив с тестнетом и моим текущем кодом (как исправлю работоспособность). Если надо. Правда он 200mb вроде
weko Но там можно без netdb-шек
weko Просто я не оформил нормально пока что всё тап
Vort так на винде же несколько копий i2pd только с хаком запускаются. а в виртуалке это хреновый тест будет
Vort так что я пока что просто проверю, лезут ли NTCP2 AEAD ошибки в основной сети
weko Vort: ну сам виноват что шинда у тебя)
weko Vort: хорошо тоже показательно будет
weko Vort: кстати а почему думаешь что в виртуалке хреновый тест?
weko Разницы то нет
Vort weko: так не в винде проблема, а в странном требовании запускать только одну копию i2pd. конечно же, можно (и нужно) сделать иначе
weko Ну у меня 200 копий запускается спокойно
Vort в виртуалке время идёт немного не так, как у реального компа. для i2pd же важны миллисекунды (в случае SSU2)
Vort не хотелось бы ещё в баги из-за виртуализации вляпаться
Vort weko: ну понятно. и у меня сможет запуститься, если поддержка нормальная будет
weko Vort: реально? Уж чего там проблем с временем не ожидал
weko Так*
Vort реальный процессор довольно равномерно выполняет команды одну за другой, виртуальный же может призадуматься из-за нагрузки на хост (реальный комп)
Vort это программы внутри виртуалки могут заметить. ну это теория, ещё и от самой виртуалки зависит
Vort я не утверждаю, что обязательно вылезут проблемы, просто предполагаю, что такое может быть
orignal Vort то что Garlic это понятно. вопрос откуда ошибка AEAD в NTCP2
weko orignal: всмысле понятно? Откуда тогда
orignal я тебе уже отвечал
orignal таг в тагсете не находит
weko Ну и почему?
orignal просто это старая проблема
orignal а вот AEAD в NTCP2
weko И как исправить?
orignal не знаю надо разбираться
orignal но эта проблема годами
weko Здесь это самая главная проблема
weko Потому что сессия ntcp2 то восстанавливается. А вот Garlic ошибка не даёт дальше данные передавать
orignal там тоже восстанавливается примерно через 4 минуты
weko Не знаю ждал ли я 4 минуты
orignal ну это известно
weko Я думаю это одна из причин проблем со стабильностью
orignal там через 4 минуты тагсет сбрасывается и утстанавливается сессия заново
orignal допустим
orignal но быстро починить ты это не сможешь
orignal а отличие от AEAD в NTCP2
weko orignal: может из-за разрыва сессии просраться сообщение с тэгами?
weko Или какое то важное
weko Из-за отсутивия которого всё ломается
orignal эта проблема более перспективная
orignal не должно
orignal ну то есть может потеряться rekey
orignal потому и надо смот реть
weko orignal: ну так как вылезает после разрыва сессии то явно всирается сообщение. И явно это вызывает баг. А как именно - не знаю и даже не могу гадать
weko Так как не разбираюсь
orignal давай сначала AEAD в NTCP2 чинить
weko Ладно можно вызывать Garlic превышением очереди
orignal ты реконнекты проврил?
Vort по моему тесту - за 2 часа аптайма ни одной "NTCP2: Received AEAD verification failed" ошибки. вырубаю узел
orignal так у меня тоже на узлах
orignal потому я и просил weko локализовать сценарий
orignal у него явно что то где то переполняется а мы это неправильно обрабатываем
Vort понятно, особенности тестовой сети какие-то
Vort или просто очень редкий баг
weko Vort: скорее баг который срабатывает только при конкретных условиях
weko Которых нет в основной сети
weko Потому что он не редкий
weko Воспроизводится стабильно
Vort так на 200 узлах ведь
Vort шансы в 200 раз выше, чем на 1 узле
orignal нет ну чинить его очевидно надо
relaybot 13apophis: orignal: порет и2п 50 сервер конкретно. 2 раза за 24 часа.
orignal ты переборал до 2.50.2?
relaybot 13apophis: поздно
relaybot 13apophis: это бладе сервер
relaybot 13apophis: теперь полетело все
relaybot 13apophis: не тольто это паблик сачты ресурсы, но и сенсор нетворк и все остальное
orignal я тебе позавчера еще говорил
relaybot 13apophis: ты говорил, да
orignal кто ж виноват то?
orignal 2.50.2 стаблиный
weko Vort: так появляется на конкретном при условии гона трафика
relaybot 13apophis: ты ме будь как дурачек веко, а послушай
weko Я могу и 2 запустить и работать будет
relaybot 13apophis: я даже зачти на сефвер не могу, пинга нет
weko Ну в плане появлятся
relaybot 13apophis: но по манагерскому интерфейсу идно чтро ряаботает
relaybot 13apophis: короче, сильно глубоко 50 версия пизданула нетворк весь на сервере...
weko apophis тут чат по делу. Срач на #ru
weko понял что я случайно сломал. починил.
weko далее смотрю что если тред не перегружать, потому что есть вероятность что это не совпадение.
weko Хм. Такое дело: сделал максимальное окно 1024, что не перегружать тред Destionation. В итоге баг не всплывает (закачал 4.5 гига, когда максимум всплывало через 1.5 гига). Поменял обратно до 8196, дождался пока перегрузит тред - и всплыл NTCP2: Received AEAD verification failed
weko Я знаю что Destination это про другое и NTCP2 тут вроде не при чём.... однако вылезает именно когда перегружен этот тред.
weko Возможно это гонка
weko Я не видел именно чтобы писало 100%, однако учитывая что нагрузка на этот тред идёт импульсами, не удивительно
orignal естественно гонка вот и надо понять в чем она
weko в ключе вероятно
orignal для начала портится отправка или получение
orignal ключ вряд ли
weko я думаю отправка
weko ой
weko получение*
weko ну потому что ошибка NTCP2: Received AEAD verification failed всегда на получающей стороне
orignal естественно на получающей
orignal но может отправилось коряво
weko orignal: а почему думаешь ошибка Garlic именно что не тот тагсет?
weko Garlic: Can't handle ECIES-X25519-AEAD-Ratchet message
weko Garlic: Flags/static section AEAD verification failed
weko тут тоже фейлится именно AEAD
weko <orignal> но может отправилось коряво
weko можно посмтреть на какой стороне тред перегружается
weko ну именно на какой больше
weko Garlic это же сообщения роутеру. В NTCP2 не тот же ключ случаем используется?
orignal потому что таг не находит
orignal нет в NTCP2 там совсем другой
weko ладно
weko <weko> можно посмтреть на какой стороне тред перегружается
weko тогда буду смотреть
orignal думаю при отправке
weko по htop-у трудно понять
weko но нагружает вроде больше отправителя
orignal вот надо разбираться
orignal я тоже думаю дело в отправке
orignal понимаешь там не одно сообщение отправляется а несколько кусков
weko AEAD это же подпись, да?
orignal это пддпись пакета неверная
weko значит мы проверяем ключом отправителя
weko если с другого роутера будет работать значит явно проблема в отправителе
orignal естественно его публичным
weko точнее наоборот
weko если на другом не будет работать то пробелема в отправителе
weko но блин NTCP2 так не проверить
weko только Garlic
weko ладно дальше по плану другая версия openssl
orignal придется самму думать
weko ну можно запариться, сохранить пакет и после его проверить
weko но лучше сначало другое проверить
orignal нужно...
orignal но пакет ты там не найдешь
orignal потому что он из кусков
weko кусок который мы проверяем всё равно есть
orignal мы проверяем целиком сообщение
orignal а оно отправляется кусками
weko но у получателя то целый есть он
weko он же его как то проверяет
orignal у получателя мы читаем его всю длину
orignal понятно что у получателя ты можешь его записать а вот у отправителя не факт
weko Found OpenSSL: /usr/lib/libcrypto.so (found version "1.1.1w")
weko ща буду смотреть
weko /bin/ld: libi2pd.a(Family.cpp.o): in function `i2p::data::Families::LoadCertificate(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
weko Family.cpp:(.text+0x1ac): undefined reference to `EVP_PKEY_base_id'
orignal тебе надо линуковку поправить
weko вопрос как )
orignal я тебе приводил пример
orignal <orignal> CXXFLAGS ?= ${CXX_DEBUG} -I/home/i2pd/openssl-1.1.1k/include -I/home/i2pd/boost_1_75_0/include -Wall -Wextra -Wno-unused-parameter -pedantic -Wno-psabi
orignal <orignal> LDLIBS += -L/home/i2pd/openssl-1.1.1k -lcrypto -lssl -lz -L/home/i2pd/boost_1_75_0/lib -lboost_system -lboost_date_time -lboost_filesystem -lboost_program_options -lpthrea
weko <orignal> в Makfile.linux пути указать
weko а где этот файл
orignal в корне проекта
weko лол
orignal собирать естественно make-ом
orignal про cmake без понятия
weko ну cmake я как раз уже попробовал
weko и ошибку я писал
weko ну не судьба )
orignal собери обычным make и не выебывайся )))
weko undefined reference to `EVP_PKEY_base_id'
weko ага
weko не выебнулся
weko вот как ))
weko тут тоже самое
weko 1.1.1w
orignal make clean
orignal и собрать с нуля
orignal все там с 1.1.1 нормально
weko не, опять
weko undefined reference to `EVP_PKEY_base_id'
weko у меня 1.1.1w, а у тебя 1.1.1k
weko это важно?
orignal нет
orignal никакой разнницы
orignal что как то не так собираешь
weko ну не знаю
orignal вот то что я тебе написал это все работает
orignal или просто собери openssl локально и сошлись на него
orignal тут дел на 10 минут
weko так он то есть у меня уже
weko ошибку даёт
weko CXXFLAGS ?= ${CXX_DEBUG} -I/usr/include/openssl-1.0 -Wall -Wextra -Wno-unused-parameter -pedantic -Wno-psabi
weko LDFLAGS ?= ${LD_DEBUG} -L/usr/include/openssl-1.0 -lcrypto -lssl -lz
weko ну это я 1.0 пробовал
weko на 1.1 тож самое
orignal нельзя 1.0
orignal надо 1.1.1
orignal именно 1.1.1 даже не 1.1.0
orignal -L/usr/include/openssl-1.0
orignal я не думаю что либы лежать в папке include
weko 1.1.1w там
weko а ну ща
orignal libcrypto.a там?
orignal я так не думаю
orignal ты пойми что include и lib это разные папки
weko да яссно я не сразу просто понял что не то
weko шмогла ))
weko такая же хуйня
weko NTCP2: Received AEAD verification failed
orignal думай
orignal аааа
orignal ну значит не в этом дело
weko ну и чо делать ))
orignal я бы на твоем месте попробовал там где отправяется все писать в один буфер и отправлять его целиком
orignal если проблема продолжается то проверять подпись перед отправкой
orignal если подпись нормально то записывать то что отправляется и что получается
orignal и сравнивать
weko вот кстати проверять идея мне нравится
orignal можно жа
weko <orignal> я бы на твоем месте попробовал там где отправяется все писать в один буфер и отправлять его целиком
weko а зачем?
orignal void AEADChaCha20Poly1305Encrypt (const std::vector<std::pair<uint8_t *, size_t> >& bufs, const uint8_t * key, const uint8_t * nonce, uint8_t * mac); // encrypt multiple buffers with zero ad
orignal у меня нету расшифровки и проверки для пачки
orignal только шифрование и подпись
orignal затем чтобы проврить
orignal либо наисать фнукцию проверки кучи данных
weko я не потяну
orignal а нет все можно
orignal boost::asio::async_write (m_Socket, boost::asio::buffer (m_NextSendBuffer, payloadLen + 16 + 2), boost::asio::transfer_all (),
orignal std::bind(&NTCP2Session::HandleNextFrameSent, shared_from_this (), std::placeholders::_1, std::placeholders::_2));
orignal вот это место
orignal тут можно проверить
orignal подпись в m_NextSendBuffer
weko я код не потяну
orignal ну добвавить проверку тут
orignal а придется ))
weko ну не шмоглу
orignal а ни у кого больше не вопроизводится
orignal так что придется
orignal в том месте добавить проверку
weko так а я не шмогу
weko <orignal> а ни у кого больше не вопроизводится
weko ну я могу тебе архив закинуть с тестнетом
orignal неее
weko либо офоримить и опубликовать
orignal у меня времени нет
weko ну просто дольше будет делать этот фикс, чем другие
orignal так не фикс а надо разобраться в причине
weko ну по итогу будет дольше
orignal там все хуже
orignal boost::asio::async_write (m_Socket, bufs, boost::asio::transfer_all (),
orignal std::bind(&NTCP2Session::HandleI2NPMsgsSent, shared_from_this (), std::placeholders::_1, std::placeholders::_2, msgs));
orignal там реально пачка отсылается
weko пачка чего?
weko ааа пачка i2np сообщений?
weko хочешь сказать они не влезают в буфер отравки системный?
orignal вот надо понять чего там неправильно
orignal надо изучать эту функцию
orignal void NTCP2Session::SendI2NPMsgs (std::vector<std::shared_ptr<I2NPMessage> >& msgs)
weko SendI2NPMsgs
weko эту
weko понял
orignal m_NextReceivedBuffer = new uint8_t[size];
orignal вот тут замени на
orignal m_NextReceivedBuffer = new uint8_t[65535];
orignal еще бы неплохо длину печатать перед ошибкой AEAD
weko это можно
weko заменил
weko типо должно быстрее ошибку выдать?
weko или наоборот
orignal не знаю
orignal пробоавть надо
weko хорошо
orignal если длину печатать может что то скажет
weko LogPrint (eLogWarning, "NTCP2: Received AEAD verification failed. NextReceivedBuffer = ", m_NextReceivedBufferSize);
weko бля ну да Size
weko поменял
weko NTCP2: Received AEAD verification failed. m_NextReceivedBufferSize = 65529
weko ну и стоит m_NextReceivedBuffer = new uint8_t[65535];
weko orignal: увеличить?
weko да бля просто возьму и больше поставлю
weko m_NextReceivedBufferSize = 65534
weko NTCP2: Received AEAD verification failed. m_NextReceivedBufferSize = 62566
weko я подозреваю что идёт попытка отправить больше чем влезает в какой то буфер
weko и этот буфер равен 65535
weko возможно системный буфер отправки
weko явно в буфер хочет сунуть больше чем можно
weko const size_t NTCP2_UNENCRYPTED_FRAME_MAX_SIZE = 65519;
weko это же число не от балды?
weko void NTCP2Session::SendQueue ()
weko вот тут
weko БЛЯТЬ
weko кажется понял
weko в чём именно ошибка
weko if (s + len + 3 <= NTCP2_UNENCRYPTED_FRAME_MAX_SIZE) // 3 bytes block header
weko msgs.push_back (msg);
weko s += (len + 3);
weko m_SendQueue.pop_front ();
weko else if (len + 3 > NTCP2_UNENCRYPTED_FRAME_MAX_SIZE)
weko LogPrint (eLogError, "NTCP2: I2NP message of size ", len, " can't be sent. Dropped");
weko m_SendQueue.pop_front ();
weko else
weko break;
weko AEAD не из-за этого, её я исправил по другому
weko просто предлагаю задачку найти ошибку тут
weko тут не правильно вообще сделано
weko а стоп
weko блять
weko нет это не ошибка
weko orignal: в общем я поставил NTCP2_UNENCRYPTED_FRAME_MAX_SIZE = 60000;
weko и AEAD не всплывает
weko могу проверить ещё разок
weko orignal: NTCP2_UNENCRYPTED_FRAME_MAX_SIZE = 65519; - ошибка есть,
weko NTCP2_UNENCRYPTED_FRAME_MAX_SIZE = 60000; - ошибки нет.
weko думаю тут ясно в какую сторону работать
Vort хм. странно. рубанулся у меня почти в ноль транзит
Vort [21:56:29] <Vort> похоже, опять неверное время просочилось
Vort [21:56:36] <Vort> NTCP2: SessionRequest time difference -64 exceeds clock skew
Vort думал перезагружать узел придётся, но, вроде, пир тест помог
Vort рано issue 1988 закрыли
orignal <weko> NTCP2: Received AEAD verification failed. m_NextReceivedBufferSize = 65529
orignal ага возможно в этом дело
weko Больше скажу точно в этом дело
weko При чём именно в отправке
orignal -64 это нормально
orignal скорее всего у тебя часы съезжают из-за нагрузки
orignal так уже понятно
orignal ты видишь что вылазит когда очень большой пакет
orignal дальше уже дело теники
weko Ну вот я написал же
orignal я починю короче
weko Отлично
weko Выяснили
orignal пеправильно размер фрейма посчитали
orignal максимальный
weko Да скорее всего
orignal сегодня закоммичу
orignal да точно это
orignal а не вылазит потому что редко такое бывает
weko Ага
weko Нету таких скоростей))
weko Пока что
orignal кстати не факт
Vort бля. я же говорил, что у меня отклонение времени от идеального 10-100 миллисекунд. это или баг или атака
orignal как часто у тебя часы синхронизируются?
Vort у меня внешний мониторинг от серверов пула настроен
Vort каждые 1024 секунды. но это нормальный режим работы и так и должно быть
Vort хотя даже чаще. 6 серверов настроено. то есть, в 6 раз чаще
orignal часы это вообще сложная штука
orignal на биржах например специальные платы в серверах стоят
Vort для микросекунд и наносекунд - сложная
Vort для миллисекунд - не очень то
Vort а чтобы с секундами накосячить - это где-то затупить надо
orignal так 100 миллисекундл это 1/10 секунда
orignal на биржах таймстампы в микросекундах
orignal const size_t NTCP2_UNENCRYPTED_FRAME_MAX_SIZE = 65519;
orignal 65519 + 16 что дает?)))
orignal weko я думаю если поставить там 65518 то AEAD не будет
weko orignal: ну это можно проверить. Проверю как смогу
weko orignal: 65535...
orignal вот именно
weko А сколько должно быть?
orignal где то явно сваливаемся в -1
orignal вот я счас и смотрю
weko Может падднинг?
weko Паддинг
orignal я просто стал выяснять откуда число
orignal разберемся
orignal if (msgLen + paddingSize + 3 > NTCP2_UNENCRYPTED_FRAME_MAX_SIZE) paddingSize = NTCP2_UNENCRYPTED_FRAME_MAX_SIZE - msgLen -3;
orignal вот же пиздец
orignal так очевидно нельзя
Vort "так 100 миллисекундл это 1/10 секунда" - ну да, а чтобы заглючил i2pd нужна минута расхождения, в сотни раз больше
orignal так а у тебя в чем проблема я не понял?
orignal у тебя счас глючит или что?
Vort в том, что баг 1988 недочинен
orignal в чем именно проблема?
Vort проблема была в том, что один раз слетели транзиты в ноль. когда врубил дебаг логи - увидел кучу сообщений про NTCP2: SessionRequest time difference -63 exceeds clock skew
Vort то есть, ровно та же хрень, что и раньше. разве что расхождение не 10 часов, а одна минута
orignal ну и что мы видим?
Vort версия узла 2.50.2-19-g0b47f65b
orignal причина то какая?
orignal дважды пришло или что?
orignal надо понять почему это вообще происходит
Vort если у меня часы работают нормально (что подтверждается внешним мониторингом), значит глюченое время пришло из i2p
orignal с одного узла? с разных?
orignal естественно
orignal но от кого именно
orignal причем дважды
Vort я так понимаю, ничто не мешает хоть 10 раз с одного и того же узла отправить
Vort алгоритм надеется, что такого не будет
Vort ну значит есть
Vort надо опять отдельный узел с логированием включать
orignal так оно же только во время пир теста
orignal кстати возможна просто повторная посылка
Vort можно временно заткнуть багу разрешив всего 1 коррекцию с одного узла за время пир теста
Vort то есть, чтобы точно с двух пришло
Vort но кажется мне, что и это 100% эффекта не даст
Vort интересно, опять ли это китайцы чудят, или просто так совпало на этот раз
Vort но глянул в логах - для обычного skew адрес и хеш не пишутся
orignal да именно так по уму и надо
orignal думаю совпало
Vort короч это надо логирование дописывать чтобы ловить узел
orignal проще поправитб
orignal счас с NTCP2 закончу
Vort ок
weko [20:57:11] <orignal> вот же пиздец
weko [20:57:47] <orignal> так очевидно нельзя
weko Почему?
orignal а если разница меньше 3
orignal короче там много чего надо чинить
orignal auto paddingLen = CreatePaddingBlock (totalLen, buf + len, it->maxLen - it->len - 16);
orignal вот такая хрень например
weko orignal: а ну да
orignal такое все в SSU2 вычищено а в NTCP2 вот осталось
orignal поправлю
orignal weko я закоммитил
orignal если даже не починил до конца то теперь будет ошибку в лог писать