WireGuard ile Road Warrior VPN Kurulumu

Uzaktan çalışmanın bu kadar yaygınlaştığı bir dönemde, dağınık ekiplerin güvenli bir şekilde şirket kaynaklarına erişmesi artık bir lüks değil, zorunluluk. OpenVPN yıllarca bu işi gördü, ama karmaşık konfigürasyonu ve nispeten düşük performansıyla sysadminlerin başını ağrıtmaya devam etti. WireGuard ise bu tabloya taze bir bakış açısı getirdi: yaklaşık 4000 satır kod, çekirdek seviyesinde çalışma ve inanılmaz derecede sade bir yapılandırma. Bu yazıda, gerçek dünyada sıklıkla ihtiyaç duyulan “road warrior” senaryosunu, yani gezgin çalışanların farklı ağlardan merkezi bir sunucuya bağlanmasını WireGuard ile nasıl kuracağımızı adım adım ele alacağız.

Road Warrior Senaryosu Nedir?

Road warrior terimi, sürekli seyahat eden ya da farklı konumlardan çalışan kullanıcıları tanımlar. Bir satış temsilcisi otelden bağlanıyor, bir geliştirici kafe Wi-Fi’ından commit yapıyor, bir sistem yöneticisi evden sunuculara erişiyor. Bu kullanıcıların ortak noktası: IP adresleri dinamik, konumları değişken, güvenlik riskleri yüksek.

WireGuard’ın bu senaryo için neden ideal olduğunu birkaç maddeyle açıklayalım:

  • Roaming desteği: WireGuard, istemci IP’si değişse bile tüneli düşürmez. Kafe Wi-Fi’ından mobil veriye geçtiğinizde bağlantı kesintisiz devam eder.
  • Düşük gecikme: Handshake mekanizması son derece hızlıdır, yeniden bağlanma süreleri milisaniyelerle ölçülür.
  • Basit anahtar yönetimi: Public/private key çifti, PKI altyapısı gerektirmez.
  • Çapraz platform: Linux, Windows, macOS, iOS, Android üzerinde resmi istemci mevcut.

Sunucu Tarafı Hazırlık

Bu örnekte sunucumuz Ubuntu 22.04 LTS üzerinde çalışıyor ve internete açık bir IP adresine sahip. İstemciler ise dinamik IP’li, farklı ağlardaki cihazlar.

WireGuard Kurulumu

Ubuntu 22.04 ve üzerinde WireGuard çekirdek modülü zaten mevcut, sadece araçları kurmamız yeterli:

sudo apt update
sudo apt install wireguard wireguard-tools -y

CentOS/RHEL 8+ için:

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

Anahtar Çiftlerinin Üretilmesi

Her peer için ayrı anahtar çifti üretmemiz gerekiyor. Önce sunucu için:

# Güvenli dizin oluştur
sudo mkdir -p /etc/wireguard
sudo chmod 700 /etc/wireguard
cd /etc/wireguard

# Sunucu anahtar çifti
sudo wg genkey | sudo tee server_private.key | wg pubkey | sudo tee server_public.key
sudo chmod 600 server_private.key

# Anahtarları görüntüle
sudo cat server_private.key
sudo cat server_public.key

İstemciler için de aynı işlemi yapacağız, ama bunu istemci cihazda yapmak daha güvenli bir yaklaşım. Eğer sunucuda merkezi yönetim istiyorsanız:

# Her istemci için ayrı anahtar çifti üret
for client in laptop_ali tablet_ayse phone_mehmet; do
    sudo wg genkey | sudo tee /etc/wireguard/clients/${client}_private.key | 
    wg pubkey | sudo tee /etc/wireguard/clients/${client}_public.key
    sudo chmod 600 /etc/wireguard/clients/${client}_private.key
done

Sunucu Konfigürasyonu

Şimdi ana konfigürasyon dosyasını oluşturalım. WireGuard tünelimiz wg0 arayüzünü kullanacak ve 10.8.0.0/24 ağında çalışacak:

sudo nano /etc/wireguard/wg0.conf
[Interface]
# Sunucunun VPN içindeki IP adresi
Address = 10.8.0.1/24

# WireGuard'ın dinleyeceği port (UDP)
ListenPort = 51820

# Sunucu private key (server_private.key içeriği buraya gelecek)
PrivateKey = <SUNUCU_PRIVATE_KEY_BURAYA>

# İstemciler bağlandığında/ayrıldığında çalışacak komutlar
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: Ali'nin dizüstü bilgisayarı
[Peer]
PublicKey = <ALI_CLIENT_PUBLIC_KEY>
AllowedIPs = 10.8.0.2/32

# İstemci 2: Ayşe'nin tableti
[Peer]
PublicKey = <AYSE_CLIENT_PUBLIC_KEY>
AllowedIPs = 10.8.0.3/32

# İstemci 3: Mehmet'in telefonu
[Peer]
PublicKey = <MEHMET_CLIENT_PUBLIC_KEY>
AllowedIPs = 10.8.0.4/32

Burada eth0 kısmını kendi internet arayüzünüze göre değiştirmeniz gerekiyor. Bunu öğrenmek için:

ip route show default | awk '/default/ {print $5}'

IP Forwarding ve Güvenlik Duvarı Ayarları

VPN sunucusunun istemciler adına paket iletebilmesi için IP forwarding etkinleştirilmeli:

# Kalıcı olarak etkinleştir
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
echo "net.ipv6.conf.all.forwarding = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

# Anlık kontrol
sysctl net.ipv4.ip_forward

UFW kullanıyorsanız WireGuard portunu açmanız gerekiyor:

sudo ufw allow 51820/udp
sudo ufw allow OpenSSH
sudo ufw enable

UFW ile NAT’ın birlikte çalışması için /etc/ufw/before.rules dosyasına da dokunmanız gerekebilir. *filter satırından önce şunu ekleyin:

sudo nano /etc/ufw/before.rules
# WireGuard NAT
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
COMMIT

Servisi Başlatma ve Otomatik Başlangıç

# WireGuard arayüzünü başlat
sudo wg-quick up wg0

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

# Durum kontrolü
sudo wg show
sudo systemctl status wg-quick@wg0

sudo wg show çıktısı size bağlı peer’ları, son handshake zamanını ve transfer istatistiklerini gösterecek. Bağlantı sorunlarını teşhis ederken bu komut altın değerindedir.

İstemci Konfigürasyonu

Linux İstemci

Linux üzerindeki kurulum sunucu ile neredeyse aynı:

sudo apt install wireguard -y

# İstemci anahtar çifti (istemci cihazda üretilmeli)
wg genkey | tee ~/ali_private.key | wg pubkey > ~/ali_public.key

# Konfigürasyon dosyası
sudo nano /etc/wireguard/wg0.conf
[Interface]
# Bu istemcinin VPN IP'si
Address = 10.8.0.2/32

# İstemci private key
PrivateKey = <ALI_PRIVATE_KEY>

# DNS (şirket DNS veya Cloudflare)
DNS = 10.8.0.1, 1.1.1.1

[Peer]
# Sunucunun public key'i
PublicKey = <SUNUCU_PUBLIC_KEY>

# Sunucunun gerçek IP ve port'u
Endpoint = vpn.sirketiniz.com:51820

# Tüm trafiği VPN üzerinden yönlendir (full tunnel)
# Sadece şirket ağına erişim için split tunnel kullanmak isterseniz
# AllowedIPs = 192.168.1.0/24, 10.8.0.0/24
AllowedIPs = 0.0.0.0/0, ::/0

# NAT arkasındayken bağlantıyı canlı tutar
PersistentKeepalive = 25
sudo wg-quick up wg0
# Bağlantı testi
ping 10.8.0.1
curl ifconfig.me  # VPN sunucusunun IP'sini görmeli

Windows ve macOS İstemcisi

Windows ve macOS için resmi WireGuard uygulamasını indirin. Konfigürasyon dosyasını .conf uzantısıyla kaydedin ve uygulamaya import edin. İçerik yukarıdaki Linux istemci konfigürasyonuyla birebir aynı.

Mobil İstemciler

iOS ve Android için WireGuard uygulaması, konfigürasyonu QR kod olarak okuyabiliyor. Bu özelliği kullanmak için sunucuda şunu çalıştırın:

# qrencode kurulumu
sudo apt install qrencode -y

# İstemci konfigürasyon dosyasından QR kod üret
qrencode -t ansiutf8 < /path/to/client.conf

Terminalde QR kodu göreceksiniz, telefon uygulamasıyla tarayın, bitti.

Gelişmiş Yapılandırma: Split Tunnel vs Full Tunnel

Gerçek dünyada iki farklı ihtiyaç karşınıza çıkacak:

Full Tunnel: Tüm internet trafiği VPN üzerinden geçer. Güvenlik açısından daha iyi, ama sunucuya yük bindirir ve internet hızını etkileyebilir. AllowedIPs = 0.0.0.0/0 ile sağlanır.

Split Tunnel: Sadece şirket ağına giden trafik VPN üzerinden geçer, diğer trafik doğrudan internete çıkar. Performans açısından daha iyi. Örneğin sadece iç ağa erişim için:

# Sadece şirket iç ağı ve VPN ağı için
AllowedIPs = 10.8.0.0/24, 192.168.10.0/24, 172.16.0.0/12

Hangi IP bloklarını buraya yazacağınızı hesaplamak için [wireguardconfig.com](https://www.wireguardconfig.com) gibi araçlardan yararlanabilirsiniz. Full tunnel’da 0.0.0.0/0 kullandığınızda bazı sistemlerde varsayılan rotayı iki kez tanımlamak hata verebilir, bu durumda 0.0.0.0/1, 128.0.0.0/1 kombinasyonunu kullanın.

Dinamik Peer Yönetimi: Yeni İstemci Ekleme

Klasik VPN çözümlerinde yeni kullanıcı eklemek sertifika yönetimi, servis yeniden başlatma gibi adımlar gerektirirdi. WireGuard’da ise servis yeniden başlatmadan anında peer eklenebilir:

# Yeni istemci için anahtar üret
sudo wg genkey | sudo tee /etc/wireguard/clients/yeni_kullanici_private.key | 
wg pubkey | sudo tee /etc/wireguard/clients/yeni_kullanici_public.key

YENI_PUBKEY=$(sudo cat /etc/wireguard/clients/yeni_kullanici_public.key)

# Çalışan sunucuya peer ekle (yeniden başlatma gerekmez!)
sudo wg set wg0 peer $YENI_PUBKEY allowed-ips 10.8.0.10/32

# Kalıcı hale getir (wg0.conf'a da yaz)
sudo wg-quick save wg0

Benzer şekilde bir peer’ı kaldırmak için:

# Peer public key'ini bul
sudo wg show wg0 peers

# Peer'ı kaldır
sudo wg set wg0 peer <KALDIRILACAK_PUBKEY> remove
sudo wg-quick save wg0

Monitoring ve Troubleshooting

Bağlantı Durumu İzleme

# Anlık durum - tüm peer'ları, handshake ve transfer bilgilerini gösterir
watch -n 2 sudo wg show

# Son handshake zamanını kontrol et
# Eğer "none" görüyorsa henüz bağlanmamış
# Eğer çok eski bir zaman görüyorsa bağlantı kesilmiş olabilir
sudo wg show wg0 latest-handshakes

# Aktarılan veri miktarı
sudo wg show wg0 transfer

# Tünel arayüzünün IP bilgisi
ip addr show wg0
ip route show table main | grep wg0

Yaygın Sorunlar ve Çözümleri

Sorun: Peer bağlanıyor ama internet erişimi yok

Bu genellikle IP forwarding veya NAT kurallarının eksikliğinden kaynaklanır:

# IP forwarding kontrol
cat /proc/sys/net/ipv4/ip_forward
# 1 çıkmalı, 0 ise:
sudo sysctl -w net.ipv4.ip_forward=1

# NAT kurallarını kontrol et
sudo iptables -t nat -L POSTROUTING -v -n

# Arayüz adını doğrula
ip link show
# eth0 yerine ens3, enp2s0 gibi isimler olabilir

Sorun: Handshake gerçekleşmiyor

# UDP portunu dinliyor mu?
sudo ss -ulnp | grep 51820

# Güvenlik duvarı engelliyor mu?
sudo iptables -L INPUT -v -n | grep 51820

# Sunucuya erişilebilir mi? (istemci tarafından)
nc -zvu vpn.sirketiniz.com 51820

# WireGuard loglarını incele
sudo journalctl -u wg-quick@wg0 -f
sudo dmesg | grep wireguard

Sorun: DNS çözümlemesi çalışmıyor (full tunnel)

# /etc/resolv.conf'u kontrol et
cat /etc/resolv.conf

# resolvconf veya systemd-resolved kullanılıyorsa
sudo resolvectl status

# Elle test
dig @10.8.0.1 google.com

Güvenlik Sertleştirme

Bir road warrior kurulumunda güvenlik katmanlarını artırmak için birkaç pratik önlem:

Pre-shared Key Kullanımı

WireGuard, public/private key şifrelemesine ek olarak simetrik bir PSK katmanı destekler. Bu, kuantum bilgisayar saldırılarına karşı ek koruma sağlar:

# Her peer çifti için benzersiz PSK üret
sudo wg genpsk | sudo tee /etc/wireguard/clients/ali_psk.key

# wg0.conf'ta ilgili [Peer] bloğuna ekle
# PresharedKey = <PSK_DEGERI>

# Ya da çalışan sisteme ekle
sudo wg set wg0 peer <ALI_PUBKEY> preshared-key /etc/wireguard/clients/ali_psk.key

Port Gizleme

51820 standart port olduğu için port tarayıcılarının hedefi olabilir. WireGuard UDP olduğundan ve yanıtsız paketleri drop ettiğinden zaten oldukça gizli bir yapıya sahip, ama yine de standart dışı port kullanmak iyi bir pratik.

Fail2ban ile Brute Force Koruması

WireGuard kriptografik olarak doğrulanmamış paketleri zaten siler, ama log izleme için yine de faydalı olabilir:

sudo apt install fail2ban -y

# /etc/fail2ban/filter.d/wireguard.conf
sudo nano /etc/fail2ban/filter.d/wireguard.conf
[Definition]
failregex = WireGuard: Handshake for peer .* did not complete after
ignoreregex =

Otomasyon: Yeni İstemci Scripti

Gerçek bir ortamda her seferinde manuel adımları tekrarlamamak için basit bir script yazmak hayat kurtarır:

#!/bin/bash
# add_wireguard_client.sh

set -e

if [ -z "$1" ]; then
    echo "Kullanim: $0 <istemci_adi> <vpn_ip>"
    echo "Ornek: $0 ali 10.8.0.5"
    exit 1
fi

CLIENT_NAME=$1
CLIENT_IP=$2
SERVER_PUBKEY=$(sudo cat /etc/wireguard/server_public.key)
SERVER_ENDPOINT="vpn.sirketiniz.com:51820"
CLIENT_DIR="/etc/wireguard/clients"
CONFIG_DIR="/etc/wireguard/client_configs"

sudo mkdir -p $CLIENT_DIR $CONFIG_DIR

# Anahtar üret
sudo wg genkey | sudo tee $CLIENT_DIR/${CLIENT_NAME}_private.key | 
    wg pubkey | sudo tee $CLIENT_DIR/${CLIENT_NAME}_public.key > /dev/null
sudo wg genpsk | sudo tee $CLIENT_DIR/${CLIENT_NAME}_psk.key > /dev/null
sudo chmod 600 $CLIENT_DIR/${CLIENT_NAME}_private.key

CLIENT_PRIVKEY=$(sudo cat $CLIENT_DIR/${CLIENT_NAME}_private.key)
CLIENT_PUBKEY=$(sudo cat $CLIENT_DIR/${CLIENT_NAME}_public.key)
CLIENT_PSK=$(sudo cat $CLIENT_DIR/${CLIENT_NAME}_psk.key)

# İstemci konfigürasyon dosyası oluştur
sudo tee $CONFIG_DIR/${CLIENT_NAME}.conf > /dev/null << EOF
[Interface]
Address = ${CLIENT_IP}/32
PrivateKey = ${CLIENT_PRIVKEY}
DNS = 10.8.0.1, 1.1.1.1

[Peer]
PublicKey = ${SERVER_PUBKEY}
PresharedKey = ${CLIENT_PSK}
Endpoint = ${SERVER_ENDPOINT}
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25
EOF

# Sunucuya peer ekle
sudo wg set wg0 peer $CLIENT_PUBKEY 
    preshared-key $CLIENT_DIR/${CLIENT_NAME}_psk.key 
    allowed-ips ${CLIENT_IP}/32

# Kalıcı hale getir
sudo wg-quick save wg0

echo "Istemci '$CLIENT_NAME' basariyla eklendi."
echo "Konfigurasyon dosyasi: $CONFIG_DIR/${CLIENT_NAME}.conf"
echo ""
echo "QR kod olusturuluyor..."
sudo apt-get install -qq qrencode
sudo qrencode -t ansiutf8 < $CONFIG_DIR/${CLIENT_NAME}.conf

Scripti kullanmak için:

sudo chmod +x add_wireguard_client.sh
sudo ./add_wireguard_client.sh ali 10.8.0.5
sudo ./add_wireguard_client.sh ayse 10.8.0.6

Performans Optimizasyonu

WireGuard zaten çok hızlı, ama büyük ortamlarda birkaç ince ayar fark yaratabilir:

  • MTU ayarı: Genellikle 1420 iyi bir değerdir. Bazı ağlarda paket fragmentasyonu yaşıyorsanız MTU = 1380 deneyebilirsiniz.
  • Kernel versiyonu: WireGuard, Linux 5.6+ ile çekirdeğe dahil edildi. Daha eski kernel kullanıyorsanız wireguard-dkms paketi ile backport kullanın.
  • CPU çekirdek kullanımı: WireGuard, kernel thread’leri kullandığından modern çok çekirdekli sistemlerde çok iyi ölçeklenir. Özel bir ayar gerektirmez.

Gecikme ve bant genişliği testleri için:

# Tünel üzerinden iperf3 testi
# Sunucuda:
iperf3 -s -B 10.8.0.1

# İstemcide:
iperf3 -c 10.8.0.1 -t 10 -P 4

Sonuç

WireGuard, road warrior VPN kurulumu için bugün mevcut en temiz çözümlerden biri. Konfigürasyon dosyası okuma yazması, peer yönetimi, troubleshooting süreci; tüm bunlar klasik VPN çözümleriyle kıyaslandığında inanılmaz derecede basit. Özellikle anahtar bazlı kimlik doğrulama ve roaming desteği, seyahat eden kullanıcılar için mükemmel bir kullanıcı deneyimi sunuyor.

Kurulumda dikkat etmeniz gereken birkaç kritik nokta var: IP forwarding’i unutmayın, NAT kurallarının doğru arayüze uygulandığından emin olun, istemci konfigürasyonlarını şifreli kanallarla iletin ve PSK kullanımını ihmal etmeyin. Bu temel kurulum üzerine, ilerleyen adımlarda DNS filtreleme, ikinci faktör doğrulama entegrasyonu veya WireGuard üzerine inşa edilmiş Tailscale gibi katmanlı çözümlere de geçebilirsiniz.

Ortamınız büyüdükçe, peer yönetimini otomatize eden scriptler ve merkezi bir konfigürasyon yönetimi aracı (Ansible, Terraform) bu altyapıyı sürdürülebilir kılacaktır. Ama küçük ve orta ölçekli bir ekip için burada anlattığımız kurulum gayet yeterli ve uzun süre sorunsuz çalışır.

Yorum yapın