WireGuard Kurulumu ve wg / wg-quick Komutları ile Modern VPN Yönetimi

Yıllarca OpenVPN ile boğuşan biri olarak şunu rahatlıkla söyleyebilirim: WireGuard, VPN dünyasında gerçek bir devrim. 4000 satır civarında kod tabanı, çekirdek entegrasyonu ve etkileyici performansıyla hem küçük homelab kurulumlarında hem de kurumsal altyapılarda kendine sağlam bir yer edindi. Ama kurulum ve yönetim tarafında, özellikle wg ve wg-quick araçlarını iyi anlamadan işler çabuk karışabiliyor. Bu yazıda, WireGuard’ı sıfırdan kurup yönetmeyi, gerçek dünyada karşılaşılan senaryolarla birlikte ele alacağız.

WireGuard Nedir ve Neden Tercih Edilmeli

OpenVPN veya IPSec ile çalışmış herkes bilir: yapılandırma dosyaları kabus gibidir, sertifika yönetimi ayrı bir iş, debug süreçleri ise saatler alabilir. WireGuard bu karmaşıklığın büyük kısmını ortadan kaldırıyor.

Teknik olarak konuşmak gerekirse, WireGuard UDP tabanlı çalışır ve varsayılan olarak 51820 portunu kullanır. Kimlik doğrulama için modern kriptografi primitiflerini kullanır: Curve25519 anahtar değişimi, ChaCha20 şifreleme, Poly1305 mesaj doğrulama. Kernel space’de çalışması, user space çözümlerine kıyasla ciddi bir performans avantajı sağlar.

Önemli bir nokta: WireGuard bir “hub-spoke” modelini dayatmaz. Site-to-site, road warrior, mesh ağ gibi farklı topolojileri destekler. Bu esneklik, onu her senaryoya uygun hale getirir.

Kurulum

Çoğu modern Linux dağıtımında WireGuard kernel 5.6’dan itibaren doğrudan çekirdeğe dahil edilmiş durumda. Kullanıcı alanı araçlarını yüklemeniz yeterli.

Ubuntu/Debian tabanlı sistemler için:

sudo apt update
sudo apt install wireguard wireguard-tools

RHEL/AlmaLinux/Rocky Linux için:

sudo dnf install epel-release
sudo dnf install wireguard-tools

Arch Linux için:

sudo pacman -S wireguard-tools

Kernel modülünün yüklü olup olmadığını kontrol etmek için:

lsmod | grep wireguard
# veya
modinfo wireguard

Eğer modül yüklü değilse elle yükleyebilirsiniz:

sudo modprobe wireguard

Anahtar Çifti Üretimi

WireGuard’ın en şık yanlarından biri, anahtar yönetiminin ne kadar basit olduğu. Her peer için bir public/private anahtar çifti gerekiyor, bu kadar. Sertifika otoritesi yok, imzalama yok, süre dolması yok.

# Private key üret
wg genkey | tee /etc/wireguard/privatekey | wg pubkey > /etc/wireguard/publickey

# Dosya izinlerini kısıtla
chmod 600 /etc/wireguard/privatekey

# Anahtarları görüntüle
cat /etc/wireguard/privatekey
cat /etc/wireguard/publickey

Preshared key kullanmak istiyorsanız (ek güvenlik katmanı için tavsiye edilir):

wg genpsk > /etc/wireguard/presharedkey
chmod 600 /etc/wireguard/presharedkey

Sunucu Yapılandırması

Klasik bir senaryo üzerinden gidelim: Bir VPN sunucusu kurmak ve uzak istemcilerin bu sunucu üzerinden internete çıkmasını sağlamak. Sunucu IP’si 203.0.113.1 olsun, VPN ağımız 10.0.0.0/24 olsun.

# /etc/wireguard/wg0.conf - Sunucu tarafı

[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = <SUNUCU_PRIVATE_KEY>

# IP forwarding ve NAT ayarları
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

# İstemci 1
[Peer]
PublicKey = <ISTEMCI1_PUBLIC_KEY>
PresharedKey = <PRESHARED_KEY>
AllowedIPs = 10.0.0.2/32

# İstemci 2
[Peer]
PublicKey = <ISTEMCI2_PUBLIC_KEY>
PresharedKey = <PRESHARED_KEY_2>
AllowedIPs = 10.0.0.3/32

Bu yapılandırmada %i ifadesi, interface adının yerini tutar (wg0). PostUp ve PostDown direktifleri, tunnel ayağa kalktığında ve kapandığında çalışacak komutları tanımlar.

IP forwarding’i kernel seviyesinde aktif etmeyi unutmayın:

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.conf
sysctl -p

İstemci Yapılandırması

# /etc/wireguard/wg0.conf - İstemci tarafı

[Interface]
Address = 10.0.0.2/24
PrivateKey = <ISTEMCI_PRIVATE_KEY>
DNS = 1.1.1.1, 8.8.8.8

[Peer]
PublicKey = <SUNUCU_PUBLIC_KEY>
PresharedKey = <PRESHARED_KEY>
Endpoint = 203.0.113.1:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25

AllowedIPs = 0.0.0.0/0 tüm trafiği VPN üzerinden geçirir. Sadece belirli ağlara erişim sağlamak istiyorsanız (split tunneling), spesifik CIDR blokları yazabilirsiniz: AllowedIPs = 10.0.0.0/24, 192.168.1.0/24

PersistentKeepalive = 25 değeri, NAT arkasındaki istemciler için kritik öneme sahip. 25 saniyede bir keepalive paketi göndererek NAT tablosunun temiz kalmasını sağlar.

wg-quick ile Tunnel Yönetimi

wg-quick, günlük operasyonlarda kullandığınız temel araç. Sözdizimi basit, öğrenmesi kolay:

# Tunnel'ı başlat
sudo wg-quick up wg0

# Tunnel'ı durdur
sudo wg-quick down wg0

# Sistem başlangıcında otomatik başlatma
sudo systemctl enable wg-quick@wg0

# Servis durumunu kontrol et
sudo systemctl status wg-quick@wg0

# Yeniden başlat
sudo systemctl restart wg-quick@wg0

wg-quick up komutu çalıştırıldığında şunları yapar: sanal ağ arayüzü oluşturur, IP adresini atar, routing tablosuna gerekli girdileri ekler ve PostUp komutlarını çalıştırır. wg-quick down ise bunların tersini yapar.

Dikkat edilmesi gereken bir nokta: wg-quick, yapılandırma dosyasından interface adını alır. Yani /etc/wireguard/vpn-ofis.conf dosyasını kullanıyorsanız komut wg-quick up vpn-ofis olacaktır.

wg Komutu ile Gerçek Zamanlı İzleme

wg komutu, çalışan WireGuard interface’lerini ve peer bilgilerini yönetmek için kullanılır. Canlı ortamda sorun giderirken bu komuttan çok yararlandım.

# Tüm interface'lerin durumunu göster
sudo wg show

# Belirli bir interface'in durumu
sudo wg show wg0

# Sadece peer'ları listele
sudo wg show wg0 peers

# Bant genişliği istatistikleri
sudo wg show wg0 transfer

# Son handshake zamanları
sudo wg show wg0 latest-handshakes

# Endpoint bilgileri
sudo wg show wg0 endpoints

wg show çıktısını yorumlamak önemli. Bir peer’ın latest-handshake değeri 3-4 dakikadan eskiyse, büyük ihtimalle bağlantıda sorun var demektir. WireGuard, aktif bağlantıları session gibi tutmaz; her el sıkışma 180 saniye geçerliliğini korur.

Çalışan Yapılandırmayı Dinamik Olarak Değiştirme

Önemli bir avantaj: WireGuard’a yeni peer eklemek veya mevcut peer’ı kaldırmak için tunnel’ı yeniden başlatmak zorunda değilsiniz.

# Yeni peer ekle (tunnel yeniden başlatmadan)
sudo wg set wg0 peer <PUBLIC_KEY> allowed-ips 10.0.0.5/32 endpoint 203.0.113.10:51820

# Mevcut peer'ı kaldır
sudo wg set wg0 peer <PUBLIC_KEY> remove

# Interface'in dinleme portunu değiştir
sudo wg set wg0 listen-port 51821

# Mevcut çalışan yapılandırmayı dosyaya kaydet
sudo wg showconf wg0 > /etc/wireguard/wg0.conf

Bu son komut (wg showconf) özellikle değerli. Dinamik olarak yapılan değişiklikleri kalıcı hale getirmek için kullanın, aksi takdirde tunnel yeniden başladığında değişiklikler kaybolur.

Site-to-Site VPN Senaryosu

Gerçek dünya senaryosu: İstanbul ofisi (192.168.1.0/24) ile Ankara ofisi (192.168.2.0/24) arasında güvenli bağlantı kurmak istiyorsunuz.

İstanbul sunucusu yapılandırması:

[Interface]
Address = 10.10.10.1/30
ListenPort = 51820
PrivateKey = <ISTANBUL_PRIVATE_KEY>
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT

[Peer]
PublicKey = <ANKARA_PUBLIC_KEY>
AllowedIPs = 10.10.10.2/32, 192.168.2.0/24
Endpoint = ANKARA_IP:51820
PersistentKeepalive = 30

Ankara sunucusu yapılandırması:

[Interface]
Address = 10.10.10.2/30
ListenPort = 51820
PrivateKey = <ANKARA_PRIVATE_KEY>
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT

[Peer]
PublicKey = <ISTANBUL_PUBLIC_KEY>
AllowedIPs = 10.10.10.1/32, 192.168.1.0/24
Endpoint = ISTANBUL_IP:51820
PersistentKeepalive = 30

Her iki tarafta da routing yapılandırmasını kontrol etmeyi unutmayın:

# Route durumunu kontrol et
ip route show table main | grep -E "192.168|10.10.10"

# Test bağlantısı
ping -c 4 10.10.10.2
ping -c 4 192.168.2.1

Sorun Giderme

Bağlantı sorunlarında ilk kontrol noktaları:

# Firewall - UDP portu açık mı?
sudo ufw status
sudo iptables -L -n | grep 51820

# UFW ile port açma
sudo ufw allow 51820/udp

# Interface istatistiklerini izle
watch -n 1 sudo wg show wg0 transfer

# Kernel log'larını izle
sudo dmesg | grep wireguard
sudo journalctl -u wg-quick@wg0 -f

# Bağlantı testi - UDP traceroute
sudo traceroute -U -p 51820 SUNUCU_IP

En sık karşılaşılan sorunlar ve çözümleri:

  • Handshake gerçekleşmiyor: Büyük ihtimalle firewall problemi. Sunucu tarafında 51820/UDP portunu açın.
  • Handshake oluyor ama trafik geçmiyor: IP forwarding aktif değil veya routing tablosu yanlış. sysctl net.ipv4.ip_forward ile kontrol edin.
  • DNS çalışmıyor: resolvconf paketi yüklü değil olabilir. sudo apt install resolvconf ile yükleyin.
  • Yüksek latency: Peer’ların MTU değerleri uyumsuz olabilir. WireGuard için MTU 1420 genellikle iyi bir başlangıç noktasıdır.

MTU sorununu düzeltmek için yapılandırma dosyasına ekleyin:

[Interface]
MTU = 1420

Çoklu Interface Yönetimi

Büyük ortamlarda birden fazla WireGuard tunnel çalıştırmak gerekebilir. Örneğin, hem ofis ağına hem de bir bulut altyapısına ayrı tunnel’lar açmak isteyebilirsiniz.

# Birden fazla tunnel yönetimi
sudo wg-quick up wg0    # Ofis tunnel
sudo wg-quick up wg1    # Bulut altyapısı tunnel

# Tüm aktif WireGuard interface'lerini listele
sudo wg show all

# Her iki interface'i de sistem başlangıcında başlat
sudo systemctl enable wg-quick@wg0
sudo systemctl enable wg-quick@wg1

Farklı ağlar için route çakışmalarına dikkat edin. ip route show çıktısını incelemek ve AllowedIPs değerlerinin çakışmadığından emin olmak gerekir.

Güvenlik Tavsiyeleri

WireGuard, kriptografik açıdan güçlü ama operasyonel güvenlik tamamen sizin elinizde:

  • Private key’leri asla paylaşmayın. Her cihaz için ayrı anahtar çifti oluşturun. Bir cihazın key’i tehlikeye girerse, o peer’ı kaldırıp yeni key ile ekleyin.
  • Yapılandırma dosyalarının izinlerini kısıtlayın: chmod 600 /etc/wireguard/*.conf
  • PresharedKey kullanın. Quantum bilgisayarlara karşı ek koruma sağlar ve pratikte uygulaması çok basit.
  • AllowedIPs’i mümkün olduğunca kısıtlayın. 0.0.0.0/0 sadece gerçekten tüm trafiği yönlendirmeniz gerektiğinde kullanın.
  • Log’ları düzenli kontrol edin. journalctl -u wg-quick@wg0 ile bağlantı geçmişini inceleyebilirsiniz.

Periyodik olarak peer listesini gözden geçirin ve artık kullanılmayan peer’ları kaldırın:

# Uzun süredir handshake gerçekleştirmeyen peer'ları bul
sudo wg show wg0 latest-handshakes

Çıktıda Unix timestamp göreceksiniz. 0 değeri hiç handshake olmadığı anlamına gelir, bu peer’ları kaldırmayı değerlendirin.

Sonuç

WireGuard, öğrenme eğrisi açısından OpenVPN veya IPSec’e kıyasla çok daha yumuşak, ama yüzeysel görünümü sizi yanıltmasın. IP forwarding, routing, NAT ve firewall kurallarını iyi anlamadan sağlam bir kurulum yapamazsınız. Bu yazıda ele aldığımız wg ve wg-quick araçları, günlük yönetim için ihtiyacınız olan her şeyi sağlıyor: peer ekleme, bant genişliği izleme, yapılandırma değiştirme ve sorun giderme hepsi bu iki araçla halledilebiliyor.

Özellikle wg showconf ve wg set komutlarını iyi öğrenin. Canlı ortamda tunnel’ı durdurmadan yapılandırma değişikliği yapabilmek, bir üretim ortamında son derece değerli. Son bir öneri: her yeni kurulumda önce bir test ortamında deneyin, routing tablonuzun nasıl değiştiğini gözlemleyin, sonra üretime alın. WireGuard hızlı ve zarif, ama yanlış yapılandırılmış bir VPN, hiç VPN olmamasından daha tehlikelidir.

Bir yanıt yazın

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