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

Основные

На вкладке Основные собраны настройки, которые определяют, как трафик попадает в b4 и что b4 с ним делает. Они разложены по пяти подвкладкам:

  • Движок пакетов: как пакеты попадают в b4, с какими семействами адресов он работает, очередь пакетов и обнаружение блокировки по IP;
  • Устройства: фильтрация устройств и устройства, известные b4;
  • Файрвол: как b4 ставит свои правила файрвола и следит за ними, MSS clamping, NAT Masquerade и DSCP;
  • DNS: DNS поверх TCP и таймауты DNS;
  • SOCKS5: встроенный SOCKS5-прокси.

Какие поля применяются при сохранении, а какие после перезапуска сервиса, перечислено в разделе Сохранение и перезапуск.

к сведению

Кнопки Перезапустить сервис и Информация о системе, логирование, веб-сервер и бэкапы находятся на вкладке Система.

Движок пакетов​

Подвкладка определяет, как пакеты попадают в b4, с какими семействами адресов он работает и сколько пакетов каждого соединения читает. В левом столбце карточки Движок пакетов и Обнаружение блокировки по IP, в правом - IPv4 / IPv6 и Очередь и обработка пакетов.

Подвкладка «Движок пакетов»

Режим захвата​

Режим захвата (queue.mode) на карточке Движок пакетов определяет, как пакеты попадают в b4. Движок запускается один раз, при старте сервиса, и изменение применяется после перезапуска.

РежимКак пакеты попадают в b4Что нужно от ядра и системы
NFQUEUE (по умолчанию)Правила iptables или nftables передают пакеты в очереди netfilter, которые читает b4nfnetlink_queue; с iptables ещё цель xt_NFQUEUE и match xt_connbytes, с nftables - nft_queue
TUN-интерфейсЦелевой трафик маршрутизируется через виртуальный интерфейс, который читает b4/dev/net/tun и бинарник iptables или прослойка iptables-nft; модули очереди не нужны

С iptables семейство адресов, для которого iptables не принимает цель NFQUEUE или match connbytes, остаётся без правил, а если таких правил не принимает ни одно семейство, движок не запускается.

При выборе TUN-интерфейс на карточке вместо Интерфейсы захвата появляется группа Настройки TUN. TUN захватывает первые пакеты каждого соединения на порты захвата, и строка Захват в окне Диагностика системы, которое открывает кнопка Информация о системе, показывает ports. На ядре без match xt_connbytes b4 вместо этого пускает через TUN-устройство весь маршрут по умолчанию, и строка показывает default, кроме случая, описанного ниже.

TUN без таблицы raw или цели CT

Каждый прочитанный пакет TUN-движок отправляет дальше через raw-сокет. Если устройство пересылает пакет для другого хоста, например клиента LAN или Docker-контейнера в сети bridge, эта копия должна миновать отслеживание соединений, и b4 обеспечивает это правилом NOTRACK в таблице raw iptables. Без него NAT ядра даёт копии новый порт источника, и ответ до клиента не доходит. На ядре без таблицы raw (iptable_raw) или без цели CT (xt_CT), например на ядре Synology DSM, такое правило поставить нельзя. Если не удалось поставить SNAT для трафика в TUN-устройство, b4 поступает так же.

В этих случаях b4 захватывает только соединения самого устройства, в том числе соединения его SOCKS5- и MTProto-прокси. Пересылаемый трафик в TUN-устройство не попадает: стратегии обхода к нему не применяются и его DNS-запросы b4 не видит, а сеты маршрутизации и блокировки на него действуют. Порты захвата - это TCP и UDP 443, порты из фильтров портов сетов и TCP 80, если в сете включена Пустая строка перед методом HTTP. Если нет ещё и xt_connbytes, через TUN-устройство проходят все пакеты этих соединений, а b4 сам считает их и обрабатывает только первые tcp_conn_bytes_limit / udp_conn_bytes_limit (по умолчанию 19 и 8). Об этом сообщает лог при запуске, а окно Диагностика системы показывает Только это устройство в строке Захватываемый трафик раздела Движок. Если включено Пропустить настройку IPTables/NFTables, b4 не ставит ни одно из этих правил и продолжает захватывать пересылаемый трафик.

Настройки TUN​

ПолеОписаниеПо умолчанию
Аплинк-интерфейсqueue.tun.out_interface. Куда b4 отправляет обработанные пакеты. Авто (следовать маршруту по умолчанию) следует системному маршруту по умолчанию и переключается вместе с ним при смене WAN или VPN, а выбранный интерфейс закрепляет аплинк. Само TUN-устройство в списке не предлагаетсяАвто (следовать маршруту по умолчанию)
Шлюз аплинкаqueue.tun.out_gateway. Шлюз закреплённого аплинка; пока поле пусто, шлюз берётся из текущего маршрута по умолчанию. Неактивно, пока выбран аплинк Авто (следовать маршруту по умолчанию), при котором шлюз определяется из маршрута по умолчаниюПусто
Адрес TUNqueue.tun.address. Адрес и префикс TUN-устройства. Не должен пересекаться с подсетями LAN или VPN10.255.0.1/30
Имя устройства TUNqueue.tun.device_name. Имя виртуального интерфейса, который создаёт b4. Движок не запускается, если имя совпадает с аплинк-интерфейсом или принадлежит существующему интерфейсу, который не является TUN-устройствомb4tun0

Интерфейсы захвата​

Интерфейсы захвата (queue.interfaces) видны в режиме NFQUEUE и определяют, какие пакеты движок вообще разбирает. Каждый интерфейс показан тегом, выбранный тег закрашен. Пустой выбор, значение по умолчанию, означает все интерфейсы. Рекомендуется оставить список пустым.

Это фильтр, а не список интерфейсов, к которым b4 подключается, и направление он по имени не выбирает. Правила захвата b4 стоят в хуках postrouting и output, где ядро уже решило, куда пойдёт пакет, и для транзитного трафика здесь сравнивается интерфейс, через который пакет уходит. Пока включена Фильтрация устройств и в ней выбраны устройства из таблицы ARP, место postrouting занимает хук forward, где интерфейс, через который пакет уходит, тоже уже известен. Только обратное направление и DNS, захваченные в prerouting, сопоставляются по входящему интерфейсу.

Интерфейс, через который пакет уходит, берётся из таблицы маршрутизации, и другой сервис может его поменять, не трогая этот список. VPN-клиент или прозрачный прокси, сдвинувший маршрут по умолчанию, уводит все пакеты на другой интерфейс, и сделанный до этого выбор перестаёт совпадать.

warning

Пока выбор ни с чем не совпадает, b4 ничего не разбирает: пакеты по-прежнему попадают к нему в очередь, с тем же расходом, и каждый принимается без изменений. Ни один сет не применяется, ни одна стратегия не работает. Когда исходящий трафик уходит через интерфейс вне выбора, карточка называет этот интерфейс, а если часть трафика уходит и через выбранные интерфейсы, ещё и долю трафика, которую b4 не разбирает. Счётчики по интерфейсам, на которых основано предупреждение, есть в отчёте диагностики как packets_leaving и packets_arriving.

к сведению

Раздел Какой интерфейс за что отвечает сравнивает Интерфейсы захвата с полями сета Исходные интерфейсы и Выходной интерфейс.

Если движок не запустился​

b4 запускает движок пакетов раньше веб-интерфейса. Если движок не запустился, b4 удаляет уже установленные правила и продолжает работать без него:

  • трафик проходит через роутер, и b4 его не затрагивает;
  • веб-интерфейс, SOCKS5-прокси и MTProto-прокси продолжают работать, как и правила их переключателей Доступ из интернета;
  • остальные правила файрвола, сеты маршрутизации и watchdog остаются выключенными.

Причина пишется в лог на уровне ERROR. Дашборд показывает её вместе с кнопками, которые переключают b4 на другой движок, перезапускают b4 или открывают эту подвкладку, а карточка Движок пакетов - под полем Режим захвата. Например, на ядре без модулей очереди iptables отвергает цель NFQUEUE, а TUN-движок с автоматическим аплинком не находит маршрута по умолчанию, пока WAN или VPN ещё не поднялись.

b4 повторяет запуск сам, перезапускаясь на месте, до трёх раз:

  • через 15 секунд после первой неудачи;
  • через 30 секунд после второй;
  • через 60 секунд после третьей.

Причину, которая устраняется сама, например WAN-подключение, поднявшееся позже b4, подхватывает одна из этих попыток. После третьей неудачной попытки b4 остаётся в этом состоянии до следующего перезапуска. Перезапуск из веб-интерфейса или менеджером сервисов начинает отсчёт заново.

Если веб-сервер выключен (порт 0), b4 вместо этого завершается с ошибкой.

Обнаружение блокировки по IP​

Карточка содержит единственную глобальную настройку обнаружения блокировки по IP. Само обнаружение включается в каждом сете отдельно, в блоке Обнаружение блокировки по IP на вкладке сета TCP, Основные.

ПолеОписаниеПо умолчанию
Интервал перепроверки (секунды)system.ip_health.retest_interval_sec, 30-3600. Сколько адрес, который обнаружение блокировки по IP отметило как недоступный, остаётся отмеченным до повторной проверки. Вердикт общий для всех сетов, и восстановление после снятия блокировки может занять примерно этот интервал. С тем же интервалом проверяется доступность закреплённых DNS-адресов300
к сведению

Как закреплённые адреса проверяются с этим интервалом, описано в разделе DNS, Закреплённые адреса.

IPv4 / IPv6​

ПолеОписаниеПо умолчанию
Поддержка IPv4queue.ipv4. Обработка IPv4-трафикаВкл
Поддержка IPv6queue.ipv6. Обработка IPv6: пакетов, DNS-ответов и правил файрволаВыкл
Форсировать IPv4 для совпавших доменовsystem.dns.keep_ipv6_answers с обратным значением: включённый переключатель означает false. Пока поддержка IPv6 выключена, вырезает IPv6-адреса из DNS-ответов для доменов, совпавших с сетом, и не трогает остальные имена. Неактивен, пока поддержка IPv6 включенаВкл

Эти переключатели определяют, какие семейства адресов обрабатывает b4. Они не включают и не выключают IPv6 на роутере и не мешают сети им пользоваться.

Что означает выключенная поддержка IPv6

При выключенной поддержке b4 не создаёт IPv6-правил файрвола и не читает IPv6-пакеты. Сайт, на который нацелен сет и который отвечает ещё и по IPv6, клиент открывает по IPv6 в обход сета целиком: без стратегий обхода, без маршрутизации, без блокировки. Пока у хоста есть рабочий глобальный IPv6-адрес, а эта настройка выключена, b4 пишет предупреждение в лог, а карточка показывает предупреждение до его закрытия.

Форсировать IPv4 для совпавших доменов сужает эту брешь для клиентов, которые резолвят через роутер: их ответы для совпавших доменов содержат только IPv4-адреса, и такие клиенты остаются на IPv4-пути, который защищает b4. См. DNS, Откат на IPv4.

Требуется перезапуск

Сохранение изменения переключателя Поддержка IPv4 или Поддержка IPv6 перестраивает правила файрвола всех сетов маршрутизации, а с NFQUEUE ещё и правила захвата. Очередь пакетов привязывается к семействам адресов при старте, и в полном объёме изменение вступает в силу после перезапуска сервиса.

Очередь и обработка пакетов​

ПолеОписаниеПо умолчанию
Начальный номер очередиqueue.start_num, 0-65535. Первый номер NFQUEUE. С NFQUEUE b4 читает по одной очереди на рабочий поток, с номерами подряд начиная с этого значения, при значениях по умолчанию 537-540. Другое значение нужно, только если те же номера очередей использует другая программа537
Метка пакетаqueue.mark, в десятичном виде; 0 означает значение по умолчанию. Метка очереди: b4 ставит её на фейки, сегменты после разделения и пакеты, которые отправляет обратно, и на DNS-запросы, которые отправляет за клиентов и для своих сетов, а свои пакеты с ней пропускает через обработку пакетов без изменений. Метка не покидает хост, значение в самом пакете записывает DSCP. Значение, которое пересекается с метками, используемыми b4 для других целей, отклоняется при сохранении. См. Метки пакетов32768
Рабочие потокиqueue.threads, 1-16. Сколько рабочих потоков обрабатывают пакеты параллельно; с NFQUEUE каждый читает свою очередь4
Лимит TCP пакетов соединенияqueue.tcp_conn_bytes_limit, не больше 100. Сколько пакетов в начале каждого TCP-соединения попадает в очередь b4. Ползунок начинается с 1, но значение меньше 19 при сохранении конфигурации поднимается до 1919
Лимит UDP пакетов соединенияqueue.udp_conn_bytes_limit, не больше 30. То же для UDP; значение меньше 8 при сохранении поднимается до 88
Лимиты пакетов

Эти лимиты - глобальный потолок. В каждом сете можно задать свой лимит, но не выше глобального: большее значение в сете при сохранении снижается до глобального. Чем выше лимит, тем больше пакетов каждого соединения попадает в очередь b4, и на обработку каждого из них уходит время.

Устройства​

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

Подвкладка «Устройства»

ПолеОписаниеПо умолчанию
Включить фильтрацию устройствqueue.devices.enabled. Включает отбор по устройствамВыкл
Исключить выбранные устройства (чёрный список)queue.devices.wisb. Превращает белый список в чёрный. Доступно, пока фильтрация включенаВыкл
Определение производителяqueue.devices.vendor_lookup. Скачивает список OUI от IEEE (около 6 МБ), чтобы определять производителя устройства по MAC-адресу. b4 хранит список в файле oui.txt рядом с файлом конфигурации, скачивает свежую копию, если загружаемый файл старше 30 дней, и удаляет его при выключении переключателя. Локально администрируемый MAC-адрес, например случайный, отображается как Private при любом положении переключателяВыкл
Режимы фильтрации
  • Белый список (переключатель выключен, по умолчанию): обход DPI работает только для выбранных устройств.
  • Чёрный список (переключатель включён): выбранные устройства исключаются из обхода DPI.

Устройства из таблицы ARP сопоставляются по MAC-адресу, и для обхода DPI выбор работает только по MAC-адресам. Если выбраны только устройства, добавленные вручную, или не выбрано ни одного устройства, обход DPI действует для всех устройств.

Сеты маршрутизации всех режимов и Telegram через WebSocket применяют тот же выбор к трафику из сети, и там устройство, добавленное вручную, сопоставляется по IP-адресу.

Фильтр отбирает устройства в сети, и роутер к ним не относится. Соединения, которые роутер открывает сам, в том числе соединения SOCKS5-прокси для его клиентов, получают обход DPI в обоих режимах. Сеты блокировки, а для TCP также proxy-сеты и сеты «Telegram через WebSocket», действуют на них, если сет не ограничен исходными интерфейсами или включающим списком исходных устройств. Сеты в режиме интерфейса следуют своей настройке Трафик самого роутера.

Доступные устройства​

Пока фильтрация включена, карточка показывает устройства, известные b4, а рядом с заголовком - их источник:

  • arp: таблица ARP (/proc/net/arp);
  • arp+manual: таблица ARP и устройства, добавленные вручную;
  • manual: только устройства, добавленные вручную.

b4 читает таблицу ARP каждые 30 секунд, а кнопка обновления (Обновить устройства) загружает текущий список. Если нет ни таблицы ARP, ни устройств, добавленных вручную, вместо таблицы карточка показывает Таблица ARP недоступна. Обнаружение устройств невозможно.

СтолбецОписание
ЧекбоксВыбирает устройство. Чекбокс в заголовке выбирает все устройства в списке
MAC адресMAC-адрес или по IP для устройства, добавленного вручную
IPТекущий IP-адрес, с пометкой вручную у устройства, добавленного вручную, и не в сети у устройства, которому задано имя и которого сейчас нет в таблице ARP
ИмяИмя, заданное значком редактирования, иначе производитель, иначе Неизвестно
MSSMSS clamping для устройства, 10-1460; пусто - выключено

Поле Фильтр над таблицей сужает список по MAC-адресу, IP или имени.

Значение в столбце MSS ограничивает MSS TCP-соединений этого устройства на порт 443, например телевизора с YouTube. Оно действует независимо от того, включена ли фильтрация устройств, а сам столбец виден, только пока она включена. С iptables устройство, сопоставленное по MAC-адресу, распознаётся только в пакетах, которые оно отправляет; пока Глобальный MSS Clamping выключен, b4 ещё и ставит наименьшее из таких значений на каждый SYN-ACK с порта 443, который пересылает, к какому бы устройству он ни шёл. Устройство, добавленное вручную, сопоставляется по IP-адресу в обоих направлениях.

Ручные устройства​

Группа, которая видна, пока фильтрация включена, добавляет устройства, которых нет в таблице ARP, например устройства за другим роутером, по полю IP адрес, IPv4 или IPv6, и необязательному полю Имя. Добавленные устройства перечислены под полями, у каждого есть значок удаления.

У такого устройства нет MAC-адреса в сети, и оно сопоставляется по введённому для него IP-адресу: в выборе, который применяется к сетам маршрутизации, в сете, ограниченном исходными устройствами, и в MSS clamping для устройства. Ему нужен фиксированный или зарезервированный адрес, а если промежуточный роутер подменяет адрес источника его трафика до того, как трафик доходит до b4, сопоставить устройство не получится вовсе. В конфигурации у него хранится MAC-адрес-заглушка: 02:B4: и последние четыре байта его IP-адреса. Ни одно правило файрвола эту заглушку не использует.

Файрвол​

Подвкладка содержит правила, которые b4 ставит вокруг движка пакетов: слева Правила файрвола и Глобальный MSS Clamping, справа NAT Masquerade и DSCP.

Подвкладка «Файрвол»

Правила файрвола​

ПолеОписаниеПо умолчанию
Пропустить настройку IPTables/NFTablessystem.tables.skip_setup. С NFQUEUE b4 не ставит правил захвата, и пакеты попадают в очередь только по правилам, добавленным вручную; TUN-движок свои правила захвата ставит по-прежнему. NAT Masquerade, MSS clamping, DSCP, перехват DNS поверх TCP и Доступ из интернета не применяются. Сохранение настроек при включённом переключателе всё же ставит правила сетов маршрутизации, и они остаются до следующего перезапускаВыкл
Движок файрволаsystem.tables.engine. Backend для правил b4, см. таблицу нижеАвтоопределение
Интервал мониторинга файрвола (секунды)system.tables.monitor_interval, 0-120. Как часто b4 проверяет установленные им правила и возвращает те, что удалил файрвол роутера. Новый интервал действует после перезапуска. Неактивно, пока включено Пропустить настройку IPTables/NFTables10
Движок файрволаОписание
Автоопределениеnftables, если бинарник nft может создать таблицу. Иначе iptables, а если iptables - вариант nf_tables и установлен iptables-legacy, то iptables-legacy
nftablesnftables
iptablesiptables
iptables-legacyБинарники iptables-legacy
Интервал мониторинга

С движком NFQUEUE значение 0 полностью отключает мониторинг правил, и карточка показывает предупреждение. Правила, которые удалила внешняя программа или скрипт, не восстанавливаются.

Правила переключателей «Доступ из интернета»

Переключатели Доступ из интернета у веб-сервера, SOCKS5-прокси и слушателей на вкладке Telegram добавляют разрешающие правила в собственные цепочки input хоста, отдельно от правил движка пакетов. Интервал мониторинга задаёт и то, как часто b4 проверяет их и возвращает удалённые перезагрузкой файрвола, при любом движке пакетов; при значении 0 эту проверку запускает только SIGUSR1. Пропустить настройку IPTables/NFTables не даёт b4 их добавлять. См. Доступ из интернета.

В режиме TUN на карточке остаётся только Интервал мониторинга файрвола (секунды), а Пропустить настройку IPTables/NFTables появляется там, только если подвкладка открылась с включённым переключателем. С этим интервалом TUN-движок проверяет свою цепочку захвата B4_TUN и переходы в неё, а монитор файрвола - правила маскарада, MSS clamp, DSCP и сетов маршрутизации. Каждая из проверок возвращает то, что удалил собственный файрвол роутера, например когда роутер перезапускает файрвол после изменения проброса портов. В этом режиме интервал не меньше 10 секунд, и значение 0 ни одну из проверок не отключает. При включённом Пропустить настройку IPTables/NFTables проверяются только правила захвата. SIGUSR1 запускает проверки, не дожидаясь интервала.

Восстановления правил в окне «Диагностика системы»

Когда TUN захватывает трафик по портам (строка Захват показывает ports), окно Диагностика системы в строке Правила захвата сравнивает число правил в цепочке захвата с числом, установленным b4. После первого восстановления там же появляются строки Правила захвата восстановлены и, в любом режиме движка, Правила восстановлены монитором: сколько раз восстанавливались правила захвата и сколько раз монитор файрвола восстанавливал свои правила, вместе со временем последнего восстановления. Растущий счётчик указывает на другой сервис на роутере, который переписывает файрвол.

Глобальный MSS Clamping​

Глобальный MSS Clamping задаёт параметр TCP Maximum Segment Size в пакетах SYN и SYN-ACK каждого TCP-соединения на порт 443, в том числе соединений самого роутера. Обе стороны после этого отправляют сегменты не больше заданного значения, и ClientHello клиента уходит несколькими небольшими сегментами.

ПолеОписаниеПо умолчанию
Включить глобальный MSS Clampingqueue.mss_clamp.enabledВыкл
Размер MSSqueue.mss_clamp.size, 10-1460 байт. Виден, пока переключатель включён. Чем меньше значение, тем меньше сегменты88
Где можно задать MSS

От самого широкого к самому узкому:

  • Глобально, здесь: каждое TCP-соединение на порт 443.
  • Для устройства, в столбце MSS таблицы Доступные устройства: соединения этого устройства.
  • Для сета, на вкладке сета TCP, Основные: адреса или устройства, на которые нацелен сет.

Для покрываемых им соединений значение сета имеет приоритет над значением устройства, а значение устройства - над глобальным.

NAT Masquerade​

Маскарад заменяет адрес источника пересылаемых пакетов адресом интерфейса, через который они уходят. Он нужен в контейнерах и на шлюзах, где b4 пересылает трафик.

ПолеОписаниеПо умолчанию
Включить NAT Masqueradesystem.tables.masquerade.enabled. Неактивно, пока включено Пропустить настройку IPTables/NFTablesВыкл
Теги интерфейсовsystem.tables.masquerade.interfaces. Видны, пока маскарад включён. Ограничивают подмену этими исходящими интерфейсами, обычно аплинками в интернет, и оставляют остальные, например LAN, как есть. Если ничего не выбрано - все интерфейсыНе выбраны

С iptables правила лежат в цепочке B4_MASQ таблицы nat, переход в неё стоит в конце POSTROUTING. С nftables они лежат в таблице ip b4_nat. Маскарад работает для IPv4, а для IPv6 - только с iptables и движком NFQUEUE, пока включена Поддержка IPv6. Пакеты, которые b4 отправляет клиентам в LAN, сохраняют свой адрес источника.

В режиме TUN маскарад не трогает TUN-устройство: адрес источника у захваченных пакетов TUN-движок сам заменяет на адрес аплинка и держит это правило выше любого правила маскарада без указанного выходного интерфейса. Если TUN захватывает только трафик самого устройства (см. TUN без таблицы raw или цели CT), вместо этого правила стоит исключение из NAT, -o <устройство> -j ACCEPT, и адрес источника не меняется.

DSCP​

ПолеОписаниеПо умолчанию
Задать DSCPsystem.tables.dscp.enabled. Записывает значение DSCP в пакеты, которые отправляет этот хост. Неактивно, пока включено Пропустить настройку IPTables/NFTablesВыкл
Значение DSCPsystem.tables.dscp.value, 0-63. Видно, пока Задать DSCP включено. При включении переключателя со значением 0 подставляется 70
Теги интерфейсовsystem.tables.dscp.interfaces. Видны, пока Задать DSCP включено. Выходные интерфейсы, пакеты которых получают значение; если ничего не выбрано - все интерфейсы, кроме loopback. Сохранённый интерфейс, которого больше нет, показан красным тегом с пометкой недоступенНе выбраны

DSCP - это старшие шесть бит байта ToS в IPv4 и байта Traffic Class в IPv6. Когда Задать DSCP включено, b4 записывает заданное значение в это поле каждого пакета, который отправляет хост, и роутер перед b4 может отличить трафик b4 по полю в самом пакете. Внутренние метки b4, в том числе метка из поля Метка пакета, для этого не подходят: это служебные данные пакета в ядре этого хоста, в сеть они не попадают.

Значение записывается в:

  • трафик, который хост пересылает;
  • собственные соединения b4;
  • фейки, фрагменты и сегменты, которые b4 отправляет для обхода DPI; у них то же значение, что у настоящих пакетов того же соединения.

Оно не записывается в трафик loopback, в пакеты, которые b4 сам отправляет клиентам в LAN, например ответы DNS и сбросы соединений, и в ответы внутри соединений, открытых другими хостами, например в ответы веб-интерфейса или ответы серверов, которые b4 после маскарада передаёт клиенту в LAN. Два бита ECN в поле сохраняются. Значение получают и IPv4, и IPv6, независимо от переключателей Поддержка IPv4 и Поддержка IPv6. Если выбраны интерфейсы, значение получают только пакеты, уходящие через них.

С iptables правило лежит в собственной цепочке B4_DSCP таблицы mangle, переход в неё стоит в начале POSTROUTING и держится выше перехода захвата b4: пакет, который разбирает b4, покидает mangle POSTROUTING на этом переходе, и правило ниже его не видит. Цели DSCP нужен модуль ядра xt_DSCP, на OpenWrt это пакеты kmod-ipt-ipopt и iptables-mod-ipopt. С nftables правило лежит в собственной таблице inet b4_dscp и дополнительных модулей не требует. С iptables, если ядро отклоняет правило для одного семейства адресов, b4 один раз пишет об этом в лог и оставляет это семейство без значения; с nftables отклонённая таблица оставляет без значения оба семейства. Монитор файрвола возвращает правило, если его удалила другая программа, в обоих режимах движка.

Значение записывается, только пока b4 работает со своими правилами файрвола. Пока b4 остановлен, перезапускается или работает без движка пакетов, хост по-прежнему пересылает пакеты, но без значения. Роутер, который по значению выводит трафик b4 из-под маршрута, ведущего на b4, всё это время возвращает такие пакеты обратно b4; проверка по интерфейсу или MAC-адресу от работы b4 не зависит.

Значение видит каждое устройство на пути, пока его кто-нибудь не перезапишет, и некоторые на него реагируют. Драйверы Wi-Fi в Linux и точки доступа, которые следуют тому же сопоставлению, выбирают по нему очередь WMM:

  • 7 из диапазона, который RFC 2474 оставляет для локального использования, остаётся в очереди best effort вместе с трафиком без DSCP;
  • 8 и ряд других значений меньше 24 уходят в фоновую очередь;
  • значения от 32 уходят в очереди видео и голоса.

0 обнуляет значение, которое было у пакетов.

Значение уходит в интернет

Роутер, который читает значение, должен сбрасывать поле на своём выходе в интернет. Без этого провайдер видит значение на каждом соединении, которое идёт через b4.

Flow offloading

Потоки, которые ядро или оборудование переводит в offload (flowtable nftables, FLOWOFFLOAD, аппаратный NAT производителя), после этого проходят мимо правила, и значение получают только их первые пакеты. Роутеру, который решает по первому пакету соединения и сохраняет решение для всего соединения, это не мешает; роутер, который читает значение в каждом пакете, видит остаток соединения без него.

RouterOS

RouterOS различает пакеты контейнера b4 или машины с b4 в собственной подсети по интерфейсу, через который они пришли, и маршрутизации через b4 там значение DSCP не нужно. См. Маршрутизация выбранных адресов через контейнер.

DNS​

Подвкладка содержит одну карточку, DNS, с тем, что действует на DNS во всех сетах: перехватывается ли DNS поверх TCP и на какой локальный порт он заворачивается (группа DNS поверх TCP), и таймауты (группа Таймауты (секунды)). Сам резолвер выбирается в сете.

к сведению

Поля, их значения по умолчанию и то, зачем перехватывать DNS поверх TCP, описаны в разделе DNS, Общие настройки DNS. Переключатель Форсировать IPv4 для совпавших доменов находится на карточке IPv4 / IPv6 подвкладки Движок пакетов.

SOCKS5​

Подвкладка содержит одну карточку, SOCKS5 Прокси, для встроенного SOCKS5-прокси b4. Соединения через него уходят с роутера, и b4 обрабатывает их с применением настроенных сетов. Имя хоста, совпавшее с сетом в режиме прокси, передаётся в upstream этого сета; см. Соединения через встроенный SOCKS5-прокси.

Подвкладка «SOCKS5»

ПолеОписаниеПо умолчанию
Включить SOCKS5 проксиsystem.socks5.enabled. Запускает SOCKS5-серверВыкл
Адрес привязкиsystem.socks5.bind_address. IP для прослушивания. 0.0.0.0 - все адреса, IPv4 и IPv6; 127.0.0.1 - только сам роутер0.0.0.0
Портsystem.socks5.port, 1-655351080
Доступ из интернетаsystem.socks5.expose. Добавляет правило файрвола, которое принимает TCP-соединения на порт прокси с любого адреса, по IPv4 и IPv6, возвращает его после перезагрузки файрвола и удаляет при выключении переключателя или остановке b4. Включается только при заданных имени пользователя и пароле или хотя бы одном разрешённом источнике, а пока веб-сервер включён, ещё и при заданных имени пользователя и пароле веб-интерфейса, до которого клиент SOCKS5 иначе дошёл бы через прокси. Не включается, пока включено Пропустить настройку IPTables/NFTables. UDP ASSOCIATE не покрывается: порт его релея выбирает система. См. Доступ из интернетаВыкл
Имя пользователяsystem.socks5.username. Логин для SOCKS5-аутентификации. Если оба поля пусты, аутентификации нетПусто
Парольsystem.socks5.password. Пароль для SOCKS5-аутентификацииПусто
Разрешённые источникиsystem.socks5.allowed_sources. IP-адреса и CIDR-диапазоны, которым разрешено открывать соединение; пустой список означает отсутствие ограничения. См. Разрешённые источникиПусто

Все поля, кроме Включить SOCKS5 прокси, неактивны, пока прокси не включён. Прокси держит не больше 1024 клиентских соединений одновременно и закрывает каждое соединение сверх этого числа. Если нет ни учётных данных, ни списка источников, карточка предупреждает, что любой клиент, который дотягивается до порта, может пропускать трафик через прокси.

Заполнено только одно поле учётных данных

Имя пользователя и пароль работают только в паре. Если заполнено ровно одно из двух полей, прокси отказывает всем клиентам, а не работает без аутентификации. Оба поля пусты - аутентификации нет, оба заполнены - аутентификация обязательна. Конфигурация, в которой задано только одно из них, отклоняется при сохранении.

к сведению

Ни одно поле SOCKS5 не требует перезапуска сервиса. Учётные данные и список источников применяются к работающему прокси. Изменение полей Включить SOCKS5 прокси, Адрес привязки и Порт, а также очистка имени пользователя перезапускают слушатель при сохранении, и открытые в этот момент сессии закрываются.

Разрешённые источники​

system.socks5.allowed_sources перечисляет адреса клиентов, которым разрешено открывать соединение с прокси. Пустой список, значение по умолчанию, означает отсутствие ограничения. Если список не пуст, у клиента, адрес которого не попадает ни в одну запись, TCP-соединение закрывается на этапе accept: до обмена первым байтом SOCKS5 и до того, как соединение займёт слот.

Записи добавляются в поле Добавить IP или CIDR или кнопкой Из устройств, которая предлагает известные b4 устройства с IPv4-адресом и добавляет адрес как запись /32. Список показан под заголовком Активные источники.

Запись - это либо отдельный IP-адрес, v4 или v6, который читается как /32 и /128, либо CIDR-диапазон. Хостовая часть не учитывается: 192.168.1.7/24 пропускает весь 192.168.1.0/24.

Список из 192.168.1.0/24 и 127.0.0.1/32 принимает клиентов из этой подсети LAN и с самого роутера, а соединения из любых других источников закрывает.

Сетевой фильтр, а не фактор аутентификации

Список источников - это контроль того же рода, что и правило файрвола: он определяет, какие адреса доходят до прокси, и ничего больше. Личность клиента он не устанавливает. Адрес источника можно подделать, DHCP-аренда переходит от одного устройства к другому, а запись для хоста, который сам является роутером, представляет все хосты за этим роутером. Клиента идентифицируют учётные данные.

Chrome и Chromium

Chrome и Chromium не поддерживают SOCKS5-аутентификацию по имени пользователя и паролю (crbug 40323993) и подключиться к прокси с аутентификацией не могут вообще. Список источников позволяет обслуживать эти браузеры без учётных данных и при этом не отвечать произвольным клиентам.

Учётные данные и список источников - независимые механизмы, которые действуют одновременно. Список не меняет то, какой метод аутентификации предлагает прокси, он решает только, дойдёт ли соединение до этапа аутентификации. Если настроено и то и другое, клиент должен и приходить с адреса из списка, и предъявить верные учётные данные.

Loopback не разрешается неявно. Клиенту, работающему на самом роутере, нужна явная запись 127.0.0.1/32, или ::1/128 для IPv6, иначе он получает отказ, как любой другой источник вне списка.

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

Порт остаётся доступным

Слушатель принимает соединение от источника вне списка и затем закрывает его, и порт по-прежнему отвечает на сканирование. Правил файрвола список тоже не добавляет: с адресом привязки 0.0.0.0 по умолчанию прокси слушает и на WAN-адресе, а дойдёт ли до него соединение снаружи, решают файрвол хоста и переключатель Доступ из интернета, правило которого принимает любой адрес источника. Привязка к адресу LAN убирает прокси из WAN.

Конфигурация не сохраняется, пока в списке есть:

  • запись, которая покрывает все адреса, 0.0.0.0/0 или ::/0;
  • запись, у которой адрес сети - неопределённый адрес, например 0.0.0.0, :: или 0.0.0.0/8;
  • IPv6-адрес с зоной, например fe80::1%eth0;
  • запись, которая не является ни IP-адресом, ни CIDR-диапазоном.