İçeriğe geç
NetDevOps
10 dk okuma Ağ Yönetimi

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.