Önceki yazıda tek müşterili bir VPRN kurmuştum. Bu yazıda asıl soruyu soruyorum: iki müşteri birebir aynı IP’leri kullanıyorsa ne olur? Gerçek hayatta bu çok normal. İki farklı şirketin ikisi de 172.16.10.0/24 ya da 10.100.1.1 kullanabilir. Operatörün omurgası bunları karıştırmadan taşıyabilmeli.
Cevap: RD ve RT. İkisi de ilk bakışta aynı şeye benziyor, ama farklı iş yapıyorlar. Bu yazı o farkı görmek için.
Not: Topoloji önceki yazıdaki laboratuvarın üstüne ekleme. Nokia tarafındaki karşılığı Nokia VPRN yazısında var, en altta kısa bir eşleme tablosu koydum.
Roller: P, PE ve CE
Laboratuvardaki her router bu üç rolden birini oynuyor. Paketin yolunu anlamak için önce bunları oturtmak lazım.
| Rol | Router’lar | Ne yapar |
|---|---|---|
| CE (Customer Edge) | R5, R6 (müşteri A), R7, R8 (müşteri B) | Müşterinin kendi router’ı. MPLS’ten, VRF’ten habersiz; düz IP konuşur. |
| PE (Provider Edge) | R1, R4 | Operatörün kenarı. Müşteriyi VRF’e bağlar, rotaları MP-BGP (VPNv4) ile taşır, pakete etiket giydirir. |
| P (Provider) | R2, R3 | Omurga. Müşteri rotası bilmez, VRF’i yoktur. Sadece dış etikete bakıp paketi iletir. |
Bu yüzden yeni müşteri eklerken P router’lara dokunmuyoruz: onlar için trafik sadece “1.1.1.1’e giden etiketli paket”.
1. Mantık: iki daire, iki müşteri
Bunu bir apartman gibi düşün. İki aile (müşteri A ve B) iki ayrı dairede oturuyor, ikisinin de kapısında “No: 1” yazıyor. Kimse karışmıyor, çünkü bina kapısındaki zil panosu daireyi ayırıyor.
- VRF (VPN instance): Dairenin kendisi. Müşteriye özel ayrı routing tablosu.
- RD (Route Distinguisher): Rotanın başına eklenen “daire numarası”.
65000:100:10.200.2.1/32ile65000:200:10.200.2.1/32BGP için iki ayrı rota. RD yalnızca benzersizlik sağlar, kimin neyi alacağına karışmaz. - RT (Route Target): “Bu rota hangi dairelere teslim edilsin?” etiketi. Export eden PE rotaya RT’yi yapıştırır, import eden PE sadece kendi VRF’inin RT’siyle eşleşenleri içeri alır.
Kısacası: RD çakışmayı önler, RT dağıtımı yönetir. İzolasyonun asıl bekçisi RT.
2. Topoloji ve IP planı
Önceki laboratuvar aynen duruyor (R1 = PE1, R2/R3 = P, R4 = PE2, R5/R6 = müşteri A). Üstüne iki CE ekliyorum: R7 ve R8, müşteri B.
| Router | Rol | Müşteri | Loopback1 |
|---|---|---|---|
| R5 | CE1 | A | 10.100.1.1/32 |
| R6 | CE2 | A | 10.200.2.1/32 |
| R7 | CE3 | B | 10.100.1.1/32 |
| R8 | CE4 | B | 10.200.2.1/32 |
| Link | Blok | Müşteri |
|---|---|---|
| R5–R1 | 172.16.10.0/24 | A |
| R7–R1 | 172.16.10.0/24 | B |
| R6–R4 | 172.16.20.0/24 | A |
| R8–R4 | 172.16.20.0/24 | B |
Bilerek her şey aynı: loopback adresleri de, link blokları da. Tek farklı olan, hangi VRF’e ait olduğu.
PE’lerde artık üç arayüz kullanılıyor (omurga, müşteri A, müşteri B). AR1220’de iki GE port var, üçüncü için AR2220 kullan (GE0/0/2) ya da cihaza bir arayüz modülü ekle. Aşağıda GigabitEthernet0/0/2 yazdım, modül eklersen arayüz adını ona göre değiştir.
| Müşteri A | Müşteri B | |
|---|---|---|
| VPN instance | VPRN_SERVICE (önceki yazıdan) | VPRN_B |
| RD | 65000:100 | 65000:200 |
| RT (import/export) | 65000:100 | 65000:200 |
| PE’de arayüz | GE0/0/0 | GE0/0/2 |
3. Kurulum
Omurga (OSPF, LDP) ve müşteri A hiç değişmiyor. Sadece yeni müşteriyi ekliyoruz.
Adım 1: PE’de ikinci VPN instance
R1 (PE1):
system-view
ip vpn-instance VPRN_B
ipv4-family
route-distinguisher 65000:200
vpn-target 65000:200 both
quit
quit
interface GigabitEthernet0/0/2
ip binding vpn-instance VPRN_B
ip address 172.16.10.1 24
quit
ip route-static vpn-instance VPRN_B 10.100.1.1 32 172.16.10.2
return
Dikkat: GigabitEthernet0/0/0 ve GigabitEthernet0/0/2 arayüzlerine aynı IP (172.16.10.1/24) verdik. Normalde bu “IP çakışması” demek, ama arayüzler farklı VRF’lerde olduğu için sorun yok. ip binding hâlâ IP’den önce yazılmalı, yoksa bağlama IP’yi siler.
R4 (PE2):
system-view
ip vpn-instance VPRN_B
ipv4-family
route-distinguisher 65000:200
vpn-target 65000:200 both
quit
quit
interface GigabitEthernet0/0/2
ip binding vpn-instance VPRN_B
ip address 172.16.20.1 24
quit
ip route-static vpn-instance VPRN_B 10.200.2.1 32 172.16.20.2
return
Adım 2: Yeni VRF’i BGP’ye anlatmak
İki PE’de de (R1 ve R4):
system-view
bgp 65000
ipv4-family vpn-instance VPRN_B
import-route static
quit
quit
return
VPNv4 komşuluğu zaten kurulu, yeni bir peer yazmıyoruz. Her yeni VRF için sadece bu blok gerekiyor.
Adım 3: CE’ler
R7 (CE3) ve R8 (CE4) düz router. R7:
system-view
sysname R7
interface GigabitEthernet0/0/0
ip address 172.16.10.2 24
quit
interface LoopBack1
ip address 10.100.1.1 32
quit
ip route-static 0.0.0.0 0 172.16.10.1
return
R8 aynı mantık: arayüz 172.16.20.2/24, loopback 10.200.2.1/32, varsayılan rota 172.16.20.1.
4. Doğrulama
Aynı prefix, iki ayrı rota
PE2’de BGP VPNv4 tablosuna bak:
<R4>display bgp vpnv4 all routing-table
Beklenen: 10.100.1.1/32 için iki ayrı blok görmelisin. Biri Route Distinguisher: 65000:100 altında, diğeri Route Distinguisher: 65000:200 altında. Prefix aynı, RD farklı, BGP bunları iki ayrı rota olarak taşıyor. RD’nin işi tam olarak bu.
Her VRF kendi tablosunu görüyor
<R4>display ip routing-table vpn-instance VPRN_SERVICE
<R4>display ip routing-table vpn-instance VPRN_B
İkisinde de 10.100.1.1/32 IBGP olarak, next-hop 1.1.1.1 ile görünmeli. Aynı prefix, aynı next-hop, iki ayrı tablo. İkisi birbirinden habersiz.
Uçtan uca ping
<R5>ping -a 10.100.1.1 10.200.2.1
<R7>ping -a 10.100.1.1 10.200.2.1
İkisi de cevap almalı. Ama ping’in doğru müşteriye gittiğini nasıl anlarız? Adresler birebir aynı, ping’e bakarak ayırt edemeyiz.
İzolasyon kanıtı: birini kapat
R8’in loopback’ini kapat:
<R8>system-view
[R8]interface LoopBack1
[R8-LoopBack1]shutdown
Sonra tekrar dene:
<R7>ping -a 10.100.1.1 10.200.2.1 (artık cevap gelmemeli)
<R5>ping -a 10.100.1.1 10.200.2.1 (hâlâ cevap vermeli)
Müşteri B’nin hedefi kapandı, müşteri A’nın hedefi hâlâ açık. R5’in ping’i B’nin kapanmasından etkilenmiyorsa, A’nın trafiği B’ye hiç sızmıyor demektir. Bu, aynı adresin iki ayrı yere gittiğinin en net kanıtı. Testi bitirince undo shutdown yapmayı unutma.
5. Kasıtlı hata denemeleri
İzolasyon RT’ye bağlı. RT’yi bozunca ne olduğunu görmek, mantığı oturtmak için iyi.
Deney 1: Import RT’si yanlış
R4’te VPRN_B’nin import RT’sini değiştir:
system-view
ip vpn-instance VPRN_B
ipv4-family
undo vpn-target 65000:200 import-extcommunity
vpn-target 65000:300 import-extcommunity
Beklenen: PE2’nin VRF B’si PE1’den gelen 10.100.1.1/32 rotasını artık içeri almaz (RT eşleşmiyor). Sonuç: R7’den R8’e giden paket hedefe ulaşır ama dönüş yolu yok, çünkü R4’ün VRF B tablosunda 10.100.1.1 yok. Ping başarısız olur. Müşteri A etkilenmez.
Ders: rota BGP’de var ama VRF’e girmedi. Sorun giderirken “BGP’de gördüm ama VRF’te yok” cümlesi çoğunlukla RT uyumsuzluğu demek. Kontrol: display bgp vpnv4 all routing-table içinde rota var mı, display ip routing-table vpn-instance VPRN_B içinde yok mu?
Denemeyi bitirince RT’yi geri al: undo vpn-target 65000:300 import-extcommunity ve vpn-target 65000:200 import-extcommunity.
Deney 2: İki müşteriye aynı RT
Şimdi daha tehlikelisi. VPRN_B’nin RT’sini A’nınkiyle aynı yap (iki PE’de de vpn-target 65000:100 both, eskisini undo ile kaldırarak). RD farklı kalsın (65000:200).
Beklenen: RD farklı olduğu için BGP rotaları ayrı tutar, ama RT aynı olduğu için iki VRF birbirinin rotalarını içeri alır. Aynı prefix için bir VRF’te iki aday rota olur ve BGP bunlardan birini best-path ile seçer. Yani müşteri A’nın trafiği, müşteri B’nin CE’sine gidebilir.
Sonuç: izolasyon bozuldu, ve hiçbir hata mesajı yok. Ping bile çalışıyor olabilir, bu yüzden en sinsi hata bu. Bu deneyi sadece laboratuvarda yap, gerçek ağda aynı RT’yi iki müşteriye vermek ciddi bir veri sızıntısı olur.
Her iki deneyde de çıktıyı kendin gör, çünkü hangi rotanın seçildiği (best-path) tie-break’e kalıyor ve laboratuvarına göre değişebilir.
Not: Bu iki denemenin sonuçları mantıktan çıkarılmış beklentilerdir; Deney 2’de hangi rotanın seçileceği tie-break’e kalıyor. Kendi laboratuvarında çıktıyı mutlaka kontrol et.
6. Paketin yolculuğu: etiketler nerede değişiyor?
R5’ten (müşteri A) R6’ya giden bir paketin hikâyesi, soldan sağa:
- CE → PE (R5 → R1): Düz IP paketi. Etiket yok. R1 paketin geldiği arayüzün VRF’ine (
VPRN_SERVICE) bakar. - PE girişi (R1): VRF tablosunda hedefin next-hop’u
4.4.4.4(R4) çıkar. R1 pakete iki etiket giydirir: içte servis (VPN) etiketi (R4’ün bu VRF için verdiği), dışta transport (LDP) etiketi (R4’e giden yol için). - P router’lar (R2, R3): Sadece dış etikete bakar. R2 etiketi SWAP eder. Sondan bir önceki router (R3) dış etiketi POP eder (PHP, penultimate hop popping). İç servis etiketine hiç dokunmazlar.
- PE çıkışı (R4): Pakette sadece servis etiketi kalmıştır. R4 bu etikete bakıp “bu paket hangi VRF’in?” sorusunu cevaplar, etiketi atar ve paketi doğru müşteriye (
VPRN_SERVICEya daVPRN_B) iletir. - PE → CE (R4 → R6): Yine düz IP.
Müşteri A ve B’nin adresleri aynı olduğu için paketleri birbirinden ayıran tek şey servis etiketi. Aynı hedef IP, ama iki farklı iç etiket, iki farklı VRF.
Bunu gözle görmek
Etiket değişimini sadece komut çıktısından okumak yerine tarayıcıda canlı izlemek için Simülasyon sayfasını yaptım. Yeni → Huawei → “MPLS L3VPN: 2 müşteri izolasyonu (VPRN)” labını açıyorsun (topoloji hazır, istersen konfigürasyonla birlikte de açılıyor). Sonra:
- Bir CE’den diğerine
pingat; paket kabloların üstünde hareket eder, PUSH / SWAP / POP etiketleri her atlamada görünür. - İleri moduyla animasyonu adım adım izle, her atlamada dur ve etiket yığınını oku.
- Katman sekmelerinden hem VPRN hem MPLS katmanını aynı anda aç.
- Bir arayüzü
shutdownyapıp izolasyonu kendi gözünle gör.
Not: Simülasyondaki etiket numaraları gösterim amaçlıdır, gerçek cihazda LDP’nin dağıttığı sayılar farklı olur. Mantık (PUSH/SWAP/POP, iki katmanlı yığın) gerçeğiyle aynı.
7. Nokia ile karşılaştırma
Nokia’da ikinci müşteri, yeni bir customer ve yeni bir vprn demek:
| Ne yapıyoruz | Nokia SR OS | Huawei VRP |
|---|---|---|
| İkinci müşteri | service customer 20 create | ayrı bir müşteri kavramı yok |
| İkinci VRF | service vprn 400 customer 20 create | ip vpn-instance VPRN_B |
| RD | route-distinguisher 65200:400 | route-distinguisher 65000:200 |
| RT | vrf-target target:65200:400 | vpn-target 65000:200 both |
| Arayüz | VPRN içinde interface + sap | ip binding vpn-instance VPRN_B |
| VRF tablosu | show router 400 route-table | display ip routing-table vpn-instance VPRN_B |
| VRF içinden ping | ping 10.200.2.1 router 400 | ping -vpn-instance VPRN_B 10.200.2.1 |
Nokia’da her müşteri kendi vprn bloğunda ve servis ID’siyle ayrılıyor, Huawei’de ayrım VPN instance adıyla yapılıyor. Mantık aynı: bir müşteri = bir VRF = bir RD = bir RT çifti.
8. Özet
- Aynı IP’leri kullanan iki müşteri aynı omurgada rahat yaşayabiliyor, çünkü her biri kendi VRF‘inde.
- RD rotayı BGP’de benzersiz yapar (aynı prefix, iki ayrı rota). RT rotanın hangi VRF’e gireceğini belirler.
- Yeni müşteri eklemek: PE’de yeni VPN instance, arayüzü
ip bindingile bağla (IP’den önce), BGP’deipv4-family vpn-instancebloğu. P router’lara ve VPNv4 komşuluğuna dokunmuyorsun. - İzolasyonu test etmenin en net yolu: bir müşterinin hedefini kapat, diğerinin ping’inin etkilenmediğini gör.
- Paket yolunda iki etiket vardır: dış (LDP, P router’lar swap/pop eder) ve iç (servis, PE’nin VRF’i seçmesini sağlar). Aynı IP’li iki müşteriyi ayıran şey iç etikettir.
- En sinsi hata RT’nin yanlış yapılması: ya rota VRF’e hiç girmez (Deney 1), ya da iki müşteri birbirinin rotalarını görür (Deney 2).