FRRouting (FRR) ile BGP: VDS'te Kurulum ve bgpd Ayarı
FRRouting (FRR), Linux sunucularda BGP çalıştırmak için kullanılan açık kaynaklı bir yönlendirme paketidir. Bir VPS/VDS üzerinde FRR ile BGP kurmak için paketi kurar, bgpd servisini açar, komşu tanımlar ve mutlaka prefix-list ile route-map filtreleri uygularsınız. Bu rehber Debian/Ubuntu üzerinden kurulumu, çalışan bir bgpd örneğini, filtre mantığını ve en sık karşılaşılan hataları anlatır.
Örneklerde yalnızca dokümantasyon adresleri kullanılıyor: ASN'iniz AS64496, upstream AS64511, anons edeceğiniz blok 203.0.113.0/24 ve 2001:db8:100::/48. Gerçek oturum adreslerini, ASN'i ve şifreyi hizmet sağlayıcınızdan alırsınız.
Başlamadan önce: Gerekenler
- Kendi ASN'iniz ve RIR kaydında size ait bir IP bloğu (IPv4 /24 veya IPv6 /48 en küçük yaygın anons boyutudur).
- Prefix için geçerli bir RPKI ROA ve doğru
route/route6nesnesi (IRR). Bunlar olmadan birçok ağ rotanızı kabul etmez. - BGP oturumunu destekleyen bir VDS veya sunucu. Oturum IP'si, komşu ASN'i, gerekiyorsa MD5 şifresi ve multihop bilgisi sağlayıcıdan gelir.
- Root erişimi ve TCP/179 trafiğine izin veren bir güvenlik duvarı.
FRR kurulumu (Debian/Ubuntu)
Dağıtımın kendi deposundaki frr paketi çalışır, ancak güncel sürüm için FRR'nin resmi deposunu kullanabilirsiniz:
curl -s https://deb.frrouting.org/frr/keys.gpg | sudo tee /usr/share/keyrings/frrouting.gpg > /dev/null
FRRVER="frr-stable"
echo "deb [signed-by=/usr/share/keyrings/frrouting.gpg] https://deb.frrouting.org/frr $(lsb_release -s -c) $FRRVER" | sudo tee /etc/apt/sources.list.d/frr.list
sudo apt update
sudo apt install frr frr-pythontools
AlmaLinux/Rocky tarafında paketler için FRR'nin rpm.frrouting.org adresindeki güncel talimatlarına bakın; depo adı sürüme göre değişir.
Ardından /etc/frr/daemons dosyasında bgpd'yi etkinleştirin:
sudo sed -i 's/^bgpd=no/bgpd=yes/' /etc/frr/daemons
sudo systemctl enable --now frr
sudo systemctl restart frr
vtysh -c 'show version'
staticd varsayılan olarak açıktır; aşağıdaki Null0 rotası için gerekir.
Sistem tarafı hazırlığı
Anons edeceğiniz IP'leri sunucuda kullanacaksanız tek tek /32 olarak loopback veya dummy arayüze ekleyin. Tüm bloğu bir arayüze atamayın, aksi halde blok içindeki diğer adreslere giden trafik de o arayüze düşer.
sudo ip addr add 203.0.113.10/32 dev lo
Dönüş trafiği başka yoldan çıkabileceği için rp_filter ayarını gevşetmek de gerekebilir:
echo "net.ipv4.conf.all.rp_filter = 2" | sudo tee /etc/sysctp.d/99-bgp.conf
Dosya yolunu /etc/sysctl.d/99-bgp.conf olarak yazın ve sudo sysctl --system ile uygulayın. Sunucu başka makinelere de trafik yönlendirecekse net.ipv4.ip_forward=1 ve net.ipv6.conf.all.forwarding=1 de gerekir; yalnızca kendi IP'lerinizi sunuyorsanız şart değildir.
Örnek bgpd konfigürasyonu
sudo vtysh ile girip configure terminal altında girebilir ya da /etc/frr/frr.conf dosyasını düzenleyebilirsiniz. Çalışan bir IPv4 örneği:
frr defaults traditional
hostname vds-bgp1
log syslog informational
!
! Anons edilecek blok için yerel rota (network ifadesi RIB'de birebir rota ister)
ip route 203.0.113.0/24 Null0
!
ip prefix-list PL-OUT-V4 seq 10 permit 203.0.113.0/24
!
ip prefix-list PL-IN-V4 seq 10 deny 0.0.0.0/8 le 32
ip prefix-list PL-IN-V4 seq 20 deny 10.0.0.0/8 le 32
ip prefix-list PL-IN-V4 seq 30 deny 127.0.0.0/8 le 32
ip prefix-list PL-IN-V4 seq 40 deny 169.254.0.0/16 le 32
ip prefix-list PL-IN-V4 seq 50 deny 172.16.0.0/12 le 32
ip prefix-list PL-IN-V4 seq 60 deny 192.168.0.0/16 le 32
ip prefix-list PL-IN-V4 seq 70 deny 224.0.0.0/3 le 32
ip prefix-list PL-IN-V4 seq 80 deny 203.0.113.0/24 le 32
ip prefix-list PL-IN-V4 seq 100 permit 0.0.0.0/0 le 24
!
route-map RM-OUT-V4 permit 10
match ip address prefix-list PL-OUT-V4
!
route-map RM-IN-V4 permit 10
match ip address prefix-list PL-IN-V4
set local-preference 200
!
router bgp 64496
bgp router-id 198.51.100.2
no bgp default ipv4-unicast
neighbor 198.51.100.1 remote-as 64511
neighbor 198.51.100.1 description UPSTREAM-1
neighbor 198.51.100.1 password GizliParola
!
address-family ipv4 unicast
network 203.0.113.0/24
neighbor 198.51.100.1 activate
neighbor 198.51.100.1 soft-reconfiguration inbound
neighbor 198.51.100.1 prefix-list PL-IN-V4 in
neighbor 198.51.100.1 route-map RM-IN-V4 in
neighbor 198.51.100.1 route-map RM-OUT-V4 out
exit-address-family
!
Notlar:
ip route ... Null0rotası yalnızcanetworkifadesinin çalışması içindir. Daha spesifik/32yerel adresler kendi trafiğinizi yine doğru işler.no bgp default ipv4-unicast, adres ailesini açıkçaactivateetmenizi sağlar; yanlışlıkla IPv4 oturumunda IPv6 vb. açılmaz.- Komşu doğrudan bağlı değilse
neighbor 198.51.100.1 ebgp-multihop 2ekleyin. Sağlayıcı yönergesini esas alın. - Çok büyük tablo alacaksanız
maximum-prefixekleyin; örneğinneighbor 198.51.100.1 maximum-prefix 1000000. Yalnızca sağlayıcı rotaları geliyorsa çok daha düşük bir limit seçin.
IPv6 eki
ipv6 route 2001:db8:100::/48 Null0
ipv6 prefix-list PL-OUT-V6 seq 10 permit 2001:db8:100::/48
!
route-map RM-OUT-V6 permit 10
match ipv6 address prefix-list PL-OUT-V6
!
router bgp 64496
neighbor 2001:db8:ffff::1 remote-as 64511
!
address-family ipv6 unicast
network 2001:db8:100::/48
neighbor 2001:db8:ffff::1 activate
neighbor 2001:db8:ffff::1 route-map RM-OUT-V6 out
exit-address-family
IPv6 için de gelen yönde bogon ve kendi prefix'inizi reddeden bir ipv6 prefix-list yazmanız önerilir.
Prefix-list ve route-map: Neden şart?
FRR 7.4 ve sonrasında eBGP komşularda varsayılan olarak bgp ebgp-requires-policy açıktır. Politika (in/out route-map veya filtre) tanımlamazsanız rotalar alınmaz ve gönderilmez. Bu davranışı no bgp ebgp-requires-policy ile kapatmak mümkündür, ancak yapmayın: filtresiz bir oturum, yanlışlıkla başkasının prefix'ini anons edip route leak yaratmanın en kısa yoludur.
Temel kural: giden yönde yalnızca sahip olduğunuz prefix'leri izin verin, gelen yönde bogon ve kendi prefix'inizi reddedin.
- prefix-list: Hangi prefix ve uzunlukların geçeceğini tanımlar.
levegeile uzunluk aralığı verilir. - route-map: Prefix-list eşleşmesine göre
permit/denyverir ve özellik atar (set local-preference,set metric,set community, AS-path prepend vb.). - Route-map sonunda örtük
denyvardır; eşleşmeyen hiçbir şey geçmez.
Birden fazla upstream'iniz varsa örneğin birine set local-preference 200, diğerine 100 vererek çıkış yönünü belirleyebilir, set as-path prepend 64496 64496 ile giriş trafiğini ikinci yola kaydırabilirsiniz.
Konfigürasyonu uygulama ve doğrulama
vtysh içinde değişiklik yaptıktan sonra kaydedin:
sudo vtysh -c 'write memory'
Durum kontrolü:
sudo vtysh -c 'show bgp summary'
sudo vtysh -c 'show bgp ipv4 unicast neighbors 198.51.100.1 advertised-routes'
sudo vtysh -c 'show bgp ipv4 unicast neighbors 198.51.100.1 received-routes'
sudo vtysh -c 'show bgp ipv4 unicast 203.0.113.0/24'
sudo vtysh -c 'show ip route bgp'
show bgp summary çıktısında durum sütununda Established ya da rakam (alınan prefix sayısı) görmelisiniz. Politika değiştirdiğinizde oturumu düşürmeden yenileyin:
sudo vtysh -c 'clear bgp ipv4 unicast 198.51.100.1 soft in'
sudo vtysh -c 'clear bgp ipv4 unicast 198.51.100.1 soft out'
Dış dünyadan doğrulamak için herkese açık looking glass'lar kullanışlıdır. Nixcon'un looking glass aracında İzmir, Frankfurt ve ABD noktalarından BGP rotası, ping ve traceroute sorgulayarak prefix'inizin görünürlüğünü kontrol edebilirsiniz.
Sık hatalar ve çözümleri
| Belirti | Olası neden | Çözüm |
|---|---|---|
Oturum Active/Connect durumunda |
TCP/179 kapalı, yanlış komşu IP/ASN, MD5 şifresi uyuşmuyor | Güvenlik duvarını, ASN'i ve şifreyi kontrol edin; tcpdump -ni any port 179 ile bakın |
Oturum Idle |
Komşuya ulaşılamıyor veya ebgp-multihop gerekli | Link IP'sine ping atın, multihop ekleyin |
PfxRcd yerine (Policy) |
in politikası yok |
Prefix-list ve route-map'i in yönüne bağlayın |
| Prefix anons edilmiyor | RIB'de birebir rota yok, out route-map eşleşmiyor |
ip route ... Null0 ekleyin; show bgp ipv4 unicast ile kontrol edin |
| Anons var ama ağda görünmüyor | ROA/IRR kaydı eksik veya yanlış | ROA'daki ASN ve maxLength değerini doğrulayın |
| Trafik geliyor ama cevap gitmiyor | rp_filter, kaynak IP'nin yanlış seçilmesi |
rp_filter=2 yapın, uygulamayı anons edilen IP'ye bağlayın |
| Yalnızca bir kısım trafik geliyor | Başka kaynaktan eski/yanlış anons | whois/IRR kayıtlarını ve AS-path'i kontrol edin |
Kesintiyi önlemek için üretimde bgp graceful-restart ve neighbor ... timers 10 30 gibi ayarları sağlayıcıyla uyumlu seçin. Aşırı agresif zamanlayıcılar, kısa süreli hat dalgalanmalarında oturumun gereksiz düşmesine yol açar.
Güvenlik ve işletme önerileri
- BGP portunu (179) yalnızca komşu IP'sine açın.
- Konfigürasyonu
gitveya yedekleme sistemiyle saklayın, parolaları ayrı yönetin. - Bir alt blok için
/24altı anons yapmayın; çoğu ağ/24'ten küçük IPv4 ve/48'den küçük IPv6 prefix'leri filtreler. - Saldırı altında oturumun düşmemesi için hacimsel trafiği oturum öncesinde temizleyen bir yapı gerekir; bu, anonsun DDoS korumalı yoldan geçmesiyle mümkün olur.
Nixcon ile BGP oturumu
Kendi ASN'iniz ve IP bloğunuzla çalışacağınız bir ortam arıyorsanız Nixcon'un BGP destekli VDS sunucularında VDS içindeki BGP oturumundan prefix'inizi anons edebilirsiniz. ASN ve prefix sahipliği RPKI ROA ve RIR/IRR kayıtlarıyla otomatik doğrulanır, ASN'iniz AS-NIXCON AS-SET'ine eklenir ve kurulum otomatik yapılır. Anonsu DDoS korumalı ya da korumasız seçebilir, yalnızca Nixcon rotalarını veya full routing table'ı alabilirsiniz. Korumalı anons seçenekleri için DDoS koruma ve firewall sayfasına bakabilirsiniz.
Sık sorulan sorular
FRR ile BGP için hangi daemon'ı etkinleştirmem gerekir?
/etc/frr/daemons dosyasında bgpd=yes yapmanız ve frr servisini yeniden başlatmanız yeterlidir. Statik Null0 rotası için staticd de açık olmalıdır; varsayılan olarak açıktır.
FRR'de rotalar neden alınmıyor ve (Policy) yazıyor?
FRR 7.4 ve sonrasında bgp ebgp-requires-policy varsayılan açıktır. eBGP komşuya in ve out yönünde route-map veya prefix-list bağlamazsanız rotalar kabul edilmez ve gönderilmez. Çözüm filtreleri tanımlamaktır; kapatmak önerilmez.
network ifadesi yazdım ama prefix anons edilmiyor, neden?
FRR, network ifadesindeki prefix'in RIB'de birebir bir rotası olmasını ister. ip route 203.0.113.0/24 Null0 gibi bir statik rota ekleyin ve out route-map'inizin bu prefix'e izin verdiğini kontrol edin.
BGP politikasını değiştirince oturumu düşürmem gerekir mi?
Hayır. clear bgp ipv4 unicast <komşu> soft in veya soft out komutlarıyla oturumu düşürmeden politikayı yeniden uygulayabilirsiniz. Gelen yönde soft-reconfiguration inbound ayarı received-routes çıktısını görmenizi sağlar.