Как стать автором
Поиск
Написать публикацию
Обновить

Настройка VPLS Multihoming на маршрутизаторах Juniper

Время на прочтение13 мин
Количество просмотров28K
Технология VPLS уже давно зарекомендовала себя как способ объединения географически разнесенных объектов в единую L2-сеть. Такое решение хорошо масштабируется по сравнению с классической L2-сетью и позволяет избавиться от проблем L2-петель в ядре сети. Однако, часто возникает необходимость организации резервных каналов от абонента к VPLS-облаку. В такой ситуации есть опасность образования петель на участке PE-CE. Для решения этой проблемы существует несколько подходов. Вот некоторые из них:
  • BGP-Based VPLS Multihoming
  • Связка VPLS и STP
  • MC-LAG

В данной статье я бы хотел рассмотреть первые два подхода.

Содержание


Настройка транспорта

BGP-Based VPLS Multihoming

Связка VPLS и STP

Выводы
Материалы, использованные при написании статьи

Дисклеймер


Основная цель данной статьи — представить рабочую конфигурацию достаточно комплексного решения. При написании я не ставил себе цель глубоко вдаваться в теорию и пояснять тонкости работы тех или иных протоколов, о которых пойдет речь. Подразумевается, что читатель хорошо знаком с работой MPLS, BGP и Spanning-tree протоколов.

Настройка транспорта


Ниже представлена топология, которую я буду использовать в этой статье.



Сеть провайдера состоит из PE и P маршрутизаторов (Juniper MX), все они находятся в OSPF Area 0 и BGP AS 65412. Абонентская сеть — это три коммутатора (Cisco Catalyst), на каждом из которых поднят Vlan 10 и RPVST-версия Spanning-tree протокола (VSTP в терминологии Juniper).

Прежде чем начинать настройку VPLS, необходимо поднять MPLS-транспорт. Для сигнализации LSP в данном примере используется протокол RSVP. Для краткости я привожу конфигурации только двух маршрутизаторов, остальные легко настроить по аналогии.

Базовая настройка PE-маршрутизаторов на примере PE1

PE1 base config
system {
  host-name PE1;
}
interfaces {
  ge-0/0/0 {
    encapsulation flexible-ethernet-services;
    flexible-vlan-tagging;
    unit 10 {
      encapsulation vlan-vpls;
      vlan-id 10;
    }  
  }
  ge-0/0/1 {
    mtu 2000;
    unit 0 {
      family inet {
        address 10.0.11.1/30;
      }
      family mpls;
    }
  }
  ge-0/0/2 {
    mtu 2000;
    unit 0 {
      family inet {
        address 10.0.12.1/30;
      }
      family mpls;
    }
  }
  lo0 {
    unit 0 {
      family inet {
        address 10.0.0.1/32;
      }
    }
  }
}
routing-options {
    router-id 10.0.0.1;
    autonomous-system 65412;
}
protocols {
  rsvp {
      interface lo0.0;
      interface ge-0/0/1.0;
      interface ge-0/0/2.0;
  }
  mpls {
      label-switched-path PE1-PE2 {
          to 10.0.0.2;
          no-cspf;
      }
      label-switched-path PE1-PE3 {
          to 10.0.0.3;
          no-cspf;
      }
      label-switched-path PE1-PE4 {
          to 10.0.0.4;
          no-cspf;
      }
      interface ge-0/0/1.0;
      interface ge-0/0/2.0;
  }
  ospf {
      area 0.0.0.0 {
          interface ge-0/0/1.0 {
              interface-type p2p;
          }
          interface ge-0/0/2.0 {
              interface-type p2p;
          }
          interface lo0.0;
    }
  }
}   


Параметры flexible-vlan-tagging и flexible-ethernet-sevices позволяют настраивать на физическом интерфейсе не только VPLS, но и другие сервисы, используя разные логические юниты. Если интерфейс планируется использовать только под VPLS, то следует указать encapsulation ethernet-vpls или vlan-vpls. Подробнее тут.

Базовая настройка P-маршрутизаторов на примере P1

P1 base config
system {
  host-name P1;
}
interfaces {
  ge-0/0/0 {
    mtu 2000;
    unit 0 {
      family inet {
        address 10.0.11.2/30;
      }
      family mpls;
    }
  }
  ge-0/0/1 {
    mtu 2000;
    unit 0 {
      family inet {
        address 10.0.13.2/30;
      }
      family mpls;
    }
  }
  ge-0/0/2 {
    mtu 2000;
    unit 0 {
      family inet {
        address 10.0.21.1/30;
      }
      family mpls;
    }
  }
  lo0 {
    unit 0 {
      family inet {
        address 10.0.0.11/32;
      }
    }
  }
}
routing-options {
    router-id 10.0.0.11;
    autonomous-system 65412;
}
protocols {
  rsvp {
      interface lo0.0;
      interface ge-0/0/0.0;
      interface ge-0/0/1.0;
      interface ge-0/0/2.0;
  }
  mpls {
      interface ge-0/0/0.0;
      interface ge-0/0/1.0;
      interface ge-0/0/2.0;
  }
  ospf {
      area 0.0.0.0 {
          interface ge-0/0/0.0 {
            interface-type p2p;
          }
          interface ge-0/0/1.0 {
              interface-type p2p;
          }
          interface ge-0/0/2.0 {
              interface-type p2p;
          }
          interface lo0.0;
    }
  }
}

Проверяем, что MPLS поднялся и работает:
lab@PE1> traceroute mpls rsvp PE1-PE2    
  Probe options: retries 3, exp 7

  ttl    Label  Protocol    Address          Previous Hop     Probe Status
    1                       10.0.12.2        (null)           Egress            

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


lab@PE1> traceroute mpls rsvp PE1-PE3    
  Probe options: retries 3, exp 7

  ttl    Label  Protocol    Address          Previous Hop     Probe Status
    1   299888  RSVP-TE     10.0.11.2        (null)           Success           
    2        3  RSVP-TE     10.0.13.1        10.0.11.2        Egress            

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


lab@PE1> traceroute mpls rsvp PE1-PE4    
  Probe options: retries 3, exp 7

  ttl    Label  Protocol    Address          Previous Hop     Probe Status
    1   299936  RSVP-TE     10.0.11.2        (null)           Success           
    2   299792  RSVP-TE     10.0.13.1        10.0.11.2        Success           
    3        3  RSVP-TE     10.0.34.2        10.0.13.1        Egress            

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

Базовая настройка CE-коммутаторов

CE1 base config
hostname CE1
!
spanning-tree mode rapid-pvst
spanning-tree extend system-id
!
vlan 10
!
interface GigabitEthernet0/0
 switchport trunk allowed vlan 10
 switchport trunk encapsulation dot1q
 switchport mode trunk
!
interface Vlan10
 ip address 192.168.10.1 255.255.255.0
 no shutdown
!

CE2 base config
hostname CE2
!
spanning-tree mode rapid-pvst
spanning-tree extend system-id
!
vlan 10
!
interface GigabitEthernet0/0
 switchport trunk allowed vlan 10
 switchport trunk encapsulation dot1q
 switchport mode trunk
!
interface Vlan10
 ip address 192.168.10.2 255.255.255.0
 no shutdown
!

CE3 base config
hostname CE3
!
spanning-tree mode rapid-pvst
spanning-tree extend system-id
!
vlan 10
!
interface GigabitEthernet0/0
 switchport trunk allowed vlan 10
 switchport trunk encapsulation dot1q
 switchport mode trunk
!
interface GigabitEthernet0/1
 switchport trunk allowed vlan 10
 switchport trunk encapsulation dot1q
 switchport mode trunk
!
interface Vlan10
 ip address 192.168.10.3 255.255.255.0
 no shutdown
!


Теперь можно перейти непосредственно к настройки сервиса VPLS.

BGP-Based VPLS Multihoming


В первую очередь я бы хотел рассмотреть «классическую», с точки зрения Juniper, реализацию VPLS с использованием BGP сигнализации (RFC 4761). С точки зрения control plane это мало чем отличается от обычного L3VPN — здесь также используются Route Distinguisher и Route Target, а в качестве address family указывается l2vpn.
Для начала нужно настроить сам протокол BGP. Так как для корректной работы iBGP необходима полная связность внутри сети, я использовал P1 и P2 в качестве route-reflector, для упрощения конфигурации.

Настройка BGP

PE-маршрутизаторы:
PE BGP config
protocols {
  bgp {
    group IBGP {
      type internal;
      local-address 10.0.0.X;
      family l2vpn {
        signaling;
      }
      neighbor 10.0.0.11;
      neighbor 10.0.0.22;
    }
  }
}

где X — номер соответствующего PE


P1
P1 BGP config
routing-options {
  rib inet.3 {
    static {
      route 10.0.0.0/24 discard;
    }
  }
}
protocols {
  bgp {
    group IBGP {
      type internal;
      local-address 10.0.0.11;
      family l2vpn {
          signaling;
      }
      cluster 10.0.0.0;
      neighbor 10.0.0.1;
      neighbor 10.0.0.2;
      neighbor 10.0.0.3;
      neighbor 10.0.0.4;
    }
  }
}


P2
P2 BGP config
routing-options {
  rib inet.3 {
    static {
      route 10.0.0.0/24 discard;
    }
  }
}
protocols {
  bgp {
    group IBGP {
      type internal;
      local-address 10.0.0.22;
      family l2vpn {
          signaling;
      }
      cluster 10.0.0.0;
      neighbor 10.0.0.1;
      neighbor 10.0.0.2;
      neighbor 10.0.0.3;
      neighbor 10.0.0.4;
    }
  }
}

Тут стоит отметить блок routing-options. Когда route-reflector получает маршрут от своего клиента, прежде чем анонсировать его остальным клиентам, он проверяет доступность next-hop в таблице inet.3. Так как при первоначальной настройке MPLS на P-маршрутизаторах, я не стал создавать LSP до PE-маршрутизаторов, эта таблица пуста и, соответственно, проверка не срабатывает. Маршруты полученные от RR-клиентов помечаются как hidden и не анонсируются дальше. Конечно, можно создать LSP от RR до каждого PE, но это трудоемко, к тому же эти LSP никогда не будут использоваться для передачи трафика. Гораздо проще и элегантнее создать статический маршрут до lo0 сети.

На данный момент BGP связность должна работать между всеми PE-маршрутизаторами, но им пока что нечего анонсировать. Можно переходить к настройке VPLS.

Настройка VPLS

PE1
PE1 BGP VPLS config
routing-instances {
  VPLS {
    instance-type vpls;
    interface ge-0/0/0.10;
    route-distinguisher 10.0.0.1:1;
    vrf-target target:65412:10;
    protocols {
      vpls {
        no-tunnel-services;
        site CE1 {  
          site-identifier 1;
          interface ge-0/0/0.10;
        }
      }
    }
  }
}

PE2
PE2 BGP VPLS config
routing-instances {
  VPLS {
    instance-type vpls;
    interface ge-0/0/0.10;
    route-distinguisher 10.0.0.2:1;
    vrf-target target:65412:10;
    protocols {
      vpls {
        no-tunnel-services;
        site CE2 {  
          site-identifier 2;
          interface ge-0/0/0.10;
        }
      }
    }
  }
}

Тут все достаточно просто: создаем routing-instance с типом vpls, назначаем RD и RT, указываем интерфейсы в сторону CE и уникальный site-identifier.
Проверяем:
lab@PE1> show vpls connections 
Layer-2 VPN connections:
<...>
Instance: VPLS
  Local site: CE1 (1)
    connection-site           Type  St     Time last up          # Up trans
    2                         rmt   Up     May 30 17:29:28 2015           1
      Remote PE: 10.0.0.2, Negotiated control-word: No
      Incoming label: 262146, Outgoing label: 262145
      Local interface: lsi.1048576, Status: Up, Encapsulation: VPLS
        Description: Intf - vpls VPLS local site 1 remote site 2

lab@PE2> show vpls connections 
Layer-2 VPN connections:
<...>
Instance: VPLS
  Local site: CE2 (2)
    connection-site           Type  St     Time last up          # Up trans
    1                         rmt   Up     May 30 17:29:30 2015           1
      Remote PE: 10.0.0.1, Negotiated control-word: No
      Incoming label: 262145, Outgoing label: 262146
      Local interface: lsi.1048576, Status: Up, Encapsulation: VPLS
        Description: Intf - vpls VPLS local site 2 remote site 1

VPLS-соединения поднялись. Можно проверить связность CE1 и CE2:
CE1>ping 192.168.10.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.10.2, timeout is 2 seconds:
.!!!!
Success rate is 80 percent (4/5), round-trip min/avg/max = 10/119/207 ms

Настройка Multihoming

Как видно из топологии, коммутатор CE3 соединяется одновременно с двумя PE-маршрутизаторами. Здесь для избежания возникновения L2-петель необходимо задействовать механизм Multihoming. Рассмотрим настройки PE3 и PE4.

PE3
PE3 VPLS config
routing-instances {
  VPLS {
    instance-type vpls;
    interface ge-0/0/0.10;
    route-distinguisher 10.0.0.3:1;
    vrf-target target:65412:10;
    protocols {
      vpls {
        no-tunnel-services;
        site CE3 {  
          site-identifier 3;
          multi-homing;
          site-preference primary;
          interface ge-0/0/0.10;
        }
      }
    }
  }
}

PE4
PE4 VPLS config
routing-instances {
  VPLS {
    instance-type vpls;
    interface ge-0/0/0.10;
    route-distinguisher 10.0.0.4:1;
    vrf-target target:65412:10;
    protocols {
      vpls {
        no-tunnel-services;
        site CE3 {  
          site-identifier 3;
          multi-homing;
          site-preference backup;
          interface ge-0/0/0.10;
        }
      }
    }
  }
}

В отличие от предыдущих конфигураций PE1 и PE2 здесь добавляется два параметра:
  • multi-homing — указывает маршрутизатору, что он подключен к multihomed сайту;
  • site-preference — значение от 1 (primary) до 65535 (backup), анонсируемое другим PE как BGP community.

При этом указывается одинаковый site-identifier на обоих PE. Таким образом PE3 и PE4 анонсируют один и тот же l2vpn-маршрут, отличающийся только параметром site-preference. Маршрут с наивысшим site-preference, т.е. маршрут от PE3, выигрывает и весь l2vpn трафик от PE1 и PE2 начинает идти через PE3. Интерфейс ge-0/0/0 на PE4 не пропускает трафик.
lab@PE1> show vpls connections 
Layer-2 VPN connections:
<...>
Instance: VPLS
  Local site: CE1 (1)
    connection-site           Type  St     Time last up          # Up trans
    2                         rmt   Up     May 30 17:29:28 2015           1
      Remote PE: 10.0.0.2, Negotiated control-word: No
      Incoming label: 262146, Outgoing label: 262145
      Local interface: lsi.1048576, Status: Up, Encapsulation: VPLS
        Description: Intf - vpls VPLS local site 1 remote site 2
    3                         rmt   Up     May 30 20:16:41 2015           1
      Remote PE: 10.0.0.3, Negotiated control-word: No
      Incoming label: 262147, Outgoing label: 262145
      Local interface: lsi.1048579, Status: Up, Encapsulation: VPLS
        Description: Intf - vpls VPLS local site 1 remote site 3

lab@PE2> show vpls connections 
Layer-2 VPN connections:
<...>
Instance: VPLS
  Local site: CE2 (2)
    connection-site           Type  St     Time last up          # Up trans
    1                         rmt   Up     May 30 17:29:30 2015           1
      Remote PE: 10.0.0.1, Negotiated control-word: No
      Incoming label: 262145, Outgoing label: 262146
      Local interface: lsi.1048576, Status: Up, Encapsulation: VPLS
        Description: Intf - vpls VPLS local site 2 remote site 1
    3                         rmt   Up     May 30 20:16:42 2015           1
      Remote PE: 10.0.0.3, Negotiated control-word: No
      Incoming label: 262147, Outgoing label: 262146
      Local interface: lsi.1048578, Status: Up, Encapsulation: VPLS
        Description: Intf - vpls VPLS local site 2 remote site 3

lab@PE3> show vpls connections 
Layer-2 VPN connections:
<...>
Instance: VPLS
  Local site: CE3 (3)
    connection-site           Type  St     Time last up          # Up trans
    1                         rmt   Up     May 30 20:16:35 2015           1
      Remote PE: 10.0.0.1, Negotiated control-word: No
      Incoming label: 262145, Outgoing label: 262147
      Local interface: lsi.1048833, Status: Up, Encapsulation: VPLS
        Description: Intf - vpls VPLS local site 3 remote site 1
    2                         rmt   Up     May 30 20:16:35 2015           1
      Remote PE: 10.0.0.2, Negotiated control-word: No
      Incoming label: 262146, Outgoing label: 262147
      Local interface: lsi.1048832, Status: Up, Encapsulation: VPLS
        Description: Intf - vpls VPLS local site 3 remote site 2
    3                         rmt   RN   

lab@PE4> show vpls connections 
Layer-2 VPN connections:
<...>
Instance: VPLS
  Local site: CE3 (3)
    connection-site           Type  St     Time last up          # Up trans
    1                         rmt   LN   
    2                         rmt   LN   
    3                         rmt   LN   

Следует обратить внимание, что на PE4 все VPLS соединения находятся в состоянии LN — local site not designated. Это говорит о том, что PE4 не участвует в передаче VPLS трафика
При падении линка PE3-CE3 или при потере связности PE3 с остальной сетью, маршрутизатор перестает анонсировать l2vpn маршрут, PE4 начинает пропускать трафик на интерфейсе ge-0/0/0, а PE1 и PE2 начинают маршрутизировать трафик в сторону PE4. Скорость переключения каналов в данном случае зависит от скорости схождения BGP.

Связка VPLS и STP


Теперь к самому интересному. Рассмотрим топологию, в которой CE1 и CE2 соединены между собой.



При использовании BGP-Based Multihoming в такой топологии, все будет хорошо до тех пор пока не порвется линк CE1-CE2. PE-маршрутизаторы не узнают об изменении топологии и, в случае, когда, например, PE1 будет основным маршрутизатором, трафик к CE2 продолжит идти через PE1 и будет сбрасываться.
Чтобы изменения топологии в CE-сегменте передавались в VPLS-сегмент, необходимо настроить взаимодействие STP и VPLS.

Ниже немного высокоуровневой теории как это должно работать.
Рассмотрим штатную ситуацию, когда работают все линки.



  1. PE1 и PE2 участвуют как в STP, так и в VPLS доменах
  2. STP домен является локальным для CE1, CE2, PE1, PE2 и не распространяется на PE3, PE4 и CE3
  3. STP на PE1 и PE2 настроен так, что PE1 — это root бридж, а PE2 — backup root
  4. На портах PE1 и PE2 смотрящих в сторону CE настроен root protect. Таким образом, когда на порт PE2 приходит BPDU от PE1, этот порт блокируется
  5. На PE1 и PE2 подняты PW (pseudowires) друг до друга и до PE3 и PE4 (полная связность), при этом PE2 сигнализирует свои PW как standby (показаны пунктиром), потому что порт в сторону CE2 находится в заблокированном состоянии


Предположим, что линк CE1-CE2 порвался.



В домене STP:
  1. CE1 и CE2 отправляют Topology Change Notification
  2. CE1 и CE2 сбрасывают MAC-таблицы
  3. PE2 становится root бриджем в своем сегменте
  4. PE1 остается root бриджем
  5. PE2 разблокирует порт в сторону CE2, т.к. перестает получать BPDU от PE1

В домене VPLS:
  1. PE2 переводит свои PW в состояние Up, потому что порт в сторону CE2 больше не блокируется
  2. PW на PE1 остаются в состоянии Up как и раньше
  3. PE2 посылает сигнал PE3 и PE4 сбросить MAC-адреса, полученные от PE1
  4. PE3 и PE4 начинают использовать и PE1 и PE2 для передачи трафика до CE1 и CE2

При восстановлении линка CE1-CE2 снова отправляется TCN и сценарий повторяется, с тем различием, что линк PE2-CE2 блокируется.

Теперь перейдем к настройке. Сразу отмечу, что мне удалось воссоздать такое поведение только с использованием протокола LDP для VPLS сигнализации (RFC 4762), хотя нигде в официальной документации об этом не написано (поправьте, если ошибаюсь).

Настройка STP

В отличие от обычных коммутаторов, чтобы настроить STP на маршрутизаторах серии MX, необходимо создать routing-instance с типом layer2-control.

PE1 и PE3
PE1 & PE3 STP config
routing-instances {
  STP {
    instance-type layer2-control;
    protocols {
      vstp {
        interface ge-0/0/0 {
          mode point-to-point;
          no-root-port;
        }
        vlan 10 {
          bridge-priority 24k;
        }
      }
    }
  }
}


PE2 и PE4
PE2 & PE4 STP config
routing-instances {
  STP {
    instance-type layer2-control;
    protocols {
      vstp {
        interface ge-0/0/0 {
          mode point-to-point;
          no-root-port;
        }
        vlan 10 {
          bridge-priority 28k;
        }
      }
    }
  }
}

Проверяем работу STP
lab@PE1> show spanning-tree interface ge-0/0/0 routing-instance STP 

Spanning tree interface parameters for VLAN 10

Interface    Port ID    Designated      Designated         Port    State  Role
                         port ID        bridge ID          Cost
ge-0/0/0         128:1        128:1  24586.00058671c3d0     20000  FWD    DESG 

lab@PE2> show spanning-tree interface ge-0/0/0 routing-instance STP 

Spanning tree interface parameters for VLAN 10

Interface    Port ID    Designated      Designated         Port    State  Role
                         port ID        bridge ID          Cost
ge-0/0/0         128:1        128:1  32778.500000080000     20000  BLK    ALT (Root-Prev)

STP отрабатывает как и должен — порт в сторону CE2 блокируется по root protect.

Настройка VPLS на LDP

В отличие от BGP, при настройки VPLS с LDP-сигнализацией, необходимо вручную указывать IP-адреса всех PE-маршрутизаторов участвующих в VPLS.
PE1
PE1 LDP VPLS config
protocols {
  ldp {
    interface lo0.0;
  }
}
routing-instances {
  VPLS {
    instance-type vpls;
    interface ge-0/0/0.10;
    protocols {
      vpls {
          no-tunnel-services;
          vpls-id 1;
          mac-flush;
          neighbor 10.0.0.2;
          neighbor 10.0.0.3;
          neighbor 10.0.0.4;
      }
    }
  }
}

Ключевой параметр здесь — это mac-flush. Без него маршрутизаторы не будут сбрасывать таблицу MAC-адресов при изменении топологии.
На PE2, PE3, PE4 настройки абсолютно идентичные за исключением строк neighbor.

Проверяем работу LDP
lab@PE1> show ldp neighbor 
Address            Interface          Label space ID         Hold time
10.0.0.2           lo0.0              10.0.0.2:0               33
10.0.0.3           lo0.0              10.0.0.3:0               44
10.0.0.4           lo0.0              10.0.0.4:0               41

LDP соединения поднялись, смотрим, что с VPLS
lab@PE1> show vpls connections 
Layer-2 VPN connections:
<...>
Instance: VPLS
  VPLS-id: 1
    Neighbor                  Type  St     Time last up          # Up trans
    10.0.0.2(vpls-id 1)       rmt   Up     May 30 23:50:32 2015           1
      Remote PE: 10.0.0.2, Negotiated control-word: No
      Incoming label: 262401, Outgoing label: 262401
      Negotiated PW status TLV: No
      Local interface: lsi.1048580, Status: Up, Encapsulation: ETHERNET
        Description: Intf - vpls VPLS neighbor 10.0.0.2 vpls-id 1
      Flow Label Transmit: No, Flow Label Receive: No
    10.0.0.3(vpls-id 1)       rmt   Up     May 30 23:51:49 2015           1
      Remote PE: 10.0.0.3, Negotiated control-word: No
      Incoming label: 262402, Outgoing label: 262401
      Negotiated PW status TLV: No
      Local interface: lsi.1048581, Status: Up, Encapsulation: ETHERNET
        Description: Intf - vpls VPLS neighbor 10.0.0.3 vpls-id 1
      Flow Label Transmit: No, Flow Label Receive: No
    10.0.0.4(vpls-id 1)       rmt   Up     May 30 23:52:00 2015           1
      Remote PE: 10.0.0.4, Negotiated control-word: No
      Incoming label: 262403, Outgoing label: 262401
      Negotiated PW status TLV: No
      Local interface: lsi.1048582, Status: Up, Encapsulation: ETHERNET
        Description: Intf - vpls VPLS neighbor 10.0.0.4 vpls-id 1
      Flow Label Transmit: No, Flow Label Receive: No

lab@PE2> show vpls connections 
Layer-2 VPN connections:
<...>
Instance: VPLS
  VPLS-id: 1
    Neighbor                  Type  St     Time last up          # Up trans
    10.0.0.1(vpls-id 1)       rmt   ST   
    10.0.0.3(vpls-id 1)       rmt   ST   
    10.0.0.4(vpls-id 1)       rmt   ST   

Тут тоже все в порядке. На PE2 соединения в состоянии standby.
Проверяем что CE3 может пинговать CE2. Трафик при этом должен пройти через PE3, PE1 и CE1.
CE3>ping 192.168.10.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.10.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 12/14/18 ms

Смотрим таблицу MAC-адресов на PE3
lab@PE3> show vpls mac-table 

MAC flags (S -static MAC, D -dynamic MAC, L -locally learned, C -Control MAC
           SE -Statistics enabled, NM -Non configured MAC, R -Remote PE MAC)

Routing instance : VPLS
 Bridging domain : __VPLS__, VLAN : NA
   MAC                 MAC      Logical          NH     RTR
   address             flags    interface        Index  ID
   50:00:00:08:80:0a   D        lsi.1049088     
   50:00:00:09:80:0a   D        ge-0/0/0.10     

Здесь 50:00:00:08:80:0a — MAC-адрес интерфейса Vlan10 на CE2, lsi.1049088 — PW от PE3 до PE1.

Теперь разорвем линк CE1-CE2 и посмотрим, что изменилось
lab@PE1> show spanning-tree interface ge-0/0/0 routing-instance STP    

Spanning tree interface parameters for VLAN 10

Interface    Port ID    Designated      Designated         Port    State  Role
                         port ID        bridge ID          Cost
ge-0/0/0         128:1        128:1  24586.00058671c3d0     20000  FWD    DESG 

lab@PE2> show spanning-tree interface ge-0/0/0 routing-instance STP    

Spanning tree interface parameters for VLAN 10

Interface    Port ID    Designated      Designated         Port    State  Role
                         port ID        bridge ID          Cost
ge-0/0/0         128:1        128:1  28682.0005867142d0     20000  FWD    DESG 

Интерфейс PE2 в сторону CE2 перешел в состояние Forwarding как и должен был.
Снова пингуем PE2
CE3>ping 192.168.10.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.10.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 7/13/19 ms

Смотрим таблицу MAC на PE3
lab@PE3> show vpls mac-table      

MAC flags (S -static MAC, D -dynamic MAC, L -locally learned, C -Control MAC
           SE -Statistics enabled, NM -Non configured MAC, R -Remote PE MAC)

Routing instance : VPLS
 Bridging domain : __VPLS__, VLAN : NA
   MAC                 MAC      Logical          NH     RTR
   address             flags    interface        Index  ID
   50:00:00:08:80:0a   D        lsi.1049089     
   50:00:00:09:80:0a   D        ge-0/0/0.10     

Как можно заметить MAC CE2 теперь на интерфейсе lsi.1049089, а это PW до PE2.

Выводы


Как видно из статьи, организация VPLS Multihoming — не самая тривиальная задача со своими подводными камнями. Оба описанных мной подхода к решению этой задачи имеют свои преимущества и недостатки и применимы только в определенных ситуациях. К общему недостатку VPLS Multihoming можно отнести невозможность одновременного использования двух аплинков. Если такой функционал необходим, следует смотреть в сторону технологии EVPN, которая постепенно приходит на замену VPLS.

Материалы, использованные при написании статьи


  1. Juniper Networks Warrior: A Guide to the Rise of Juniper Networks Implementations by Peter Southwick
  2. Implementing Provider-Provisioned VPNs Using Route Reflectors
  3. MPLS/RSVP configuration & troubleshooting
  4. VPLS on Junos Signalled via LDP or BGP
  5. Advanced VPLS
Теги:
Хабы:
Всего голосов 11: ↑10 и ↓1+9
Комментарии9

Публикации

Ближайшие события