Pull to refresh

Policy Based Routing (Linux + Juniper)

Level of difficultyEasy

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

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.