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

VyOS VRRP ile Yedekli Router Kurulumu

İki VyOS router'ı yedekli çalıştırmak gerektiğinde üç yol var: DNS tabanlı, harici yük dengeleyici veya VRRP. DNS ve yük dengeleyici ek altyapı gerektiriyor. VRRP doğrudan VyOS içinde çalışıyor, çoğu senaryo için yeterli.

Bu yazıda iki VyOS makinesiyle HA kurulumunu anlatıyorum. Kaynak VyOS'un resmi HA walkthrough dokümantasyonu. O dokümantasyonda olmayan bilgi eklemedim.

Birincisi VMware üzerinde VM, ikincisi fiziksel makine. Aynı mantık iki VM ile de çalışır.

Ağ tasarımı

İki VyOS aynı ağ segmentinde olmalı. VRRP multicast kullanıyor, tek datalink layer segment ile sınırlı.

Örnek: upstream 203.0.113.0/24 veriyor. İki router'ın fiziksel IP'leri 192.0.2.21 ve 192.0.2.22. Floating IP 203.0.113.1. İç ağ 10.200.201.0/24.

VMware tarafında üç ayar birlikte açık olmalı: Promiscuous Mode, MAC Address Changes ve Forged Transmits. Özellikle Forged Transmits önemli — VRRP'nin virtual MAC adresi (RFC 3768) ile çalışması için bu açık olmalı. VRRP paketleri gerçek NIC MAC'i değil virtual router MAC'i ile gidiyor. Sadece Promiscuous Mode açmak yeterli değil, üçü de enable edilmeli yoksa failover sırasında sorun çıkar.

VyOS versiyonu farkı var: 1.3'te virtual-address olan parametre 1.4 ve sonrasında address olarak geçiyor. Aynı makalede iki versiyon kullanılıyorsa bu dikkat edilmeli.

VRRP konfigürasyonu

VRRP, active/backup yedeklilik sağlıyor. Her router'ın fiziksel IP'si ve virtual address'i var. En yüksek priority'li router master oluyor, virtual address'i kendi interface'ine atıyor. Master düşerse bir sonraki en yüksek priority'li backup devralıyor. Master keepalive paketleri gönderiyor. Düşerse backup geçiyor.

VRRP grupları set high-availability vrrp group GROUP_NAME ile oluşturuluyor. Şart olan parametreler: interface, vrid ve address.

set high-availability vrrp group Foo vrid 10
set high-availability vrrp group Foo interface eth0
set high-availability vrrp group Foo address 192.0.2.1/24

Priority 1 ile 255 arasında. Yüksek değer öncelik anlamına geliyor.

set high-availability vrrp group Foo priority 200

Birden fazla VRRP grubunun birlikte failover yapması gerekiyorsa sync-group kullanılıyor:

set high-availability vrrp sync-group MAIN member VLAN9
set high-availability vrrp sync-group MAIN member VLAN20

VLAN9 failover olduğunda VLAN20 de aynı anda geçiş yapıyor. Burada dikkat edilecek nokta: sync group'taki tüm gruplar benzer şekilde konfigüre edilmeli. Farklı preempt-delay veya priority kullanılırsa sonsuz failover döngüsü oluşabilir, bu can sıkıcı bir durum.

Preemption varsayılan olarak açık. Kapatmak için no-preempt var. Belirli bir gecikme vermek için preempt-delay:

set high-availability vrrp group Foo preempt-delay 180

Track mekanizması: bir interface düştüğünde group FAULT durumuna geçiyor. Priority düşmüyor, direkt FAULT oluyor. Bu fark önemli — bazı VRRP implementasyonlarında priority decrement olur, VyOS'ta yok.

set high-availability vrrp group Foo track interface eth0
set high-availability vrrp group Foo track interface eth1

VRRP durumunu kontrol etmek için run show vrrp komutu kullanılıyor.

vyos@vyos# run show vrrp
Name        Interface      VRID  State    Last Transition
----------  -----------  ------  -------  -----------------
Foo         eth1             10  MASTER   2s

Bir VRRP grubunu devre dışı bırakmak için:

set high-availability vrrp group Foo disable

Devre dışı grup VRRP process'inden tamamen çıkıyor, backup state'e girmiyor.

Multicast sorunu

VRRP varsayılan olarak multicast kullanıyor. Her switch bunu desteklemiyor. Multicast desteklemeyen ağlarda unicast çözüm oluyor:

set high-availability vrrp group Foo peer-address 192.0.2.10
set high-availability vrrp group Foo hello-source-address 192.0.2.15

peer-address karşı tarafın IP'si, hello-source-address kendi interface IP'si.

Script desteği

VRRP iki tür script destekliyor: health check ve transition. Health check script'leri düzenli aralıklarla çalışıyor. Script 0 döndürürse başarılı, başka değer döndürürse group FAULT durumuna geçiyor.

set high-availability vrrp group Foo health-check script /config/scripts/vrrp-check.sh
set high-availability vrrp group Foo health-check interval 60
set high-availability vrrp group Foo health-check failure-count 3

Script'ler /config/scripts/ dizininde olmalı ve execute izni olmalı:

chmod +x /config/scripts/script-name.sh

Transition script'leri master/backup/fault geçişlerinde çalışıyor:

set high-availability vrrp group Foo transition-script backup "/config/scripts/vrrp-fail.sh Foo"
set high-availability vrrp group Foo transition-script fault "/config/scripts/vrrp-fail.sh Foo"
set high-availability vrrp group Foo transition-script master "/config/scripts/vrrp-master.sh Foo"

Bu script'lerle servis başlatma/durdurma otomatize edilebiliyor. VRRP konfigürasyonunu script içinde değiştirmemek iyi bir fikir — dokümantasyon da aynı şeyi söylüyor.

Sync group'taki health check script'i ayrı konfigure edilebiliyor:

set high-availability vrrp sync-group Bar health-check script /config/scripts/vrrp-check.sh
set high-availability vrrp sync-group Bar health-check interval 60
set high-availability vrrp sync-group Bar health-check failure-count 3

Conntrack-sync kurulumu

Active-backup geçişlerde mevcut TCP bağlantılarının kopmaması için conntrack-sync kullanılıyor. Failover sonrası backup router tüm aktif session'ları devralıyor.

Temel konfigürasyon:

set service conntrack-sync failover-mechanism vrrp sync-group syncgrp
set service conntrack-sync interface eth1
set service conntrack-sync accept-protocol tcp
set service conntrack-sync accept-protocol udp
set service conntrack-sync accept-protocol icmp

failover-mechanism zorunlu bir parametre. Sync-group ile hangi VRRP gruplarının conntrack-sync'e dahil olduğu belirtiliyor.

Sync taşıma iki şekilde çalışıyor: multicast (varsayılan, 225.0.0.50) veya unicast.

set service conntrack-sync mcast-group 225.0.0.60

Unicast için:

set service conntrack-sync interface eth1 peer 192.0.2.2

peer parametresi o interface'i unicast mode'a geçiriyor.

ignore-address, sync edilmemesi gereken yerel conntrack entry'lerini hariç tutmak için kullanılıyor. Örneğin yönetim IP'si veya sync interface'in kendisi için:

set service conntrack-sync ignore-address 192.0.2.0/24
set service conntrack-sync ignore-address 2001:db8::/32

UDP port varsayılan 3780:

set service conntrack-sync interface eth1 port 3781

listen-address, unicast mode'da router'ın hangi local IP'den dinleme yapacağını belirliyor. Sync interface'e atanmış IP kullanılmalı.

Purge-timeout handover sonrası senkronize edilmiş entry'lerin temizlenme süresi. Varsayılan 60 saniye. Recovered router active rolünü geri alabiliyorsa preempt-delay en az purge-timeout kadar olmalı.

Startup-resync conntrack-sync servisi başladığında HA peer'dan tüm conntrack entry'lerinin kopyasını istiyor.

İstatistikler:

run show conntrack-sync statistics

Active router'da internal cache, backup router'da external cache görünüyor — bu normal bir durum.

Virtual server ve load balancing

VyOS ayrıca VRRP ile entegre load balancing yapabiliyor. HA ortamında kullanışlı olabiliyor.

set high-availability virtual-server 203.0.113.1 real-server 192.0.2.11 port 80
set high-availability virtual-server 203.0.113.1 real-server 192.0.2.12 port 80
set high-availability virtual-server 203.0.113.1 algorithm source-hashing
set high-availability virtual-server 203.0.113.1 persistence-timeout 180
set high-availability virtual-server 203.0.113.1 protocol tcp

VRRP virtual address'i virtual-server olarak kullanılıyor. Health check script ile real server erişilebilirliği de kontrol edilebiliyor.

ctCertWatch

SSL sertifika yayınlarını gerçek zamanlı takip eden bir izleme servisi. Regex filtreleme, DNS çözümleme ve webhook uyarıları ile phishing domainlerini, marka taklidini ve yetkisiz sertifikaları anında…

Rust

ipReconary

IP aralıkları, alt ağlar ve ASN bilgilerine dayalı olarak host, domain ve servis keşfi yapan bir ağ keşif (recon) aracı. Güvenlik uzmanları ve OSINT araştırmacıları için ağ altyapısını hızlı ve güveni…

Rust

Wireguard-Server-Panel

Web arayüzüne sahip, kendi sunucunuzda barındırılan bir WireGuard VPN servisi. İstemci yönetimi, mobil bağlantı için QR kod desteği, gerçek zamanlı trafik istatistikleri ve bağlantı kayıtları sunar. T…

LoadAlertTracker

Sistem yükünü neredeyse hiç kaynak tüketmeden izleyen, hafif bir servis. Belirlenen eşikler aşıldığında Telegram, Discord ve Mattermost gibi platformlara gerçek zamanlı uyarı gönderir.

Rust

Trustsslroot

Tek komutla eksiksiz bir özel PKI yapısı (Kök CA → Ara CA → sunucu ve istemci sertifikaları) oluşturan araç. Farklı formatlarda (p12/bks/jks) paketler üretir ve kullanıma hazır çıktı klasörleri sunar.

Go

DDNS-FW

Değişken IP adresini DDNS üzerinden gerçek zamanlı takip eden, hafif ve güvenilir bir araç. İzin verilen IP listelerini otomatik güncelleyerek kesintisiz erişim ve güvenlik sağlar. Tek dosyadan çalışı…

Rust

Cloudfiltred

Sunucu üzerinde 80/443 portlarına erişimi yalnızca Cloudflare IP aralıklarıyla sınırlandıran, tek dosyadan çalışan bir Linux servisi. Kendini kurar, sistem servisi olarak çalışır ve IP listelerini düz…

Rust

node_exporter

Linux için geliştirilmiş, hafif ve tek dosyadan çalışan, güvenli erişim kontrollü bir sistem metrikleri servisi.

Rust