Policy Based Routing (Linux + Juniper)
Dmitry IpatovДано: сервер с 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:
- Маршрут в таблице 101 через 10.0.0.1 (router1);
- Маршрут в таблице 102 через 10.0.0.2 (router2);
server:~$ ip route show table 101 default via 10.0.0.1 dev eth0 proto static onlink server:~$ ip route show table 102 default 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:
#ISP1 set firewall filter PBR term ISP1 from source-address 198.51.100.1/32 set firewall filter PBR term ISP1 then next-ip 203.0.113.1 #ISP2 set firewall filter PBR term ISP2 from source-address 198.51.100.2/32 set firewall filter PBR term ISP2 then next-ip 203.0.113.2 #ISP3 set firewall filter PBR term ISP3 from source-address 198.51.100.3/32 set firewall filter PBR term ISP4 then next-ip 203.0.113.3 #ISP4 set firewall filter PBR term ISP4 from source-address 198.51.100.4/32 set firewall filter PBR term ISP5 then next-ip 203.0.113.4 #ISP5 set firewall filter PBR term ISP5 from source-address 198.51.100.5/32 set firewall filter PBR term ISP5 then next-ip 203.0.113.5 #ISP6 set firewall filter PBR term ISP6 from source-address 198.51.100.6/32 set 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:
#router1 set interfaces irb unit 200 family inet filter input PBR set interfaces irb unit 200 family inet address 10.0.0.1/24 #router2 set interfaces irb unit 200 family inet filter input PBR set 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-адресов, зарезервированных для примеров, использования в описаниях спецификаций и в документации