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 interface komutuyla interface’lerin up/up olduğunu doğrulayın
  • IP forwarding: /proc/sys/net/ipv4/ip_forward değ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-relax komutu ECMP için gerekli.
  • Maximum paths ile load balancing: maximum-paths 4 komutuyla 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.conf içinde net.ipv4.route.max_size değ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.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir