Вчера столкнулся с небольшой проблемой — на машине с Win2k3 установлены 2 сетевых карты, 2 провайдера. Проблема оказалась следующая: подсети пересекаются (точнее — совпадают). Было решено использовать за основной шлюз 1го провайдера, а по внутрисетевым ресурсам гулять — через 2го. И всё бы ничего, но машина должна обслуживать входящие соединения с обоих интерфейсов. Но, благодаря статическим маршрутам, ответы на запросы из подсети 10.0.0.0/8, пришедшей со стороны первого провайдера уходили через канал второго провайдера, что было, мягко говоря, не тем, что нужно. Как решить эту проблему под линухом — я знал (и тоже поведаю в этой заметке). Немного погуглив был найден вариант решения (в msdn'e наткнулись на управления приоритетами соединений). Коллега (WAJIM, привет) подумал — и нашёл 2й вариант. Потом немного (совсем немного) подумал я — и по аналогии появился 2й вариант решения для линуха :)
Итого, под катом вас ожидает 4 варианта решения задачи маршрутизации по 2м провайдерам — 2 под виндовс и 2 под линукс.
Дано:
- 2 физических фаервола, по совместительству являющихся шлюзами (192.168.1.10 и 192.168.2.10)
- 2 сетевых интерфейса (lan1 — 192.168.1.101 и lan2 — 192.168.2.101)
- желание заставить это добро работать так, как нужно нам
Чтож… приступимс.
- Windows
- Управление приоритетом сетевых подключений:
Необходимо создать 3 маршрута:
route -p add 0.0.0.0 mask 0.0.0.0 192.168.1.10 metric 1
route -p add 10.0.0.0 mask 255.0.0.0 192.168.1.10 metric 1
route -p add 10.0.0.0 mask 255.0.0.0 192.168.2.10 metric 1
Далее идём в Сетевые подключения -> Дополнительно -> Дополнительные параметры, перемещаем lan2 вверх, чтобы это соединение оказалось выше lan1. Готово.
- Приоритет в таблице маршрутизации:
Опять же — создаём 3 маршрута. Только изменим метрики
route -p add 0.0.0.0 mask 0.0.0.0 192.168.1.10 metric 1
route -p add 10.0.0.0 mask 255.0.0.0 192.168.1.10 metric 2
route -p add 10.0.0.0 mask 255.0.0.0 192.168.2.10 metric 1
И никаких танцев с приоритетом интерфейсов. Считаю этот метод оптимальным.
UPD: метрика интерфеса, приоритет которого выше (см. предыдущий пункт) не должна быть наименьшей.
- Linux
- Приоритет в таблице маршрутизации:
Тут почти тоже самое, что и в предыдущем пункте (только синтаксис чуток различается)
route add default gw 192.168.1.10 metric 0
route add -net 10.0.0.0/8 gw 192.168.1.10 metric 1
route add -net 10.0.0.0/8 gw 192.168.2.10 metric 0
- iproute2:
Собственно, для этого решения необходимо наличие установленного пакета iproute2. В дебиане — apt-get install iproute.
В этом случае нам понадобится 2 маршрута
route add default gw 192.168.1.10 metric 0
route add -net 10.0.0.0/8 gw 192.168.2.10 metric 0
Создадим 2 таблицы маршрутизации:
echo '10 lan1' >> /etc/iproute2/rt_tables
echo '11 lan2' >> /etc/iproute2/rt_tables
Добавляем в эти таблицы правила маршрутизации:
ip route add default via 192.168.1.10 table lan1
ip rule add from 192.168.1.101 table lan1
ip route add 127.0.0.0/8 dev lo table lan1
ip route add default via 192.168.2.10 table lan2
ip rule add from 192.168.2.101 table lan2
ip route add 127.0.0.0/8 dev lo table lan2
Последние правила — для того, чтобы пакеты с локального интерфейса не терялись.
Так же не стоит забывать, что линукс при перезагрузки очищает таблицы и правила маршрутизации, потому рекомендую создать хитрый скрипт в папке /etc/network/if-up.d. У меня там лежит скрипт такого содержания:
#!/bin/sh -e
case "$IFACE" in
eth1)
ip route add default via 192.168.1.10 table lan1
ip rule add from 192.168.1.101 table lan1
ip route add 127.0.0.0/8 dev lo table lan1
;;
eth2)
route del default gw 192.168.2.101
route add -net 10.0.0.0/8 gw 192.168.2.10 1
ip route add default via 192.168.2.10 table lan2
ip rule add from 192.168.2.101 table lan2
ip route add 127.0.0.0/8 dev lo table lan2
;;
esac
UPD: поправил косяки в указании метрики.
Выбор за вами. Скажу лишь что было решено остановиться на вторых вариантах для обоих систем (изменение метрики на windows и iproute2 на debian).
Кому интересна тема маршрутизации в линуксе — рекомендую почитать вот эту вещь lartc.org/howto/
Надеюсь, кому‐ нибудь эта информация окажется полезной.
И ещё раз, коллеги — с праздником :)