Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

сети:source_based_routing [2012/04/04 10:45]
сети:source_based_routing [2022/04/01 15:08] (текущий)
Строка 1: Строка 1:
 +====== source based routing ======
 +Применимость: Linux, FreeBSD, Windows, Выделенный сервер, VDS-KVM, VDS-XEN
 +
 +Слова для поиска: маршрутизация по источнику
 +
 +----
 +===== Задача: =====
 +Например на вашем сервере два отдельных интерфейса с двумя адресами из разных подсетей.
 +
 +Шлюз по умолчанию (default gateway) в системе предусмотрен один. Доступен этот шлюз только для одной из подсетей и только по одному интерфейсу.
 +
 +В случае обрыва связи между этим интерфейсном и шлюзом ваш сервер может стать недоступным.  
 +
 +Эта проблема может не касаться серверов которые подключены к маршрутизаторам с поддержкой VRRP.
 +
 +===== Решение: =====
 +==== Policy Based Routing ====
 +
 +
 +**Policy Based Routing** -  механизм реализации пересылки (forwarding)/ маршрутизации(routing) пакетов данных, основанный на политике из набора правил, определенной администраторами сети. 
 +
 +Policy Based Routing позволяет использовать множество альтернативных таблиц маршрутизации используемых по условию связанному со значением одного из полей IP ракета или маркеру который назначен iptables.
 +
 +==== Source Based Routing ====
 +
 +Один из вариантов Policy Based Routing -  **Source Based Routing**. 
 +
 +При реализации этой политики  маршрутизатор выбирает дальнейший путь следования пакетов данных по полю "адрес источника".
 +
 +В нашем примере можно будет использовать альтернативную таблицу маршрутизацию для того, чтобы пакеты из резервного интерфейса использовали другую таблицу маршрутизации где шлюз по умолчанию расположен по другому адресу из подсети соответствующей адресу на этом интерфейсе.
 +
 +Таким образом на нашем сервере будут работать два канала без зависимости от исправности другого канала.
 +
 +
 +
 +=== Пример Source Based Routing ===
 +
 +Например у вас есть второй интерфейс в сети 77.72.130.0/24 
 +
 +Я опишу два варианта для Centos и Debian
 +
 +1. Установить пакет iproute
 +
 +Centos:
 +  yum install iproute
 +Debian:
 +  apt-get install iproute
 +
 +<wrap hi>В некоторых дистрибутивах пакет может называться iproute2</wrap>
 +
 +2. Создать идентификатор для альтернативной таблицы маршрутизации
 +
 +  echo "300 net130" >> /etc/iproute2/rt_tables
 +
 +<WRAP center round info 60%>
 +Номер 300 выбран произвольно, главное, чтобы он не совпадал с другими номерами таблиц маршрутизации, имя net130 также дается произвольно.
 +
 +</WRAP>
 +
 +Таблица <wrap hi>будет доступна после перезагрузки системы</wrap> и к ней можно будет обращаться по имени **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
 +
 +==== Конфигурационные файлы: ====
 +
 +<note important>Правила определенные упомянутыми выше командами потеряются при перезагрузке системы. Чтобы эти команды выполнялись автоматически нужно настроить конфигурационные файлы.</note>
 +
 +Примерно так должен выглядеть файл /etc/iproute2/rt_tables
 +
 +<code| /etc/iproute2/rt_tables >
 +#
 +# reserved values
 +#
 +255 local
 +254 main
 +253 default
 +0 unspec
 +#
 +# local
 +#
 +#1 inr.ruhep
 +300     net130
 +</code>
 +
 +Его форма одинакова для всех систем.
 +А вот конфигурационные файлы для интерфейсов разные.
 +
 +=== Centos: ===
 +
 +<code| /etc/sysconfig/network-scripts/ifcfg-eth1>
 +DEVICE=eth1
 +BOOTPROTO=none
 +ONBOOT=yes
 +USERCTL=no
 +IPADDR=77.72.130.226
 +NETMASK=255.255.255.0
 +</code>
 +
 +А этих файлов у вас нет, надо их создать:
 +
 +<code |/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
 +</code>
 +
 +<code| /etc/sysconfig/network-scripts/rule-eth1>
 +prio 100 from 77.72.130.0/24 table net130
 +</code>
 +
 +=== Debian ===
 +
 +<code| /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
 +</code>
 +
 +=== Windows ===
 +
 +Говорят, что Windows тоже может работать с несколькими равноправными внешними интерфейсами.
 +
 +//(Не проверял)//
 +
 +Для этого надо:
 +
 +1. Отключить DeadGWDetect
 +  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
 +
 +Создать REG_DWORD EnableDeadGWDetect = 0 (нужна перезагрузка)
 +
 +2. На все внешние интерфейсы назначить шлюзы с одинаковыми метриками. Интерфейсы должны быть на разных адаптерах, то есть несколько шлюзов (или несколько адресов и шлюзов) на одном интерфейсе не работают.
 +
 +3. После перезагрузки проверить что таблица маршрутизации содержит все 0/0-маршруты с одинаковыми метриками. 
 +
 +**Примечание:** <wrap em>Иногда это может не работать</wrap> 
 +
 +==== Смотрите также: ====
 +  * [[http://www.opennet.ru/docs/RUS/LARTC/index.html | Linux Advanced Routing & Traffic Control HOWTO]]
 +  * [[http://ipfw.ism.kiev.ua/pbr.html|Policy-Based Routing (PBR) в ОС FreeBSD]]
 +  * [[http://support.microsoft.com/default.aspx?scid=kb;EN-US;175396|Windows Socket Connection from a Multiple-Homed Computer]]
 +  * [[http://www.cisco.com/en/US/docs/ios/12_0/qos/configuration/guide/qcpolicy.html]]
 +  
 +---- 
 +Актуальность: 2011/11/01 19:36 
 +
 +//[Александр А. Шваяков]//
 +
 +{{tag> маршрутизация routing}}