Policy Based Routing (Linux + Juniper)

—

от автора

Дано: сервер с Ubuntu и два маршрутизатора Juniper MX

Схема стенда

Схема стенда

Схема стенда

Задача: настроить PBR (Policy Based Routing), в зависимости от source ip сервера маршрутизировать трафик в определенный ISP (Internet Service Provider).

Настройка сервера

Конфигурация netplan:

network: version: 2 renderer: networkd ethernets:  eth0:   dhcp4: no   addresses:   - 10.0.0.3/24   routes:   - to: 0.0.0.0/0    via: 10.0.0.1 #router1    table: 101    on-link: True   - to: 0.0.0.0/0    via: 10.0.0.2 #router2    table: 102    on-link: True  lo:     addresses:     - 198.51.100.1/32 # Для ISP1     - 198.51.100.2/32 # Для ISP2     - 198.51.100.3/32 # Для ISP3     - 198.51.100.4/32 # Для ISP4     - 198.51.100.5/32 # Для ISP5     - 198.51.100.6/32 # Для ISP6

На сервере прописываются два маршрута по умолчанию и т.к. у нас два маршрутизатора сделать это нужно в разных route table:

  1. Маршрут в таблице 101 через 10.0.0.1 (router1);

  2. Маршрут в таблице 102 через 10.0.0.2 (router2);

server:~$ ip route show table 101default via 10.0.0.1 dev eth0 proto static onlinkserver:~$ ip route show table 102default via 10.0.0.2 dev eth0 proto static onlink

Создаем routing-policy, в которой указываем заворачивать трафик с IP-адресов 198.51.100.[1-3] в table 101, трафик с IP-адресов 198.51.100.[4-6] в table 102:

routing-policy:   - from: 198.51.100.1/32    table: 101   - from: 198.51.100.2/32    table: 101   - from: 198.51.100.3/32    table: 101   - from: 198.51.100.4/32    table: 102   - from: 198.51.100.5/32    table: 102   - from: 198.51.100.6/32    table: 102

Настройка маршрутизаторов Juniper MX

Создаем firewall filter для PBR:

#ISP1set firewall filter PBR term ISP1 from source-address 198.51.100.1/32set firewall filter PBR term ISP1 then next-ip 203.0.113.1#ISP2set firewall filter PBR term ISP2 from source-address 198.51.100.2/32set firewall filter PBR term ISP2 then next-ip 203.0.113.2#ISP3set firewall filter PBR term ISP3 from source-address 198.51.100.3/32set firewall filter PBR term ISP4 then next-ip 203.0.113.3#ISP4set firewall filter PBR term ISP4 from source-address 198.51.100.4/32set firewall filter PBR term ISP5 then next-ip 203.0.113.4#ISP5set firewall filter PBR term ISP5 from source-address 198.51.100.5/32set firewall filter PBR term ISP5 then next-ip 203.0.113.5#ISP6set firewall filter PBR term ISP6 from source-address 198.51.100.6/32set firewall filter PBR term ISP6 then next-ip 203.0.113.6

Если в вашей архитектуре стыки с провайдерами вынесены в отдельный routing-instance, то в каждый term необходимо добавить:

set firewall filter PBR term <ISPX> then next-ip routing-instance <routing-instance name>

Применяем firewall filter «PBR» на интерфейсы router1 и router2:

#router1set interfaces irb unit 200 family inet filter input PBRset interfaces irb unit 200 family inet address 10.0.0.1/24#router2set interfaces irb unit 200 family inet filter input PBRset interfaces irb unit 200 family inet address 10.0.0.2/24

Проверяем доступность ресурса в Интернет с помощью traceroute, опция -s позволяет указать какой IP использовать в качестве source.

Нас интересуют только первые два хопа:

server# traceroute 8.8.8.8 -ns 198.51.100.1 1 10.0.0.1 2 203.0.113.1 3 ***-----server# traceroute 8.8.8.8 -ns 198.51.100.2 1 10.0.0.1 2 203.0.113.2 3 ***-----server# traceroute 8.8.8.8 -ns 198.51.100.3 1 10.0.0.1 2 203.0.113.3 3 ***-----server# traceroute 8.8.8.8 -ns 198.51.100.4 1 10.0.0.2 2 203.0.113.4 3 ***-----server# traceroute 8.8.8.8 -ns 198.51.100.5 1 10.0.0.2 2 203.0.113.5 3 ***-----server# traceroute 8.8.8.8 -ns 198.51.100.6 1 10.0.0.2 2 203.0.113.6 3 ***

Итого, трафик распределяется по ISP в зависимости от src IP сервера.

Варианты применения:

  1. Проверка доступности ресурсов в сети Интернет через определенного провайдера;

  2. Сбор диагностической информации (rtt, packet loss, etc) по провайдерам;

  3. Проверки будет проводить инженер, у которого нет доступа(и не должно быть) к сетевому оборудованию;

  4. Другие варианты траблшутинга, проверки можно автоматизировать с помощью скриптов на сервере;

P.S. Статья написана в соотвествии с RFC5737, который описывает 3 блока IP-адресов, зарезервированных для примеров, использования в описаниях спецификаций и в документации

Мой Telegram-канал: https://t.me/life_of_network_engineer

ссылка на оригинал статьи https://habr.com/ru/articles/1070634/