Как настроить два маршрута по умолчанию в Linux

TL; DR

Как настроить два маршрута по умолчанию в 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 )

5
задан 28 December 2016 в 19:31
3 ответа

Используя 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

Теперь у вас будет две таблицы маршрутизации с двумя шлюзами.

.
7
ответ дан 3 December 2019 в 01:06

Это явление называется unicast rpf (пересылка обратного пути) как стандартный, но обратный фильтр пути в Linux. Вы можете отключить это без каких-либо серьезных негативных последствий (если вы не провайдер .. и маршрутизатор).

echo 0 > /proc/sys/net/ipv4/conf/default/rp_filter

Тогда ваш пример должен работать так, как вы хотите.

3
ответ дан 3 December 2019 в 01:06

В случае, если ваше приложение привязано к 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

1
ответ дан 3 December 2019 в 01:06

Теги

Похожие вопросы