BGP ile calisan her network muhendisinin ilk ogrenmesi gereken konulardan biri local-preference degeridir. Cunku local preference, bir AS icinde cikis yonunu belirlemek icin kullanilan en temel BGP attribute’larindan biridir.
Kisa tanimla local preference, router’in bir hedef prefix’e ulasmak icin hangi cikis noktasini tercih edecegini belirler. Deger ne kadar yuksekse, o path o kadar tercih edilir.
Ornegin bir network’un iki farkli upstream provider’a bagli oldugunu dusunelim:
+-------------+
| AS65000 |
+-------------+
| |
ISP-A | | ISP-B
| |
AS64501 AS64502
Normal sartlarda BGP, best path secimini AS path, origin, MED, eBGP/iBGP gibi attribute’lara bakarak yapar. Fakat operator olarak bizim “bu prefix’lere cikarken ISP-A kullanilsin” deme ihtiyacimiz olabilir. Iste bu noktada local preference devreye girer.
Genel kabul gormus varsayilan local preference degeri 100 olarak dusunulur. Eger ISP-A tarafindan gelen route’lara 200, ISP-B tarafindan gelen route’lara 100 verirsek, AS icindeki router’lar cikis icin ISP-A’yi tercih eder.
Juniper tarafinda basit bir policy su sekilde yazilabilir:
policy-options {
policy-statement SET-LP-ISP-A {
then {
local-preference 200;
accept;
}
}
}
protocols {
bgp {
group ISP-A {
type external;
peer-as 64501;
neighbor 192.0.2.1 {
import SET-LP-ISP-A;
}
}
}
}
Cisco IOS-XE tarafinda benzer mantik route-map ile uygulanabilir:
route-map SET-LP-ISP-A permit 10
set local-preference 200
router bgp 65000
neighbor 192.0.2.1 remote-as 64501
neighbor 192.0.2.1 route-map SET-LP-ISP-A in
Burada dikkat edilmesi gereken nokta sudur: local preference sadece AS icinde anlamlidir. Yani sizin verdiginiz local preference degeri upstream provider’a veya internetteki diger AS’lere tasinmaz. Bu attribute iBGP icinde yayilir, eBGP ile disariya aktarilmaz.
Local preference genelde su senaryolarda kullanilir:
- Primary / backup upstream secimi
- Transit cikislarini yonetmek
- Belirli prefix gruplarini belirli operatorlerden cikarmak
- Maliyet bazli trafik yonlendirme
- DDoS veya kapasite durumunda cikis degistirmek
Ornegin pahali bir transit operatorunuz ve daha ucuz bir transit operatorunuz varsa, genel cikisi ucuz transit uzerinden vermek isteyebilirsiniz. Fakat latency hassas prefix’ler icin farkli bir local preference kurgusu yapabilirsiniz.
Bir diger guzel kullanim alani IXP baglantilaridir. IXP uzerinden gelen route’lara transit route’lardan daha yuksek local preference vererek, mumkun oldugunca peering uzerinden cikis yapabilirsiniz.
Ornek politika:
IXP routes local-pref 300
Private peer local-pref 250
Paid transit local-pref 100
Backup transit local-pref 80
Bu tip bir hiyerarsi network’un cikis davranisini oldukca okunabilir hale getirir.
Fakat local preference yanlis kullanildiginda trafik asimetrisi, kapasite sorunu veya beklenmeyen cikis problemleri olusabilir. Ozellikle birden fazla router, route reflector ve cok sayida upstream olan yapilarda policy dokumantasyonu sarttir.
BGP’de iyi bir local preference tasarimi icin en basit kural sudur:
Once politika kararini ver,
sonra bunu tum routerlarda tutarli uygula,
en son best path sonucunu gercek route table uzerinden dogrula.
Kontrol icin Juniper’da:
show route protocol bgp 8.8.8.0/24 detail
show route advertising-protocol bgp 192.0.2.1
show route receive-protocol bgp 192.0.2.1
Cisco’da:
show ip bgp 8.8.8.0/24
show ip bgp neighbors 192.0.2.1 received-routes
show ip bgp neighbors 192.0.2.1 advertised-routes
Sonuc olarak local preference, BGP’de disariya degil iceriye verilen bir yonlendirme kararidir. Internet’e “beni buradan tercih et” demek icin degil, kendi AS’inize “ben buradan cikmak istiyorum” demek icin kullanilir.