Различия
Показаны различия между двумя версиями страницы.
сети:source_based_routing [2012/04/04 10:45] |
сети:source_based_routing [2022/04/01 15:08] (текущий) |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ====== source based routing ====== | ||
+ | Применимость: | ||
+ | |||
+ | Слова для поиска: | ||
+ | |||
+ | ---- | ||
+ | ===== Задача: | ||
+ | Например на вашем сервере два отдельных интерфейса с двумя адресами из разных подсетей. | ||
+ | |||
+ | Шлюз по умолчанию (default gateway) в системе предусмотрен один. Доступен этот шлюз только для одной из подсетей и только по одному интерфейсу. | ||
+ | |||
+ | В случае обрыва связи между этим интерфейсном и шлюзом ваш сервер может стать недоступным. | ||
+ | |||
+ | Эта проблема может не касаться серверов которые подключены к маршрутизаторам с поддержкой VRRP. | ||
+ | |||
+ | ===== Решение: | ||
+ | ==== Policy Based Routing ==== | ||
+ | |||
+ | |||
+ | **Policy Based Routing** - механизм реализации пересылки (forwarding)/ | ||
+ | |||
+ | Policy Based Routing позволяет использовать множество альтернативных таблиц маршрутизации используемых по условию связанному со значением одного из полей IP ракета или маркеру который назначен iptables. | ||
+ | |||
+ | ==== Source Based Routing ==== | ||
+ | |||
+ | Один из вариантов Policy Based Routing - **Source Based Routing**. | ||
+ | |||
+ | При реализации этой политики | ||
+ | |||
+ | В нашем примере можно будет использовать альтернативную таблицу маршрутизацию для того, чтобы пакеты из резервного интерфейса использовали другую таблицу маршрутизации где шлюз по умолчанию расположен по другому адресу из подсети соответствующей адресу на этом интерфейсе. | ||
+ | |||
+ | Таким образом на нашем сервере будут работать два канала без зависимости от исправности другого канала. | ||
+ | |||
+ | |||
+ | |||
+ | === Пример Source Based Routing === | ||
+ | |||
+ | Например у вас есть второй интерфейс в сети 77.72.130.0/ | ||
+ | |||
+ | Я опишу два варианта для Centos и Debian | ||
+ | |||
+ | 1. Установить пакет iproute | ||
+ | |||
+ | Centos: | ||
+ | yum install iproute | ||
+ | Debian: | ||
+ | apt-get install iproute | ||
+ | |||
+ | <wrap hi>В некоторых дистрибутивах пакет может называться iproute2</ | ||
+ | |||
+ | 2. Создать идентификатор для альтернативной таблицы маршрутизации | ||
+ | |||
+ | echo " | ||
+ | |||
+ | <WRAP center round info 60%> | ||
+ | Номер 300 выбран произвольно, | ||
+ | |||
+ | </ | ||
+ | |||
+ | Таблица <wrap hi> | ||
+ | |||
+ | 3. Добавить параметры в таблицу маршрутизации net130 | ||
+ | |||
+ | ip route add 77.72.130.0/ | ||
+ | ip route add default via 77.72.130.1 dev eth1 table net130 | ||
+ | |||
+ | 4. Создать и активировать политику маршрутизации пакетов из сети 77.72.130.0/ | ||
+ | |||
+ | ip rule add from 77.72.130.0/ | ||
+ | |||
+ | |||
+ | === Смысл выполненных действий === | ||
+ | |||
+ | Важно правильно понять смысл - изначально в системе была только одна таблица маршрутизации - 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/ | ||
+ | |||
+ | То есть в системе будет два шлюза по умолчанию и выбор производится по признаку источника пакетов | ||
+ | |||
+ | === Основные команды для отладки: | ||
+ | |||
+ | Просмотреть все таблицы | ||
+ | ip r l t all | ||
+ | Посмотреть таблицу net130 | ||
+ | ip r l t net130 | ||
+ | Просмотреть правила | ||
+ | ip rule | ||
+ | |||
+ | ==== Конфигурационные файлы: ==== | ||
+ | |||
+ | <note important> | ||
+ | |||
+ | Примерно так должен выглядеть файл / | ||
+ | |||
+ | <code| / | ||
+ | # | ||
+ | # reserved values | ||
+ | # | ||
+ | 255 local | ||
+ | 254 main | ||
+ | 253 default | ||
+ | 0 unspec | ||
+ | # | ||
+ | # local | ||
+ | # | ||
+ | # | ||
+ | 300 | ||
+ | </ | ||
+ | |||
+ | Его форма одинакова для всех систем. | ||
+ | А вот конфигурационные файлы для интерфейсов разные. | ||
+ | |||
+ | === Centos: === | ||
+ | |||
+ | <code| / | ||
+ | DEVICE=eth1 | ||
+ | BOOTPROTO=none | ||
+ | ONBOOT=yes | ||
+ | USERCTL=no | ||
+ | IPADDR=77.72.130.226 | ||
+ | NETMASK=255.255.255.0 | ||
+ | </ | ||
+ | |||
+ | А этих файлов у вас нет, надо их создать: | ||
+ | |||
+ | <code |/ | ||
+ | 77.72.130.0/ | ||
+ | default via 77.72.130.1 dev eth1 table net130 | ||
+ | </ | ||
+ | |||
+ | <code| / | ||
+ | prio 100 from 77.72.130.0/ | ||
+ | </ | ||
+ | |||
+ | === Debian === | ||
+ | |||
+ | <code| / | ||
+ | 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 | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | |||
+ | === Windows === | ||
+ | |||
+ | Говорят, | ||
+ | |||
+ | //(Не проверял)// | ||
+ | |||
+ | Для этого надо: | ||
+ | |||
+ | 1. Отключить DeadGWDetect | ||
+ | HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters | ||
+ | |||
+ | Создать REG_DWORD EnableDeadGWDetect = 0 (нужна перезагрузка) | ||
+ | |||
+ | 2. На все внешние интерфейсы назначить шлюзы с одинаковыми метриками. Интерфейсы должны быть на разных адаптерах, | ||
+ | |||
+ | 3. После перезагрузки проверить что таблица маршрутизации содержит все 0/ | ||
+ | |||
+ | **Примечание: | ||
+ | |||
+ | ==== Смотрите также: ==== | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | | ||
+ | ---- | ||
+ | Актуальность: | ||
+ | |||
+ | // | ||
+ | |||
+ | {{tag> маршрутизация routing}} | ||