BIRD BGP Kurulumu ve Yapılandırma Rehberi
BIRD Nedir ve Neden Kullanmalısınız
BIRD (BIRD Internet Routing Daemon), Unix benzeri sistemlerde çalışan açık kaynaklı bir yönlendirme daemonudur. CZ.NIC tarafından geliştirilen bu yazılım, BGP, OSPF, RIP ve Babel gibi dinamik yönlendirme protokollerini destekler. BIRD, dünyanın en hızlı yönlendirme daemonlarından biri olarak kabul edilir ve özellikle Internet Exchange Point (IXP) ve büyük veri merkezlerinde yaygın olarak kullanılır.
BIRD'ün en dikkat çekici özelliklerinden biri, tek bir iş parçacığında 1000'den fazla BGP peer'ını yönetebilmesidir. BIRD 3 ile birlikte çoklu iş parçacığı desteği sayesinde 5000'den fazla BGP bağlantısı sorunsuz bir şekilde işlenebilmektedir. Bu performans özellikleri, BIRD'ü IXP operatörleri, ISP'ler ve büyük veri merkezleri için ideal bir seçim haline getirir.
Fastly, Twitch, DE-CIX, AMS-IX, LINX ve Akamai gibi dünya çapındaki büyük şirketler BIRD'ü aktif olarak kullanmaktadır. Bu makalede BIRD'ün kurulumu, temel yapılandırması ve BGP yönlendirme için nasıl kullanılacağı detaylı olarak anlatılacaktır.
Linux Sistemlere Kurulum
BIRD'ü Linux dağıtımlarına kurmak oldukça basittir. Çoğu Linux dağıtımının paket yöneticisinde BIRD paketi bulunur. Ancak önemli bir nokta olarak, birçok dağıtım varsayılan olarak BIRD 1.x sürümünü kurar. BIRD 2 veya BIRD 3 kullanmak için dağıtımınıza özgü paket adını belirtmeniz gerekebilir.
Ubuntu ve Debian Sistemlerde Kurulum
Ubuntu ve Debian tabanlı sistemlerde BIRD kurulumu için aşağıdaki komutlar kullanılır:
apt -y update
apt -y install bird2 jq
Bu komut BIRD 2.x sürümünü kuracaktır. Varsayılan olarak bird2 paket adı kullanılmazsa, sisteminiz eski BIRD 1.x sürümünü kurma olasılığı yüksektir. Kurulumdan sonra sürümü doğrulamak için bird --version komutunu çalıştırabilirsiniz.
CentOS ve RHEL Sistemlerde Kurulum
CentOS ve RHEL sistemlerde EPEL deposunu etkinleştirdikten sonra kurulum yapabilirsiniz:
dnf install epel-release
dnf install bird
Gentoo Sistemlerde Kurulum
Gentoo'da BIRD kurulumu için emerge komutu kullanılır. Ek özellikler için USE flag'lerini belirtebilirsiniz:
emerge --ask net-misc/bird
Gentoo'da BIRD için çeşitli USE flag'leri mevcuttur. Ncurses tabanlı tam özellikli CLI için +client flag'i, libssh desteği için libssh flag'i kullanılabilir.
Temel Yapılandırma Dosyası
BIRD yapılandırması /etc/bird.conf (veya /etc/bird/bird.conf) dosyasında yapılır. Kurulumdan sonra örnek yapılandırma dosyasını çıkararak başlayabilirsiniz:
bzcat /usr/share/doc/bird-*/bird.conf.example.bz2 > /etc/bird.conf
Temel Yapılandırma Blokları
BIRD yapılandırma dosyası çeşitli bloklardan oluşur. Her blok belirli bir işlevi yerine getirir:
Protocol device bloğu, ağ arayüzü değişikliklerini izler ve BIRD'ün hangi arayüzlerin mevcut olduğunu bilmesini sağlar:
protocol device {
scan time 10;
}
Protocol kernel bloğu, Linux çekirdek yönlendirme tablosu ile BIRD arasındaki etkileşimi yönetir. Bu blok olmadan BIRD öğrendiği rotaları çekirdeğe aktaramaz:
protocol kernel {
scan time 20;
ipv4 {
import all;
export all;
};
}
Protocol direct bloğu, doğrudan bağlı ağları (host'un bağlı olduğu ağlar) yönetir:
protocol direct {
ipv4;
interface "eth0";
}
Protocol static bloğu, statik rotaların tanımlandığı yerdir:
protocol static {
ipv4;
route 10.0.0.0/8 via 192.168.1.1;
}
BGP Protokolü Yapılandırması
BGP (Border Gateway Protocol), Internet'in temel yönlendirme protokolüdür. BIRD ile BGP oturumu yapılandırmak için protocol bgp bloğu kullanılır. Aşağıda temel bir BGP yapılandırması örneği verilmiştir:
BGP Neighbor Tanımlama
BGP peer'ları (neighbors) tanımlamak için neighbor parametresi kullanılır. Her BGP oturumu için yerel AS numarası (local as) ve komşu AS numarası (neighbor as) belirtilmelidir:
protocol bgp ISP_BGP {
local as 65000;
neighbor 192.0.2.1 as 65530;
multihop 5;
ipv4 {
import all;
export filter bgp_export;
};
}
Bu yapılandırmada local as 65000 yerel AS numaramızı, neighbor 192.0.2.1 BGP komşumuzun IP adresini ve as 65530 komşunun AS numarasını belirtir. multihop parametresi, doğrudan bağlı olmayan neighbor'lar için kullanılır ve kaç hop ötede olduğunu belirtir.
IPv6 BGP Yapılandırması
BIRD, hem IPv4 hem de IPv6 BGP oturumlarını destekler. IPv6 için yapılandırma benzer şekilde yapılır:
protocol bgp ISP_BGP_V6 {
local as 65000;
neighbor 2001:db8::1 as 65530;
multihop 5;
ipv6 {
import all;
export all;
};
}
BIRD Filtreleme Sistemleri
BIRD'ün en güçlü özelliklerinden biri, rotaların içe ve dışa aktarımında kullanılabilen esnek filtreleme sistemidir. Filtreler, BGP rotalarını kabul etmek, reddetmek veya değiştirmek için kullanılır.
Temel Filtre Kuralları
BIRD filitreleri, belirli rotaları kabul etmek veya reddetmek için if-else mantığı kullanır:
filter my_filter {
if net = 10.0.0.0/8 then accept;
if net = 172.16.0.0/12 then accept;
reject;
}
Bu filtre, 10.0.0.0/8 ve 172.16.0.0/12 ağlarından gelen rotaları kabul eder, diğerlerini reddeder.
AS Path Filtreleme
AS Path filtrelemesi, belirli AS numaralarından gelen veya geçen rotaları filtrelemek için kullanılır:
filter as_path_filter {
if bgp_path.len > 10 then reject;
if bgp_path.last = 65001 then accept;
accept;
}
Bu örnekte, AS path uzunluğu 10'dan büyük olan rotalar reddedilir ve 65001 AS'sinden gelen rotalar kabul edilir.
Prefix Listesi Filtreleme
Belirli prefix uzunluklarını sınırlamak için prefix listeleri kullanılır:
filter prefix_filter {
if net = 192.168.0.0/16 then {
if 16 = /16 = 24 then accept;
}
reject;
}
Bu filtre, 192.168.0.0/16 ağı için /16 ile /24 arasındaki prefix uzunluklarını kabul eder.
BIRD CLI ve Yönetim
BIRD, etkileşimli bir komut satırı arayüzü (CLI) sunar. Bu arayüze birdc komutu ile erişilir:
birdc
Temel CLI Komutları
CLI'de kullanılan temel komutlardan bazıları şunlardır:
Durum kontrolü için show status komutu kullanılır:
bird> show status
Bu komut, BIRD daemon'unun çalışma durumunu, router ID'yi ve son yeniden yapılandırma zamanını gösterir.
Protokol durumunu görüntülemek için show protocols komutu kullanılır:
bird> show protocols
Bu komut, tüm yapılandırılmış protokollerin durumunu (up/down), ne zamandır çalıştığını ve ilgili bilgileri gösterir.
Rota tablosunu görüntülemek için show route komutu kullanılır:
bird> show route
bird> show route protocol bgp
bird> show route export bgp_filter
Bu komutlar sırasıyla tüm rotaları, BGP'den öğrenilen rotaları ve belirli bir filtreden geçen rotaları gösterir.
Yapılandırma Yenileme
BIRD yapılandırma dosyasını değiştirdikten sonra, değişiklikleri uygulamak için daemon'u yeniden başlatmadan reload yapabilirsiniz:
bird> configure
Bu komut, yapılandırma dosyasını yeniden okur ve değişiklikleri uygular. Herhangi bir sözdizimi hatası varsa BIRD sizi uyarır ve eski yapılandırmayı kullanmaya devam eder.
Yapılandırmayı test etmek için (yüklemeden önce) configure check komutu kullanılabilir:
bird> configure check /etc/bird.conf
Pratik Uygulama: İki ISP ile BGP Yapılandırması
Gerçek bir senaryo olarak, iki farklı ISP'ye BGP bağlantısı olan bir sunucu yapılandıralım. Bu yapılandırma, yedeklilik (redundancy) sağlar ve tek ISP arızasında bile bağlantının sürmesini temin eder.
Ağ Topolojisi
Bu örnekte sunucumuzun iki farklı ISP'ye bağlantısı var. Her ISP ile ayrı bir BGP oturumu kurulacak ve her iki ISP'den gelen rotalar öğrenilecek. Örnek parametreler şu şekildedir:
Sunucu bilgileri: private IP 10.100.100.5, yerel AS 65000, tanıtılacak IP 203.0.113.1/32
Yapılandırma Dosyası
İki ISP'li BGP yapılandırması örneği:
router id 10.100.100.5;
log syslog all;
protocol device {
scan time 10;
}
protocol kernel {
scan time 20;
ipv4 {
import all;
export all;
};
}
protocol direct {
ipv4;
interface "lo";
}
protocol static {
ipv4;
# Tanıtılacak IP'nin rota tanımlaması
route 203.0.113.1/32 via 10.100.100.5;
}
# BGP Export Filtresi - Sadece tanımlı IP'yi tanıt
filter bgp_export {
if net = 203.0.113.1/32 then accept;
reject;
}
# Birinci ISP BGP Oturumu
protocol bgp ISP1 {
local as 65000;
neighbor 169.254.255.1 as 65530;
multihop 5;
ipv4 {
import all;
export filter bgp_export;
};
}
# İkinci ISP BGP Oturumu
protocol bgp ISP2 {
local as 65000;
neighbor 169.254.255.2 as 65531;
multihop 5;
ipv4 {
import all;
export filter bgp_export;
};
}
Loopback Arayüzü Yapılandırması
Tanıtılacak IP adresini kalıcı hale getirmek için loopback arayüzüne eklenmelidir:
cat EOF >> /etc/network/interfaces
auto lo:0
iface lo:0 inet static
address 203.0.113.1
netmask 255.255.255.255
EOF
BGP Durumunu Doğrulama
Yapılandırmayı tamamladıktan sonra BIRD servisini yeniden başlatın:
systemctl restart bird
BGP oturumlarının durumunu kontrol edin:
bird> show protocols
Çıktıda her iki BGP oturumunun da "Established" durumunda olduğunu görmeniz gerekir:
Name Proto Table State Since Info
ISP1 BGP --- up 10:30:15.123 Established
ISP2 BGP --- up 10:30:16.456 Established
Güvenlik ve En İyi Uygulamalar
BIRD güvenliği için çeşitli en iyi uygulamalar bulunur. Bu uygulamalar, BGP oturumlarının güvenliğini artırır ve potansiyel saldırı vektörlerini azaltır.
Parola Kimlik Doğrulama
BGP oturumları için MD5 parola kimlik doğrulaması etkinleştirilebilir:
protocol bgp ISP1 {
local as 65000;
neighbor 169.254.255.1 as 65530;
password "guvenli_parola_buraya";
ipv4 {
import all;
export filter bgp_export;
};
}
BFD Entegrasyonu
Bidirectional Forwarding Detection (BFD), BGP komşularının hızlı bir şekilde algılanmasını sağlar. Bağlantı arızası durumunda yedek rotaya geçiş süresini önemli ölçüde kısaltır:
protocol bfd {
interface "eth*" {
interval 100 ms;
multiplier 5;
};
}
protocol bgp ISP1 {
local as 65000;
neighbor 169.254.255.1 as 65530;
bfd;
ipv4 {
import all;
export filter bgp_export;
};
}
Route Filtering ve RPKI
RPKI (Resource Public Key Infrastructure) doğrulaması, BGP rotalarının geçerliliğini kontrol eder. BIRD, RPKI ROA (Route Origin Authorization) kontrolünü destekler:
protocol rpki {
remote 192.0.2.1 port 8282;
refresh 86400;
}
protocol bgp ISP1 {
local as 65000;
neighbor 169.254.255.1 as 65530;
roa {
table bgp4;
};
ipv4 {
import filter rpki_filter;
export filter bgp_export;
};
}
Performans Optimizasyonu
BIRD performansı, çalışma ortamına göre optimize edilebilir. Büyük yönlendirme tabloları ile çalışırken bazı ayarlar performansı önemli ölçüde artırabilir.
Scan Time Ayarları
Protocol device ve protocol kernel bloklarındaki scan time parametreleri, BIRD'ün ne sıklıkla ağ arayüzlerini ve çekirdek yönlendirme tablosunu taradığını belirler. Büyük tablolar için tarama sürelerini artırmak CPU yükünü azaltabilir:
protocol device {
scan time 30;
}
protocol kernel {
scan time 60;
ipv4 {
import all;
export all;
};
}
Memory Yönetimi
BIRD, yönlendirme bilgilerini bellekte tutar. Büyük BGP tabloları (özellikle tam Internet tabloları) için yeterli RAM gereklidir. BIRD'ün bellek kullanımını izlemek için show memory komutu kullanılabilir:
bird> show memory
Sonuç ve Özet
BIRD, Linux sistemlerde güçlü ve esnek bir yönlendirme daemonudur. BGP, OSPF, RIP ve Babel protokollerini destekleyen BIRD, küçük ölçekli sunuculardan büyük IXP altyapılarına kadar geniş bir kullanım alanına sahiptir.
Bu makalede BIRD'ün kurulumu, temel yapılandırması, BGP protokolü kurulumu, filtreleme sistemleri ve CLI yönetimi detaylı olarak ele alınmıştır. İki ISP'li yedekli BGP yapılandırması örneği, gerçek dünya uygulamaları için temel bir şablon sunmaktadır.
BIRD'ün güçlü filtreleme motoru, rotaların hassas bir şekilde kontrol edilmesini sağlar. BFD entegrasyonu ve RPKI desteği gibi gelişmiş özellikler, üretim ortamlarında güvenilir ve güvenli yönlendirme sağlar.