Перейти к основному содержимому

Правила DSCP

Поля описаны в разделе DSCP вкладки «DNS & Маршрутизация», а настройка обоих роутеров - в руководстве Передача сетов другому роутеру.

Собственное значение DSCP сета записывают правила Задать DSCP из Настройки > Основные > Файрвол, после значения Задать DSCP, которое оно заменяет в пакетах к адресам сета, включено Задать DSCP или нет. Правила охватывают пересылаемый трафик, собственные соединения b4 и фейки, фрагменты и сегменты, которые отправляет b4, в IPv4 и IPv6 независимо от переключателей Поддержка IPv4 и Поддержка IPv6, и сохраняют два бита ECN. Пакеты, которые Задать DSCP не трогает, сохраняют своё значение: трафик loopback, пакеты, которые b4 отправляет клиентам в LAN, например ответы DNS и сбросы соединений, и ответы внутри соединений, открытых другими хостами, например ответы веб-интерфейса. Список интерфейсов Задать DSCP ограничивает и значения сетов. Где стоят эти правила, описано в разделе Правила подвкладки «Файрвол».

Какие пакеты получают значение​

Значение выбирается только по адресу назначения, при любом протоколе и порте и независимо от того, какой сет b4 выбрал для стратегии соединения. Фильтры портов и Фильтр версии TLS его не сужают.

АдресаОткуда берутсяСрок жизни
СтатическиеЦели IP и CIDR, категории GeoIP и ASNПока они есть в сете
Узнанные из DNSОтветы для доменов сета по UDP и TCP: пересланные, из закреплённых адресов или через DNS-перенаправление сетаTTL разрешённых IP (секунды), пока включена маршрутизация, иначе 1 час
Узнанные из эскалацииАдреса хоста, который эскалация передаёт сетуКак у узнанных из DNS
Узнанные из TLS и QUICАдрес назначения соединения, ClientHello или QUIC Initial которого совпадает с сетом по имени, если это не частный адрес, которого нет в IP обхода ни одного сета; по QUIC частный адрес не запоминается вовсе10 минут
Собственные запросы b4Первые 256 записей списка доменов, кроме regexp: и категорий GeoSite: когда сет начинает записывать значение или меняются его домены или резолвер, затем каждые полсрока жизни, но не чаще раза в 5 минутКак у узнанных из DNS

Узнанный адрес, встретившийся снова, получает новый срок жизни, когда от прежнего осталось меньше половины, а если его нашёл собственный запрос b4 - сразу. Фильтр версии IP со значением 4 или 6 исключает другое семейство. Только по домену выключает узнавание адресов.

Если сеты пересекаются, адрес, узнанный для сета, важнее любого статического диапазона; среди статических диапазонов побеждает самый длинный префикс; при одинаковом префиксе или узнанном адресе побеждает сет, который стоит выше в списке. Участвуют только сеты, значение которых применяется.

Собственные соединения роутера, соединения, которые SOCKS5-прокси b4 открывает напрямую, и фейки и сегменты, которые отправляет b4, тоже получают значение по адресу назначения, что бы ни стояло в Трафик самого роутера. Запросы к резолверу сета несут значение, только если какой-нибудь сет перечисляет адрес резолвера, и тогда его несут все такие запросы, включая запросы устройств.

Первое соединение​

Пакет к адресу, ещё не записанному для сета, уходит без значения. Статические цели записываются при применении конфигурации. После пересланного или закреплённого ответа по UDP движок NFQUEUE задерживает ответ, пока адрес не записан, не дольше 250 мс, а движок TUN его не задерживает. Ответ DNS-перенаправления сета и любой ответ по TCP уходят после записи адреса. Соединение, адрес которого b4 узнаёт из его же ClientHello или QUIC Initial, начинается без значения, а собственные запросы b4 помогают, только если устройство получило тот же адрес. Если DNS устройств не проходит через b4, как у b4 в контейнере на MikroTik или у устройств с DoH, DoT или DoQ, значение с первого пакета дают цели IP, CIDR, GeoIP и ASN.

Режим маршрутизации и область действия​

Группа Per-set DSCP в окне Информация о системе называет причину отказа такими кодами:

СетПричина
Режим Upstream SOCKS5 proxy: трафик уходит собственными соединениями b4 к проксиrouting_proxy
Режим Telegram через WebSocket (встроенный): общие WebSocket-соединенияrouting_mtproto_ws
Режим Блокировка (чёрная дыра): пакеты не покидают роутерrouting_block
Заданы исходные устройства, включаемые или исключаемые: этап, который записывает значение, не видит устройствоsource_devices
Маршрутизация ограничена полем Исходные интерфейсы: этот этап не видит входящий интерфейсsource_interfaces
Фильтрация устройств с выбранным устройством, для всех сетовdevice_filter
Нет доменов, IP, GeoIP и ASN, или Только по домену без целей IP, GeoIP и ASNno_addresses

В режиме Сетевой интерфейс значение записывается в пакеты, которые уходят через интерфейс из списка. За туннелем роутер перед b4 видит только пакеты туннеля, а WireGuard пишет в их поле DSCP 0. При включённом Пропустить настройку IPTables/NFTables значение не записывает ни один сет.

Правила файрвола и нагрузка​

Правила сетов стоят после правила Задать DSCP, в его цепочке B4_DSCP при iptables или в его таблице inet b4_dscp при nftables; b4 ставит их, пока включено Задать DSCP или включённый сет записывает собственное значение.

BackendЧто добавляют сетыЧто нужно
iptablesПравило, которое завершает цепочку для пакета не к адресу сетов, затем по правилу на каждое значение и на каждый сет, который узнаёт адреса. Адреса хранятся в ipset b4d_u_v4, b4d_ul_v4, b4d_s<value>_v4, b4d_l_<set>_v4 и их парах _v6ipset и модуль ядра xt_set. Без них b4 пишет предупреждение, и это семейство получает только значение Задать DSCP
nftablesКарты s4_<n> и s6_<n>, цепочка v<value> на каждое значение и наборы l_<set>_4 и l_<set>_6 с узнанными адресамиНичего сверх Задать DSCP

<set> получается из id сета; команды, которые их показывают, - в разделе Как посмотреть метки на роутере. Каждый пакет, который отправляет хост, кроме пропущенных в начале цепочки, требует дополнительных проверок: с nftables - одной по карте статических диапазонов и одной на каждый узнающий сет; с iptables - до двух по b4d_u_* и b4d_ul_*, а для пакета к адресу сета ещё по одной на каждое значение и узнающий сет.

Информация о системе показывает в разделе Firewall группу Per-set DSCP, пока у включённого сета включено собственное значение: строку на каждый такой сет, строку на каждый бинарник iptables, который не может работать с ipset, и backend.

"Video" (0c5d7e4a-2b1f-4c3d-9e8f-1a2b3c4d5e6f): DSCP 31, applied, 0 static entries, learned addresses written: 412 from DNS answers, 9 from TLS/QUIC names, 37 from lookups
"Ads" (5b8e2f10-7c4a-4e9d-8a1b-3c2d4e5f6a7b): DSCP 7, refused: routing_block
installed with nftables

not applied вместо applied означает, что правила сета не установлены, например при iptables без команды ipset.