· 6 dk okuma

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

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:

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.

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

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.

BGP destekli VDS ile kendi ASN'inizden anons yapmaya başlayın.İncele