У меня есть система с несколькими интерфейсами. Я изолировал все эти интерфейсы друг от друга, используя несколько параметров sysctl , а также таблицы и правила маршрутизации.

Каждый интерфейс имеет свою собственную таблицу маршрутизации, определяющую маршрут по умолчанию.

Каждая таблица маршрутизации имеет набор из 4 правил, которые определяют, какие пакеты должны идти в какую таблицу.

Для упрощения, скажем, у меня есть eth0 (192.168.1.1) и eth1 (192.168.1.2) .

из 192.168.1.1 таблицы eth0

до 192.168.1.1 таблица eth0

iif eth0 table eth0

oif eth0 table eth0

Для eth2 это то же самое.

Опции sysctl :

net.ipv4.conf.all.arp_filter = 1
net.ipv4.conf.all.arp_ignore = 2
net.ipv4.conf.all.arp_announce = 1
net.ipv4.conf.all.rp_filter = 1

Это отлично работает для 99% моих предполагаемых вариантов использования, но один не помогает. Если пакет генерируется из сокета, который не связан, как, например, ответ на UDP-клиент с помощью "sendto", вызов завершается с "Network Unreachable". Если определенный IP-адрес привязан до вызова sendto, вызов завершается, как и ожидалось.

Если не считать настройки универсального маршрута по умолчанию для подобных ситуаций, можно ли что-нибудь сделать с использованием политики маршрутизации (например, iptables, ip rule) для решения этой проблемы?

Спасибо

0