· 6 dk okuma

BIRD 2 ile BGP Oturumu Kurma: Linux VDS Konfigürasyonu

Linux VDS üzerinde BIRD 2 ile BGP oturumu kurmak için bird2 paketini yükler, IP bloğunu sunucuya tanıtır, tek bir bird.conf içinde kendi prefix'ini anons eden bir export filtresi ve yalnızca istediğin rotaları kabul eden bir import filtresi yazarsın. Bu rehberde IPv4 + IPv6 için çalışan örnek bir konfigürasyonu, filtre mantığını, isteğe bağlı RPKI doğrulamasını ve sık yapılan hataları adım adım bulacaksın.

Örneklerde dokümantasyon aralıkları kullanılıyor: ASN AS64500, prefix 198.51.100.0/24 ve 2001:db8:100::/48, komşu bağlantı IP'leri 192.0.2.0/24 ve 2001:db8:ffff::/64 içinden. Kendi değerlerinle değiştir.

Başlamadan önce: ön koşullar

BIRD 2 kurulumu

sudo apt update
sudo apt install bird2
sudo systemctl enable --now bird
birdc show status

BIRD 2 tek bir daemon'dur: IPv4 ve IPv6 aynı bird süreci ve aynı bird.conf ile yönetilir. Eski BIRD 1.x rehberlerindeki bird6 ve protocol bgp { import ...; } söz dizimi BIRD 2'de çalışmaz; filtreler artık ipv4 { } / ipv6 { } kanalı (channel) içinde tanımlanır.

Anons edilecek IP'leri sunucuya ekle

BGP ile anons ettiğin adreslerin sunucuda yerel olarak var olması gerekir. Tüm bloğu bir arayüze /24 olarak atamak yerine kullanacağın adresleri /32 olarak lo veya bir dummy arayüze ekle:

sudo ip addr add 198.51.100.10/32 dev lo
sudo ip -6 addr add 2001:db8:100::10/128 dev lo

Kalıcı olması için bunu netplan, systemd-networkd veya ifupdown yapılandırmana taşı.

Örnek /etc/bird/bird.conf

Aşağıdaki yapı, upstream'den yalnızca default rota alan ve yalnızca kendi prefix'lerini anons eden güvenli bir başlangıçtır.

log syslog all;
router id 198.51.100.10;   # IPv4 formatında benzersiz bir değer

define MY_ASN = 64500;
define UP_ASN = 40368;

define MY_V4 = [ 198.51.100.0/24 ];
define MY_V6 = [ 2001:db8:100::/48 ];

protocol device { }

# Prefix'leri BGP'ye kaynak olarak veren statik protokoller
protocol static originate4 {
  ipv4;
  route 198.51.100.0/24 blackhole;
}

protocol static originate6 {
  ipv6;
  route 2001:db8:100::/48 blackhole;
}

# --- EXPORT filtreleri ---
filter export_v4 {
  if net ~ MY_V4 && source = RTS_STATIC then accept;
  reject;
}

filter export_v6 {
  if net ~ MY_V6 && source = RTS_STATIC then accept;
  reject;
}

# --- IMPORT filtreleri (yalnızca default rota) ---
filter import_default_v4 {
  if net = 0.0.0.0/0 then accept;
  reject;
}

filter import_default_v6 {
  if net = ::/0 then accept;
  reject;
}

template bgp upstream_tpl {
  local as MY_ASN;
  hold time 90;
  keepalive time 30;
  graceful restart on;
  # password "SAGLAYICININ_VERDIGI_SIFRE";   # gerekiyorsa
  # multihop 2;                               # komşu doğrudan bağlı değilse
}

protocol bgp upstream4 from upstream_tpl {
  description "Upstream IPv4";
  neighbor 192.0.2.1 as UP_ASN;
  source address 192.0.2.2;
  ipv4 {
    import limit 10 action restart;
    import filter import_default_v4;
    export filter export_v4;
  };
}

protocol bgp upstream6 from upstream_tpl {
  description "Upstream IPv6";
  neighbor 2001:db8:ffff::1 as UP_ASN;
  source address 2001:db8:ffff::2;
  ipv6 {
    import limit 10 action restart;
    import filter import_default_v6;
    export filter export_v6;
  };
}

Bu örnekte komşu ASN olarak Nixcon'un AS40368 değeri kullanıldı; IP adresleri ve diğer parametreler örnektir. Gerçek değerleri hizmet teslim bilgilerinden al.

Neden blackhole ve neden kernel'e export yok?

blackhole rotası yalnızca BIRD içinde, prefix'in BGP'ye "kaynak" olması için vardır. Kernel protokolüne export etmediğimiz için işletim sisteminin yönlendirmesini bozmaz; lo üzerindeki /32 adresler zaten daha spesifik yerel rotalardır. Aynı şekilde BGP'den öğrenilen default rotayı kernel'e yazmıyoruz; VDS'in mevcut varsayılan ağ geçidi çalışmaya devam eder. Kernel'e rota yazmak gerekiyorsa (ör. full table ile yönlendirme yapıyorsan) ayrıca protocol kernel bloğu ekleyip dikkatle export filtresi tanımla.

Filtre mantığı: iki altın kural

  1. Export'ta beyaz liste kullan: Yalnızca sahibi olduğun prefix'ler, yalnızca kaynağı RTS_STATIC olanlar çıksın. Böylece yanlışlıkla upstream'den aldığın bir rotayı başka yere sızdırmazsın (route leak).
  2. Import'ta ihtiyacın kadarını al: Sadece default lazımsa sadece default'u kabul et. Full table alıyorsan bogon, aşırı spesifik prefix ve RPKI invalid rotaları ele.

Full table için import filtresi ve RPKI

Full routing table alıyorsan (hizmetinde bu seçenek açıksa) daha sıkı bir filtre gerekir. Önce bogon listesi (dokümantasyon aralıkları örneği bozmasın diye listeye eklenmedi; üretimde eklemeyi düşünebilirsin):

define BOGONS_V4 = [
  0.0.0.0/8+, 10.0.0.0/8+, 100.64.0.0/10+, 127.0.0.0/8+,
  169.254.0.0/16+, 172.16.0.0/12+, 192.168.0.0/16+,
  198.18.0.0/15+, 224.0.0.0/3+
];

roa4 table r4;
roa6 table r6;

protocol rpki rpki1 {
  roa4 { table r4; };
  roa6 { table r6; };
  remote 192.0.2.53 port 3323;   # kendi RTR sunucun (ör. Routinator)
  retry keep 90;
  refresh keep 900;
  expire keep 172800;
}

filter import_full_v4 {
  if net ~ BOGONS_V4 then reject;
  if net.len > 24 then reject;
  if bgp_path.len > 100 then reject;
  if net ~ MY_V4 then reject;      # kendi prefix'ini geri öğrenme
  if roa_check(r4, net, bgp_path.last) = ROA_INVALID then reject;
  accept;
}

IPv6 için aynı mantıkla net.len > 48, v6 bogon listesi ve r6 tablosu kullan. Full table için import limit değerini de buna göre yükselt (ör. import limit 1200000 action block). Bir RTR sunucusu (Routinator, StayRTR vb.) çalıştırmak gerekir; RPKI doğrulaması yoksa roa_check satırını çıkar.

Yapılandırmayı doğrula ve uygula

sudo bird -p -c /etc/bird/bird.conf   # sözdizimi kontrolü
sudo birdc configure                   # oturumları kesmeden uygula
sudo birdc show protocols

Oturum durumu Established olmalı. Detay ve anons kontrolü için:

sudo birdc show protocols all upstream4
sudo birdc show route export upstream4      # upstream'e giden rotalar
sudo birdc show route protocol upstream4    # upstream'den gelen rotalar
sudo birdc show route for 198.51.100.0/24 all

Dışarıdan teyit için herkese açık bir looking glass kullan. Nixcon'un looking glass sayfasında İzmir, Frankfurt ve ABD noktalarından BGP rota, ping ve traceroute sorguları yapabilirsin; prefix'inin görünüp görünmediğini oradan kontrol et.

Yaygın hatalar ve çözümleri

Belirti Olası neden Çözüm
Oturum Active veya Connect durumunda kalıyor TCP 179 engelli, yanlış komşu/source IP ufw allow from 192.0.2.1 to any port 179 proto tcp veya nftables'ta izin ver; source address değerini kontrol et
Idle ve log'da "Bad peer AS" benzeri hata neighbor ... as veya local as yanlış ASN değerlerini teslim bilgileriyle karşılaştır
Oturum Established ama prefix görünmüyor Export filtresi reject ediyor, source = RTS_STATIC uyuşmuyor show route export upstream4 boşsa filtreyi ve static rotayı kontrol et
Export var ama internette görünmüyor IRR/ROA kaydı uyuşmuyor, upstream filtresi reddediyor route/route6 objesi ve ROA'daki origin ASN'i kontrol et
/25 veya daha küçük prefix yayılmıyor İnternette genelde /24 (IPv6'da /48) altı filtrelenir En az /24 (v4) ve /48 (v6) anons et
IPv6 oturumu çalışıyor ama trafik gelmiyor lo üzerinde v6 adres yok veya güvenlik duvarı v6'yı kesiyor Adresi ekle, ip6tables/nftables kurallarını kontrol et
Eski rehberdeki config hata veriyor BIRD 1 söz dizimi ipv4 { import ...; export ...; } kanalı yapısını kullan
BGP açıldıktan sonra SSH erişimi koptu Default rota kernel'e yazıldı Kernel export'u kapat veya rota önceliğini kontrol et

Sorun gidermede ilk bakılacak yer journalctl -u bird -f çıktısıdır; BIRD hata nedenini genelde açıkça yazar. Yeni bir filtre denerken birdc configure check ve birdc configure timeout 60 komutları da işe yarar: yapılandırmayı uygular, onaylamazsan (birdc configure confirm) 60 saniye sonra eskisine döner.

DDoS korumalı anons konusunda not

Prefix'ini korumasız anons etmek ile korumalı anons etmek, BIRD tarafında aynı konfigürasyon mantığıyla çalışır; fark trafiğin hangi yoldan ve filtreleme katmanından geçtiğidir. Anons türünü seçerken hedefinin saldırı riskini göz önünde bulundur. Korumalı seçenekler için DDoS koruma ve firewall sayfasına bakabilirsin.

Nixcon BGP VDS ile nasıl yapılır?

Nixcon AS40368 üzerinden kendi ağını işletir; ana veri merkezi İzmir'dedir, Frankfurt ve Fremont'ta POP'ları vardır. BGP destekli VDS sunucularda kendi ASN'ini ve IP bloğunu VDS içindeki BGP oturumundan anons edebilirsin. ASN ve prefix sahipliği RPKI ROA ve RIR/IRR kayıtlarıyla otomatik doğrulanır, ASN'in AS-NIXCON AS-SET'ine eklenir ve kurulum otomatik yapılır. DDoS korumasız veya korumalı anons ile full routing table (aksi halde yalnızca Nixcon rotaları) seçeneklerinden ihtiyacına uygun olanı seçebilirsin. Yukarıdaki BIRD 2 şablonu, oturum bilgilerini kendi değerlerinle değiştirdiğinde iyi bir başlangıç noktasıdır.

Sık sorulan sorular

BIRD 2 ile BIRD 1 arasındaki en büyük fark nedir?

BIRD 2 IPv4 ve IPv6'yı tek daemon ve tek yapılandırma dosyasıyla yönetir (bird6 yoktur). Filtreler ve limitler protokolün altındaki ipv4 { } / ipv6 { } kanallarında tanımlanır. BIRD 1 söz dizimi doğrudan çalışmaz.

Sadece default rota alırsam full table'a gerek var mı?

Çoğu VDS kullanımında hayır. Yalnızca kendi prefix'ini anons edip çıkış için default rotayı kullanacaksan import filtresinde sadece 0.0.0.0/0 ve ::/0 kabul etmek yeterli ve daha az kaynak tüketir. Full table, rota seçimi ve ağ analizi gibi özel ihtiyaçlar içindir.

BGP oturumu Established ama prefix'im internette görünmüyor, neden?

Önce birdc show route export ile rotanın gerçekten gönderildiğini doğrula. Gönderiliyorsa IRR route objesi ve RPKI ROA'daki origin ASN'in anons eden ASN ile eşleştiğini, prefix uzunluğunun en az /24 (IPv6'da /48) olduğunu kontrol et ve looking glass'tan yayılımı izle.

Yapılandırmayı değiştirirken oturum kopar mı?

birdc configure ile uygulanan değişikliklerde BIRD yalnızca etkilenen protokolleri yeniden başlatır. Filtre değişiklikleri çoğu zaman oturumu düşürmeden uygulanır. Riskli değişikliklerde birdc configure timeout kullanarak otomatik geri dönüş güvencesi alabilirsin.

BGP destekli VDS ile kendi ASN ve IP bloğunu anons etmeye başla.İncele