У меня есть сервер 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
Обратите внимание на последнее предложение, которое объясняет ваши попытки:
Так что это должно работать:
Теперь max (conf / {all, ens20.4} / rp_filter == 0: нет проверки исходного кода. Просто дважды проверьте, что другие интерфейсы все еще защищены.
Вы также можете проверить «свободный» rpf со значением 2. В случае, если пакет обычно маршрутизируется другим интерфейсом, это было бы лучше, чем отсутствие проверки.
источник