Как настроить два маршрута по умолчанию в Linux (соответствующих двум интерфейсам), чтобы принимался входящий трафик с обоих интерфейсов.
У меня есть хост с двумя сетевыми адаптерами eth0
и eth1
. Он подключен к двум сетям, например:
Dev: eth0
, IP: 1.1.1.4
, сетевая маска: 255.255.255.0
, шлюз: 1.1.1.1
Dev: eth1
, IP: 2.2.2. 4
, маска сети: 255.255.255.0
, шлюз: 2.2.2.1
(Обе сети подключены к Интернету.)
Маршруты: ( ip route show
):
default via 1.1.1.1 dev eth0 metric 1
default via 2.2.2.1 dev eth1 metric 2
1.1.1.0/24 dev eth0 src 1.1.1.4
2.2.2.0/24 dev eth1 src 2.2.2.4
(Более низкий показатель означает более высокий приоритет.)
Теперь, когда кто-то отправляет эхо-запрос на 2.2.2.4
с некоторого внешнего хоста (скажем, 4.4.4.4
), нет ответа.
Вывод tcpdump -i eth1
на моем хосте:
22:41:27.431539 IP 4.4.4.4 > 2.2.2.4: ICMP echo request, id 8625, seq 4, length 64
22:41:28.439492 IP 4.4.4.4 > 2.2.2.4: ICMP echo request, id 8625, seq 5, length 64
22:41:29.447666 IP 4.4.4.4 > 2.2.2.4: ICMP echo request, id 8625, seq 6, length 64
22:41:30.455528 IP 4.4.4.4 > 2.2.2.4: ICMP echo request, id 8625, seq 7, length 64
После некоторого исследования выяснилось, что когда сетевой стек linux получает пакет от 4.4. 4.4
, он проверяет свою таблицу маршрутизации, чтобы узнать, какой интерфейс должен был использоваться для 4.4.4.4
(это eth0
в таблице маршрутизации). Теперь, поскольку пакет пришел с интерфейса eth1
, linux просто отбрасывает его (эта политика, вероятно, предназначена для предотвращения спуфинга IP).
Я хочу следующее:
Исходящий трафик (локально исходящий) должен использовать интерфейс eth0
по умолчанию.
Входящий. трафик должен приниматься с обоих интерфейсов. (Так что 4.4.4.4
должен иметь возможность пинговать как 1.1.1.4
, так и 2.2.2.4
)
Используя iproute2 вы можете сделать нечто подобное:
echo "1 admin" >> /etc/iproute2/rt_tables
echo "2 users" >> /etc/iproute2/rt_tables
ip rule add from 192.168.122.40/32 dev eth0 table admin
ip rule add from 192.168.123.41/32 dev eth1 table users
ip route add default via 192.168.122.1 dev eth0 table admin
ip route add default via 192.168.123.1 dev eth1 table users
Теперь у вас будет две таблицы маршрутизации с двумя шлюзами.
.Это явление называется unicast rpf (пересылка обратного пути) как стандартный, но обратный фильтр пути в Linux. Вы можете отключить это без каких-либо серьезных негативных последствий (если вы не провайдер .. и маршрутизатор).
echo 0 > /proc/sys/net/ipv4/conf/default/rp_filter
Тогда ваш пример должен работать так, как вы хотите.
В случае, если ваше приложение привязано к 0.0.0.0
также необходимо добавить такие правила, как:
ip rule add from 0.0.0.0/32 to 192.168.122.0/24 dev eth0 table admin
ip rule add from 0.0.0.0/32 to 192.168. 123.0 / 24 dev eth1 table users