Настройка маршрутизации по двум провайдерам
Вчера столкнулся с небольшой проблемой — на машине с 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 маршрута
Создадим 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
Добавляем в эти таблицы правила маршрутизации: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
- Приоритет в таблице маршрутизации:
Выбор за вами. Скажу лишь что было решено остановиться на вторых вариантах для обоих систем (изменение метрики на windows и iproute2 на debian).
Кому интересна тема маршрутизации в линуксе — рекомендую почитать вот эту вещь lartc.org/howto/ Надеюсь, кому‐ нибудь эта информация окажется полезной.
И ещё раз, коллеги — с праздником :)