Как стать автором
Обновить

Policy Based Routing (Linux + Juniper)

Уровень сложностиПростой

В этой статье мы рассмотрим настройку маршрутизации на основе политик (Policy Based Routing, PBR) для управления трафиком от сервера в Интернет в зависимости от IP-адреса источника. Опишем шаги по конфигурации PBR на сервере c Ubuntu и маршрутизаторах Juniper MX.

Схема стенда

Сетевая схема стенда
Сетевая схема стенда

Дано: сервер с 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 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-адресов, зарезервированных для примеров, использования в описаниях спецификаций и в документации

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.