Daily Archives: Pazar, Mayıs 17, 2026

  • BGP’de RPKI Nedir ve Neden Artik Ciddiye Alinmali?

    RPKI, BGP dunyasinda "bu prefix'i gercekten bu AS mi duyurmali?" sorusuna cevap veren en onemli mekanizmalardan biri. Yanlis ROA kaydi kendi trafigini bozabilir, dogru kurgu ise route hijack riskini ciddi sekilde azaltir.

    BGP internetin bel kemiği ama işin kötü tarafı yıllarca fazla “güven esaslı” çalıştı. Yani bir AS çıkıp “ben şu prefix’i duyuruyorum” dediğinde, eskiden çoğu yerde bunun gerçekten doğru olup olmadığı çok sıkı kontrol edilmiyordu.

    Tabii internet büyüdükçe bu iş problem olmaya başladı. Yanlışlıkla yapılan route leak’ler, hatalı duyurular, hatta bilerek yapılan prefix hijack olayları derken artık “kim neyi duyuruyor” konusunu biraz daha ciddiye almak gerekti.

    İşte RPKI burada devreye giriyor.

    RPKI, en basit haliyle şunu söylüyor:

    Bu IP blogunu su AS duyurabilir.
    Bunun disinda biri duyurursa dikkat et.
    

    Yani elimizde bir prefix var diyelim:

    203.0.113.0/24
    

    Bu prefix’i bizim AS duyuracaksa, ROA kaydında bunu söylüyoruz:

    Prefix    : 203.0.113.0/24
    Origin AS : AS65000
    Max Length: /24
    

    Bunun anlamı şu:

    203.0.113.0/24 prefix'i AS65000 tarafindan duyurulabilir.
    Daha kucuk parcalara bolunup /25 /26 gibi duyurulmasina izin yok.
    

    Router tarafında RPKI validation açtığında gelen route’lar genelde üç duruma düşüyor:

    Valid
    Invalid
    Unknown
    

    Bunların anlamı da şöyle:

    Valid   : ROA kaydi var ve gelen duyuru dogru.
    Invalid : ROA kaydi var ama gelen duyuru yanlis.
    Unknown : Bu prefix icin ROA kaydi yok.
    

    Burada en kritik olan Invalid. Çünkü bu genelde iki şeyden biri demek:

    - Birisi prefix'i yanlis AS ile duyuruyor
    - Sen ROA kaydini yanlis yaptin
    

    İkinci madde çok önemli. Çünkü RPKI güzel bir şey ama yanlış yaparsan kendi ayağına da sıkarsın.

    Mesela elinde /22 blok var ve sen bunu internete /24 olarak duyuruyorsun. ROA kaydını şöyle yaparsan problem yaşarsın:

    Prefix    : 203.0.112.0/22
    Origin AS : AS65000
    Max Length: /22
    

    Çünkü sen gerçekte /24 duyuruyorsun ama ROA “en fazla /22 olabilir” diyor. Bu durumda senin /24 anonsların bazı yerlerde invalid görünebilir.

    Doğrusu şu olur:

    Prefix    : 203.0.112.0/22
    Origin AS : AS65000
    Max Length: /24
    

    Yani RPKI yaparken en çok dikkat edilecek yerlerden biri max length.

    Benim şahsi görüşüm şu:
    Kendi AS’i ve IP bloğu olan herkes artık RPKI tarafını düzgün kurmalı. Bu artık lüks bir konu değil. “Ben küçük operatörüm, bana bir şey olmaz” diye bir şey yok. İnternette route leak olunca küçük büyük bakmıyor, trafik bir anda saçma bir yere gidebiliyor.

    Router tarafında da direkt ilk gün invalid reject basmak yerine önce izlemek daha mantıklı.

    Ben olsam sıralamayı şöyle yaparım:

    1. Once kendi ROA kayitlarini dogru olustur
    2. Duyurdugun prefix'lerle max length uyumlu mu kontrol et
    3. Routerda RPKI session ac
    4. Invalid route'lari once izle
    5. Bir sure problem yoksa reject policy uygula
    6. Monitoring'e invalid route alarmini ekle
    

    Juniper tarafında örnek RPKI session şöyle olabilir:

    routing-options {
        validation {
            group RPKI {
                session 192.0.2.10 {
                    refresh-time 300;
                    hold-time 600;
                    port 3323;
                }
            }
        }
    }
    

    Invalid route’ları drop etmek için de basit bir policy:

    policy-options {
        policy-statement RPKI-IN {
            term INVALID {
                from {
                    validation-database invalid;
                }
                then reject;
            }
            term VALID {
                from {
                    validation-database valid;
                }
                then accept;
            }
            term UNKNOWN {
                then accept;
            }
        }
    }
    

    Cisco tarafında da genel mantık aynı:

    router bgp 65000
     bgp rpki server tcp 192.0.2.10 port 3323 refresh 300
    
    route-map RPKI-IN deny 10
     match rpki invalid
    
    route-map RPKI-IN permit 20
    

    Ama burada şunu unutmamak lazım:
    RPKI tek başına bütün BGP güvenliğini çözmez. IRR route object hâlâ önemli. PeeringDB hâlâ önemli. Upstream’in filtre politikası hâlâ önemli. Ama RPKI artık bu zincirin en sağlam halkalarından biri.

    Ben genelde şöyle bakıyorum:

    IRR operasyonel tarafta lazim.
    RPKI kriptografik dogrulama tarafta lazim.
    BGP monitoring de isin sigortasi.
    

    Üçü birlikte olursa daha temiz bir routing dünyası çıkıyor ortaya.

    Kontrol için Juniper’da şunlara bakılabilir:

    show validation session
    show validation database
    show route protocol bgp validation-database invalid
    

    Cisco’da:

    show bgp rpki servers
    show bgp ipv4 unicast rpki invalid
    show bgp ipv4 unicast rpki valid
    

    Özetle RPKI işi ertelenecek bir konu değil. Hele kendi ASN’in, kendi prefix’in varsa bunu bir gün oturup düzgün yapmak lazım. Yanlış route duyurusu olduğunda “neden trafik saçmaladı” diye bakmak yerine, baştan bu kontrolleri koymak daha mantıklı.

    BGP zaten yeterince vahşi bir dünya. En azından kimin hangi prefix’i duyurmaya yetkili olduğunu bilelim.


  • AS Path Prepend Nedir, Ne Zaman Ise Yarar?

    BGP’de trafik muhendisligi yaparken en cok kullanilan yontemlerden biri AS path prepend islemidir. Basitce kendi AS numaranizi route duyurusunda birden fazla kez tekrar ederek, belirli bir yolun diger operatorler tarafindan daha az tercih edilmesini saglamaya calisirsiniz.

    BGP best path seciminde AS path uzunlugu onemli kriterlerden biridir. Daha kisa AS path genelde daha cok tercih edilir. Bu nedenle bir hatta prepend uygulandiginda, o hat uzerinden duyurulan prefix daha uzun gorunur.

    Ornek:

    Normal duyuru:
    203.0.113.0/24 AS65000

    Prepend uygulanmis duyuru:
    203.0.113.0/24 AS65000 AS65000 AS65000

    Diyelim ki AS65000 olarak iki upstream’e baglisiniz:

                  AS65000
                  /    \
             ISP-A      ISP-B

    Inbound trafigin cogunlukla ISP-A uzerinden gelmesini, ISP-B’nin ise daha az tercih edilmesini istiyorsunuz. Bu durumda ISP-B’ye yaptiginiz prefix duyurusunda AS path prepend uygulayabilirsiniz.

    Juniper ornegi:

    policy-options {
        policy-statement PREPEND-TO-ISP-B {
            then {
                as-path-prepend "65000 65000 65000";
                accept;
            }
        }
    }
    
    protocols {
        bgp {
            group ISP-B {
                type external;
                peer-as 64502;
                neighbor 198.51.100.1 {
                    export PREPEND-TO-ISP-B;
                }
            }
        }
    }

    Cisco IOS-XE ornegi:

    route-map PREPEND-TO-ISP-B permit 10
     set as-path prepend 65000 65000 65000
    
    router bgp 65000
     neighbor 198.51.100.1 remote-as 64502
     neighbor 198.51.100.1 route-map PREPEND-TO-ISP-B out

    Burada kritik nokta sudur: AS path prepend kesin sonuc vermez. Sadece dis dunyaya “bu yol biraz daha uzun” sinyali verirsiniz. Karsi taraftaki operator local preference ile sizin prepend’inizi tamamen ezebilir.

    Yani sunu bilmek gerekir:

    Local preference > AS path length

    Bir operator kendi musterilerinden gelen route’lara yuksek local preference veriyorsa, sizin 3 kere prepend yapmaniz sonucu degistirmeyebilir. Cunku onun politikasi AS path’ten once local preference ile karar verir.

    AS path prepend genelde su durumlarda kullanilir:

    • Inbound trafik dengeleme
    • Backup transit tasarimi
    • Belirli upstream’i daha az tercih edilir yapmak
    • Maintenance sirasinda trafik azaltmak
    • Prefix bazli inbound yonlendirme

    Daha kontrollu bir tasarim icin prefix bazli prepend kullanmak daha dogrudur. Ornegin tum prefix’lere prepend yapmak yerine sadece belirli network bloklarini bir hattan daha az tercih edilir hale getirebilirsiniz.

    Ornek politika:

    203.0.113.0/24    ISP-A primary, ISP-B prepend
    198.51.100.0/24   ISP-B primary, ISP-A prepend

    Bu sayede inbound trafik iki farkli hattan daha dengeli gelebilir.

    Fakat burada prefix boyutu da cok onemlidir. Internet’te genel kabul goren en kucuk IPv4 duyuru genelde /24 olarak dusunulur. Daha spesifik bir prefix duyurursaniz, ornegin /25, bircok upstream bunu filtreleyebilir.

    AS path prepend yaparken dikkat edilmesi gereken diger konu RPKI ve route object tarafidir. Prefix’inizin ROA kaydi, route object’i ve IRR kayitlari dogru degilse prepend yapmanizin bir anlami kalmayabilir; route zaten kabul edilmeyebilir.

    Kontrol icin kullanilabilecek komutlar:

    Juniper:

    show route advertising-protocol bgp 198.51.100.1 203.0.113.0/24 detail
    show route receive-protocol bgp 198.51.100.1

    Cisco:

    show ip bgp neighbors 198.51.100.1 advertised-routes
    show ip bgp 203.0.113.0/24

    Linux tarafinda looking glass veya route collector ile de kontrol yapilabilir. Ornegin RouteViews, RIPE RIS veya upstream operatorun looking glass sistemi uzerinden prefix’inizin nasil gorundugune bakabilirsiniz.

    AS path prepend basit ama etkisi operator politikalarina bagli bir aracdir. Dogru yerde kullanildiginda inbound trafik muhendisligi icin faydalidir. Fakat “prepend yaptim, trafik kesin buradan gelmez” dusuncesi BGP dunyasinda fazla iyimserdir.

    En saglikli yaklasim sunudur:

    Prepend uygula,
    looking glass ile global gorunumu kontrol et,
    trafik grafigini izle,
    gerekirse prefix bazli politika ile ince ayar yap.

  • BGP’de Local Preference Nedir ve Ne Zaman Kullanılır?

    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.