Зробивши нормальну конфігурацію просто eth0, я повернувся і додав config для 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 має вираз "шлюз 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 / інтерфейсах. Додати лише одну публікацію на eth1; Не додайте його до жодного з інтерфейсів eth1:.
post-up ip route add default via 192.168.1.65 dev eth1 table 101
Відмов ети1. Основна таблиця маршрутизації залишається незмінною, і таблиця 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
[EDIT for 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.