Що нового?

Article Два шлюза по умолчанию в одной системе

Vander 0

Vander

Команда форуму
10 Лис 2019
498
1,162
wireless-tehnology.jpg

Описание проблемы

Вы встроили две или более сетевых карт в одну систему Linux, и каждая из этих карт имеет собственный шлюз по умолчанию. По умолчанию в системе может быть только один шлюз по умолчанию. Описанный случай приведет к асинхронной маршрутизации, при которой маршрутизатор будет отклонять пакеты соответствующим образом.

Решение

Программа iproute2, которая входит во все текущие дистрибутивы Linux и даже уже установлена, как правило, может быть использована для решения этой проблемы. Обычно в системе Linux есть только одна таблица маршрутизации, в которой только один шлюз по умолчанию может делать записи. С iproute2 у вас есть возможность, с одной стороны, настроить дополнительную таблицу маршрутизации, а с другой - разрешить использование этой таблицы системой на основе правил.

Исходное положение

Предположим, что у нас есть два интерфейса: eth0 и eth1. Следует использовать две сети: 192.168.0.0/24 и 10.10.0.0/24, при этом первый IP-адрес в каждой соответствующей сети должен быть шлюзом. В Debian начальная конфигурация будет выглядеть следующим образом. / и т.д. / сеть / интерфейсы:

Код:
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface

auto lo
iface lo inet loopback

# The primary network interface

allow-hotplug eth0
iface eth0 inet static
    address 192.168.0.10
    netmask 255.255.255.0
    gateway 192.168.0.1

# The secondary network interface
allow-hotplug eth1
iface eth1 inet static
    address 10.10.0.10
    netmask 255.255.255.0
Добавление второй таблицы маршрутизации

Чтобы добавить новую таблицу маршрутизации, необходимо отредактировать файл /etc/iproute2/rt_tables. Мы назовем таблицу маршрутизации «rt2» и установим для нее предпочтение 1. После этого именованный файл должен выглядеть следующим образом.

Код:
#
# reserved values
#
255     local
254     main
253     default
0       unspec
#
# local
#
#1      inr.ruhep
1 rt2
Настройка новой таблицы маршрутизации

С этого момента для достижения нашей цели необходимы четыре команды. Во-первых, необходимо заполнить новую таблицу маршрутизации, что делается с помощью следующей команды.

Код:
ip route add 10.10.0.0/24 dev eth1 src 10.10.0.10 table rt2
ip route add default via 10.10.0.1 dev eth1 table rt2
Первая команда говорит, что сеть 10.10.0.0/24 может быть достигнута через интерфейс eth1. Вторая команда устанавливает шлюз по умолчанию.

Правила маршрутизации

Чтобы система знала, когда использовать нашу новую таблицу маршрутизации, необходимо настроить два правила.

Код:
ip rule add from 10.10.0.10/32 table rt2
ip rule add to 10.10.0.10/32 table rt2
Эти правила говорят, что как трафик с IP-адреса, 10.10.0.10, так и трафик, направленный на этот IP-адрес или через него, должны использовать таблицу маршрутизации rt2.

Делаем конфигурацию постоянной


Команды ip rule и ip route станут недействительными после перезагрузки, по этой причине они должны стать частью сценария (например, /etc/rc.local), который будет выполняться после запуска сети после загрузки. Для Debian эту команду также можно записать непосредственно в файл /etc/network/interfaces, который будет выглядеть следующим образом.

Код:
iface eth1 inet static
    address 10.10.0.10
    netmask 255.255.255.0
    post-up ip route add 10.10.0.0/24 dev eth1 src 10.10.0.10 table rt2
    post-up ip route add default via 10.10.0.1 dev eth1 table rt2
    post-up ip rule add from 10.10.0.10/32 table rt2
    post-up ip rule add to 10.10.0.10/32 table rt2
Более двух сетевых карт или шлюзов

Если имеется более двух сетей, таблица маршрутизации может быть создана для каждой дополнительной сети аналогично приведенному выше примеру.

Тестирование конфигурации

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

Код:
ip route list table rt2
ip rule show
 
Угорі Унизу