Немного удалось ускорить обработку большого потока пакетов на windivert за счет bulk mode.
В bulk mode windivert может выдать за 1 обращение в ядро сразу множество пакетов, если они идут пачкой. Буфер выставлен в 192K при макс количестве пакетов 128. Как раз по 1500.
Тестировалось через iperf на loopback. Без bulk - 17.4G, c bulk - 18.6G
Проц не требует митигации от meltdown, выигрыш 7%., учитывая, что по лупбэку идут пакеты 64K, их помещается только 3.
На виртуалке linux через host only network прирост около 30-40%. Там идут стандартные мелкие пакеты.
Если включена митигация от meltdown, скорее всего выигрыш будет еще больше, тк syscall-ы дороже.
Если все упирается не в процессор, а в скорость сети, то профит будет не в возрастании скорости, а в уменьшении cpu usage
Потенциально может быть минорное замедление на arm64 при процессинге пакетов за счет отсутствия alignment в буфере windivert - он не выравнивает, сует как есть пакет за пакетом. На x86 должно быть побоку, а на других процах, где без alignment беда, винды и нет
Сделан свободный и множественный импорт шаблонов в другие шаблоны и профили.
Когда имеется много сложных и повторяющихся стратегий или групп одинаковых параметров, может быть удобно использовать шаблоны. Шаблон - это такой же профиль, только он не идет в работу, а попадает в отдельный список шаблонов. Шаблоном профиль становится через задание параметра --template=. Далее он может быть импортирован (–import=) в другой профиль или другой шаблон. Простые параметры - число, строка или bool - импортируются только, если они были заданы в импортируемом шаблоне. При иморте шаблона в шаблон в шаблоне назначения они так же считаются заданными. Списочные параметры добавляются в конец списка. Такими параметрами является все, что может принимать список значений. Например, хостлисты или --filter-tcp. Номер и имя шаблона не копируются. Директив --import может быть сколько угодно в любом месте. Предыдущие простые заданные параметры затираются новыми импортированными или заданными в текущем профиле.
Особый запрет - замещение autohostlist. Шаблон может иметь autohostlist, но при импорте куда-то, где уже есть autohostlist, будет ошибка.
Пока делал детектор торента, обнаружил, что по utp каналу из 50 пиров обычно 2-3 сыпят quic google.com
Иного обьяснения как сборка запрета найти сложно.
Казалось бы запрет - какая-то дичь непонятная, но юзает народ
Причем непонятно то ли это намеренно по торренту бьют , то ли какой-то лось засборил --wf-udp-out=1-65535 any protocol . Хоть с cutoff слава оллаху
Это, кстати, возможная причина почему может неверно назначиться l7proto на входящие. Если incoming сыпет запретом. Запрет дурит запрет. До чего мир докатился. Лучше бы РКН задурил РКН
C хелперы для работы с unixtime : localtime,gmtime,timelocal,timegm
Распознавание нешифрованного bittorrent протокола.
tcp - l7proto = “bt”, l7payload = “bt_handshake”
udp - l7proto = “utp_bt”, l7payload = “utp_bt_handshake”
именно uTp, а не uDp
Как ловить в винде ? --wf-tcp-out,–wf-udp-out ? Да, но нужно еще --server
отдельный инстанс
1024 - ваш порт torrent клиента. зафиксировать
учесть, что direction может стать любым. конекты могут быть как входящие , так и исходящие.
поэтому в antidpi функциях смотрим “standard direction”
В linux - кастом скрипты или свои tables. Прописывание портов в конфиг не поможет.
Для экшина над шифрованным bt не забывать про фильтр antidpi функций “standard payload”
Новый оркестратор per_instance_condition.
Бывает, что в одном профиле нужно вызывать разные инстансы с разными параметрами в
зависимости от текущей обстановки, которая не может быть выражена условиями --payload или range.
Оркестратор все последующие инстансы вызывает только, если у них есть аргумент “cond”. “cond” - имя iff функции. “cond_neg” - признак инверсии. Инстанс выполняется только если cond вернул true.
Имена аргументов выбраны не iff/neg, чтобы не было конфликтов с уже существующими вложенными оркестраторами.
Например, сервер не поддерживает timestamps. tcp_ts обламывается, соединение ожидаемо виснет, потому что фейк принимается сервером. Что делать ?
Можно было бы поломать код fake. Наплодить там тучу условий, аргументов. И реплицировать их на fakedsplit, hostfakesplit и тд. Но это путь уродования кода и превращения его в монстро-комбайн. Мы так не делаем
Аргумент “instances” в condition и per_instance_condition.
Выполнять условно только последующее кол-во инстансов, остальные безусловно.
cond_lua - iff функция, выполняющая произвольный код. Код должен вернуть значение условия.
Для всякой мелочи, чтобы не писать целые функции
Следующие 2 инстанса только для пакетов tcp с длиной данных не менее 1200 байт --lua-desync=condition:instances=2:iff=cond_lua:code='return desync.dis.tcp and #desync.dis.payload>=1200'
В принципе, condition может заменить per_instance_condition, если его писать перед каждым инстансом и дать аргумент instances=1.
На самом деле это будут вложенные оркестраторы condition. Но запись с per_instance_condition будет компактнее
Только сейчас выяснилось, что в multiport в iptables нельзя больше 15 портов.
Причем диапазон считается за 2 порта.
Годы прошли, никому не надо было туда писать монстросписок. Но понадобилось.
В z2 multiport в стандартных портах из конфига переведен на ipset bitmap:port
z1 EOL, его не буду трогать. Кому надо - напишет кастом с дополнительным правилом
Набор скриптов “builder-linux” в “docs/compile” для простой сборки статиков под любую архитектуру на x86_64 хосте с традиционным linux.
Все элементарно
Установить нужные тулзы на хост. gcc, gcc-multilib, make, curl, unzip. может что-то еще
“get_toolchains.sh” . выбрать какая нужна архитектура. можно выбрать ALL или запустить скрипт несколько раз, скачав только нужные тулчейны
“build_deps.sh” . выбрать “ALL”. соберет зависимости под все скачанные тулчейны
“build_zapret2.sh”. выбрать “ALL”. соберет nfqws2,mdig,ip2net под все скачанные тулчейны. результат в binaries. Имена фолдеров совместимы с релизами на github и c install_bin.sh
Чтобы избежать диалога, можно установить переменную TGT. Она должна включать список тулчейнов через пробел. Элементы списка - это то, что предлагается в диалоге или имена фолдеров в “toolchain”. Например, “mips-unknown-linux-muslsf”.
upx можно самому накатить по желанию. автоматом не делается