iproute2: Отличия в настройке Debian 6 и CentOS 5
В этой заметке кратко опишу настройку iproute2 для ситуации, когда необходимо отправлять ip пакеты с того же интерфейса на которой они пришли.
Схема подключения к серверу выглядит следующим образом:
+---------+ | router1 |-------+ +---------+ | eth0 +---------+ | server | +---------+ +---------+ | eth1 | router2 |-------+ +---------+ |
Сервер имеет два сетевых интерфейса eth0 и eth1, задача состоит в том, чтобы при обращении к конкретному интерфейсу, ответные пакеты уходили на роутер подключенный к этому интерфейсу, а не через маршрут по-умолчанию.
Для решения задачи будем использовать iproute2.
Адресация в схеме:
eth0 - 192.168.0.2/24 eth1 - 192.168.1.2/24 router1 - 192.168.0.1/24 router2 - 192.168.1.1/24 |
Предварительно создадим таблицы маршрутизации для iproute2
echo 1 router_1 >> /etc/iproute2/rt_tables echo 2 router_2 >> /etc/iproute2/rt_tables |
Затем приступаем к настройке непосредственно маршрутизации.
В Debian 6 есть возможность автоматически запускать скрипты при поднятии интерфейса, для этого в каталоге /etc/network/if-up.d создаем скрипт iproute2.sh со следующим содержанием:
#!/bin/bash /sbin/ip route add default via 192.168.0.1 dev eth0 table router_1 /sbin/ip route add default via 192.168.1.1 dev eth1 table router_2 /sbin/ip rule add from 192.168.0.2 table router_1 /sbin/ip rule add from 192.168.1.2 table router_2 |
Не забываем сделать скрипт запускаемым
chmod +x iproute2.sh |
Теперь про загрузке Debian и поднятии сетевых интерфейсов у нас будут создавать нужные нам правила маршрутизации.
В CentOS 5 маршрутизация настраивается следующим образом: в каталоге /etc/sysconfig/network-scripts есть скрипт ifup-routes, который при поднятии интерфейса считывает содержимое файлов route-eth<n> и rule-eth<n>.
Следовательно, создаем нужные нам файлы:
route-eth0
default via 192.168.0.1 table router_1 |
route-eth1
default via 192.168.1.1 table router_2 |
rule-eth0
from 192.168.0.2 table router_1 |
rule-eth1
from 192.168.1.2 table router_2 |