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/24yerine65200:300:192.168.1.0/24taşı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ı

Ç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 A | Müşteri B | |
|---|---|---|
| VPRN ID | 300 | 400 |
| Customer ID | 10 | 20 |
| RD / RT | 65200:300 | 65200:400 |
| PE1 tarafı | CE1 (1/1/1), 192.168.1.2 | PC1 (1/1/3), 192.168.1.3 |
| PE1 VPRN arayüzü | 192.168.1.1/24 | 192.168.1.1/24 |
| PE2 tarafı | CE2 (1/1/2), 192.168.2.2 | PC2 (1/1/3), 192.168.2.4 |
| PE2 VPRN arayüzü | 192.168.2.1/24 | 192.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 olarak2.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-tunnelaltındakiresolution filterveldp: 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.

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.2ile192.168.2.4aynı 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 :)