У меня есть сервер Ubuntu 16.04, который действует как маршрутизатор с несколькими интерфейсами (VLAN). По умолчанию, rp_filter
(фильтрация обратного пути) включена для всех интерфейсов. Я хочу оставить это так, но сделать исключение только для одного интерфейса. (Пакеты из этого интерфейса должны иметь IP-адрес источника, который не соответствует какому-либо адресу назначения маршрутизации этого интерфейса.)
Допустим, у этого интерфейса есть имя ens20.4
, его vlan-raw-device - ens20
, а интерфейс назначения (для тестирования потока пакетов) называется ens20.2
(хотя он должен работать для любого интерфейса назначения).
Я попытался установить rp_filter
собственность для ens20.4
только безуспешно:
echo 0 > /proc/sys/net/ipv4/conf/ens20.4/rp_filter
Итак, в целях тестирования я также отключил rp_filter
для vlan-raw-device и интерфейса назначения тестирования:
echo 0 > /proc/sys/net/ipv4/conf/ens20/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/ens20.2/rp_filter
По-прежнему безуспешно, пакеты с «поддельным» исходным IP-адресом все равно отбрасываются. Только если я отключу rp_filter
для все интерфейсы, пакеты проходят:
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
Однако я по-прежнему хочу сохранить фильтрацию обратного пути для всех других интерфейсов - что мне не хватает?
Информация там: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/tree/Documentation/networking/ip-sysctl.txt?h=v4.9#n1090
Обратите внимание на последнее предложение, которое объясняет ваши попытки:
Максимальное значение из conf / {all, interface} / rp_filter используется при проверке источника на {interface}.
Итак, это должно работать:
for i in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo 1 > "$i"
done
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/ens20.4/rp_filter
Теперь max (conf / {all, ens20.4} / rp_filter == 0: нет проверки источника. Просто дважды проверьте, что другие интерфейсы по-прежнему защищены.
Вы также можете проверить "свободный" rpf со значением 2. Если пакет обычно должен маршрутизироваться другим интерфейсом, это лучше, чем отсутствие проверки.