Выполнив обычную настройку только eth0, я вернулся и добавил конфигурацию для eth1. Только с eth0 вверх, таблица маршрутов была:
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
default via 192.168.0.97 dev eth0 metric 100
Но как только я поднял eth1, порядок операторов маршрута по умолчанию определил, какой интерфейс всегда использовался. Как показано ниже, он выбирает маршрут eth1 к шлюзу 192.168.1.65.
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
192.168.1.64/27 dev eth1 proto kernel scope link src 192.168.1.93
default via 192.168.1.65 dev eth1 metric 100
default via 192.168.0.97 dev eth0 metric 100
только один оператор шлюза
Первой проблемой может быть дополнительный маршрут по умолчанию через 192.168.1.65. Он появляется там, если определение eth1 в / etc / network / interfaces содержит инструкцию «gateway 192.168.1.65». Поэтому удалите все лишние операторы шлюза и сбросьте интерфейс:
# ifdown eth1
# ifup eth1
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
192.168.1.64/27 dev eth1 proto kernel scope link src 192.168.1.93
default via 192.168.0.97 dev eth0 metric 100
настроить новую таблицу маршрутизации
Создайте новую отдельную таблицу маршрутизации, содержащую маршрут по умолчанию, подходящий для всего трафика, вытекающего из eth1. Номер таблицы здесь не важен; 101 просто не является основной таблицей маршрутизации. Сделайте это с помощью команды post-up в конфигурации eth1 в / etc / network / interfaces. Добавьте только одну публикацию на eth1; Не добавляйте его ни в один из подинтерфейсов eth1 :.
post-up ip route add default via 192.168.1.65 dev eth1 table 101
Отказов eth1. Основная таблица маршрутизации не изменяется, и таблица 101 будет содержать маршрут по умолчанию через 192.168.1.65, если eth1 работает.
# ifdown eth1
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
default via 192.168.0.97 dev eth0 metric 100
# ip route show table 101 (ie, table is empty, no output)
# ifup eth1
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
192.168.1.64/27 dev eth1 proto kernel scope link src 192.168.1.93
default via 192.168.0.97 dev eth0 metric 100
# ip route show table 101
default via 192.168.1.65 dev eth1
новое правило маршрутизации
Добавьте правило маршрутизации, чтобы использовать таблицу 101 для выбора маршрута по умолчанию для пакетов, которые должны выходить из eth1.
# ip rule add from 192.168.1.64/27 lookup 101
# ip rule show
0: from all lookup local
32765: from 192.168.1.64/27 lookup 101
32766: from all lookup main
32767: from all lookup default
Также добавьте правило в /etc/network/interfaces
файл:
post-up ip rule add from 192.168.1.64/27 lookup 101
Теперь обязательно добавьте очистку, чтобы удалить маршрут и правило, когда интерфейс выходит из строя:
post-down ip rule del from 192.168.1.64/27
post-down ip route del default via 192.168.1.65 table 101
[РЕДАКТИРОВАТЬ для Ubuntu 16.04+] Как указано здесь и из теста, который я сделал из этой справки, ip route2 изменил свою структуру команд. Для того, чтобы сделать работу, вам придется немного адаптировать, чтобы сделать в порядке, как man ip
очки .
up ip route add default table 101 dev eth1 via 192.168.1.65
up ip rule add from 192.168.1.64/27 lookup 101
down ip rule del from 192.168.1.64/27
down ip route del default table 101 via 192.168.1.65
В противном случае вы получите команду ifdown-ifup с сообщением об ошибке @ifdown (стандартное сообщение о том, что периферийные устройства настроены неправильно) и @ifup при отсутствии маршрута в таблице 101.
/etc/network/interfaces