LDP

Схема сети остаётся прежней. Перед настройкой LDP удалим все настройки статического LSP и включим на всех интерфейсах обработку меток (кроме интерфейсов в сторону eBGP-пиров).

LDP позволяет распространить метки и направлять трафик по меткам, согласно IGP Best Path. Однако, в LDP недоступен TE. В то же время LDP легко настраивается и сравнительно быстро перестраивается вместе с IGP-протоколами при изменениях в топологии. Используется для построения VPN-сервисов и формирования более простых iBGP-соседств. В JunOS по умолчанию по LDP распространяется только информация о LoopBack-адресах (В Cisco обо всех напрямую доступных префиксах), но это можно изменить при помощи Egress-Policy.

1. Настройка LDP

Тут всё довольно просто. Нужно просто добавить на нужные нам юниты family mpls (у нас уже сделано) и включить все интерфейсы в LDP:

root@RT.MSK.M34# show | compare 
[edit protocols]
+   ldp {
+       interface all;
+   }

На этом первоначальная настройка LDP заканчивается и между LoopBack-адресами устройств устанавливается Pseudowire-соединение.

2. Процесс обмена меток

Как происходит установка LDP-сессии и обмен метками (На примере сообщени M9, отсылаемых в сторону M34):

1) Рассылка Hello-пакетов на multicast-адрес 224.0.0.2 (Все роутеры в сети) на 646 UDP-порт

2) Далее идёт установка TCP-соединения, но уже между адресами интерфейсов:

3) Далее идёт обмен Initialization Message, в ходе которого идёт согласование параметров:

4) После чего произошёл обмен KeepAlive и пересылка Address Message с напрямую доступными сетями от нашего роутера:

5) Далле мы просто выделяем метку и говорим, что если хочешь добраться до 192.168.0.3, то используй метку 3 (Это Penultimate-Hop Popping, так как 192.168.0.3 это наш LoopBack).

Далее этот FEC попадает соседям, они также под него выделяют свою метку, записывают, что её нужно Swap'нуть на принятую и уже со своей меткой передают информацию об этом FEC далее по сети.

3. Проверка работы LDP

Трассировка пути:

root@RT.MSK.M34# run traceroute mpls ldp 192.168.0.5  
  Probe options: ttl 64, retries 3, wait 10, paths 16, exp 7, fanout 16

  ttl    Label  Protocol    Address          Previous Hop     Probe Status
    1   299824  LDP         10.0.0.5         (null)           Success           
    2        3  LDP         10.0.0.15        10.0.0.5         Egress            

  Path 1 via ge-0/0/1.0 destination 127.0.0.64

  ttl    Label  Protocol    Address          Previous Hop     Probe Status
    1   299824  LDP         10.0.0.11        (null)           Success           
    2        3  LDP         10.0.0.21        10.0.0.11        Egress            

  Path 2 via ge-0/0/0.0 destination 127.0.1.64

  ttl    Label  Protocol    Address          Previous Hop     Probe Status
    1   299824  LDP         10.0.0.1         (null)           Success           
    2        3  LDP         10.0.0.17        10.0.0.1         Egress            

  Path 3 via ge-0/0/3.0 destination 127.0.2.64

Тут видно, что у нас сразу происходит проверка всех путей:

root@RT.MSK.M34# run show route table inet.3 192.168.0.5     

inet.3: 7 destinations, 7 routes (7 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

192.168.0.5/32     *[LDP/9] 00:53:44, metric 1
                      to 10.0.0.11 via ge-0/0/0.0, Push 299824
                    > to 10.0.0.5 via ge-0/0/1.0, Push 299824
                      to 10.0.0.1 via ge-0/0/3.0, Push 299824

Информация о сессияъ, интерфейсах и соседях:

root@RT.MSK.M34# run show ldp session 
  Address           State        Connection     Hold time  Adv. Mode
192.168.0.2         Operational  Open             20         DU
192.168.0.3         Operational  Open             20         DU
192.168.0.4         Operational  Open             20         DU

[edit]
root@RT.MSK.M34# run show ldp interface  
Interface            Label space ID        Nbr count   Next hello
lo0.0                192.168.0.1:0            0           0
ge-0/0/0.0           192.168.0.1:0            1           3
ge-0/0/1.0           192.168.0.1:0            1           4
ge-0/0/3.0           192.168.0.1:0            1           3

[edit]
root@RT.MSK.M34# run show ldp neighbor     
Address            Interface          Label space ID         Hold time
10.0.0.11          ge-0/0/0.0         192.168.0.2:0            14
10.0.0.5           ge-0/0/1.0         192.168.0.3:0            12
10.0.0.1           ge-0/0/3.0         192.168.0.4:0            10

Также можно посмотреть базу данных меток для определённой сессии. Тут видно что мы от него получли и что ему передали:

root@RT.MSK.M34# run show ldp database session 192.168.0.2     
Input label database, 192.168.0.1:0--192.168.0.2:0
  Label     Prefix
 299776      192.168.0.1/32
      3      192.168.0.2/32
 299792      192.168.0.3/32
 299808      192.168.0.4/32
 299824      192.168.0.5/32
 299840      192.168.0.6/32
 299856      192.168.0.7/32
 299872      192.168.0.8/32

Output label database, 192.168.0.1:0--192.168.0.2:0
  Label     Prefix
      3      192.168.0.1/32
 299776      192.168.0.2/32
 299792      192.168.0.3/32
 299808      192.168.0.4/32
 299824      192.168.0.5/32
 299840      192.168.0.6/32
 299856      192.168.0.7/32
 299872      192.168.0.8/32

4. Взаимодействие MPLS и BGP:

А теперь вспомним, что у нас настроен iBGP, но только между двумя маршрутизаторами на границе автономной системы, которые передают друг другу маршруты с политикой Next-Hop Self. Если бы у нас не был развернут LDP, то при проходждении трафика от AS400 к AS600 возникла бы проблема: он застрянет на следующем же хопе, после нашего граничного роутера.

Но, так как у нас на сети есть LDP, то мы видим следующую картину:

root@AS400> traceroute monitor 160.0.0.1 source 140.0.0.1    

                             My traceroute  [v0.69]
AS400 (0.0.0.0)(tos=0x0 psize=64 bitpattern=0x00)      Mon Apr 26 18:22:57 2021
Keys:  Help   Display mode   Restart statistics   Order of fields   quit
                                       Packets               Pings
 Host                                Loss%   Snt   Last   Avg  Best  Wrst StDev
 1. 40.0.0.3                          0.0%     9    1.2   1.7   1.1   2.1   0.4
 2. ???
 3. 10.0.0.9                          0.0%     9    2.9   4.0   2.4  10.1   2.3
 4. 160.0.0.1                         0.0%     8    3.6   3.9   3.6   4.3   0.3

Тут видно, что трафик проходит, при этом число прыжков явно меньше. Это происходит из-за MPLS, который туннелирует трафик. Если посмотреть на таблицу маршрутизации на M34, то мы увидим, что для пакета с Dst IP 160.0.0.1 Next-Hop - 192.168.0.8:

root@RT.MSK.M34> show route 160.0.0.1 detail
inet.0: 29 destinations, 29 routes (29 active, 0 holddown, 0 hidden)
160.0.0.0/16 (1 entry, 1 announced)
        *BGP    Preference: 170/-101
...
Label operation: Push 299776
Protocol next hop: 192.168.0.8

Соответственно, мы навешиваем ту же метку, что выделена в таблице inet.3 под FEC = 192.168.0.8:

root@RT.MSK.M34> show route 192.168.0.8 table inet.3  

inet.3: 7 destinations, 7 routes (7 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

192.168.0.8/32     *[LDP/9] 00:24:35, metric 1
                    > to 10.0.0.1 via ge-0/0/3.0, Push 299776

Далее пакет просто коммутируется по меткам вплоть до маршрутизатора LNX, который сможет отправить этот пакет уже без метки.

При этом если мы хотели пускать трафик по статическому LSP, то нужно было прописывать статический маршрут или использовать Route Leaking для переноса маршрутов из inet.3 в inet.0. Тут же для ничего конфигурировать не нужно, метки автоматически попадают в таблицу inet.0, но только для BGP-маршрутов. Т.е. внутренняя маршрутизация происходить по IGP.

Один из главных минусов LDP - отсутствие возможности Traffic Engineering'а. Далее будет рассмотрен протокол RSVP, который обладает такой возможностью. На основе RSVP мы развернём L2 и L3 VPN c типами соединений VPWS и VPLS. На основе LDP также возможно развернуть эти сервисы. Настройка PE-роутеров будет идентична, за исключением некоторых деталей, а в настройке провайдерской сети не будет необходимости, так как LDP всё сделает за нас.

Last updated

Was this helpful?