1. Amaç

İlk yazıda OSPF ve LDP ile PE’ler arasında bir LSP kurdum, ikincisinde bunun üstüne VPLS bindirdim. Bu yazıda aynı çekirdeğin üstüne VPRN kuruyorum.

Hedef şu: iki farklı müşteri aynı IP aralığını kullansın (ikisinde de 192.168.1.0/24 ve 192.168.2.0/24 var), buna rağmen birbirlerinin trafiğini görmesin. Aynı PE’ler, aynı çekirdek, ama müşteriler birbirinden tamamen ayrı.

2. VPRN nedir, VPLS’ten farkı ne?

VPLS’te servis sağlayıcı müşteriye L2 taşır: CE’ler aynı switch’e bağlıymış gibi konuşur, IP’den PE’nin haberi yoktur. VPRN’de ise servis L3: PE, müşterinin router’ıyla routing konuşur ve müşteri için ayrı bir routing tablosu tutar.

Bunu bir apartman gibi düşün. Bina (MPLS çekirdeği) herkes için ortak. Ama her müşterinin kendi katı (VPRN) ve kendi kat planı (route table) var. İki katta da “3 numaralı oda” olabilir, karışmazlar.

Parçalar:

  • VPRN (VRF): PE üzerindeki müşteriye özel routing tablosu. Müşteri bu tablonun içini görür.
  • RD (Route Distinguisher): Aynı prefix’i iki müşteri kullansa bile BGP’de birbirinden ayırmak için prefix’in başına eklenen etiket. 192.168.1.0/24 yerine 65200:300:192.168.1.0/24 taşınır, yani VPN-IPv4 adresi olur.
  • RT (Route Target): Hangi rotanın hangi VPRN’e gireceğini belirleyen etiket. PE rotayı BGP’den alır, RT’sine bakar, eşleşen VPRN’e koyar.
  • MP-BGP (family vpn-ipv4): PE’ler arasında müşteri rotalarını taşıyan protokol. P router’ı bu işe hiç karışmaz.

Çekirdekte ise iki katmanlı label devreye girer: dış label LDP’den gelen transport label’ı (PE2’ye giden yol), iç label müşteriyi gösteren servis label’ı (hangi VPRN’e girecek). Yani VPLS’te SDP ile yaptığımızın karşılığını burada MP-BGP yapıyor.

3. Topoloji ve IP planı

VPRN lab topolojisi

Çekirdek önceki yazılardakiyle aynı: PE1 2.2.2.2, P 3.3.3.3, PE2 4.4.4.4, PE1-P arası 10.23.23.0, P-PE2 arası 10.34.34.0. OSPF ve LDP zaten çalışıyor, bu yazıda ona dokunmadım.

İki müşteri var ve ikisi de aynı iki subnet’i kullanıyor:

Müşteri AMüşteri B
VPRN ID300400
Customer ID1020
RD / RT65200:30065200:400
PE1 tarafıCE1 (1/1/1), 192.168.1.2PC1 (1/1/3), 192.168.1.3
PE1 VPRN arayüzü192.168.1.1/24192.168.1.1/24
PE2 tarafıCE2 (1/1/2), 192.168.2.2PC2 (1/1/3), 192.168.2.4
PE2 VPRN arayüzü192.168.2.1/24192.168.2.1/24

Müşteri B için ayrı vSIM açmadım, iki VPCS yeterli oldu. VPRN L3 olduğu için IP ve gateway veren bir host işimi görüyor, RAM’i de yormuyor.

Dikkat edilecek yer: PE1’de iki ayrı arayüze de 192.168.1.1/24 verdim (biri VPRN 300’de, biri 400’de). Normalde bir router’a aynı IP’yi iki arayüzde veremezsin. VPRN’de verebiliyorsun çünkü her VPRN ayrı bir routing tablosu.

AS numarası 65200, iki PE aynı AS’te.

4. Konfigürasyon

İki aşamada gittim. Önce temel hazırlık ve MP-BGP, sonra VPRN servisinin kendisi.

A1. CE’ler: IP ve varsayılan rota

CE müşteri router’ı. Tek işi PE’ye bakan bir arayüz ve “her şeyi PE’ye gönder” diyen bir default route.

CE1:

configure system name "CE1"
configure port 1/1/1 no shutdown
configure router
    interface "toPE1"
        address 192.168.1.2/24
        port 1/1/1
        no shutdown
    exit
    static-route 0.0.0.0/0 next-hop 192.168.1.1
exit
admin save

CE2:

configure system name "CE2"
configure port 1/1/2 no shutdown
configure router
    interface "toPE2"
        address 192.168.2.2/24
        port 1/1/2
        no shutdown
    exit
    static-route 0.0.0.0/0 next-hop 192.168.2.1
exit
admin save

CE’lerde daha önce başka bir adres (benim durumumda 192.168.10.x) verdiysen, önce o arayüzde no address yap, sonra yeni adresi gir.

A2. PE’lerde access port ve customer

PE1’de CE’ye bakan port 1/1/1, PE2’de 1/1/2. Port modunu değiştirmeden önce portu kapatmak gerekiyor:

configure port 1/1/1 shutdown
configure port 1/1/1 ethernet mode access
configure port 1/1/1 no shutdown
configure service customer 10 create
    description "MyCustomer"
exit
admin save

PE2’de aynısı, sadece port 1/1/2.

A3. PE’ler arasında MP-BGP

İki PE olduğu için tek oturum yeter: PE1 ile PE2. P router’ına hiç BGP yazmıyoruz.

PE1:

configure router autonomous-system 65200
configure router bgp
    group "PE"
        family vpn-ipv4
        peer-as 65200
        neighbor 4.4.4.4
            local-address 2.2.2.2
        exit
    exit
    no shutdown
exit
admin save

PE2’de aynısı, neighbor 2.2.2.2, local-address 4.4.4.4.

Satırların anlamı:

  • autonomous-system 65200: İki PE aynı AS’te, yani oturum iBGP.
  • family vpn-ipv4: VPN-IPv4 address family’yi açar. Bunu yazmazsan VPRN rotaları taşınmaz.
  • neighbor 4.4.4.4: Karşı PE’nin system IP’si. Aradaki P’yi atlayıp doğrudan oturum açıyoruz.
  • local-address 2.2.2.2: Oturumu kendi system IP’mizden başlatır. Karşı taraf neighbor olarak 2.2.2.2‘yi beklediği için ikisi birbirini tutmalı.

B. VPRN servisi

PE1’de Müşteri A için VPRN 300:

configure service vprn 300 customer 10 create
    route-distinguisher 65200:300
    auto-bind-tunnel
        resolution filter
        resolution-filter
            ldp
        exit
    exit
    vrf-target target:65200:300
    interface "toCE1" create
        address 192.168.1.1/24
        sap 1/1/1 create
        exit
    exit
    no shutdown
exit

info çıktısı şöyle görünüyor (customer ID info‘da değil show service id 300 base‘de görünüyor):

route-distinguisher 65200:300
auto-bind-tunnel
    resolution-filter
        ldp
    exit
    resolution filter
exit
vrf-target target:65200:300
interface "toCE1" create
    address 192.168.1.1/24
    sap 1/1/1 create
    exit
exit
no shutdown

Müşteri B için PE1’de VPRN 400, aynı yapı, farklı RD/RT ve arayüz:

configure service vprn 400 customer 20 create
    route-distinguisher 65200:400
    auto-bind-tunnel
        resolution filter
        resolution-filter
            ldp
        exit
    exit
    vrf-target target:65200:400
    interface "toCE3" create
        address 192.168.1.1/24
        sap 1/1/3 create
        exit
    exit
    no shutdown
exit

PE2’de aynı iki servis var. VPRN 400 için arayüz toCE3, adres 192.168.2.1/24, SAP 1/1/3. VPRN 300 için arayüz toCE2, adres 192.168.2.1/24, SAP 1/1/2.

Satırların anlamı:

  • route-distinguisher 65200:300: Bu VPRN’in rotalarına eklenen etiket. Müşteri A için 300, Müşteri B için 400.
  • vrf-target target:65200:300: RD’den ayrı bir şey. Hem export (rotayı BGP’ye verirken bu RT’yi ekle) hem import (bu RT’yi taşıyan rotaları bu VPRN’e al) için kullanılan tek satır. İki PE’de aynı değer olmalı, yoksa rotalar karşı tarafın VPRN’ine girmez.
  • auto-bind-tunnel altındaki resolution filter ve ldp: VPRN rotasının next-hop’unu (4.4.4.4) hangi tünelin taşıyacağını söyler. Burada “LDP ile kurulmuş LSP’yi kullan” diyorum. Bu olmadan rota tünele çözülmüyor, trafik gitmiyor.
  • interface ... sap 1/1/1: Müşteriye bakan L3 arayüz. SAP, fiziksel port ile servisi birbirine bağlar.

5. Doğrulama

BGP oturumu

show router bgp summary

Aşama A’nın sonunda oturum ayakta, VPN-IPv4 family açık ama henüz VPRN olmadığı için rota yok, satırın sonunda 0/0/0 (VpnIPv4) görünüyor. İki müşteri kurulunca PE1’de şu hali aldı:

Neighbor
Description
                   AS PktRcvd InQ  Up/Down   State|Rcv/Act/Sent (Addr Family)
                      PktSent OutQ
-------------------------------------------------------------------------------
4.4.4.4
                65200      46    0 00h20m55s 2/2/2 (VpnIPv4)
                           48    0
-------------------------------------------------------------------------------

2/2/2: PE2’den 2 rota alındı (Received), 2’si aktif (Active), PE2’ye 2 rota gönderildi (Sent). Rotalar da iki müşteriye ait: biri VPRN 300, biri VPRN 400.

VPN rotaları

show router bgp routes vpn-ipv4
Flag  Network                                            LocalPref   MED
      Nexthop (Router)                                   Path-Id     Label
      As-Path
-------------------------------------------------------------------------------
u*>i  65200:300:192.168.2.0/24                           100         None
      4.4.4.4                                            None        131070
      No As-Path
u*>i  65200:400:192.168.2.0/24                           100         None
      4.4.4.4                                            None        131066
      No As-Path

Satır başındaki işaretler: u rota kullanımda (used), * geçerli (valid), > en iyi yol seçilmiş (best), i iBGP’den öğrenilmiş demek.

İki rotada da dikkat çeken yer: aynı prefix (192.168.2.0/24) iki kez var, ama başlarındaki RD farklı (65200:300 ve 65200:400). RD’nin işi tam olarak bu: BGP aynı prefix’i iki ayrı rota olarak görüyor. Sağdaki Label sütunu ise PE2’nin her VPRN için ayrı verdiği servis label’ı (131070 ve 131066). Paket çekirdekten geçerken bu label iç label oluyor, PE2 de ona bakıp hangi VPRN’e gireceğini anlıyor. Yani PE2’nin gönderdiği rotayı PE1 aldı, geçerli ve kullanıyor.

Aynı adresler, iki ayrı dünya

show router 300 route-table
show router 400 route-table
Dest Prefix[Flags]                            Type    Proto     Age        Pref
      Next Hop[Interface Name]                                    Metric
-------------------------------------------------------------------------------
192.168.1.0/24                                Local   Local     00h26m14s  0
       toCE1                                                        0
192.168.2.0/24                                Remote  BGP VPN   00h21m14s  170
       4.4.4.4 (tunneled)                                           0
Dest Prefix[Flags]                            Type    Proto     Age        Pref
      Next Hop[Interface Name]                                    Metric
-------------------------------------------------------------------------------
192.168.1.0/24                                Local   Local     00h23m18s  0
       toCE3                                                        0
192.168.2.0/24                                Remote  BGP VPN   00h15m36s  170
       4.4.4.4 (tunneled)                                           0

İkisinde de 192.168.1.0/24 Local, 192.168.2.0/24 Remote. Aynı prefix iki ayrı tabloda duruyor, tek farkla: Local olan, VPRN 300’de toCE1 arayüzüne, VPRN 400’de toCE3 arayüzüne bakıyor. Remote rotada 4.4.4.4 (tunneled) yazması rotanın PE2’ye LDP tüneliyle gittiğini gösteriyor, yani auto-bind-tunnel işe yaramış. Proto BGP VPN, preference 170.

Bağlantı testi

Müşteri B’nin iki ofisi arasında PC1’den ping:

ping 192.168.2.4
PC1> ping 192.168.2.4

84 bytes from 192.168.2.4 icmp_seq=1 ttl=62 time=49.979 ms
84 bytes from 192.168.2.4 icmp_seq=2 ttl=62 time=33.060 ms

Ping gitti. TTL 62 geldi. Yolda IP katmanında sadece PE1 ve PE2 işlem yapıyor, P router’ı görünmüyor çünkü P paketi sadece label’a bakarak ilerletiyor.

İzolasyon testi

Yazının en önemli testi bu. PC1’den Müşteri A’nın CE2’sinin adresine ping:

ping 192.168.2.2
PC1> ping 192.168.2.2

192.168.2.2 icmp_seq=1 timeout
192.168.2.2 icmp_seq=2 timeout

Gitmedi. 192.168.2.2 Müşteri A’nın adresi. Müşteri B’nin VPRN’inde (400) böyle bir host yok, bu yüzden paket hiçbir yere varmıyor. Aynı çekirdek, aynı adres planı, ama iki müşteri birbirinin varlığından bile habersiz.

PC1’den iki ping: 192.168.2.4 gidiyor, 192.168.2.2 timeout

6. Nerede takıldım

Port mod değişikliği hata verdi

PE’de portu access moduna alırken hata aldım. Port açıkken mod değişmiyor, önce shutdown yapıp sonra ethernet mode access, sonra no shutdown. Daha önce o portta VPWS ya da VPLS servisi kurduysan ayrıca o servisi kaldırman gerekir.

CE’de eski adres duruyordu

CE’ye yeni IP girerken arayüzde eski adres kaldığı için hata aldım. Önce no address, sonra yeni adres.

BGP oturumu Idle’da kaldı

PE2’de show router bgp summary baktığımda komşu 2.2.2.2 şu haldeydi:

Neighbor
                   AS PktRcvd InQ  Up/Down   State|Rcv/Act/Sent (Addr Family)
                      PktSent OutQ
-------------------------------------------------------------------------------
2.2.2.2
                0           0    0 00h00m34s Idle
                            0    0

İki şey dikkat çekiyor: State Idle (router karşıya bağlanmayı denemiyor bile, Connect ya da Active görseydim karşı tarafı suçlardım) ve AS 0 (komşunun AS’i 65200 görünmeliydi).

Teşhiste işe yarayan komutlar:

configure router bgp info
show router bgp neighbor 2.2.2.2

İkincisi, bağlanamama sebebini Last Error gibi bir satırda yazıyor.

PE2’de trafik tek yönlü kaldı

Servis kurulduktan sonra PE2’de de PE1’deki gibi auto-bind-tunnel ayarının olup olmadığını kontrol etmek gerekiyor, çünkü yoksa trafik tek yönlü kalır. Bunun için:

show service id 400 base

Çıktıda şu satırlar olmalı:

Auto Bind Tunnel
Resolution        : filter
Filter Protocol   : ldp

7. Özet

  • VPRN, müşteriye L3 taşır. PE müşteri için ayrı bir routing tablosu tutar.
  • RD aynı prefix’i iki müşteri kullansa bile BGP’de ayırır, RT rotanın hangi VPRN’e gireceğini söyler.
  • PE’ler arasında rotaları MP-BGP (family vpn-ipv4) taşır, P router’ı BGP bilmez.
  • Çekirdekte iki label var: dış label LDP’den gelen transport, iç label servis (VPRN) label’ı.
  • İki müşteri aynı IP aralığını kullanabilir, 192.168.2.2 ile 192.168.2.4 aynı subnet’te olsa bile farklı VPRN’ler birbirini görmez.
  • Teşhis için: show router bgp summary (State ve AS sütunu), show router bgp neighbor, show router <vprn-id> route-table.

Zevkli bir konu ve lab oldu :)