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

Какой интерфейс за что отвечает

Три настройки b4 принимают имя интерфейса. Они лежат в двух разных местах веб-интерфейса и фильтруют разное.

НастройкаГдеЧто фильтруетПусто означает
Сетевые интерфейсыНастройки > Основныекакие пакеты разбирает движоквсе интерфейсы
Исходные интерфейсыСеты > Маршрутизациякакой приходящий трафик попадает в правила сеталюбой интерфейс
Выходной интерфейсСеты > Маршрутизациякуда уходит совпавший пакетмаршрутизация для сета выключена

Первые две - фильтры, они сужают то, что делает b4. Трафик куда-то отправляет только третья.

Сетевые интерфейсы

Настройки > Основные. Каждый пакет, который файрвол отдаёт b4, движок сначала сверяет с этим списком.

Правила захвата b4 стоят в хуках postrouting и output, где ядро уже выбрало, куда пойдёт пакет. Для транзитного трафика здесь сравнивается интерфейс, через который пакет уходит. Трафик, захваченный в prerouting - обратное направление и DNS, - сопоставляется по интерфейсу, на который он пришёл.

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

warning

Пока выбор ни с чем не совпадает, b4 ничего не разбирает. Пакеты по-прежнему попадают к нему в очередь, и каждый принимается без изменений. Ни один сет не применяется, ни одна стратегия не работает.

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

Те же счётчики есть в отчёте диагностики как packets_leaving и packets_arriving по каждому интерфейсу. Исходящий трафик этот фильтр отсекает именно по packets_leaving.

подсказка

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

Исходные интерфейсы

Сеты > Маршрутизация, для каждого сета. Каждое имя превращается в квалификатор iifname (-i на iptables) в правилах маркировки, TPROXY и блокировки сета, то есть выбирает, какой приходящий трафик в эти правила попадёт.

Сопоставление идёт по приходу, отсюда два следствия:

  • WAN-интерфейс здесь никогда не совпадёт с трафиком из локальной сети. Трафик клиента LAN приходит на мост, на большинстве домашних роутеров это br0, а не на аплинк.
  • Трафик, который роутер порождает сам, не приходит ни с какого интерфейса, поэтому сет с исходным интерфейсом не маршрутизирует, не проксирует и не блокирует собственные соединения роутера. См. Трафик самого роутера.

Список исходных устройств в Сеты > Цели действует так же, если это не исключающий список.

подсказка

Рекомендуется оставить список пустым; имя здесь нужно сету, который покрывает один сегмент. Пусто означает, что правилам сета предлагается каждый пакет, а дальше решают цели сета.

Выходной интерфейс

Сеты > Маршрутизация, для каждого сета. Совпавшие адреса помечаются, а ip rule отправляет эту метку в отдельную таблицу маршрутизации, где маршрут по умолчанию ведёт на этот интерфейс. См. Маршрутизация.

Как найти ошибочную настройку

СимптомЧто проверить
В Соединениях пусто или есть только соединения самого роутераСетевые интерфейсы
Сеты применяются к роутеру, но никогда к клиентуСетевые интерфейсы, затем исходные интерфейсы
У правила маркировки сета нулевые счётчики пакетов в файрволеИсходные интерфейсы
Трафик помечается, но уходит не тудаВыходной интерфейс и любой другой сервис с записями ip rule

На первые два отвечает страница Соединения. Если у каждой строки источник - собственный адрес роутера, движок видит только тот трафик, который роутер порождает сам.

к сведению

Когда policy-маршрутизацией занимается ещё один сервис, сет может правильно помечать трафик и всё равно не попадать в свою таблицу. Этот случай разобран в b4 вместе с Xray или XrayUI.