Xgu.ru теперь в Контакте  — приходите и подключайтесь.
Пока мы работаем над следующими видео, вы можете подключиться в Контакте. Познакомимся и обсудим новые страницы и ролики.

Vk-big.pngYoutube-big.jpeg

Маршрутизация на основе адреса отправителя

Материал из Xgu.ru

Перейти к: навигация, поиск
Автор: Игорь Чубин

Правильная ссылка: http://xgu.ru/wiki/gw/source_policy_routing
Подготовлена в качестве ответа на вопрос: [1]

На странице рассказано, почему при настройке source based policy routing в линукс ответы на запросы из локальной сети на внешние адреса не возвращаются, и что нужно сделать, чтобы возвращались.


Содержание

[править] Топология

Схема сети изображена ниже:

Xentaur 4guaggas.png

На интерфейсах установлены 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 ))

[править] Дополнительная информация