Windows Server’da BGP ve OSPF Routing Yapılandırması
Microsoft’un routing konusundaki tarihi biraz karmaşık. Yıllar önce RRAS (Routing and Remote Access Service) ile başlayan serüven, Windows Server 2016 ile birlikte ciddi bir evrim geçirdi. Bugün konuşacağımız konu, özellikle hibrit altyapılarda ve kurumsal ağlarda giderek daha fazla karşılaştığım bir senaryo: Windows Server üzerinde BGP ve OSPF routing yapılandırması.
Şunu baştan söyleyeyim, birçok ağ mühendisi “neden Cisco veya Juniper yerine Windows’ta routing yapayım?” diye sorar. Haklı bir soru. Ama gerçek dünya her zaman ideal değil. Bütçe kısıtlamaları, mevcut altyapı, Microsoft lisanslama avantajları veya saf Windows ortamında SDN ihtiyacı gibi senaryolarda Windows routing çok mantıklı bir tercih haline geliyor.
Windows Server’da Routing Mimarisi
Windows Server 2016 ve sonrasında routing altyapısı köklü bir değişime uğradı. Klasik RRAS artık BGP desteğiyle birlikte geliyor. OSPF tarafında ise durum biraz daha karmaşık; Windows Server native olarak OSPF’yi RRAS üzerinden desteklemiyor. Bunun için Remote Access rol servisi ile birlikte çalışan üçüncü parti çözümler veya Windows Admin Center eklentileri devreye giriyor.
Ama önce temelleri atalım.
Gereksinimler ve Rol Kurulumu
BGP yapılandırmasına geçmeden önce Remote Access rolünün kurulu olması gerekiyor. PowerShell ile bunu hızlıca yapabilirsiniz:
Install-WindowsFeature RemoteAccess -IncludeManagementTools
Install-WindowsFeature RRAS -IncludeManagementTools
Install-WindowsFeature Routing -IncludeManagementTools
Rolleri kurduktan sonra RRAS servisini başlatmanız gerekiyor. GUI üzerinden yapabilirsiniz ama benim tercihim her zaman PowerShell:
Install-RemoteAccess -VpnType RoutingOnly
Set-Service -Name RemoteAccess -StartupType Automatic
Start-Service -Name RemoteAccess
Servisin düzgün çalışıp çalışmadığını kontrol edelim:
Get-Service -Name RemoteAccess | Select-Object Name, Status, StartType
Get-RemoteAccess
Çıktıda VpnType: RoutingOnly görüyorsanız doğru yoldayız.
BGP Yapılandırması
BGP (Border Gateway Protocol), internet routing’inin omurgası. Kurumsal ortamda ise genellikle şu senaryolarda kullanılıyor: ISP bağlantıları, data center interconnect, Azure ExpressRoute veya SD-WAN entegrasyonları.
BGP Router Tanımı
Windows Server’da BGP yapılandırması PowerShell ile çok temiz bir şekilde yapılabiliyor. Önce local BGP router’ı tanımlayalım:
Add-BgpRouter -BgpIdentifier "192.168.1.1" -LocalASN 65001 -PassThru
Buradaki parametreler kritik:
- -BgpIdentifier: Router ID olarak kullanılacak IP adresi. Genellikle loopback veya management arayüzünün IP’si kullanılır
- -LocalASN: Autonomous System Number. Private AS için 64512-65534 aralığını kullanın
- -PassThru: Yapılandırmanın çıktısını görmek için
BGP Peer Ekleme
Router’ı tanımladıktan sonra peer’ları eklememiz gerekiyor. Diyelim ki ISP’niz size AS 65000 numarasıyla peer olmanızı söyledi:
Add-BgpPeer -Name "ISP-Primary" `
-LocalIPAddress "203.0.113.2" `
-PeerIPAddress "203.0.113.1" `
-PeerASN 65000 `
-LocalASN 65001 `
-PassThru
İkinci bir ISP veya data center bağlantısı için:
Add-BgpPeer -Name "DC-Secondary" `
-LocalIPAddress "10.10.1.2" `
-PeerIPAddress "10.10.1.1" `
-PeerASN 65002 `
-LocalASN 65001 `
-KeepAliveTimeSec 30 `
-HoldTimeSec 90 `
-PassThru
-KeepAliveTimeSec ve -HoldTimeSec parametrelerini dikkatli ayarlayın. Varsayılan değerler çoğu senaryo için yeterli ama latency yüksek bağlantılarda hold timer’ı artırmanız gerekebilir.
BGP Route Policy Yapılandırması
Gerçek dünyada ham BGP yeterli değil. Route filtering ve policy olmadan BGP ile ciddi sorunlar yaşarsınız. Özellikle full BGP table alıyorsanız (yaklaşık 900.000+ prefix), bunu filtrelemeden Windows Server’ınıza kabul ettirmeyin.
Prefix listesi oluşturalım:
Add-BgpRoutingPolicy `
-Name "ALLOW-SPECIFIC-PREFIXES" `
-PolicyType ModifyAttribute `
-MatchPrefix @("10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16") `
-PassThru
Policy’yi peer’a uygulayalım:
Set-BgpRoutingPolicyForPeer `
-PeerName "ISP-Primary" `
-Direction Ingress `
-PolicyList "ALLOW-SPECIFIC-PREFIXES"
BGP Durumunu İzleme
Yapılandırdıktan sonra peer durumunu izlemek kritik:
Get-BgpPeer
Get-BgpPeer -Name "ISP-Primary" | Select-Object *
Get-BgpRouteInformation -Type All
Get-BgpStatistics -PeerName "ISP-Primary"
PeerState değerinin Established olması gerekiyor. Active kalıyorsa karşı tarafta sorun var demektir. Idle görüyorsanız local yapılandırmanızı kontrol edin.
OSPF Yapılandırması
Şimdi işler biraz daha ilginçleşiyor. Windows Server native OSPF desteği RRAS’ın eski versiyonlarında vardı, ancak Windows Server 2008 R2’den itibaren bu destek kaldırıldı. Microsoft’un resmi tutumu uzun süre belirsiz kaldı.
Günümüzde Windows Server’da OSPF için iki pratik yaklaşım var:
Yaklaşım 1: Windows Server ile FRRouting Entegrasyonu
FRRouting (FRR), Linux tabanlı açık kaynak bir routing suite. Windows Subsystem for Linux (WSL2) üzerinde çalıştırılabilir. Bu yaklaşım, Windows Server 2019 ve 2022’de gerçekten işe yarıyor.
Önce WSL2’yi etkinleştirin:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux -NoRestart
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform -NoRestart
wsl --set-default-version 2
wsl --install -d Ubuntu-22.04
WSL2 Ubuntu içinde FRR kurulumu:
curl -s https://deb.frrouting.org/frr/keys.asc | sudo apt-key add -
echo "deb https://deb.frrouting.org/frr $(lsb_release -s -c) frr-stable" | sudo tee -a /etc/apt/sources.list.d/frr.list
sudo apt update
sudo apt install frr frr-pythontools -y
FRR OSPF konfigürasyonu için /etc/frr/daemons dosyasını düzenleyin:
sudo sed -i 's/ospfd=no/ospfd=yes/' /etc/frr/daemons
sudo sed -i 's/ospf6d=no/ospf6d=yes/' /etc/frr/daemons
sudo systemctl restart frr
sudo systemctl enable frr
FRR OSPF yapılandırması (/etc/frr/frr.conf):
router ospf
ospf router-id 192.168.1.1
network 192.168.1.0/24 area 0.0.0.0
network 10.10.0.0/16 area 0.0.0.1
area 0.0.0.1 stub
passive-interface eth0
redistribute connected metric-type 2
!
interface eth1
ip ospf hello-interval 10
ip ospf dead-interval 40
ip ospf cost 100
!
FRR üzerinden OSPF neighbor’ları görmek için:
sudo vtysh -c "show ip ospf neighbor"
sudo vtysh -c "show ip ospf database"
sudo vtysh -c "show ip route ospf"
Yaklaşım 2: Quagga veya Komersiyel Çözümler
Bazı kurumsal ortamlarda WSL2 kullanmak politika dışı olabilir. Bu durumda Windows için ticari routing yazılımları devreye giriyor. BIRD routing daemon’ının Windows port’u veya Solarwinds gibi çözümler bu ihtiyacı karşılıyor.
Hibrit Senaryo: BGP ve OSPF Redistribution
Gerçek dünyada en zorlu senaryo, BGP ve OSPF’nin birlikte çalışması gereken ortamlardır. Örneğin, data center içinde OSPF kullanıyor ama dışarıya BGP ile bağlanıyorsunuz. Bu durumda route redistribution kritik.
FRR üzerinde BGP-OSPF redistribution örneği:
router bgp 65001
bgp router-id 192.168.1.1
neighbor 203.0.113.1 remote-as 65000
neighbor 203.0.113.1 description "ISP-Upstream"
!
address-family ipv4 unicast
redistribute ospf route-map OSPF-TO-BGP
neighbor 203.0.113.1 soft-reconfiguration inbound
exit-address-family
!
router ospf
ospf router-id 192.168.1.1
redistribute bgp metric 20 metric-type 2 subnets route-map BGP-TO-OSPF
network 10.0.0.0/8 area 0.0.0.0
!
route-map OSPF-TO-BGP permit 10
match ip address prefix-list INTERNAL-PREFIXES
set local-preference 200
!
route-map BGP-TO-OSPF permit 10
match ip address prefix-list EXTERNAL-PREFIXES
set metric 50
!
ip prefix-list INTERNAL-PREFIXES seq 5 permit 10.0.0.0/8 le 24
ip prefix-list EXTERNAL-PREFIXES seq 5 permit 0.0.0.0/0 le 32
Bu yapılandırmada dikkat etmeniz gereken nokta: redistribution döngüleri. BGP’den OSPF’ye redistribute ettiğiniz route’ları, OSPF’den tekrar BGP’ye redistribute etmeyin. Route-map filtreleri bu yüzden hayat kurtarıcı.
Windows Server Routing Tablosunu Yönetmek
RRAS ile BGP peer’ları kurulduktan sonra Windows routing tablosunu yönetmek de önemli. Statik route’ları BGP ile birlikte kullanmak yaygın bir senaryo:
# Statik route ekleme
New-NetRoute -DestinationPrefix "10.20.0.0/16" `
-InterfaceAlias "Ethernet" `
-NextHop "192.168.1.254" `
-RouteMetric 100 `
-PolicyStore ActiveStore
# Mevcut route tablosunu görme
Get-NetRoute -AddressFamily IPv4 | Sort-Object RouteMetric
# BGP üzerinden öğrenilen route'ları görme
Get-BgpRouteInformation -Network "10.0.0.0/8"
# Gereksiz route'ları temizleme
Remove-NetRoute -DestinationPrefix "10.20.0.0/16" -Confirm:$false
Güvenlik ve Best Practice
Routing yapılandırmasında güvenlik göz ardı edilmemesi gereken kritik bir konu. BGP peer’larınız için MD5 authentication mutlaka kullanın:
Set-BgpPeer -Name "ISP-Primary" -PassThru |
Add-BgpPeer -AuthenticationKey (ConvertTo-SecureString "GucluSifre123!" -AsPlainText -Force)
Dikkat etmeniz gereken diğer noktalar:
- Route dampening: Flapping peer’lar için route dampening aktif edin. BGP’de çok hızlı değişen route’lar tüm ağı etkileyebilir
- Maximum prefix limit: Bir peer’dan alınabilecek maksimum prefix sayısını sınırlayın
- BGP TTL security: eBGP peer’ları için GTSM (Generalized TTL Security Mechanism) kullanın
- Logging: Tüm BGP state değişikliklerini loglamak için Windows Event Log’u yapılandırın
- Monitoring: Routing değişikliklerini izlemek için Windows Performance Monitor veya Prometheus + WMI exporter kullanın
Monitoring için bir PowerShell script örneği:
# BGP peer durumunu periyodik kontrol eden script
$peers = Get-BgpPeer
foreach ($peer in $peers) {
if ($peer.PeerState -ne "Established") {
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
$message = "[$timestamp] BGP Peer $($peer.PeerName) durumu: $($peer.PeerState)"
Write-EventLog -LogName Application `
-Source "BGP-Monitor" `
-EventId 1001 `
-EntryType Warning `
-Message $message
Send-MailMessage -To "[email protected]" `
-From "[email protected]" `
-Subject "BGP Peer Down: $($peer.PeerName)" `
-Body $message `
-SmtpServer "smtp.sirketiniz.com"
}
}
Bu scripti Task Scheduler’a ekleyerek her 5 dakikada bir çalıştırabilirsiniz.
Sorun Giderme
Routing sorunlarında ilk bakacağınız yerler şunlar olmalı:
BGP tarafında:
Get-BgpPeerile peer state kontrolü yapın- Windows Firewall’da BGP port’unu (TCP 179) kontrol edin
- AS numaralarının eşleştiğinden emin olun
- Authentication key’in her iki tarafta aynı olduğunu doğrulayın
OSPF tarafında (FRR):
sudo vtysh -c "show ip ospf neighbor"ile neighbor’ları kontrol edin- Hello ve dead interval’ların eşleştiğinden emin olun
- MTU mismatch’i kontrol edin; bu OSPF’nin kurulamamasının en yaygın nedenidir
- Area ID’lerin doğru tanımlandığını doğrulayın
Genel routing sorunları için:
# Windows routing tablosunu kontrol etme
route print
Get-NetRoute
# Belirli bir hedefe giden yolu izleme
tracert 8.8.8.8
Test-NetConnection -ComputerName "10.10.1.1" -TraceRoute
# ARP tablosunu kontrol etme
arp -a
Get-NetNeighbor
Sonuç
Windows Server üzerinde BGP ve OSPF yapılandırması, doğru araçlarla son derece güvenilir bir routing altyapısı oluşturmanıza olanak tanıyor. BGP için native RRAS desteği oldukça olgun bir hale geldi; PowerShell cmdlet’leri ile yapılandırma ve yönetim gerçekten temiz bir deneyim sunuyor.
OSPF tarafında ise FRRouting ile WSL2 kombinasyonu pratik ve güçlü bir çözüm. Evet, bu biraz “Windows sunucuya Linux yapıştırmak” gibi görünebilir ama hibrit dünyada bu tür çözümler artık norm haline geliyor.
Üretim ortamında bu yapılandırmaları uygulamadan önce mutlaka bir test ortamında denemenizi tavsiye ederim. Routing değişiklikleri yanlış yapıldığında etkisi çok geniş olabiliyor. Değişiklik yönetimi süreçlerinizi, özellikle rollback planlarınızı eksiksiz tutun. BGP peer’ı yanlışlıkla kapatmak veya yanlış bir prefix announce etmek, kurumsal ortamda ciddi kesintilere yol açabilir.
Son olarak, Windows Server’ı sadece bir last resort olarak değil, gerçek bir routing platformu olarak değerlendirmenin zamanı gelmiş olabilir. Özellikle Microsoft ekosistemiyle derin entegrasyon ihtiyacınız varsa veya mevcut Windows altyapınızı genişletmek istiyorsanız, bu seçenek düşündüğünüzden çok daha güçlü.
