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, prefix198.51.100.0/24ve2001:db8:100::/48, komşu bağlantı IP'leri192.0.2.0/24ve2001:db8:ffff::/64içinden. Kendi değerlerinle değiştir.
Başlamadan önce: ön koşullar
- ASN ve IP bloğu: Kendi ASN'in ve RIR'dan aldığın (veya kiraladığın) prefix'in olmalı.
- Kayıtlar: Prefix için doğru
route/route6objesi IRR'de, ASN içinaut-numkaydı bulunmalı. Mümkünse RPKI ROA da oluşturulmuş olmalı. Birçok upstream, bu kayıtlarla eşleşmeyen anonsları reddeder. - Komşu bilgileri: Upstream'in ASN'i, oturum IP'leri ve varsa MD5 şifresi. Bunları sağlayıcının verdiği bilgilerden al.
- Linux dağıtımı: Debian 11+/Ubuntu 22.04+ gibi
bird2paketini barındıran bir sürüm.
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
- Export'ta beyaz liste kullan: Yalnızca sahibi olduğun prefix'ler, yalnızca kaynağı
RTS_STATIColanlar çıksın. Böylece yanlışlıkla upstream'den aldığın bir rotayı başka yere sızdırmazsın (route leak). - 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.