FRR ve vtysh ile Linux’ta OSPF ve BGP Yönlendirme Yapılandırması
Ağ altyapısını Linux üzerinde yönetmek isteyenler için FRR (FreeRangeRouting), gerçek anlamda oyun değiştirici bir araç. Cisco IOS ve Juniper JunOS’tan aşina olduğunuz routing komutlarını doğrudan Linux üzerinde çalıştırabildiğinizde, pahalı donanım router’larına olan bağımlılık ciddi ölçüde azalıyor. Bu yazıda FRR kurulumundan başlayıp OSPF ve BGP yapılandırmasına kadar olan süreci gerçek dünya senaryolarıyla ele alacağız.
FRR Nedir ve Neden Kullanmalısınız?
FRR, Quagga projesinin bir fork’u olarak doğmuş, günümüzde ise çok daha aktif geliştirilen ve kurumsal seviyede kullanılabilen bir routing suite’i. OSPF, BGP, IS-IS, RIP, EIGRP gibi protokolleri destekliyor. Her protokol için ayrı bir daemon çalışıyor ve bu daemon’ların hepsini vtysh adlı birleşik CLI aracılığıyla yönetebiliyorsunuz.
Hangi senaryolarda işe yarıyor?
- Veri merkezi ağlarında spine-leaf mimarisinde BGP kullanmak
- ISP bağlantısı olan şirketlerde uplink yönetimi için BGP
- Kampüs ağlarında OSPF tabanlı dinamik yönlendirme
- Test ortamlarında GNS3 veya EVE-NG yerine native Linux VM’ler ile topoloji simülasyonu
- SD-WAN benzeri çözümler geliştirmek
Kurulum
Debian/Ubuntu üzerinde kurulum oldukça basit:
# Önce sistemi güncelleyelim
sudo apt update && sudo apt upgrade -y
# FRR paketini kuralım
sudo apt install frr frr-pythontools -y
# Servis durumunu kontrol edelim
sudo systemctl status frr
RHEL/CentOS/Rocky Linux için:
# EPEL repo'yu ekleyelim
sudo dnf install epel-release -y
# FRR kurulumu
sudo dnf install frr -y
# Servisi başlatalım
sudo systemctl enable --now frr
Kurulumdan sonra hangi daemon’ların çalışacağını /etc/frr/daemons dosyasından ayarlıyoruz. Bu dosya son derece önemli çünkü burada yes olarak işaretlemediğiniz protokol daemon’ları başlamıyor.
# Daemons dosyasını düzenleyelim
sudo nano /etc/frr/daemons
OSPF ve BGP için şu satırları yes olarak değiştirin:
ospfd=yes
bgpd=yes
zebra=yes
Değişiklikten sonra FRR’yi yeniden başlatın:
sudo systemctl restart frr
sudo systemctl status frr
vtysh ile Tanışın
vtysh, FRR’nin tüm daemon’larını tek bir arayüzden yönetmenizi sağlayan birleşik CLI. Cisco IOS ile çalışmış biri için bu arayüz anında tanıdık gelecek.
# vtysh'e giriş
sudo vtysh
# Hangi daemon'ların çalıştığını görmek için
show daemons
# Mevcut routing tablosuna bakmak için
show ip route
# Interface listesi
show interface brief
vtysh içinde yapılandırma moduna geçmek Cisco’daki gibi:
Router# configure terminal
Router(config)#
Yaptığınız değişiklikleri kaydetmek için:
# vtysh içinde
write memory
# veya
copy running-config startup-config
Bu komut yapılandırmayı /etc/frr/frr.conf dosyasına yazar.
OSPF Yapılandırması
Senaryo: Üç Router’lı Ofis Ağı
Diyelim ki üç Linux sunucusunu router olarak kullanıyorsunuz:
- R1: 192.168.10.1/24 (loopback: 1.1.1.1/32)
- R2: 192.168.10.2/24 ve 192.168.20.2/24 (loopback: 2.2.2.2/32)
- R3: 192.168.20.3/24 (loopback: 3.3.3.3/32)
Önce Linux kernel’inde IP forwarding’i aktif etmemiz lazım:
# IP forwarding'i geçici olarak aktif et
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
# Kalıcı hale getirmek için
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
R1 üzerinde OSPF yapılandırması:
sudo vtysh
configure terminal
# Router ID belirliyoruz (genellikle loopback IP kullanılır)
router ospf
ospf router-id 1.1.1.1
# Hangi ağları OSPF'e dahil etmek istiyoruz
network 192.168.10.0/24 area 0
network 1.1.1.1/32 area 0
# Passive interface - bu interface'den OSPF hello paketi gönderme
passive-interface eth0
exit
# Loopback interface oluşturma
interface lo
ip address 1.1.1.1/32
exit
write memory
R2 üzerinde OSPF yapılandırması (iki farklı segment’i birbirine bağlıyor):
sudo vtysh
configure terminal
router ospf
ospf router-id 2.2.2.2
network 192.168.10.0/24 area 0
network 192.168.20.0/24 area 0
network 2.2.2.2/32 area 0
# OSPF cost ayarı - daha iyi path seçimi için
! Bu interface ayarlarını interface bloğunda yapacağız
exit
interface eth0
ip ospf cost 10
ip ospf hello-interval 5
ip ospf dead-interval 20
exit
interface eth1
ip ospf cost 10
exit
write memory
OSPF durumunu kontrol edelim:
# Neighbor ilişkilerini göster
show ip ospf neighbor
# OSPF veritabanını göster
show ip ospf database
# Belirli bir route hakkında detay
show ip route ospf
# OSPF interface detayları
show ip ospf interface
OSPF Authentication
Prodüksiyon ortamında OSPF authentication mutlaka kullanılmalı. MD5 authentication için:
sudo vtysh
configure terminal
interface eth0
ip ospf authentication message-digest
ip ospf message-digest-key 1 md5 gizliSifre123
exit
write memory
BGP Yapılandırması
Senaryo: İki ISP’ye Bağlı Şirket (Dual-Homed BGP)
Bu senaryo gerçek hayatta çok karşılaşılan bir durum. Şirketinizin iki farklı ISP’ye bağlantısı var ve BGP ile trafik yönetimi yapmak istiyorsunuz.
- Şirket AS’i: 65001
- ISP-1 AS’i: 65100 (peer IP: 203.0.113.1)
- ISP-2 AS’i: 65200 (peer IP: 198.51.100.1)
- Şirket prefix’i: 10.0.0.0/8
sudo vtysh
configure terminal
# BGP process başlatıyoruz
router bgp 65001
# Router ID
bgp router-id 10.0.0.1
# BGP fast convergence için
bgp log-neighbor-changes
# ISP-1 ile peer
neighbor 203.0.113.1 remote-as 65100
neighbor 203.0.113.1 description ISP-1-Uplink
neighbor 203.0.113.1 password bgpSifre1
neighbor 203.0.113.1 timers 10 30
# ISP-2 ile peer
neighbor 198.51.100.1 remote-as 65200
neighbor 198.51.100.1 description ISP-2-Uplink
neighbor 198.51.100.1 password bgpSifre2
neighbor 198.51.100.1 timers 10 30
# Duyuracağımız prefix
address-family ipv4 unicast
network 10.0.0.0/8
# ISP-1'e route gönder ama ISP-2'den gelen route'ları ISP-1'e iletme
neighbor 203.0.113.1 activate
neighbor 203.0.113.1 soft-reconfiguration inbound
neighbor 198.51.100.1 activate
neighbor 198.51.100.1 soft-reconfiguration inbound
exit-address-family
exit
write memory
BGP durumunu izlemek için:
# BGP neighbor summary
show bgp summary
# Belirli bir neighbor detayları
show bgp neighbors 203.0.113.1
# BGP routing tablosu
show bgp ipv4 unicast
# Belirli prefix için BGP path bilgisi
show bgp ipv4 unicast 10.0.0.0/8
BGP Route-Map ile Traffic Engineering
Hangi ISP üzerinden gelen trafiği tercih edeceğinizi route-map ile kontrol edebilirsiniz. ISP-1’i primary, ISP-2’yi backup olarak kullanmak istediğinizde:
sudo vtysh
configure terminal
# Önce prefix-list tanımlayalım
ip prefix-list ALL-ROUTES seq 5 permit 0.0.0.0/0 le 32
# ISP-1'den gelen route'lara yüksek local preference verelim (primary)
route-map ISP1-IN permit 10
match ip address prefix-list ALL-ROUTES
set local-preference 200
exit
# ISP-2'den gelen route'lara düşük local preference verelim (backup)
route-map ISP2-IN permit 10
match ip address prefix-list ALL-ROUTES
set local-preference 100
exit
# Route-map'leri neighbor'lara uygulayalım
router bgp 65001
address-family ipv4 unicast
neighbor 203.0.113.1 route-map ISP1-IN in
neighbor 198.51.100.1 route-map ISP2-IN in
exit-address-family
exit
write memory
iBGP ve Route Reflector Yapılandırması
Büyük bir ağda tüm BGP router’ları birbirleriyle full-mesh iBGP kurmak yerine route reflector kullanmak çok daha mantıklı. Diyelim ki merkez router’ımız (AS 65001) route reflector görevi görecek:
sudo vtysh
configure terminal
router bgp 65001
bgp router-id 10.0.0.1
# Route reflector client'lar
neighbor 10.0.0.2 remote-as 65001
neighbor 10.0.0.2 description Spoke-Router-1
neighbor 10.0.0.2 update-source lo
neighbor 10.0.0.3 remote-as 65001
neighbor 10.0.0.3 description Spoke-Router-2
neighbor 10.0.0.3 update-source lo
address-family ipv4 unicast
neighbor 10.0.0.2 activate
neighbor 10.0.0.2 route-reflector-client
neighbor 10.0.0.3 activate
neighbor 10.0.0.3 route-reflector-client
exit-address-family
exit
write memory
OSPF ve BGP Redistribution
Gerçek dünyada çoğu zaman OSPF ile öğrenilen route’ları BGP’ye, ya da BGP’den öğrenilenleri OSPF’e aktarmanız gerekiyor. Dikkatli yapılmazsa routing döngülerine neden olabileceğinden bu işlemi tag’ler kullanarak güvenli hale getirmenizi öneririm.
sudo vtysh
configure terminal
# OSPF'ten BGP'ye redistribution
router bgp 65001
address-family ipv4 unicast
redistribute ospf route-map OSPF-TO-BGP
exit-address-family
exit
# BGP'den OSPF'e redistribution (dikkatli olun!)
router ospf
redistribute bgp metric 100 metric-type 2 route-map BGP-TO-OSPF
exit
# Route-map tanımları
route-map OSPF-TO-BGP permit 10
match tag 100
exit
route-map BGP-TO-OSPF permit 10
set tag 200
exit
write memory
Sorun Giderme ve Debug
FRR ile çalışırken işinize yarayacak debug komutları:
sudo vtysh
# OSPF hello paketlerini debug et
debug ospf packet hello
# BGP event'lerini izle
debug bgp events
# BGP update mesajlarını izle
debug bgp updates
# Log dosyasını takip et
exit
# Sistem loglarını izle
sudo tail -f /var/log/frr/frr.log
# Belirli bir daemon'ın logunu izle
sudo journalctl -u frr -f
Bağlantı sorunlarında kontrol listesi:
- Interface durumu:
show interfacekomutuyla interface’lerin up/up olduğunu doğrulayın - IP forwarding:
/proc/sys/net/ipv4/ip_forwarddeğerinin 1 olduğundan emin olun - Firewall kuralları: iptables veya nftables’ın OSPF/BGP trafiğini engellemiyor olduğunu kontrol edin (OSPF multicast 224.0.0.5, BGP TCP 179)
- MTU uyumsuzluğu: OSPF neighbor’ları arasında MTU farklılığı büyük sorun yaratır
- BGP authentication: Her iki tarafta da aynı password kullanıldığından emin olun
Firewall için hızlı kontrol:
# OSPF için (multicast)
sudo iptables -A INPUT -p ospf -j ACCEPT
sudo iptables -A OUTPUT -p ospf -j ACCEPT
# BGP için (TCP 179)
sudo iptables -A INPUT -p tcp --dport 179 -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 179 -j ACCEPT
Yapılandırma Dosyası Yönetimi
FRR yapılandırmalarını versiyon kontrolünde tutmak çok iyi bir alışkanlık. Mevcut yapılandırmayı dışa aktarmak için:
# Running config'i dosyaya yaz
sudo vtysh -c "show running-config" > /backup/frr-$(date +%Y%m%d).conf
# Yapılandırmayı doğrudan yüklemek için
sudo vtysh -f /backup/frr-20240115.conf
# Syntax kontrolü yapmak için
sudo vtysh -C -f /etc/frr/frr.conf
Prod ortamında yedeklemeyi cronjob ile otomatikleştirin:
# Crontab'a ekleyin
echo "0 2 * * * root vtysh -c 'show running-config' > /backup/frr-$(date +%Y%m%d).conf" | sudo tee -a /etc/cron.d/frr-backup
Performans İpuçları
Yüksek trafik ortamlarında FRR performansını artırmak için birkaç öneri:
- BFD (Bidirectional Forwarding Detection) kullanın. BGP ve OSPF üzerinde BFD aktif ederek link failure’ları çok daha hızlı tespit edebilirsiniz.
- BGP bestpath algoritmalarını ihtiyacınıza göre ayarlayın.
bgp bestpath as-path multipath-relaxkomutu ECMP için gerekli. - Maximum paths ile load balancing:
maximum-paths 4komutuyla 4 eşit maliyetli path üzerinden trafik dağıtabilirsiniz. - Route table size: Büyük BGP full table (800k+ prefix) alıyorsanız
/etc/sysctl.confiçindenet.ipv4.route.max_sizedeğerini artırın.
Sonuç
FRR ve vtysh kombinasyonu, Linux sistemleri üzerinde kurumsal seviyede routing yapılandırması yapmak için son derece güçlü bir araç seti sunuyor. Cisco veya Juniper ekipmanlarıyla kıyaslandığında lisans maliyeti sıfır, esneklik ise çok daha yüksek.
Pratik tavsiye olarak şunu söyleyeyim: Prodüksiyon’a geçmeden önce bu yapılandırmaları mutlaka sanal bir ortamda (GNS3 içinde Linux VM’ler, ya da basit VirtualBox/KVM setup’ı) test edin. OSPF misconfiguration’ı genellikle yavaş yavaş kendini gösterirken, BGP hatalarının sonuçları çok daha ani ve geniş çaplı olabiliyor.
Bir sonraki adım olarak FRR üzerinde ISIS ve MPLS/LDP yapılandırmalarını incelemenizi, büyük ölçekli ortamlar için EVPN desteğini keşfetmenizi öneririm. FRR’nin dokümantasyonu da oldukça iyi durumda, docs.frrouting.org adresindeki resmi kaynak her zaman güncel kalıyor.
