Vander
Команда форуму
- 10 Лис 2019
- 498
- 1,162
Описание проблемы
Вы встроили две или более сетевых карт в одну систему 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
Правила маршрутизации
Чтобы система знала, когда использовать нашу новую таблицу маршрутизации, необходимо настроить два правила.
Код:
ip rule add from 10.10.0.10/32 table rt2
ip rule add to 10.10.0.10/32 table 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