Какой интерфейс за что отвечает
Три настройки b4 принимают имя интерфейса. Они лежат в двух разных местах веб-интерфейса и фильтруют разное.
| Настройка | Где | Что фильтрует | Пусто означает |
|---|---|---|---|
| Сетевые интерфейсы | Настройки > Основные | какие пакеты разбирает движок | все интерфейсы |
| Исходные интерфейсы | Сеты > Маршрутизация | какой приходящий трафик попадает в правила сета | любой интерфейс |
| Выходной интерфейс | Сеты > Маршрутизация | куда уходит совпавший пакет | маршрутизация для сета выключена |
Первые две - фильтры, они сужают то, что делает b4. Трафик куда-то отправляет только третья.
Сетевые интерфейсы
Настройки > Основные. Каждый пакет, который файрвол отдаёт b4, движок сначала сверяет с
этим списком.
Правила захвата b4 стоят в хуках postrouting и output, где ядро уже выбрало, куда пойдёт
пакет. Для транзитного трафика здесь сравнивается интерфейс, через который пакет уходит.
Трафик, захваченный в prerouting - обратное направление и DNS, - сопоставляется по
интерфейсу, на который он пришёл.
Интерфейс, через который пакет уходит, берётся из таблицы маршрутизации, поэтому его может поменять другой сервис, не трогая этот список. VPN-клиент, policy-маршрут или прозрачный прокси, сдвинувший маршрут по умолчанию, уводит трафик на другой интерфейс, и выбор, сделанный до этого, перестаёт совпадать.
Пока выбор ни с чем не совпадает, b4 ничего не разбирает. Пакеты по-прежнему попадают к нему в очередь, и каждый принимается без изменений. Ни один сет не применяется, ни одна стратегия не работает.
b4 считает переданные ему пакеты по интерфейсам. У настройки появляется предупреждение, когда интерфейс вне выбранного списка везёт исходящий трафик, и называет его. Пустой выбор не предупреждает никогда.
Те же счётчики есть в отчёте диагностики как packets_leaving и packets_arriving по
каждому интерфейсу. Исходящий трафик этот фильтр отсекает именно по packets_leaving.
Рекомендуется оставить список пустым. Фильтр отрабатывает в пользовательском пространстве, уже после того как пакет скопирован из ядра, поэтому короткий список экономит разбор, но не захват.
Исходные интерфейсы
Сеты > Маршрутизация, для каждого сета. Каждое имя превращается в квалификатор iifname
(-i на iptables) в правилах маркировки, TPROXY и блокировки сета, то есть выбирает, какой
приходящий трафик в эти правила попадёт.
Сопоставление идёт по приходу, отсюда два следствия:
- WAN-интерфейс здесь никогда не совпадёт с трафиком из локальной сети. Трафик клиента LAN
приходит на мост, на большинстве домашних роутеров это
br0, а не на аплинк. - Трафик, который роутер порождает сам, не приходит ни с какого интерфейса, поэтому сет с исходным интерфейсом не маршрутизирует, не проксирует и не блокирует собственные соединения роутера. См. Трафик самого роутера.
Список исходных устройств в Сеты > Цели действует так же, если это не исключающий список.
Рекомендуется оставить список пустым; имя здесь нужно сету, который покрывает один сегмент. Пусто означает, что правилам сета предлагается каждый пакет, а дальше решают цели сета.
Выходной интерфейс
Сеты > Маршрутизация, для каждого сета. Совпавшие адреса помечаются, а ip rule
отправляет эту метку в отдельную таблицу маршрутизации, где маршрут по умолчанию ведёт на
этот интерфейс. См. Маршрутизация.
Как найти ошибочную настройку
| Симптом | Что проверить |
|---|---|
В Соединениях пусто или есть только соединения самого роутера | Сетевые интерфейсы |
| Сеты применяются к роутеру, но никогда к клиенту | Сетевые интерфейсы, затем исходные интерфейсы |
| У правила маркировки сета нулевые счётчики пакетов в файрволе | Исходные интерфейсы |
| Трафик помечается, но уходит не туда | Выходной интерфейс и любой другой сервис с записями ip rule |
На первые два отвечает страница Соединения. Если у каждой строки источник - собственный
адрес роутера, движок видит только тот трафик, который роутер порождает сам.
Когда policy-маршрутизацией занимается ещё один сервис, сет может правильно помечать трафик и всё равно не попадать в свою таблицу. Этот случай разобран в b4 вместе с Xray или XrayUI.