Modern ağ yönetiminde VPN çözümleri söz konusu olduğunda, OpenVPN veya IPsec gibi köklü protokollerin yanına artık ciddi bir rakip çıktı: WireGuard. Linus Torvalds’ın “şimdiye kadar gördüğüm en güzel kod” dediği bu protokol, hem performansı hem de kurulum kolaylığıyla sistem yöneticilerinin gündemine hızla girdi. Ben de birkaç yıldır production ortamlarında WireGuard kullanan biri olarak şunu söyleyebilirim: ilk kurulumu tamamladığınızda “bu kadar mı basit?” diye şaşıracaksınız.
WireGuard Nedir ve Neden Tercih Edilmeli?
WireGuard, 2016 yılında Jason Donenfeld tarafından geliştirilen, kernel seviyesinde çalışan modern bir VPN protokolüdür. OpenVPN’in 600.000 satır koduna karşılık WireGuard yaklaşık 4.000 satır koddan oluşur. Bu sadece akademik bir bilgi değil; daha az kod demek daha az saldırı yüzeyi, daha kolay denetim ve daha az hata anlamına gelir.
Performans tarafında da durum oldukça iyi. Kendi test ortamımda 10 Gbps’lik bir bağlantıda WireGuard, OpenVPN’e kıyasla yaklaşık 3-4 kat daha yüksek throughput sağladı. Bunun yanında CPU kullanımı da belirgin şekilde daha düşük. Özellikle düşük güçlü cihazlarda (Raspberry Pi, edge router gibi) bu fark çok daha belirgin hale geliyor.
Kriptografi tarafında ise WireGuard modern ve kanıtlanmış algoritmaları kullanır:
- ChaCha20: Veri şifreleme için
- Poly1305: Mesaj doğrulama için
- Curve25519: Anahtar değişimi için
- BLAKE2s: Hash fonksiyonu için
- SipHash24: Hash tablo anahtarları için
Kurulum Öncesi Hazırlık
Senaryomuzda bir Ubuntu 22.04 sunucusu üzerinde WireGuard VPN sunucusu kuracağız ve ardından bir Linux istemcisini bağlayacağız. Sunucumuzun public IP’si 203.0.113.1, istemcimiz ise bir geliştirici laptopundan bağlanıyor olsun.
Öncelikle sistemin güncel olduğundan emin olalım:
sudo apt update && sudo apt upgrade -y
sudo apt install wireguard wireguard-tools -y
Fedora veya RHEL tabanlı sistemlerde ise:
sudo dnf install wireguard-tools -y
# RHEL 8/9 için önce EPEL reposunu etkinleştirin
sudo dnf install epel-release -y
sudo dnf install wireguard-tools -y
Arch Linux kullanıcıları için:
sudo pacman -S wireguard-tools
WireGuard, Linux 5.6 kernel versiyonundan itibaren doğrudan kernel’e dahil edilmiştir. Hangi kernel versiyonunda olduğunuzu kontrol edin:
uname -r
# 5.6 ve üzeri ise ekstra kernel modülü kurmanıza gerek yok
Anahtar Çifti Oluşturma
WireGuard, açık anahtar altyapısı (PKI) yerine basit bir public/private key çifti kullanır. Her peer (sunucu ve istemci) için bu anahtarları oluşturmanız gerekir.
Sunucuda anahtar çifti oluşturalım:
# /etc/wireguard dizinine geçelim
cd /etc/wireguard
# Güvenli izinler için umask ayarlayalım
umask 077
# Private key oluştur
wg genkey | tee server_private.key | wg pubkey > server_public.key
# Oluşturulan anahtarları görelim
cat server_private.key
cat server_public.key
# Preshared key oluştur (opsiyonel ama önerilen ek güvenlik katmanı)
wg genpsk > preshared.key
Aynı işlemi istemci için de yapın (istemci makinesinde):
cd /etc/wireguard
umask 077
wg genkey | tee client_private.key | wg pubkey > client_public.key
Önemli Not: Private key dosyasını asla paylaşmayın, kopyalamayın ve log’lara düşürmekten kaçının. Public key, diğer peer’larla paylaşılacak olan kısımdır.
Sunucu Yapılandırması
WireGuard yapılandırma dosyaları /etc/wireguard/ dizininde .conf uzantısıyla tutulur. Arayüz adı genellikle wg0, wg1 şeklinde isimlendirilir. Bu isim doğrudan network interface adı olacaktır.
Sunucu için /etc/wireguard/wg0.conf dosyasını oluşturalım:
sudo nano /etc/wireguard/wg0.conf
[Interface]
# Sunucunun VPN tünelindeki IP adresi
Address = 10.0.0.1/24
# WireGuard'ın dinleyeceği port (varsayılan 51820, firewall'da açmanız gerekir)
ListenPort = 51820
# Sunucunun private key'i (server_private.key dosyasındaki değer)
PrivateKey = <SUNUCU_PRIVATE_KEY_BURAYA>
# İstemci trafiğini internete yönlendirmek için 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
# Geliştirici laptopunun VPN peer kaydı
[Peer]
# İstemcinin public key'i
PublicKey = <ISTEMCI_PUBLIC_KEY_BURAYA>
# Preshared key (opsiyonel ama önerilen)
PresharedKey = <PRESHARED_KEY_BURAYA>
# Bu istemciye izin verilen IP aralığı
AllowedIPs = 10.0.0.2/32
Burada eth0 kısmına dikkat edin; sunucunuzun asıl network interface adını kullanmalısınız. Bunu bulmak için:
ip route | grep default
# "default via X.X.X.X dev eth0" şeklinde çıkacaktır
# veya
ip link show
Yapılandırma dosyasının izinlerini düzenleyelim:
sudo chmod 600 /etc/wireguard/wg0.conf
IP Forwarding Etkinleştirme
İstemcilerin VPN üzerinden internet trafiğini yönlendirmesi için sunucuda IP forwarding’i aktif etmeniz şarttır. Birçok sysadmin bu adımı atlayıp neden istemcinin internete çıkamadığını saatlerce araştırır:
# Geçici olarak aktif etme (reboot'ta kaybolur)
sudo sysctl -w net.ipv4.ip_forward=1
# Kalıcı olarak aktif etme
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
# IPv6 forwarding de gerekiyorsa
echo "net.ipv6.conf.all.forwarding = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
Doğrulamak için:
cat /proc/sys/net/ipv4/ip_forward
# Çıktı 1 olmalı
Firewall Kuralları
Sunucunuzda UFW kullanıyorsanız:
# WireGuard portunu aç
sudo ufw allow 51820/udp
# IP forwarding için UFW'yi yapılandır
sudo nano /etc/default/ufw
# DEFAULT_FORWARD_POLICY="ACCEPT" olarak değiştirin
# /etc/ufw/before.rules dosyasına NAT kuralları ekleyin
sudo nano /etc/ufw/before.rules
before.rules dosyasının en başına şunları ekleyin:
# NAT kuralları - WireGuard için
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
COMMIT
UFW’yi yeniden başlatın:
sudo ufw disable && sudo ufw enable
Eğer firewalld kullanıyorsanız (RHEL/CentOS/Fedora):
sudo firewall-cmd --permanent --add-port=51820/udp
sudo firewall-cmd --permanent --add-masquerade
sudo firewall-cmd --reload
WireGuard Servisini Başlatma
Yapılandırma tamamlandıktan sonra servisi başlatma ve yönetme:
# Servisi başlat
sudo systemctl start wg-quick@wg0
# Sistem açılışında otomatik başlat
sudo systemctl enable wg-quick@wg0
# Servis durumunu kontrol et
sudo systemctl status wg-quick@wg0
# Alternatif olarak wg-quick komutunu kullanabilirsiniz
sudo wg-quick up wg0
sudo wg-quick down wg0
WireGuard arayüzünü ve bağlı peer’ları görmek için:
sudo wg show
# veya detaylı çıktı için
sudo wg showconf wg0
İstemci Yapılandırması
İstemci tarafında da benzer bir yapılandırma dosyası oluşturuyoruz. Istemcinin /etc/wireguard/wg0.conf dosyası:
[Interface]
# İstemcinin VPN IP adresi
Address = 10.0.0.2/24
# İstemcinin private key'i
PrivateKey = <ISTEMCI_PRIVATE_KEY_BURAYA>
# DNS sunucusu (opsiyonel, tüm trafiği VPN üzerinden geçirirseniz önemli)
DNS = 1.1.1.1, 8.8.8.8
[Peer]
# Sunucunun public key'i
PublicKey = <SUNUCU_PUBLIC_KEY_BURAYA>
# Preshared key (sunucu ile aynı)
PresharedKey = <PRESHARED_KEY_BURAYA>
# Sunucunun public IP ve portu
Endpoint = 203.0.113.1:51820
# 0.0.0.0/0 tüm trafiği VPN'den geçirir (full tunnel)
# Sadece VPN ağına erişim için 10.0.0.0/24 kullanın (split tunnel)
AllowedIPs = 0.0.0.0/0
# NAT arkasındaysa bağlantıyı canlı tutmak için (saniye cinsinden)
PersistentKeepalive = 25
İstemcide WireGuard’ı başlatmak için:
sudo wg-quick up wg0
# Bağlantıyı test et
ping 10.0.0.1
# Sunucudan internet erişimini test et
curl ifconfig.me
# Sunucunun public IP'si görünmeli
Bağlantı Doğrulama ve Sorun Giderme
Bağlantı kurulduktan sonra her iki tarafta da durumu kontrol edin:
# Sunucuda çalıştırın
sudo wg show wg0
Çıktıda şu bilgileri göreceksiniz:
- interface: Arayüz adı ve public key
- peer: Bağlı peer’ın public key’i
- endpoint: İstemcinin IP ve port bilgisi
- allowed ips: İzin verilen IP aralığı
- latest handshake: Son el sıkışma zamanı
- transfer: Gönderilen ve alınan veri miktarı
En sık karşılaşılan sorunlar ve çözümleri:
Handshake gerçekleşmiyor:
# Firewall kurallarını kontrol edin
sudo iptables -L -n -v | grep 51820
sudo netstat -ulnp | grep 51820
# veya
sudo ss -ulnp | grep 51820
# tcpdump ile UDP trafiğini izleyin
sudo tcpdump -i eth0 port 51820
IP forwarding çalışmıyor:
# Sysctl ayarını tekrar kontrol edin
sysctl net.ipv4.ip_forward
# iptables FORWARD chain'ini kontrol edin
sudo iptables -L FORWARD -n -v
DNS sızıntısı yaşanıyor:
# DNS sızıntısını test etmek için
nslookup whoami.akamai.net
# veya dnsleaktest.com sitesini kullanın
# Çözüm: İstemci yapılandırmasına DNS satırı eklediğinizden emin olun
Çoklu İstemci Yönetimi
Gerçek dünya senaryosunda tek bir sunucuya birden fazla istemci bağlanır. Her istemci için sunucu yapılandırmasına yeni bir [Peer] bloğu eklemeniz yeterli. Çalışan WireGuard servisini durdurmadan yeni peer eklemek için:
# Yeni istemci için anahtar oluştur
cd /etc/wireguard
wg genkey | tee client2_private.key | wg pubkey > client2_public.key
# Çalışan arayüze peer ekle (servis yeniden başlatmaya gerek yok)
sudo wg set wg0 peer <CLIENT2_PUBLIC_KEY>
preshared-key preshared.key
allowed-ips 10.0.0.3/32
# Değişikliği kalıcı hale getirmek için yapılandırma dosyasına da ekleyin
sudo wg showconf wg0 > /etc/wireguard/wg0.conf
Bir istemciyi kaldırmak için:
sudo wg set wg0 peer <CLIENT_PUBLIC_KEY> remove
Split Tunnel vs Full Tunnel
İki farklı kullanım senaryosu arasındaki tercih, organizasyonun ihtiyacına göre değişir.
Full Tunnel (Tüm trafik VPN üzerinden):
- İstemci yapılandırmasında
AllowedIPs = 0.0.0.0/0, ::/0kullanın - Tüm internet trafiği sunucu üzerinden geçer
- Güvenlik açısından daha kapsamlı ama sunucu bant genişliğini daha fazla kullanır
Split Tunnel (Sadece belirli trafik VPN üzerinden):
AllowedIPs = 10.0.0.0/24, 192.168.1.0/24şeklinde sadece hedef ağları belirtin- Yerel internet trafiği doğrudan çıkar, sadece VPN ağlarına yönelik trafik tünelden geçer
- Bant genişliği tasarrufu sağlar, gecikme azalır
Split tunnel için yaygın bir ofis senaryosu; çalışanların internete doğrudan çıkması ama şirket içi sistemlere (10.10.0.0/16 gibi) VPN üzerinden erişmesi:
# İstemci yapılandırmasında
AllowedIPs = 10.10.0.0/16, 172.16.0.0/12
Monitoring ve Log Yönetimi
WireGuard kendi başına çok az log üretir çünkü kernel seviyesinde çalışır. Ancak bazı izleme yöntemleri kullanabilirsiniz:
# Kernel log'larında WireGuard mesajları
sudo dmesg | grep wireguard
# Journal log'ları
sudo journalctl -u wg-quick@wg0 -f
# Anlık bağlantı istatistikleri için watch komutu
watch -n 2 sudo wg show
# Peer'ların son handshake zamanlarını kontrol etmek için basit bir script
for peer in $(sudo wg show wg0 peers); do
echo "Peer: $peer"
sudo wg show wg0 latest-handshakes | grep "$peer"
done
Prometheus ile metric toplamak isteyenler için prometheus-wireguard-exporter aracını inceleyebilirsiniz. Grafana dashboard’u ile bağlı istemci sayısı, transfer hızı gibi metrikleri görselleştirmek mümkündür.
Güvenlik Sertleştirme
Kurulum sonrasında birkaç ek güvenlik önlemi almanızı öneririm:
# Yapılandırma dosyalarının izinlerini kontrol edin
ls -la /etc/wireguard/
# Tüm .conf ve key dosyaları 600 veya 400 izinli olmalı
# Private key dosyalarını sadece root okuyabilmeli
sudo chmod 600 /etc/wireguard/*.key
sudo chmod 600 /etc/wireguard/*.conf
sudo chown root:root /etc/wireguard/*.key
# Kullanılmayan key dosyalarını temizleyin
# Production'da private key'leri dosyada değil, doğrudan conf içinde tutun
Ayrıca WireGuard portunu standart olmayan bir değere taşımak (security through obscurity açısından tartışmalı olsa da) port tarama aktivitesini azaltır:
# Sunucu yapılandırmasında
ListenPort = 41194 # 51820 yerine farklı bir port
fail2ban ile WireGuard’ı doğrudan entegre etmek pek mümkün değil çünkü protokol UDP tabanlı ve kimlik doğrulama başarısızlıkları loglanmaz. Bunun yerine sunucu seviyesinde port knocking veya genel IP whitelist uygulamayı düşünebilirsiniz.
Sonuç
WireGuard, hem bireysel kullanıcılar hem de kurumsal ortamlar için güçlü, hızlı ve güvenli bir VPN çözümü sunuyor. Bu yazıda anlattığım temel kurulum ve yapılandırma adımları, çoğu senaryo için yeterli bir başlangıç noktası oluşturuyor.
Özetle yapmanız gerekenler şu sıralamayla ilerliyor: paketleri kurun, her peer için anahtar çifti oluşturun, sunucu ve istemci yapılandırma dosyalarını hazırlayın, IP forwarding ve firewall kurallarını ayarlayın, servisi başlatın ve bağlantıyı doğrulayın. OpenVPN kurulumuna kıyasla bu süreç gerçekten çok daha hızlı tamamlanıyor.
Bir sonraki adım olarak WireGuard üzerine inşa edilmiş yönetim arayüzleri olan wg-easy veya WireGuard UI gibi araçları incelemenizi öneririm. Özellikle çok sayıda kullanıcı yönetiyorsanız bu araçlar işinizi önemli ölçüde kolaylaştırır. Ayrıca road warrior senaryoları için mobil istemciler (Android ve iOS için resmi WireGuard uygulamaları mevcut) ve site-to-site VPN kurulumu da bu temel bilgiler üzerine kolayca inşa edilebilir.