linux:routing:multiple_gw1

Это старая версия документа!


Несколько шлюзов и несколько выходов в интернет

Один и тот же ПК или виртуалка, или роутер например на OpenWRT, при наличии нескольких сетевых интерфейсов, либо с настроенными VLAN с разными тегами 802.1Q например,
может работать как два и более шлюзов для нескольких сетей.

Допустим в вашей организации несколько провайдеров и несколько сетей. Например бухгалтерия 192.168.8.0/24, а хоз. часть 192.168.9.0/24.

  • ens20 шлюз 10.10.8.1 - Провайдер 1
  • ens21 шлюз 10.10.9.1 - Провайдер 2
  • ens22 192.168.8.0/24 - Сеть бухгалтерии
  • ens23 192.168.9.0/24 - Сеть хоз. часть
  • ens20 10.10.8.26/24 - адрес интерфейса, провайдер 1
  • ens21 10.10.9.26/24 - адрес интерфейса, провайдер 2
  • ens22 192.168.8.26/24 - адрес интерфейса, сеть бухгалтерии
  • ens23 192.168.9.26/24 - адрес интерфейса, сеть хоз. часть

Давайте добавим записи о новых таблицах, как в примере выше.

nano /etc/iproute2/rt_tables
...
100     inet1
101     inet2

Давайте назначим этим таблицам маршруты по умолчанию (default)

ip route add default via 10.10.8.1 table inet1
ip route add default via 10.10.9.1 table inet2

Можно проверить

ip route show table inet1
default via 10.10.8.1 dev ens20

и

ip route show table inet2
default via 10.10.9.1 dev ens21

В текущей задаче, есть одна особенность. Если мы вспомним, что у нас в таблице main указаны маршруты до внутренних сетей,
тогда получается что мы не можем указать сетям 192.168.8.0/24 и 192.168.9.0/24 маршруты по умолчанию выше таблицы main,
внутренние сети перестанут работать и вы потеряете доступ к серверу.

В этом случае, следует указать приоритет ниже 32767 и я предлагаю указать 35000 и 35001.

ip rule add from 192.168.8.0/24 iif ens22 table inet1 prio 35000
ip rule add from 192.168.9.0/24 iif ens23 table inet2 prio 35001
ip rule
0:      from all lookup local
32766:  from all lookup main
32767:  from all lookup default
35000:  from 192.168.8.0/24 iif ens22 lookup inet1
35001:  from 192.168.9.0/24 iif ens23 lookup inet2

Но и это ещё не всё, во время настройки сервера, вы наверняка указывали какой-то шлюз, что бы сам сервер имел доступ к интернету,
в моём случае, пусть будет 10.10.8.1.

ip route show table main
default via 10.10.8.1 dev ens20
10.10.8.0/24 dev ens20 proto kernel scope link src 10.10.8.26
10.10.9.0/24 dev ens21 proto kernel scope link src 10.10.9.26
192.168.8.0/24 dev ens22 proto kernel scope link src 192.168.8.26
192.168.9.0/24 dev ens23 proto kernel scope link src 192.168.9.26

Получается, что все участники сети, так или иначе попадают в default и правила которые мы добавили ниже с приоритетом 35000 и 35001, бесполезны.
В данной ситуации, мы просто удалим маршрут по умолчанию.

ip route del default via 10.10.8.1

Но и это ещё не всё, т.к. мы удалили маршрут по умолчанию, а правила с приоритетом 35000 и 35001 будут работать только для указанных сетей,
сам сервер потеряет доступ к интернету. Исправим это положение, одним правилом и тут вы должны сами определиться какой интернет сделать доступным для сервера,
я просто укажу inet1, с приоритетом 80000.

ip rule add from all iif lo lookup inet1 prio 80000

Готово, теперь

  • linux/routing/multiple_gw1.1706432084.txt.gz
  • Последнее изменение: 2024/01/28 15:54
  • Дмитрий