IRCaBot 2.1.0
GPLv3 © acetone, 2021-2022
#dev
/2024/04/24
~AreEnn
~R4SAS
~orignal
~villain
&N00B
+Xeha
+relaybot
DUHOVKIN
Guest18377
HackerMan
KabaOS
Most2
Nausicaa
Ruskoye_911
Trusishka
Vort
`
acetone_
anon3
b3t4f4c3
flumental
mittwerk
nemiga
not_bob_afk
plap
poriori_
profetikla
segfault
soos
teeth
un
weko_
whothefuckami
` Тяжело-тяжело..
orignal onon сделал я чтобы отвечало на запрос только реальными ротуерами
orignal кстати мне вот что интересно как этот поц клонирует роутеры с family
onon Продублирую вопрос: Когда у нас прямой коннект к узлу устанавливается, RI обновляется, и из netDb они удаляются с меньшей вероятностью. Но вот те роутеры, через которые мы удачно построили туннель, похоже не обновляются.
orignal я посмотрел кстати RI не обновляется
orignal только когда к нам подключаются
orignal те конечно не обновляются потому что мы не знаем новый RI
onon Ну было бы неплохо те, которые 'real' тоже "продлевать"
onon В случае успешного туннеля
orignal это можно на уровне очистки
orignal <dr|z3d> no, not wrong. it's not being banned by the sybil scan, by something else.
orignal а вот сильно интересно
orignal у него показывает что мой флудфил забанен
orignal <dr|z3d> I got you down for excessive lookup requests, which is a short term ban (15m)
orignal уебаны блять
onon excessive lookup requests это что
onon Слишком быстро или слишком много за раз
onon Ага вижу max 10 lookup requests in 30s.
orignal ты последнее видел,
orignal <dr|z3d> it's likely different addresses, which is why I'm suggesting not hammering a single ff and spreading your lookups over several.
onon Да =)
orignal они че там вообще курят?
onon Ну думали нагрузку перераспределять
orignal так он не понимает
orignal если он ближайший к этому адресу
onon Да, я тут с тобой согласен
orignal то как не распрделяй а все равно попадешь на него
orignal счас Vort проснется охуеет от такого окрытия )))
orignal спросим там деда
onon Странно, что в таком случае они сами себя не банят...
onon У них, видимо таймауты на запросы больше
orignal думаю у них просто таких потоков как у нас нету
onon А ещё своим tcsr хвастаются
onon Мне кажется атака закончилась у меня показатели начинают возвращаться к норме.
orignal у меня пока нет но я же везде забанен оказывается ))
onon Ява на 24часа банит?
orignal а x3
orignal я оттуда вышел
orignal мне надо пересобраться
hip перепишите на rust
Vort orignal: почему парсинг RI не починил? :(
Vort кстати, у меня недавно узел крешнуло, но бинарник был без дебага, если будет повторяться, буду тогда ловить
Vort про "excessive lookup requests" - это получается бан просто при большом транзите
Vort хотя и вариант бага с запросами одного и того же RI стоит проверить
Vort вообще, если в сети 1000 флудфилов, то при равномерном покрытии запросами это получается глобальный лимит в 333 запроса в секунду
Vort то есть, получается два вопроса - 1. равномерное ли покрытие и 2. действительно ли нашему узлу надо больше, чем 333 запроса в секунду делать
Vort если ничто не помешает, то соберу статистику по lookup requests для своего узла
Vort не нравится мне это, сразу уже вижу странность даже без статистики: paste.i2pd.xyz/?37bdae322a1079b7#HakqCsR2zvEUPHqQJy8NaDghSHfDxRGAxQ8jBE1TNake
Vort почему к узлу n9Cr-OtG-4ca3orJSf6t такой блок запросов образовался? надо разбираться
Vort а это что за хрень? три запроса в секунду "Try mR9w1QHtHcRnd~sPHNjgL6tzBCnK6SqgP0njgaz~q~g= at 3 floodfill"
Vort похоже, джависты нашли баг в i2pd
Vort проверил расстояния от запрашиваемых идентов до флудфилов в блоке - выглядят нормально. теперь вопрос, почему собственно блоки формируются
Vort зачем нашему узлу в одну и ту же секунду опрашивать большое количество близких хешей
weko [02:15:16] <hip> перепишите на rust
weko Перепиши.
Guest63403 веку на мыло.
weko [05:00:10] <Vort> кстати, у меня недавно узел крешнуло, но бинарник был без дебага, если будет повторяться, буду тогда ловить
weko А это не проблема, можно просто бинарник с дебагом подставить в команду gdb
Vort weko: у меня он был скачан с GitHub, тут ничего не поможет
Vort там совсем другой компилятор
weko [05:44:27] <Vort> а это что за хрень? три запроса в секунду "Try mR9w1QHtHcRnd~sPHNjgL6tzBCnK6SqgP0njgaz~q~g= at 3 floodfill"
weko Я не помню, это случайно не та же штука, что была в тестнете?
Vort а, может, там и есть отладочная инфа, просто через жопу закодированная
Vort не помню вообще о чём речь
Vort я имею в виду - нафига один и тот же запрос слать кучу раз
weko Vort: когда я запускал тестнет, иногда всплывал спам таких логов, при этом была сильная нагррузка на проц
weko И при чём на несколько роутеров именно
weko Около 5
Vort хз хз
weko Точно не помню
weko Можно найти на major логи
weko Такое несколько раз было
Vort я ещё пульсацию по количеству нашёл. не помнишь ли что каждые 15 секунд может запросы генерить?
weko Vort: ну exploration
weko Возможно
Vort да нет. когда база набита, то exploration редко случается
Vort а она была набита
Vort 15к RI в базе
Vort разобрался я, как всё же вытащить названия функций из бинарника. стек креша вот такой: NetDb::HandleDatabaseSearchReplyMsg -> NetDbRequests::SendNextRequest -> RequestedDestination::CreateRequestMessage -> CreateRouterInfoDatabaseLookupMsg
Vort weko: спасибо за подсказку, через gdb всё же можно вытащить было информацию. хотя это писец конечно. я ожидал, что llvm-dwarfdump или IDA сработают. но хрен там
Vort скорее всего, крешнуло на вот этой строчке: github.com/PurpleI2P/i2pd/blob/02895d4cf5d0d5e047713a3af7d72f8a9b796e68/libi2pd/I2NPProtocol.cpp#L178
Vort сделал визуализацию пульсации исходящих lookup запросов: paste.i2pd.xyz/?fe9ee5a48f3d1a95#4sJfqvALdzqRzV3mg2AhJzUeHK2rnJqPdRzdbc5sxukj
Vort каждый всплеск/шип - это около тыщи запросов за секунду
Vort затем относительная тишина 15 секунд, затем опять шип
orignal какой парсинг?
orignal запрос одного и того же это понтяно что надо проверить
Vort [00:25:13] <Vort> короч надо добавить проверку на возвращаемое значение вот сюда:
Vort [00:25:23] <Vort> и в аналогичные места
orignal но он то говорить про разные
orignal да надо согласен
Vort у атакующего i= короче, чем надо
orignal ну так от этого же ничего не слуится
Vort ой, длинннее. туплю
Vort ну не суть. надо, чтобы длина чётко совпадала
Vort так мы можем выкинуть нафиг RI прямо мгновенно
Vort и больше с ним не возиться
orignal это надо но оно не критично
orignal не RI а адерс
Vort почему не хочешь сразу RI выкидывать?
tetrimer_ Диск надо чем-то занять. :)
tetrimer_ У меня нынче peerProfiles под 700 Мегабайт раздуваются
orignal потому что это может быть не атака а просто бага
orignal аналогично
orignal что с ними делать пока не знаю
Vort "<~orignal> потому что это может быть не атака а просто бага" - зачем нам баганутые RI?
orignal ну согласенн да можно выкинуть
orignal так что с запросами то?
orignal к одному и тому же часто?
Vort с запросами две загадки
Vort как минимум
Vort во-первых, почему идут запросы блоками к близкому (или тому же самому) флудфилу
orignal то что дрозд сказзал это же пиздеуц
Vort во-вторых, какой процесс генерирует шипы с интервалами в 15 сек
Vort да подожди с пиздецом, тут реально может быть баг
orignal ну баг одно но когда много тразита это другое
Vort транзит должен давать равномерную нагрузку
Vort сейчас же какие-то странности наблюдаются
orignal все ломятся на один и тот же флудфил?
Vort нет. но блоками туда запросы попадают - по 5, 10, 20 штук
Vort всё в пределах одной секунды или того меньше
Vort про интервал в 15 сек есть идеи? просто я почти уверен, что ты знаешь, откуда эти шипы
Vort а мне это копаться долго надо, чтобы понять
onon const uint64_t MANAGE_REQUESTS_INTERVAL = 15; // in seconds
Vort похоже
Vort это не из-за этого у нас пинги по 15 сек лагают случаем?
orignal да возможно
onon if (ts - lastManageRequest >= MANAGE_REQUESTS_INTERVAL || ts + MANAGE_REQUESTS_INTERVAL < lastManageRequest) // manage requests every 15 seconds
orignal нет пинги тут непричем
orignal вот что запросы лизсета бывают долго это да
Vort так что получается - если с первого раза RI не нашёлся, то ждём 15 секунд и потом пробуем ещё раз?
Vort шипы, кстати, срезать надо нахрен, даже если оставлять интервал тем же
orignal да. и пробуем на другом
orignal согласен что надо
Vort то есть, надо чаще дёргать таймер
orignal этим просто никто еще не занимался
orignal да конечно надо поменять
onon Если у нас единовременно шлётся такое кол-во пакетов, естественно где-то что-то переполняется и дропается
orignal тогда нас забанят вообще все ))))))
onon Оттуда и потери пакетов
onon И фейлы тестов
Vort да я имею в виду просто размазать шипы, а над самим потоком думать потом
onon И дропы служебных сообщений
Vort то есть, ждать 15 сек, но точка отсчёта чтобы плавала
Vort примерно по той же логике, как срезали шипы перепосылок в SSU2
orignal а разве счас не так?
Vort график не видел? :)
orignal проверка каждые 15 секунд но врем ятам сранивается
Vort так вот надо проверку каждую секунду, а сравнивать с 15 секундами
orignal там не 15 секунд
orignal там увеличиваюшийся интревал должен быть
Vort ну я имею в виду оставить сравнение как было
Vort но дёргать его намного чаще
Vort тогда шипы уйдут
Vort а логика останется той же
orignal ну так поменять эту констату и все
Vort она в сравнении используется
Vort хм. может я не прав
Vort сейчас получше гляну
Vort MAX_REQUEST_TIME = MAX_NUM_REQUEST_ATTEMPTS*MANAGE_REQUESTS_INTERVAL
Vort то есть, там аккуратно менять надо
orignal ну это как раз логично
orignal ну точнее надо подумать
Vort угу
orignal там надо MIN_REQUEST_TIME вместо MANAGE_REQUESTS_INTERVAL
orignal это явный косяк
колдобина хули распрыгались пидарасы
колдобина ой это дев
Vort orignal: ну а вообще у меня подозрение, что с нынешним алгоритмом задержка перед вторым запросом может быть от 5 до 15 секунд. полагаю, такой рандомный разброс не нужен
Vort то есть, стоит чётко понять, какая задержка нужна и ждать именно столько
Vort "<~orignal> это явный косяк" я думаю, это так учтён разброс
Vort зачем вообще MAX_REQUEST_TIME ? почему просто количество попыток не считать?
Vort если таки сравнивать время, то, наверно, вот так нужно: const uint64_t MAX_REQUEST_TIME = MAX_NUM_REQUEST_ATTEMPTS*(MANAGE_REQUESTS_INTERVAL+MIN_REQUEST_TIME);
Vort если будет интервал 1 секунда, то с учётом разброса придётся ждать 5+1=6 секунд на попытку
Vort это тоже, наверно, менять надо: auto msg = m_Queue.GetNextWithTimeout (15000); // 15 sec
Vort присмотрелся чуть получше - lookup запросы, которые в логах идут блоками, создаются отдельным потоком
Vort на моём скриншоте поток 785 даёт блоки, а поток 303 - рандомные запросы
Vort ппц. собирал данные об одной проблеме (MANAGE_REQUESTS_INTERVAL), вляпался в две другие проблемы :(
Vort при выключении тестового узла, он опять отожрал всю RAM (4+GB). но система кое как выдержала
Vort после чего основной узел тоже заглючило и у него начала течь память со скоростью примерно 1 мегабайт/секунду
Vort дошло до 2.5GB и я его выключил
orignal ну так понятно то оно от фонаря))
Vort посмотрел на всякий случай очереди - там всё как обычно
orignal почему отжирает память тоже надо разбираться
Vort что необычного было - NetDb: ... destination requested, but no tunnels found
Vort ладно, займусь пока визуализацией того, что я собрал полчаса назад :/
orignal ну так надо онять какой вообще поток и где
Vort я ещё проверил, что это данные кучи. ничего необычного, просто на всякий случай
Vort а проверить, кто гадит в кучу - не так просто. на то она и куча )
Vort особенно, когда непонятны условия воспроизведения проблемы
orignal так у нас пулыч
orignal надо печатать какие объемы в секунду запрашиваются в каждом пуле и скольо освобождается
orignal так мы поймем какой пул
Vort ну это если будет понятен механизм воспроизведения
Vort и только для второго варианта (более-менее медленной утечки)
orignal не ну рост памяти виден всегда
orignal меня интересует что именно отжирается
Vort почему происходит всегда - это понятно - фрагментация. вопрос именно в аномалиях, которых фрагментацией не объяснить
orignal нет вот смотри у меня счас флудфил 600 мегов отожрал
orignal вопрос почему
Vort профили, наверно. меня не 0.5 гига беспокоит, а 2.5 и 4
orignal у меня вчера так илита грохнулась
orignal все стояла где то на 300 мегов потом раз и вылетела по OOM при 1.5гига
Vort я и на GitHub подобные жалобы видел
Vort ну предположительно, это происходит из-за подлагивания потоков (к примеру, при свопе - у меня так было)
Vort такс. а теперь результат по интервалу:
Vort ^^ коммит с изменением интервала и график количества запросов с таким изменением
Vort шипы ушли. сломал ли я что-то в процессе - вопрос интересный :)
Vort там в коммите, кстати, есть ещё одно бонусное изменение
orignal 1 секнуда не маловато?
Vort теперь мне надо понять, из какого потока лезут групповые запросы (к близким флудфилам)
orignal NetDB тред не жрет 100%
orignal зачем ReseedFromFooldfill закомментил?
Vort "<~orignal> 1 секнуда не маловато?" меня только в отношении округления этот вопрос беспокоил
orignal а меня в плане нагрузки на тред
Vort "<~orignal> зачем ReseedFromFooldfill закомментил?" потому что он нихрена не работал. а без него флудфил кладётся в базу и нормально с него стартуется
Vort "<~orignal> а меня в плане нагрузки на тред" я сейчас основной узел заведу на этом коммите
Vort и будет видно. но думаю, что ничего с ним не случится
orignal ну давай PR
orignal если что измениим
orignal я тоже думаю
orignal 15 секунд там было 10 лет назад
orignal опять же от балды
Vort меня лишь беспокоит, что интервал дефакто был плавающий из-за неточности. то есть, не 5, а 5..20. ну или около того
Vort а теперь 5..6
Vort то есть, чаще запросы будут
Vort можно поднять немного. но можно и оставить 5
Vort хз
orignal я бы полнял до 3 секунд
Vort да сам таймер можно и вообще несколько раз в секунду дёргать. важно, что там с реальной частотой запросов
Vort перепосылки SSU2 ведь дёргаются и ничего не сломалось ещё
orignal логично
orignal я просто об этом в то время не думал
orignal а код этот с тех времен
Vort хотя 5 секунд же тоже не выдерживаются из-за дропов
orignal насчет отжирания памяти я думаю какой то тред сдыхает и перестает забирать из очереди
Vort транзит кстати был при утечке
orignal либо не сдыхает а зависает и начинает жрать кор целиком
Vort нагрузки на CPU особой не заметил. но может просто смотрел не тем, чем надо
Vort PR с интервалом сделал, но, как обычно, лучше всё же вначале тестировать: github.com/PurpleI2P/i2pd/pull/2059
Vort не хотелось бы, чтобы java ещё больше банить начала из-за этого изменения
tetrimer_ Я у себя сейчас запущу с этими изменениями.
tetrimer_ Вот если я при старте меняю RI и ключ узла - я ведь для всех остальных выгляжу как новый узел?
orignal счас попробую смержить
weko tetrimer_: да
orignal я сегодня в конторе сижу
tetrimer_ Т.е. в забаненных - меня еще нету?
weko Ну, исключая адрес
tetrimer_ ipv4 - это понятно.
weko Кроме этого, да, как новый
tetrimer_ Значит надо чаще меняться.:)
orignal смержил
orignal tetrimer_ еще меняй NTCP2 и SSU2 ключи
Orion с последнем коммитом вообще не стартует
Orion почему-то пишет ошибку в логах 17:41:22@643/error - Daemon: limits.openfiles exceeds system limit: 16386
Orion поставил лимит 16000, ошибка ушла, но всё равно не стартует
Vort профилей много набралось, наверно
orignal грохни ~/.i2pd/peerProfiles
orignal читает просто долго
Orion сохранение профилей у меня отключено
orignal ну разбирайся
orignal откуда мы знаем почему у тебя не старттует
orignal у всех стартует а у тебя нет
orignal мы не ванги
Orion ок
Orion разберусь
Orion так причём тут комп? нашел бинарник 2.48 - запустился и работает. а v2.51.0-18-gd3b699d7 нет
orignal ну так разбируйся почему не работае
orignal что просиходит конкретно
Orion хер знает. пойду пересоберу.
orignal так включи дебаг и посмотри логи
orignal на чем спотыкатеся
Vort всё, я понял, откуда блочные запросы к флудфилам идут. и, похоже, с этим ничего не поделать
orignal откуда?
Vort это происходит, когда какой-то из флудфилов отваливается по PeerDisconnected. и вся его очередь запросов через дропы передаётся соседнему флудфилу
orignal можно задержку сделать
Vort хз, думаю, не стоит спешить. всё равно java заметит всплеск
orignal дед правильно говорит
orignal что надо запоминать зафейлившиеся запросы и некоторое время не долбать эти адреса
Vort я о подобном думал
Vort по сути, специфичный бан в профиле
orignal именно так в профиль пишется когда в последний раз запрос зафейлился
Vort то есть, если наш узел имеет хорошие основания полагать, что запрашиваемый узел найти не получится, то не стоит и пробовать
Vort сейчас же уйма транзита пытается идти через фейки
Vort можно ловить, как я предлагал, по неправильному размеру i= ключа
Vort но можно ещё какие-то критерии придумывать, да
orignal пробовать можно но только через несколько минут
Vort давай сейчас грепну/почищу лог и отгружу. если электричество не рубанётся раньше
orignal ну когда то же починят
Vort вот. по логу можно посмотреть, как часто происходит долбёжка одного и того же адреса
Vort надо же проверить, частое это явление или нет прежде, чем чинить что-то
Vort посмотрел нагрузку от NetDbRequests::ManageRequests - 0.5% от всего потока. для сравнения - NetDb::HandleDatabaseLookupMsg - 6.4%, NetDb::AddRouterInfo - 6.1%
orignal ну нормально
Most2 06.<trusishka> orignal
Most2 06.<trusishka> Проблема еще есть, компил последних коммитов поможет?
orignal что?
orignal поможет
orignal рейт станет выше
orignal проблема еще долго будет
Most2 06.<trusishka> Хорошо, щас
orignal счас везде стабильные 10%
orignal если у тебя флудфил то самые последние
orignal они существенно улучшают дело
Most2 06.<trusishka> Компилю
orignal компили
orignal прошел
WebClient8 Может заставить с помощью майнинга адреса роутеров подтверждать, чтобы спама не было?
WebClient8 Куда, кстати, люди пишут когда их сообщения в тг пересылаются?
orignal иди этим деду мозги еби
orignal trusishka ну так пересобрал?