Применимость: Linux, FreeBSD, Windows, Выделенный сервер, VDS-KVM, VDS-XEN
Слова для поиска: маршрутизация по источнику
Например на вашем сервере два отдельных интерфейса с двумя адресами из разных подсетей.
Шлюз по умолчанию (default gateway) в системе предусмотрен один. Доступен этот шлюз только для одной из подсетей и только по одному интерфейсу.
В случае обрыва связи между этим интерфейсном и шлюзом ваш сервер может стать недоступным.
Эта проблема может не касаться серверов которые подключены к маршрутизаторам с поддержкой VRRP.
Policy Based Routing - механизм реализации пересылки (forwarding)/ маршрутизации(routing) пакетов данных, основанный на политике из набора правил, определенной администраторами сети.
Policy Based Routing позволяет использовать множество альтернативных таблиц маршрутизации используемых по условию связанному со значением одного из полей IP ракета или маркеру который назначен iptables.
Один из вариантов Policy Based Routing - Source Based Routing.
При реализации этой политики маршрутизатор выбирает дальнейший путь следования пакетов данных по полю «адрес источника».
В нашем примере можно будет использовать альтернативную таблицу маршрутизацию для того, чтобы пакеты из резервного интерфейса использовали другую таблицу маршрутизации где шлюз по умолчанию расположен по другому адресу из подсети соответствующей адресу на этом интерфейсе.
Таким образом на нашем сервере будут работать два канала без зависимости от исправности другого канала.
Например у вас есть второй интерфейс в сети 77.72.130.0/24
Я опишу два варианта для Centos и Debian
1. Установить пакет iproute
Centos:
yum install iproute
Debian:
apt-get install iproute
В некоторых дистрибутивах пакет может называться iproute2
2. Создать идентификатор для альтернативной таблицы маршрутизации
echo "300 net130" >> /etc/iproute2/rt_tables
Номер 300 выбран произвольно, главное, чтобы он не совпадал с другими номерами таблиц маршрутизации, имя net130 также дается произвольно.
Таблица будет доступна после перезагрузки системы и к ней можно будет обращаться по имени net130
3. Добавить параметры в таблицу маршрутизации net130
ip route add 77.72.130.0/24 dev eth1 table net130 ip route add default via 77.72.130.1 dev eth1 table net130
4. Создать и активировать политику маршрутизации пакетов из сети 77.72.130.0/24
ip rule add from 77.72.130.0/24 table net130
Важно правильно понять смысл - изначально в системе была только одна таблица маршрутизации - main
Вы добавили еще одну - net130, а команда
ip route add default via 77.72.130.1 dev eth1 table net130
добавляет шлюз по умолчанию в таблицу net130 Теперь в системе два шлюза по умолчанию, а куда идти пакетам?
Нужно выполнить команду добавления правила чтобы пакеты из сети 77.72.130.0 использовали не main, а net130
ip rule add from 77.72.130.0/24 table net130
То есть в системе будет два шлюза по умолчанию и выбор производится по признаку источника пакетов
Просмотреть все таблицы
ip r l t all
Посмотреть таблицу net130
ip r l t net130
Просмотреть правила
ip rule
Примерно так должен выглядеть файл /etc/iproute2/rt_tables
/etc/iproute2/rt_tables
# # reserved values # 255 local 254 main 253 default 0 unspec # # local # #1 inr.ruhep 300 net130
Его форма одинакова для всех систем. А вот конфигурационные файлы для интерфейсов разные.
/etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1 BOOTPROTO=none ONBOOT=yes USERCTL=no IPADDR=77.72.130.226 NETMASK=255.255.255.0
А этих файлов у вас нет, надо их создать:
/etc/sysconfig/network-scripts/route-eth1
77.72.130.0/24 dev eth1 table net130 default via 77.72.130.1 dev eth1 table net130
/etc/sysconfig/network-scripts/rule-eth1
prio 100 from 77.72.130.0/24 table net130
/etc/network/interface
auto lo eth0 eth1 iface lo inet loopback iface eth0 inet static address 77.72.131.126 netmask 255.255.255.0 gateway 77.72.131.1 iface eth1 inet static address 77.72.130.126 netmask 255.255.255.0 post-up ip route add 77.72.130.0/24 dev eth1 table net130 post-up ip route add default via 77.72.130.1 dev eth1 table net130 post-up ip rule add prio 100 from 77.72.130.0/24 table net130 post-down ip rule del prio 100 from 77.72.130.0/24 table net130
Говорят, что Windows тоже может работать с несколькими равноправными внешними интерфейсами.
(Не проверял)
Для этого надо:
1. Отключить DeadGWDetect
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
Создать REG_DWORD EnableDeadGWDetect = 0 (нужна перезагрузка)
2. На все внешние интерфейсы назначить шлюзы с одинаковыми метриками. Интерфейсы должны быть на разных адаптерах, то есть несколько шлюзов (или несколько адресов и шлюзов) на одном интерфейсе не работают.
3. После перезагрузки проверить что таблица маршрутизации содержит все 0/0-маршруты с одинаковыми метриками.
Примечание: Иногда это может не работать
—- Актуальность: 2011/11/01 19:36
[Александр А. Шваяков]