IRCaBot 2.1.0
GPLv3 © acetone, 2021-2022
#dev
/2023/07/22
~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
relaybot 13apophis: что то бы заработались в пятницу
relaybot 13apophis: *вы
orignal поправил
user Поднял на последнем коммите свежий роутер XU. Час аптайма. tcsr 51% R:1132 F:772 Transit Tun:5
user Больше 5 транзитных не было.
user Если правильно понял из логов, т.к. нетдб маленькая, я постоянно делаю запросы к фф
orignal нет
orignal если кратко
user Еще смущает это чехарда с портами.
user Our external address is ip:port1
user Our port port1 resieved from someip:someport is different from port2
user Понятно что NAT, там внешний и внутренний порты могут различаться. Но может тут какая проблема есть...
orignal это и называется Symmetric NAT
orignal если порты разные
weko orignal: порты же резные при любом NAT?
weko Разные*
weko Transit Tunnels: 41 аптайм 5 часов
weko Обычно меньше
weko Кто-то ставит меня IBGW ...
weko Вижу такой туннель
weko [00:20:57] <weko> Обычно меньше
weko До коммита
weko Но должно быть явно больше
orignal нет
orignal должны быть одинаковые
user Я, в общем, не совсем понимаю, кого может интересовать наш внешний порт на роутере, если наружу мы выходим только через NATовский порт...
orignal потому что это UDP
orignal и ответные пакеты приходят на порт
user Да, что-то я не сообразил.
user XU last comm ~4hr uptime: TCSR:54% R:2250 F:1090 TT:93
orignal с последним.
weko Transit Tunnels: 60
weko 6.5 часа
weko Кто-то даже данные пустил
orignal тоже последний?
orignal вон Vort какую багу нашел
weko Ну вот когда Vort просил
weko После фикса первой баги
user У меня транзит пока в районе 20-40 киб/с
weko user: +- также
weko Туннели 700кб были
weko Кто мог данные пустить ?
weko Или это такие жирные exploratory?
user Транзит через всё, что ниже O не пускается.
user O,P,X - пускает
weko user: да забей
weko Ой
weko Короче я попутал
user Да, с L роутерами
weko Ага
weko NTCP2 / SSU2 38 / 322
weko Transit Tunnels: 73
weko SSU2 134
weko Колеблется сильно
weko В какой-то момент количество резко вырастает
weko 300 / 500
weko Точнее не в какой то, а сейчас
weko Что за "волны"?
weko 100 / 470
user В логах довольно-таки много ворнингов - SSU: Session was not introdused after 5 seconds
user Не знаю, насколько это нормально.
Vort значит, интродьюсер не ответил. сейчас покажу ещё раз данные по статистике установки SSU2 сессий
Vort Results: 724958 (359673 out, 365285 in), RI: 392595 (28507), Uptime: 1 d 07 h 01 m
Vort *|E 72093 20%|F32322 9%|IF21989 6%|T221677 62%|IT11592 3%|ED a 0.8s m 0.5s
Vort R|E 54484 17%|F32007 10%|IF 6906 2%|T217359 69%|IT 3089 1%|ED a 0.8s m 0.4s
Vort U|E 17609 38%|F 315 1%|IF15083 33%|T 4318 9%|IT 8503 19%|ED a 1.0s m 0.6s
Vort user: то, что ты видишь в логах, (not introduced) - это у меня тут в таблице отмечено как IT 8503 19%
Vort как видно, такого довольно много. но IF15083 33% - в полтора раза больше
Vort вот эти 33% - это в основном из-за разрыва сессии U узла с интродьюсером
user XU last comm ~8hr uptime: TCSR:58% R:1671 F:998 TT:49
Vort надо дальше чинить )
Vort похоже, ещё одну проблему словил (читаю лог за ночь)
Vort [22/Jul/2023:00:44:10 +0300]@379/debug - SSU2: Introducer added 1306463008 at sfQd
Vort [22/Jul/2023:00:44:11 +0300]@379/debug - SSU2 (sfQd): Termination requested, code = 2
Vort таймаут неактивности сесии вот-вот собирался сработать, а мой узел решил выбрать эту сессию интродьюсером
Vort и сам же через секунду её прихлопнул :))
Vort теперь по поводу Path challenge и VirtualBox:
Vort допустим, у меня U узел в виртуалке. у него есть сессия с интродьюсером
Vort каждые 30 секунд мой узел отправляет KeepAlive. но при этом же каждые 20 секунд VirtualBox удаляет маппинг
Vort значит ли это, что в течение 10 секунд интродьюсер не сможет мне послать никаких данных (запросов)?
Vort где находятся 20 сек в коде VirtualBox я нашёл: virtualbox.org/browser/vbox/trunk/src/VBox/Devices/Network/lwip-new/src/include/lwip/udp.h#L201
Vort правда, в реальности там немного меньше. за 19 секунд тоже может маппинг удалиться. вот 18 сек вроде нормально работает
Vort там, кстати, в коде есть коммент про то, что 20 сек они взяли из RFC 3948
Vort хорошо, что я некоторое время назад написал UDP тестер. сейчас чутка обновил его: paste.i2pd.xyz/?be3d07d7bb76a5b6#7tKKYmjJixVwVYz4h9iakffVimSqCMAMSwN6AMjFm6EP
Vort user: у тебя логи на U узле какого уровня? debug?
Vort результаты теста для "const int SSU2_KEEP_ALIVE_INTERVAL = 18;": сессии ко всем трём интродьюсерам продержались положенный час времени
Vort однако я один раз заметил Path challenge. подтвердить это явление с помощью своего UDPTest.exe правда не смог
Vort так что видимо правильное значение для NAT`а VirtualBox - 17 секунд
Vort но на всякий случай и чтобы "круглое" число было можно вполне поставить 15 секунд - то есть половину от того, что стоит сейчас
orignal короеч какая проблема счас?
user XU last comm ~13hr uptime: TCSR:59% R:1999 F:998 TT:33
Vort "<~orignal> короеч какая проблема счас?" - две штуки
Vort первая - узел иногда закрывает по неактивности соединение со свежевыбранным интродьюсером
user Vort, Логи warn, поставил дебаг, если нужно что-то поискать, могу попробовать.
Vort user: да, нужно. сейчас скажу
orignal какое из двух?
Vort orignal: вторая проблема - для некоторых NAT нужен пробив (keepalive) чаще, чем 30 сек. допустим, 15 сек
Vort user: надо поискать, много ли в логе будет SSU2: Path challenge
orignal и как со вторым быть?
orignal про ервое не понял кто именно закрывает
Vort мой U узел сам закрывает соединение со своим интродьюсером
Vort потому что он его выбрал, а у того таймаут истекал как раз видимо
orignal а почему?
Vort хотя я на 100% в причинах не уверен
orignal выбрал для чего я опять не понял
orignal то есть в какой то момент он выбрал соединение в качестве интродьюсера стал публиковать и тут же сам закрыл?
orignal потому что говно мамонта?
Vort ага
Vort потому что keepalive через 30 сек
orignal ну это я починю
Vort можно или при выборе сразу keepalive слать или что-то другое придумать
orignal а вот что делать с NAT x3
Vort или не выбирать тот который на грани истечения
orignal да это понятно как чинить
orignal на самом деле смотреть насколько протухший и слать keepalive если близко
Vort "<~orignal> а вот что делать с NAT x3" я предлагаю поставить const int SSU2_KEEP_ALIVE_INTERVAL = 15;
Vort это решит проблему с интродьюсерами на некоторых NAT
orignal а чем 15 лучше 30?
Vort останется проблема с остальными сессиями, но это не так критично
Vort orignal: тем, что у некоторых NAT истекает срок годности порта за 20 сек
orignal а откуда 20? не может быть за 5?
Vort и, как я понимаю, Боб в течение 30-20=10 сек отправляет запросы в пустоту (если отправляет)
orignal правильный путь это определять такую ситуацию
Vort orignal: "откуда" - из Гугла :) допустим, вот: quora.com/How-does-UDP-hole-punching-work
Vort "with an UDP connection the NAT will timeout the mapping in its table, so the UDP application needs to send out keep-alive packets frequently (< 20 seconds) to keep the connection open."
orignal тогда да
Vort "<~orignal> правильный путь это определять такую ситуацию" в идеале, да. но для начала надо чтобы неидеальный вариант хотя бы заработал нормально
orignal но по хорошему надо в интревале 13-18
orignal сам понимаешь почему
Vort такая же фигня явно ещё и с неинтродьюсерскими коннектами. и как это правильно чинить - пока что даже не догадываюсь
Vort в случае интродьюсера всё понятно - Чарли надо, чтобы пробив держался - он и бьёт себе
user У меня сначала был включен дебаг пару часов, потом выключил, сейчас снова включил, поэтому результат как есть - 5568
Vort а вот с остальными коннектами - хз как правильно. может, надо два типа таймаутов делать - на пробив и на остальные данные
Vort user: то есть - дохрена?
Vort user: попробуй пожалуйста поставить в SSU2.h const int SSU2_KEEP_ALIVE_INTERVAL = 15;
Vort вместо 30ки
Vort и глянь, увеличится ли от этого количество транзитов
user Блин, я тупанул, там только два вхождения
user Спросонья.
Vort а, тогда не поможет, можно не проверять
Vort это зависит от типа NAT
Vort у каких-то NAT порт удаляется быстро, у каких-то нет
orignal займусь где то через час
Vort плохо я ещё понял работу пробива портов :( поэтому возник вопрос:
Vort вот создал Чарли сессию к Бобу. создался маппинг локального IP:порта Чарли с внешним IP:портом (его NAT устройства)
Vort и теперь что получается (в самом простом сценарии) - кто угодно может постучаться на внешний IP:порт Чарли и попасть на его внутренний (локальный) IP:порт?
Vort если это то, как работает механизм, то сессия к интродьюсеру - это и весь пробив, который нужен. пока она жива, жив маппинг и все навешанные на него сессии к другим пирам
orignal нет
orignal снчала чарли пошлет HolePunch к Алисе
orignal и там вообще может быть порт другой чем с бобом
Vort значит, нужны ещё keepalive`ы :(
weko [11:04:22] <orignal> но по хорошему надо в интревале 13-18
weko [11:04:36] <orignal> сам понимаешь почему
weko Ага. Можно даже 10-18
Vort а получилось 15-18. ну всё равно прогресс по сравнению с 30
Vort теперь нужно тесты от юзеров с разным NAT
Vort и можно будет подкручивать числа при необходимости
weko Вот у WG 25 секунд например
Vort ну мне важно было не выше 18 чтобы можно было в VirtualBox тестировать =)
Vort а там мало ли - может кто-то из юзеров вообще постоянно держит узел в VirtualBox
Vort так что неплохой ориентир, думаю
weko Скорее qemu или в docker
weko Кстати мне кажется часа мало
Vort если кому-то интересно и этот кто-то не боится C# (Mono), то может потестировать моей програмкой - с какой задержки начинает прыгать порт
Vort имею в виду потестировать qemu и docker
Vort если там есть NAT конечно. ну должен быть наверное
weko [14:08:07] <weko> Кстати мне кажется часа мало
weko Может 2 часа поставить?
Vort не надо пока что это трогать
weko Почему? За 2 часа больше узлов получат RI -> больше транзита
Vort ещё не до конца понятна живучесть сессий с интродьюсером
weko Так время ничего не испортит
weko Улучшит только
weko Если сессия и не заканчивается, то будет жить дольше
Vort так если рвётся сессия, то интродьюс перестаёт работать
Vort а, я понял
weko [14:13:06] <Vort> так если рвётся сессия, то интродьюс перестаёт работать
weko Так нужен новый. Или восстановить сессию
orignal еще лдин коммит сделал
orignal чтобы говно мамонта не выбиралось в качестве интредьюсера
Vort weko: я видел, что выбирался тот же самый интродьюсер кстати. ну или мне причудилось )
Vort orignal: заведу значит сейчас XU в виртуалке. послежу за ним немного
weko Для интродьюсеров вообще нужны самые качественные роутеры
weko Если говорить про профилирование
weko И нужно их точно на побольше. 2-3 часа
weko А лучше случайное время в этом диапазоне
orignal да надо
orignal с интродьюсерами вообще многое не сделано
Vort orignal: хм. глянул коммит. или я что-то не так понял, или это немного не то
orignal это еще другой
orignal смысл в том что мы не берем сильно старые сессии для интродьюсера
orignal потому что раньше могли взять сессию которая тут же протухнет
Vort так проблема была чутка в другом
Vort хотя не уверен
orignal я в курсе
orignal ту проблему я еще не сделал
Vort мне казалось, что протухание было на уровне IdleTimeout
Vort а. ок
Vort два протухания ))
orignal я просто увидел другую более серьезную
weko orignal: у жабистов тоже 1 час иетродьюсеры?
Vort тогда подожду ещё с XU узлом
orignal да то же самое
weko Tunnel creation success rate: 60%
orignal ну неплохо
weko После обновления будет ещё лучше
orignal у меня 42% на LU с Symmetric NAT
weko SSU2_KEEP_ALIVE_INTERVAL = 15;
weko SSU2_KEEP_ALIVE_INTERVAL_VARIANCE = 4;
weko Это 11-19 выходит?
Vort weko: ну я же сказал - 15..18
orignal 15-19
weko Vort: 15+4 19 же
Vort weko: 4 там не будет
orignal а ну да
orignal пох
Vort да правильно, что 18. у меня на 19 порты уже менялись в VirtualBox
weko В чём разница?
weko SSU2_TO_INTRODUCER_SESSION_DURATION = 3600;
weko SSU2_TO_INTRODUCER_SESSION_EXPIRATION = 4800;
Vort я чую, что это очередная проблема, но пока молчу )
Vort хотя раз уж начали говорить... keepalive ведь до 80 минут должен посылаться?
Vort но из RI надо выкидывать на 60 минуте
Vort ну так мне кажется логичным. может понимаю неверно
weko Не логично
weko Вроде каждому интродьюсеру в RI добавляется таймстамп
weko Время истечения
Vort +80 минут, да?
Vort а выкинется из RI через 60 минут
weko Ну должно быть столько, сколько интродьюсер выполняет свою работу
Vort чтобы дать время RI разойтись по сети
Vort короч мне кажется, что с выкидыванием из RI сессию дропать не надо. надо ещё 20 минут давать для тех юзеров, которые старым RI пользуются
Vort иначе не вижу смысла в различных длительностях
weko Да без разницы. Узлы всегда могут определить какой рабочий интродьюсер, а какой уже нет. Благо что время почти абсолютно для участников сети
Vort сессия дропнута - тег выкинут - интродьюсер возвращает ошибку
Vort короч интродьюс работает только пока жива сессия Боба и Чарли
weko Ну это понятно
weko Но мы то про время
Vort ну вот если через 60 минут её закрыть, то уже никто не сможет этим интродьюсером воспользоваться
weko Ну правильно
weko И никто не будет
weko [15:46:59] <weko> Вроде каждому интродьюсеру в RI добавляется таймстамп
weko Время истечения
Vort поэтому я и спросил - +80 добавляется?
weko Врядли
weko Не логично
weko Я то откуда знаю
Vort а какой тогда смысл в 80 ?
weko Я же вопрос и задал
weko Тоже хочу узнать...
Vort своё объяснение понимания механизма я написал
Vort теперь ждём, что orignal скажет
weko Но он не нужен же если в RI пишет время истечения
weko Пишется*
weko SSU2: Unexpected message type 67 from {IP}:{port} of {length} bytes
weko Интересно
Vort очередной баг какой-то видимо так проявляется
weko Может где-то едет смещение? Или где то не расшифровалось
weko Надо такие сообщения сохранять
Vort ну меня подозрения на две причины: потокобезопасность (так как было много такого в других местах) и big endian/little endian (не)совместимость (кое что у меня вызывало подозрение)
Vort "<weko> Надо такие сообщения сохранять" - или брекпоинт в дебаггере ставить и гадать, что произошло
Vort ещё вариант - побольше логирования вокруг этой проблемы наделать
Vort ещё может быть "шум сети" виноват. надо проверять, действительно ли это i2p трафик
Vort ещё может быть юзер сбросил ключи допустим, а наш узел пользуется старыми
Vort ну это всё почти наугад причины. короч копать надо
Vort вариант "атака" на последнем месте :))
weko Интересно ещё, кто делает U узлы IBGW
Vort так были же недавно исправления на эту тему
Vort выбор рандом пира или что-то около того
Vort был какой-то шанс выбрать неверно
weko Аа
weko Понятно
weko Кстати а уже пофиксили что пробуется только один интродьюсе
Vort по-моему там не так всё просто
Vort мне казалось, что может быть несколько попыток
Vort но может это из-за того, что я несколько туннелей делал по одному и тому же маршруту
Vort то есть, тут скорее вопрос в том, "один" за какой промежуток времени. за время "жизни" сессии?
Vort и если проблема проявляется в виде таймаута, то что тут вообще можно сделать?
Vort вот если интродьюсер ответил, но, допустим, кодом 5, то можно попробовать ещё какой-то
weko Vort: если таймаут то другой надо
weko В любом случае если не получилось пробовать другой
user weko, ты еще тестовый узел U держишь?
weko Обновил
Vort weko: на последний коммит?
weko Да
Vort интересно было бы узнать, какие таймауты для портов NAT наиболее распространены среди юзеров
Vort но я даже примерные значения (10-20-30) еле нагуглил :(
Vort может гуглил плохо, хз
Vort от этого зависит, какой улучшательный потенциал у последних коммитов
user Статистика после 20 часов аптаима: TCSR:58 R:1893 F:1066 TT:59 Transit:246.20 MiB
user Имее смысл дальше её держать? Или можно гасить?
Vort хорошо. получается около 50 транзитов в среднем
Vort было бы неплохо, конечно, где-то до тыщи довести...
user До тыщи часов?
Vort до тыщи транзитов. багфиксами )
Vort user: думаю, пока стоит выключать. а если ещё какой-то важный баг выловим, то ещё потестировать
user Ок
Vort если есть ещё и белый адрес и желание, могу показать, как измерить таймаут протухания порта у NAT
Vort хотя для статистики это надо у многих юзеров измерить :(
user Кстати, ты спрашивал выше про SSU2: Path challenge. За последние примерно 6 часов в логе записей набралось 51. Если это нужная информация.
Vort это я так пытался угадать таймаут )
Vort мне кажется, что у твоего NAT таймаут где-то минуту
Vort у меня на 20 секундах таймаута лог был просто засран этими сообщениями
Vort без NAT же, как я понимаю, этого сообщения вообще быть не должно
user Есть
Vort я выкладывал программу для тестов: paste.i2pd.xyz/?be3d07d7bb76a5b6#7tKKYmjJixVwVYz4h9iakffVimSqCMAMSwN6AMjFm6EP
Vort под линуксом её через Mono собрать можно: mcs Program.cs
Vort потом запуск mono Program.exe
Vort ну или UDPTest.cs / UDPTest.exe лучше
Vort на белом адресе надо запустить "UDPTest s белый_адрес порт"
Vort на сером адресе - "UDPTest c белый_адрес порт 1000 1"
Vort 1000 - это таймаут. 1 секунда то есть
Vort будут посылаться пакеты каждую секунду. сервер будет их ловить и отображать порт
Vort с таймаутом секунда порт будет всегда одинаковым у следующих друг за другом пакетов
Vort а вот если таймаут превысит определённый порог (допустим, 20000), то порты будут у каждого пакета разные
Vort и вот этот самый порог и желательно знать для разных юзеров (ну или хотя бы хоть для кого-то)
Vort можно ставить 1000, потом 5000, потом 10000 и так далее - пока порт не начнёт "прыгать"
Vort если с Mono будут проблемы, то можно по этому принципу на чём-то другом написать аналогичную програмку - она не сложная
orignal что сказать то?
Vort ну для начала - какой таймаут пишется в RI - INTRODUCER_SESSION_DURATION или INTRODUCER_SESSION_EXPIRATION
orignal expiration
orignal то что в iExp
Vort а меняться в RI интродьюсер должен через сколько?
orignal не помню смотреть по коду надо
orignal с дедом это обсуждали
Vort а сессия с интродьюсером жить должна сколько?
Vort мне кажется, что 80. но это просто по логике. моей логике )
orignal сколько EXPIRATION
orignal но когда истекает DURATION то интродьюсер в RI меняется на новый
Vort ну вот мне кажется, что сессия живёт 60. то есть, баг
orignal тем не менее в старой keepalive шлется до EXPIRATION
Vort ах вот как
orignal if (ts < session->GetCreationTime () + SSU2_TO_INTRODUCER_SESSION_EXPIRATION)
orignal session->SendKeepAlive ();
Vort тогда мне надо будет получше рассмотреть
orignal должна жить 80
orignal но после 60 не публикется в новом RI
orignal но со страрого может
Vort orignal: короче похоже старой сессии (которой ещё 20 минут надо слать keepalive) просто "жить" негде
Vort в auto& introducers = v4 ? m_Introducers : m_IntroducersV6 похоже хранятся только те, которые в RI
orignal надо подумать
Vort я на 90% уверен, что это баг, но уже сегодня не буду подбирать доказательства
orignal скорее всего да
orignal я просто не доделал
orignal как обычно
orignal надо сделать список implied introducers
orignal Vort я это поправил
weko [17:34:58] <user> Статистика после 20 часов аптаима: TCSR:58 R:1893 F:1066 TT:59 Transit:246.20 MiB
weko У меня было 800 мб