Маршрутизация на основе адреса отправителя
Материал из Xgu.ru
- Автор: Игорь Чубин
Правильная ссылка: http://xgu.ru/wiki/gw/source_policy_routing
Подготовлена в качестве ответа на вопрос: [1]
На странице рассказано, почему при настройке source based policy routing в линукс ответы на запросы из локальной сети на внешние адреса не возвращаются, и что нужно сделать, чтобы возвращались.
Содержание |
[править] Топология
Схема сети изображена ниже:
На интерфейсах установлены IP-адреса по правилу:
192.168.<номер бриджа>.<номер хоста>
Например:
- интерфейс eth0 машины q2 имеет адрес 192.168.2.2
- интерфейс eth3 машины q4 имеет адрес 192.168.3.2
Пусть у нас будет:
- q4 — шлюз
- q1 — один провайдер
- q2 — второй провайдер
- q3 — компьютер в локальной сети
[править] Настройка
Вся настройка выполняется только на шлюзе. Остальные машины мы не трогаем.
Для того чтобы интерфейс, через который отправляется трафик, зависел от обратного адреса:
q4:~# ip rule add rule from 192.168.1.4 lookup 2 q4:~# ip rule add rule from 192.168.2.4 lookup 3 q4:~# ip route add default via 192.168.1.1 table 2 q4:~# ip route add default via 192.168.2.1 table 3
Для того чтобы маршрутизатор мог ответить компьютерам локальной сети, если они обращаются на его внешние адреса, добавляем:
q4:~# ip route add 192.168.3.0/24 dev eth2 table 3 q4:~# ip route add 192.168.3.0/24 dev eth2 table 2
Здесь 192.168.3.0/24 — внутренний адрес.
[править] Проверка
С машины q3 (из локальной сети).
Пингуется:
q4:~# ping 192.168.2.4 PING 192.168.2.4 (192.168.2.4) 56(84) bytes of data. 64 bytes from 192.168.2.4: icmp_seq=1 ttl=64 time=0.113 ms --- 192.168.2.4 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.113/0.113/0.113/0.000 ms q4:~# ping 192.168.1.4 PING 192.168.1.4 (192.168.1.4) 56(84) bytes of data. 64 bytes from 192.168.1.4: icmp_seq=1 ttl=64 time=0.108 ms --- 192.168.1.4 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.108/0.108/0.108/0.000 ms
Убираем на q4 маршруты в локальную сеть:
q4:~# ip route delete 192.168.3.0/24 dev eth2 table 2 q4:~# ip route delete 192.168.3.0/24 dev eth2 table 3
Не пингуется:
q3:~# ping 192.168.1.4 PING 192.168.1.4 (192.168.1.4) 56(84) bytes of data. --- 192.168.1.4 ping statistics --- 1 packets transmitted, 0 received, 100% packet loss, time 0ms q3:~# ping 192.168.2.4 PING 192.168.2.4 (192.168.2.4) 56(84) bytes of data. --- 192.168.2.4 ping statistics --- 1 packets transmitted, 0 received, 100% packet loss, time 0ms
[править] Описание стенда
- Для создания модели сети использовался Xentaur
Описание топологии:
############################################################################################ # Topology description network='four_quaggas' domains = [ 'q1', 'q2', 'q3', 'q4' ] domain_types = [ 'quagga', 'quagga', 'quagga', 'quagga' ] bridges = [ 'br1', 'br2', 'br3' ] vbridges_table ={ 'q1' : [ 'br1' ], 'q2' : [ 'br2' ], 'q3' : [ 'br3' ], 'q4' : [ 'br1', 'br2', 'br3' ], }
Установка адресов на сетевых интерфейсах
(выполняется из консоли Xentaur):
<python/>
for dom in domains:
for br in vbridges_table[dom]: write_to(domains.index(dom)+1, "ifconfig eth%s 192.168.%s.%s" % ( vbridges_table[dom].index(br), bridges.index(br)+1, domains.index(dom)+1 ))
[править] Дополнительная информация
- Два шлюза в Интернет и OpenVPN
- Default gateway
- Linux Advanced Routing & Traffic Control HOWTO — перевод руководства по iproute2 и управлению трафиком в Линукс