IRCaBot 2.1.0
GPLv3 © acetone, 2021-2022
#dev
/2023/07/21
~AreEnn
~R4SAS
~acetone
~orignal
~villain
&N00B
+relaybot
DUHOVKIN_
Guest7184
Most2
Nausicaa
Nikat
Ruskoye_911
Vort
Xeha
anon3
b3t4f4c3
fidoid
karamba_i2p
nemiga
not_bob_afk
onon
plap
poriori
profetikla
qend
segfault
soos
teeth
tetrimer_
uis
un
unlike
user
vade
weko
whothefuckami
weko Tunnel creation success rate: 17%
weko Total tunnel creation success rate: 29%
weko чот подозрительно
weko Routers: 16101
Vort в общем, похоже, мои подозрения подтвердились
Vort сессия с интродьюсером должна жить 80 минут (SSU2_TO_INTRODUCER_SESSION_EXPIRATION), а живёт всего 5 минут (SSU2_TERMINATION_TIMEOUT)
Vort я уже нашёл, что существует механизм IntroducersUpdateTimer. но, видимо, он поломан
Vort подозреваю, что там путаница с тем, кто именно должен посылать keepalive, и в итоге не посылает никто
orignal интересное наблюдение
orignal я посмотрю
orignal Vort я правильно понимаю что ты утверждаешь что keepalive не посылается когда надо?
Vort orignal: ну для начала мне надо знать, кто должен его посылать - чарли (U узел) или боб (интродьюсер)?
orignal чарли разумеется
Vort сейчас покажу, что у меня вызвало сомнения
orignal и он должен посылать только тем кто опубликован
Vort вот по поводу этого m_IsPublished у меня и сомнения
Vort m_IsPublished true - это же значит, что мы - Боб и у нас R узел?
Vort тогда зачем оно проверяется при keepalive
orignal неее
Vort у чарли как я понимаю там всегда будет false
orignal он про другое
orignal я уже не помню
Vort bool m_IsPublished; // if we maintain introducers
Vort we - боб?
orignal bool m_IsPublished; // if we maintain introducers
orignal думаю что мы чарли
orignal почему так называется x3
orignal скрее всего я перенес код со старого
Vort i2p::config::GetOption ("ssu2.published", m_IsPublished);
Vort у чарли что будет в ssu2.published?
orignal false это когда нет не IP не интродьюсера
orignal такое тоже допустимо
Vort хм. значит, надо дальше смотреть
Vort я ещё сделаю точнее анализ времени жизни сессии
Vort я рандомно повыбирал - и все закрывались за 5 минут
Vort то ли чарли, то ли бобом
orignal так ты просто запиши в лог отсылается keepalive или нет
crystalway Всем привет. Подскажите как называется http заголовок с b32 адресом клиента. Не могу нагуглить
orignal X-I2P-DestB32
Vort orignal: ну это надо U узел завести. да я туда просто брекпоинт воткну
crystalway orignal спасибо
Vort не уверен, что у меня правильный U узел выйдет. ещё ни раз не делал такого
orignal Vort я давно хочу сделать параметр
orignal forcefirewalled
orignal может ты лучше его и сделаешь?
orignal ну то есть если в ssu2 стоит такое то всегда статус Firewalled
Vort попробую разные варианты. у меня и комп с NAT есть и виртуалка ещё
Vort если не получится сделать по простому
orignal такой параметр в принципе нужен
Vort в ВМ сделал. отправляются KeepAlive. значит, не в этом дело. буду дальше разбираться
Vort уже нашёл кое что, что мне не нравится: SSU2: Data message payload is too short
Vort подозреваю проблемы с формированием KeepAlive
Vort но если хотя бы часть проходит, то должно быть норм
orignal too short надо смотреть
Vort вполне может быть в этом дело
orignal там должно быть минимум 24 байта с заголовком
orignal возможно
Vort из 3х интродьюсеров один меня послал
Vort SSU2: Termination reason=2
orignal блин как нам не хватает деда
orignal eSSU2TerminationReasonIdleTimeout = 2
Vort в общем, было три - два довольно долго продержались, а один довольно быстро дропнул сессию
Vort надо копать почему keepalive битые создаются
Vort значения для Data message payload is too short кстати 5 6 и 7 бывают
Vort вот в такое можно вляпаться:
Vort [21/Jul/2023:14:32:59 +0300]@694/warn - SSU2: Data message payload is too short 7
Vort [21/Jul/2023:14:32:59 +0300]@694/debug - SSU2: Sending KeepAlive to introducer Qr4H
Vort [21/Jul/2023:14:32:59 +0300]@694/warn - SSU2: Data message payload is too short 5
Vort [21/Jul/2023:14:32:59 +0300]@694/debug - SSU2: Sending KeepAlive to introducer mDpN
Vort [21/Jul/2023:14:32:59 +0300]@694/warn - SSU2: Data message payload is too short 6
orignal size_t payloadSize = CreatePaddingBlock (payload, 20, 5);
Vort minsize = 5
Vort SSU2Session::SendData
orignal да но там +3 заголовок
Vort if (len < 8)
Vort хм
orignal я посомотри через полчаса где то
Vort окей
Vort в общем, это явно проблемное место
orignal разумеется
orignal очевидная бага
orignal и понятно почему иногда проходит
orignal там же случайная длина
Vort ага
orignal else if (paddingSize + 3 < minSize) paddingSize = minSize - 3;
orignal тьфу
orignal счас починю
orignal все
orignal поправил
Vort буду скоро тестировать
Vort но мне кое что помимо этого ещё не понравилось
Vort слишком быстро один из интродьюсеров меня кикнул
Vort за 2 минуты. вроде же 5 минут таймаут
Vort может быть ещё какая-то бага
orignal const int SSU2_TERMINATION_TIMEOUT = 330; // 5.5 minutes
Vort ну да, а получилось вот так:
Vort [21/Jul/2023:14:24:46 +0300]@694/debug - SSU2: Session with hcsx was established
Vort [21/Jul/2023:14:24:59 +0300]@694/debug - SSU2: Introducer added 2806378117 at hcsx
Vort [21/Jul/2023:14:25:29 +0300]@694/debug - SSU2: Sending KeepAlive to introducer hcsx
Vort [21/Jul/2023:14:25:59 +0300]@694/debug - SSU2: Sending KeepAlive to introducer hcsx
Vort [21/Jul/2023:14:26:29 +0300]@694/debug - SSU2: Sending KeepAlive to introducer hcsx
Vort [21/Jul/2023:14:26:59 +0300]@694/debug - SSU2: Sending KeepAlive to introducer hcsx
Vort [21/Jul/2023:14:26:59 +0300]@694/debug - SSU2: Session with hcsx was terminated
orignal а сообщение пришло?
Vort hcsx - i2pd, свежей версии
orignal ну termination
Vort аж два
orignal и какой код?
Vort по логике он вообще даже без keepalive не должен был так рано кикнуть
orignal это конечно странно
orignal естественно
Vort угу. может, правда, то не его код 2. в логах же не пишется abbr
orignal надо посмотреть в каком случае он еще отсылает
Vort приходится догадываться
Vort а я подобавлял не везде
Vort может, это наш "2" ?
Vort вот тоже про логи - не понятно, где исходящее, а где - входящее
orignal ну не подумал
Vort в общем, пока что просто проверю, как будут слаться keepalive со свежим исправлением
Vort и сколько продержатся сессии
Vort опять сессия за 3 минуты сдохла. но кода на этот раз я не увидел вообще
Vort ладно. послежу, сколько остальные 2 проживут
orignal надо смотреть
Vort вторая сессия прожила 5 минут и сдохла с кодом 0
Vort в общем, 4 сессии отвалились по непонятным причинам, а 3 оставшиеся уже живы около 10 минут
Vort прожили больше таймаута в 5 минут - уже хорошо
Vort если 80 минут проживут - будет ещё лучше :)
orignal ну смотреть надо почему рано закрываются
Vort опять вижу дважды SSU2: Termination reason=2. и подозрительно близко с отсылке keepalive
Vort пример куска лога (с моим дополнительным логированием)
Vort SSU2: Session with iKCO was terminated
Vort сессия 17 минут прожила
orignal возможно keepalive не дошел
orignal надо посмотреть в каком случае отсылается 2
Vort работает ли для keepalive перепосылка в случае потери пакета?
Vort "<~orignal> возможно keepalive не дошел" если перепосылки нету, то вполне вероятно. у меня UDP перегружен сейчас
Vort хотя это же 10 раз подряд должно не дойти
Vort ну и остаётся вопрос, из-за чего может дропаться сессия когда 5 минут ещё не прошло
Vort я наверно много путался из-за того, что в логах нет отметки, для какой именно сессии обработка данных идёт
Vort в общем, думаю, надо, чтобы ещё кто-то потестировал последний коммит
Vort кто тут в чате держит U узел?
Vort weko: у тебя же U узел был вроде? поможешь с тестированием?
orignal перепосылки нет
Vort ок
orignal можно добавить
Vort надо для начала узнать, какой эффект от последнего коммита
Vort если он допустим 90% проблем решит, то, вероятно, этого и достаточно
Vort (90% проблем с потерей сессии к интродьюсеру имею в виду)
orignal вероятность 3/15
orignal что пападает в эту ситуацию
Vort и это надо 10 раз подряд чтобы не отправилось? ну примерно. каждые 30 сек на протяжении 5 минут
Vort я понимаю, что UDP ненадёжен, но не настолько же. или настолько...
orignal ну x3
orignal вот перепосылку можно сделать
Vort да оно то можно. но желательно вначале подтвердить, что проблема в потерях
Vort у меня в этом большие сомнения
Vort похоже, что есть ещё баги
orignal возможно
Vort добавил в логи abbr и понял, что гадать по времени прихода пакета было бессмысленно - блоки идут в лог вперемешку
Vort запустил опять XR узел, будут смотреть с позиции "Боба"
Vort буду*
weko [13:32:36] <Vort> weko: у тебя же U узел был вроде? поможешь с тестированием?
weko Ну могу собрать с термукса наверное
orignal Vort проще добавить тот параметр который я сказал
Vort weko: надо глянуть, повлияет ли последний коммит на количество тразита через U узел
Vort так я специально XR запустил. хочу убедиться, что keepalive от других узлов не приходит
weko Там дефолтные настройки. Сейчас надо будет конфигурировать
Vort так если там U, то зачем ещё что-то нужно?
Vort или там ещё и L ?
weko orignal: помню недавно что-то мы про keep alive обсужади
weko Так говорю же с термукса сборка
weko Установщика нету
weko Кстати хорошая идея добавить в термук пакет i2pd
weko А стоп он там есть
weko :))
Vort похоже, я опять с анализом ошибся. со стороны Боба сессии с тегом дропаются просто потому, что не каждая сессия с тегом выбирается в роли интродьюсера
Vort так что придётся смотреть в логи внимательнее
Vort чтобы запросы на интродьюс были
Vort по результатам неверного анализа нашли реальный баг. хехе
weko Я уже собираю
Vort окей
Vort weko: в общем, суть бага в том, что некоторые keepalive к интродьюсерам не отправлялись из-за того, что создавались неверного размера
weko Это я прочитал
Vort вроде бы как бы их всё равно отправляется много и должно хватать. но стоит проверить - вдруг исправление даст положительный эффект
Vort словил (в роли Боба) одно взаимодействие с Чарли (Джава). склеивал логи по кусочкам, так что мог где-то ошибиться. но всё же:
Vort первое наблюдение - похоже, у java keepalive реже (2 минуты что ли?)
Vort второе наблюдение - он сам отвалился первым. код 2
Vort он же только что keepalive присылал. с чего бы это код 2? может, у java по-другому критерию код 2 отсылается?
Vort подожду, может ещё сессию с i2pd выловлю
orignal вот тут бы и нужен дед
orignal чтобы разъяснил
Vort да я могу полезть в код java. но не сейчас
orignal да не надо
Vort вот, ещё один не найденный тег словился. рассмотрю, может i2pd попадётся
Vort таки да, i2pd. разбираюсь
orignal понимаешь с этими интродьюсерами может быть куча багов
orignal потому что код был фактически позимнствован с SSU
orignal а там вообше море багов было
Vort ну вот один выловили, может ещё выловим
orignal не может а точно
orignal там просто море багов
orignal и да надо сделать перепосылку
Vort я вот как раз смотрю одно общение с i2pd узлом. по нему будет видно, теряются ли пакеты
Vort это узел с довольно старой версией (0.9.56). может от этого странности
Vort вот те Block type 12 в старой версии - это случаем не перепосылка была? (плохо понимаю, но на всякий случай спрашиваю)
orignal 12 это Ack
orignal подтвержение получения
Vort перепосылка - это другое?
Vort ладно, наверно сам когда-нибудь почитаю
Vort видимо, E47H не дождался ответа от моего узла
Vort а пока ждал, то даже пингов не слал
orignal перепосылка это просто сообщение и все
Vort прошу прощения за тупые вопросы :/ I2NP сообщение? пустышка там есть - eI2NPDummyMsg? и в отличие от блока паддинга узел будет I2NP сообщение слать пока не отошлётся?
orignal неее
orignal есть блок Data
orignal пардон сообщение
Vort eI2NPTunnelData
Vort а нет
Vort eI2NPData
orignal причем тут SSU2?
orignal в SSU2 есть сообщение Data
orignal в нем есть всякие полезные блоки типа I2NP и фрагменты
Vort ага, вижу. eSSU2Data
orignal вот иногда их перепосылают
orignal новым сообщением Data
orignal смысл чтобы все сообщения дошли
orignal если на KeepAlive не пришел Ack то мы тоже можем послать новое и все
Vort а отправки не логируются похоже...
orignal не помню
Vort речь об Ack как типе блока? или ещё какой-то Ack есть?
Vort eSSU2BlkAck
orignal Ack всего один
orignal но в нем куча всего может приходить
Vort KeepAlive - это eSSU2BlkPadding, верно? внутри Data ?
Vort и по приходу этого BlkPadding мой узел должен ответить BlkAck ?
orignal да это просто псутое сообщение
orignal вот насчет Ack не уверен
orignal может и нет
orignal надо смотреть по коду
Vort просто если для них не предусмотрен Ack, то и ждать его нет смысла. и на его основе не сделаешь перепосылку
Vort да и вообще мне кажется, что дело не в потерях пакетов. 10 штук потерять подряд - это надо очень постараться
Vort скорее всего какие-то баги. вот как в тех логах, которые я недавно скидывал - keepalive просто не отсылаются. какой-то затык происходит
Vort сессия же используется не только для пробива портов. что-то пошло не так с другими задачами - и сессия рвётся
orignal так я не помню
orignal ты же посмотрел что отсылается
Vort по-моему сейчас логируются только "избранные" отсылки. а вот приёмы логируются почти все
Vort так что я пока что видел только половину картины
Vort [21/Jul/2023:19:40:26 +0300]@901/info - SSU2: Packet was not Acked after 6 attempts. Terminate session
Vort в общем, я считаю, что спешить с перепосылкой не стоит
Vort стоит набрать данных о тех проблемах, которые приводят к разрыву сессий
Vort на всякий случай обобщу: проблема такова: сессии к интродьюсерам рвутся чаще, чем этого бы хотелось
Vort один из потенциальных источников такой проблемы устранили, но их явно намного больше
Vort вполне даже может быть, что проблемы не особо специфичны для интродьюсеров. и что с остальными сессиями тоже беда
Vort но от разрыва остальных сессий особо проблем нету - они и так рвутся по неактивности
Vort а вот для сессий к интродьюсерам качество должно быть повыше
orignal возможно
weko Transit Tunnels: 13
weko Полтора часа аптайм
orignal если U то нормально
weko Обычно меньше как мне кажется
weko Бывают туннели где я OBEP... И вот один с обилием трафика (уже почти 4 мб), и бывают даже IBGW
weko Если я правильно помню обозначение стрелочек
weko Кто такие может строить?
weko Transit Tunnels: 55
weko NTCP2 / SSU2 640/720
weko WTF
weko Откуда то статус ок
weko А блять
weko UPnP может?
orignal если он есть то да
weko Я хз, походу есть
weko Но сработал не сразу
weko Запустил всё по новой
Vort "если U то нормально" - не нормально. но объяснимо. если сессии с интродьюсерами 5-10 минут живут
Vort но единой причины для хреновой живучести SSU2, похоже, нету
Vort там небось гора мелких багов, каждый из которых по чуть-чуть, но ухудшает ситуацию
weko Transit Tunnels: 33
weko 43 минуты
Vort в состоянии U ?
weko да
weko при чём RI новый
Vort только RI ? или и ключи новые?
weko ну RouterIdent
weko значит и ключи
Vort не значит
weko RI то постоянно меняется так как U
Vort ключи в файлах router.keys ntcp2.keys ssu2.keys
weko RI на основе ключей роутера образуется
Vort да
weko а без них с ним не связаться
weko ну точнее можно но не туннель уж точно
weko но в любом случае всё новое
Vort то есть поудалял keys и они создались свежие ?
weko нет вообще директория новая
Vort ок, понял
Vort я опять запустил U узел в виртуалке и заметил странное явление
Vort на почти каждый KeepAlive интродьюсеры отвечали Path challenge
Vort почитал о том, что это; проверил через Wireshark - и таки да, за 30 секунд успевает поменяться порт
Vort не знаю, важно ли это - на всякий случай рассказал
Vort а вот это уже наверно важно. послал меня очередной интродьюсер. и я кажется понял, почему. моему узлу не понравился короткий Path challenge, а интродьюсер обиделся, что мой узел не ответил
Vort [22/Jul/2023:00:23:11 +0300]@379/debug - SSU2: Sending KeepAlive to introducer xAzT
Vort [22/Jul/2023:00:23:11 +0300]@379/debug - SSU2 (xAzT): Block type 18 of size 3
Vort [22/Jul/2023:00:23:11 +0300]@379/debug - SSU2: Path challenge
Vort [22/Jul/2023:00:23:11 +0300]@379/warn - SSU2: Incorrect data size for path response 3
Vort xAzT - i2pd версии 0.9.58
orignal да path challenge будет если меняется
orignal тоже посмотрю как мы отвечаем на path reposnse
orignal его вообще никто не проверял