VPN dünyasında uzun yıllar boyunca OpenVPN hakimiyeti tartışılmaz gibiydi. Ama son birkaç yılda WireGuard sahneye çıktı ve sysadminlerin gündemine bomba gibi düştü. “Bu kadar basit bir şey gerçekten güvenli mi?” sorusu hala kafaları karıştırıyor. Bu yazıda iki protokolü performans, güvenlik, yönetilebilirlik ve gerçek dünya senaryoları açısından karşılaştıracağım. Hangisini seçeceğiniz konusunda net bir fikir edinmenizi sağlamak istiyorum.
Temel Mimari Farkları
OpenVPN, 2001 yılında hayata geçti. SSL/TLS tabanlı bir yapıya sahip, kullanıcı uzayında (userspace) çalışıyor ve muazzam bir esnekliğe sahip. Bu esneklik beraberinde karmaşıklığı da getiriyor. Yapılandırma dosyaları onlarca satır olabiliyor, sertifika yönetimi başlı başına bir iş haline gelebiliyor.
WireGuard ise 2015 yılında Jason Donenfeld tarafından geliştirildi ve 2020’de Linux kernel 5.6’ya entegre edildi. Kernel düzeyinde çalışması, modern kriptografi kullanması ve yaklaşık 4000 satır koddan oluşması onu tamamen farklı bir kategoriye koyuyor. OpenVPN’nin kod tabanı 400.000 satır civarında. Bu fark sadece istatistik değil, güvenlik açısından devasa bir anlam taşıyor. Daha az kod, daha az saldırı yüzeyi demek.
# WireGuard kernel modülünü kontrol etme
lsmod | grep wireguard
# WireGuard kurulumu (Ubuntu/Debian)
apt update && apt install wireguard wireguard-tools
# OpenVPN kurulumu karşılaştırma için
apt install openvpn easy-rsa
Kriptografi Yaklaşımı
OpenVPN kriptografi konusunda son derece esnek davranıyor. Bu hem güç hem de zayıflık. Yönetici isterse zayıf şifreleme algoritmalarını seçebiliyor. Yanlış yapılandırılmış bir OpenVPN sunucusu, güvenli olmayan cipher suites ile çalışabilir ve bunu fark etmek kolay olmayabilir.
WireGuard ise bu konuda opinionated bir yaklaşım benimsiyor. Kullanacağı kriptografik algoritmaları sabit tutuyor:
- ChaCha20: Simetrik şifreleme için
- Poly1305: Mesaj doğrulama kodu için
- Curve25519: Anahtar değişimi için (ECDH)
- BLAKE2s: Hash fonksiyonu için
- SipHash24: Hash table anahtarları için
Bu algoritmalar modern ve kanıtlanmış. ChaCha20-Poly1305 kombinasyonu özellikle AES-NI donanım desteği olmayan sistemlerde AES-GCM’den belirgin şekilde daha hızlı çalışıyor. Mobil cihazlarda bu fark pil ömrüne de yansıyor.
OpenVPN tarafında ise yapılandırmanızı dikkatli yapmanız gerekiyor:
# OpenVPN için güvenli cipher yapılandırması
# /etc/openvpn/server.conf
cipher AES-256-GCM
auth SHA256
tls-version-min 1.2
tls-cipher TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384
# Zayıf eski cipher'ları devre dışı bırak
tls-auth /etc/openvpn/ta.key 0
Performans Testi: Gerçek Sayılar
Bir üretim ortamında yaptığım testlerden bahsedeyim. 1 Gbps bağlantıya sahip, 8 çekirdekli bir sunucuda her iki protokolü de test ettim. Aynı donanım, aynı ağ koşulları.
OpenVPN tek bir CPU çekirdeğinde çalışıyor, bu onun en büyük performans darboğazı. Multi-threaded desteği yok. 1 Gbps bağlantıda bile 200-400 Mbps civarında takılıp kalıyor.
WireGuard kernel seviyesinde çalıştığı için CPU’nun tüm çekirdeklerinden faydalanabiliyor. Aynı donanımda 900 Mbps’e yakın throughput elde etmek mümkün.
# iperf3 ile WireGuard performans testi
# Sunucu tarafında
iperf3 -s -p 5201
# İstemci tarafında WireGuard tüneli üzerinden test
iperf3 -c 10.0.0.1 -p 5201 -t 30 -P 4
# Latency testi
ping -c 100 -i 0.2 10.0.0.1 | tail -1
# CPU kullanımını izleme (test sırasında ayrı terminalde)
iostat -x 1 | head -20
vmstat 1 10
Latency konusunda da WireGuard açık ara önde. OpenVPN’de TLS handshake ve userspace/kernel geçişleri nedeniyle ek gecikme oluyor. WireGuard’da bağlantı kurma neredeyse anında gerçekleşiyor. UDP tabanlı çalışması ve kernel entegrasyonu sayesinde round-trip time genellikle OpenVPN’den 2-3 ms daha düşük çıkıyor.
Roaming senaryolarında fark daha da belirgin. Dizüstü bilgisayarınızla Wi-Fi’dan 4G’ye geçtiğinizde OpenVPN bağlantıyı yeniden kurmak için birkaç saniye harcıyor. WireGuard’da bu geçiş neredeyse fark edilmiyor, çünkü her iki endpoint de IP değişikliklerine karşı toleranslı.
WireGuard Kurulum ve Yapılandırma
Teori yeterliydi, pratiğe geçelim. Basit bir site-to-site VPN kurulumu yapalım.
# Sunucu tarafında WireGuard yapılandırması
# Önce anahtar çifti oluştur
wg genkey | tee /etc/wireguard/server_private.key | wg pubkey > /etc/wireguard/server_public.key
chmod 600 /etc/wireguard/server_private.key
# İstemci anahtarlarını da oluştur (istemci makinede yapılmalı)
wg genkey | tee /etc/wireguard/client_private.key | wg pubkey > /etc/wireguard/client_public.key
# Sunucu yapılandırma dosyası
cat > /etc/wireguard/wg0.conf << 'EOF'
[Interface]
Address = 10.10.0.1/24
ListenPort = 51820
PrivateKey = <SERVER_PRIVATE_KEY>
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
PublicKey = <CLIENT_PUBLIC_KEY>
AllowedIPs = 10.10.0.2/32
EOF
# Servisi başlat ve otomatik başlatmayı aktif et
systemctl enable --now wg-quick@wg0
# Durum kontrolü
wg show
# İstemci yapılandırması
cat > /etc/wireguard/wg0.conf << 'EOF'
[Interface]
Address = 10.10.0.2/24
PrivateKey = <CLIENT_PRIVATE_KEY>
DNS = 10.10.0.1
[Peer]
PublicKey = <SERVER_PUBLIC_KEY>
Endpoint = sunucu.example.com:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
EOF
wg-quick up wg0
PersistentKeepalive değeri, NAT arkasındaki istemciler için kritik. 25 saniye genellikle iyi bir değer, NAT tablosunun aktif kalmasını sağlıyor.
OpenVPN Kurulum ve Karşılaştırma
OpenVPN kurulumu daha karmaşık, ama daha fazla seçenek sunuyor:
# Easy-RSA ile PKI altyapısı oluşturma
cd /etc/openvpn
cp -r /usr/share/easy-rsa/ easy-rsa
cd easy-rsa
# PKI başlatma
./easyrsa init-pki
./easyrsa build-ca nopass
# Sunucu sertifikası
./easyrsa gen-req server nopass
./easyrsa sign-req server server
# İstemci sertifikası
./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1
# Diffie-Hellman parametreleri
./easyrsa gen-dh
# TLS-Auth anahtarı
openvpn --genkey --secret ta.key
# Minimum güvenli sunucu yapılandırması
cat > /etc/openvpn/server.conf << 'EOF'
port 1194
proto udp
dev tun
ca /etc/openvpn/easy-rsa/pki/ca.crt
cert /etc/openvpn/easy-rsa/pki/issued/server.crt
key /etc/openvpn/easy-rsa/pki/private/server.key
dh /etc/openvpn/easy-rsa/pki/dh.pem
tls-auth /etc/openvpn/ta.key 0
server 10.8.0.0 255.255.255.0
cipher AES-256-GCM
auth SHA256
tls-version-min 1.2
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
keepalive 10 120
user nobody
group nogroup
persist-key
persist-tun
EOF
systemctl enable --now openvpn@server
Güvenlik Karşılaştırması: Detaylı Bakış
WireGuard’ın güvenlik modeli birkaç açıdan tartışmaya açık. En sık dile getirilen eleştiri, identity privacy konusu. WireGuard stateless değil, her peer’ın public key’ini bellekte tutuyor. Birisi sunucunuza bağlanmaya çalışırsa, sunucu o kişinin kayıtlı bir peer olup olmadığını anlayabilir. OpenVPN bu konuda daha iyi, çünkü TLS üzerinden çalıştığı için handshake şifreli.
Bir diğer önemli konu loglama. WireGuard tasarım gereği IP adreslerini loglamıyor. Bu privacy açısından iyi ama audit trail gerektiren kurumsal ortamlarda sorun yaratabilir.
# WireGuard bağlantı durumu ve peer bilgileri
wg show wg0
# Peer istatistiklerini izleme
watch -n 1 wg show
# Belirli bir peer'ın trafiğini izleme
wg show wg0 peers
wg show wg0 transfer
# Firewall kurallarını doğrulama
iptables -L FORWARD -n -v
iptables -t nat -L -n -v
Perfect Forward Secrecy konusunda her iki protokol de destek sağlıyor. WireGuard bunu noise protocol framework üzerinden hallediyor, her oturum için yeni geçici anahtarlar türetiyor.
OpenVPN’in avantajı TCP üzerinden çalışabilmesi. Bazı kısıtlayıcı ağlarda (oteller, kurumsal ağlar, bazı ülkelerin internet altyapıları) UDP engellenmiş olabiliyor. OpenVPN TCP 443 üzerinden çalışabilir ve bu trafik normal HTTPS trafiğinden ayırt edilemez. WireGuard sadece UDP üzerinde çalışıyor.
Port knocking veya obfuscation ihtiyacı duyuyorsanız OpenVPN veya obfsproxy gibi araçlarla kombinasyon daha uygun olabilir.
Ölçeklenebilirlik ve Peer Yönetimi
Onlarca veya yüzlerce kullanıcı olan bir ortamda her iki protokolün yönetimi de farklılaşıyor.
OpenVPN’de kullanıcı iptal etmek sertifika CRL (Certificate Revocation List) mekanizmasıyla yapılıyor. Bu hazır PKI altyapısı gerektiriyor ama merkezi bir yönetim imkanı sunuyor.
WireGuard’da peer kaldırmak çok daha basit:
# Aktif peer listesi
wg show wg0 peers
# Belirli bir peer'ı kaldırma (runtime)
wg set wg0 peer <PUBLIC_KEY> remove
# Kalıcı olarak kaldırma (conf dosyasından)
# /etc/wireguard/wg0.conf dosyasını düzenle ve
wg syncconf wg0 <(wg-quick strip wg0)
# Yeni peer ekleme (çalışırken)
wg set wg0 peer <NEW_PUBLIC_KEY>
allowed-ips 10.10.0.5/32
endpoint newhostname.example.com:51820
# Yapılandırmayı kaydet
wg-quick save wg0
Büyük ölçekli dağıtımlar için wg-easy, Netmaker veya Headscale gibi araçlar WireGuard’ın yönetimini kolaylaştırıyor. Headscale, Tailscale’in open source alternatifi olarak özellikle dikkat çekici.
Gerçek Dünya Senaryosu: Uzak Çalışan Ekip
Diyelim ki 50 kişilik remote-first bir şirketin ağ altyapısını yönetiyorsunuz. Her çalışanın şirket kaynaklarına güvenli erişmesi gerekiyor.
OpenVPN seçmeyi düşündüğünüz durumlar:
- Çalışanlar farklı ülkelerde ve bazıları VPN’i kısıtlayan ülkelerde bulunuyor
- Compliance gereksinimleri kapsamlı audit log zorunluluğu içeriyor
- Mevcut RADIUS veya LDAP entegrasyonu şart
- IT ekibi PKI yönetimine aşina
WireGuard seçmeyi düşündüğünüz durumlar:
- Performans kritik, özellikle video konferans ve büyük dosya transferi yapılıyor
- Mobil çalışanlar çok, sık ağ geçişi yaşanıyor
- Basit yapılandırma ve düşük bakım maliyeti öncelikli
- Modern bir altyapı kuruyorsunuz, legacy sistemlere bağımlılık yok
# Çoklu peer ile WireGuard yönetim scripti
#!/bin/bash
# add_peer.sh
WG_INTERFACE="wg0"
WG_CONF="/etc/wireguard/wg0.conf"
NEXT_IP=$(wg show $WG_INTERFACE allowed-ips |
awk '{print $2}' |
cut -d'/' -f1 |
sort -t. -k4 -n |
tail -1 |
awk -F. '{print $1"."$2"."$3"."$4+1}')
PEER_NAME=$1
PRIVATE_KEY=$(wg genkey)
PUBLIC_KEY=$(echo $PRIVATE_KEY | wg pubkey)
echo "Peer: $PEER_NAME"
echo "IP: $NEXT_IP"
echo "Public Key: $PUBLIC_KEY"
# Conf dosyasına ekle
cat >> $WG_CONF << EOF
[Peer]
# $PEER_NAME
PublicKey = $PUBLIC_KEY
AllowedIPs = $NEXT_IP/32
EOF
# Runtime'a uygula
wg addconf $WG_INTERFACE <(echo "[Peer]
PublicKey = $PUBLIC_KEY
AllowedIPs = $NEXT_IP/32")
echo "Peer başarıyla eklendi!"
Sorun Giderme
Her iki protokolde de bağlantı sorunları yaşandığında izlenecek yollar farklı.
# WireGuard debug ve sorun giderme
# Bağlantı durumu
wg show wg0
# Handshake zamanını kontrol et (son handshake çok eskiyse sorun var)
wg show wg0 latest-handshakes
# Kernel loglarında WireGuard mesajları
dmesg | grep wireguard
journalctl -u wg-quick@wg0 -f
# Paket akışını izleme
tcpdump -i eth0 udp port 51820 -n
# Routing tablosunu doğrulama
ip route show table main
ip rule show
# MTU sorunlarını tespit etme
ping -M do -s 1400 10.10.0.1
# WireGuard için MTU genellikle 1420 önerilir
ip link set wg0 mtu 1420
Hangisini Seçmeli?
Pratik bir karar çerçevesi çizeyim.
WireGuard tercih edin:
- Yeni bir VPN altyapısı kuruyorsanız ve legacy kısıtlamanız yoksa
- Performans ve düşük latency birincil önceliğinizse
- Mobil cihazlar ve roaming yoğunsa
- Basit peer-to-peer veya site-to-site tünelleme ihtiyacınız varsa
- Kernel tabanlı çözümün sağlamlığına güveniyorsanız
OpenVPN tercih edin:
- TCP desteği zorunluysa (kısıtlayıcı ağlar, deep packet inspection ortamları)
- Mevcut PKI altyapınız var ve sertifika tabanlı kimlik doğrulama şartsa
- İki faktörlü kimlik doğrulama veya LDAP/RADIUS entegrasyonu gerekiyorsa
- Kapsamlı loglama ve audit gereksinimi varsa
- Ekibinizin OpenVPN konusunda derin uzmanlığı var ve değişim riski almak istemiyorsanız
Her iki protokolün de güçlü güvenlik sağladığını belirtmek gerekiyor. “WireGuard daha güvenli mi?” sorusunun cevabı “doğru yapılandırılmış her ikisi de güvenli” şeklinde. Ama WireGuard’ın daha küçük saldırı yüzeyi ve modern kriptografi seçimleri, yanlış yapılandırma riskini azaltıyor. OpenVPN’in esnekliği yanlış ellerde risk yaratabilir.
Sonuç
Beş yıl önce bu soruyu sorsaydınız “OpenVPN kullan, kanıtlanmış” derdim. Bugün cevabım farklı. Yeni kuruyorsanız ve özel bir kısıtlamanız yoksa WireGuard modern, hızlı ve bakımı kolay bir seçim. Linux kernel’a entegre edilmesi, bakımı konusundaki uzun vadeli taahhüdü gösteriyor.
OpenVPN hala birçok senaryoda geçerliliğini koruyor. Kurumsal ortamlarda mevcut altyapıyla entegrasyon, compliance gereksinimleri ve ekip alışkanlıkları gerçek faktörler. “En iyi teknoloji her zaman kazanmaz, en uygun teknoloji kazanır” ilkesi burada da geçerli.
Pratik önerim şu: Eğer mevcut bir OpenVPN altyapınız varsa ve sorunsuz çalışıyorsa dokunmayın. Yeni bir proje veya mevcut altyapıyı yenileme söz konusuysa WireGuard’ı ciddi olarak değerlendirin. İkisini de test ortamında kurup kendi ağınızda benchmark yapın. Yazıdaki rakamlar genel eğilimi gösteriyor, ama kendi donanımınız ve kullanım senaryonuz farklı sonuçlar verebilir.
VPN teknolojisi seçimi salt teknik bir karar değil. Ekibin uzmanlığı, mevcut araçlar, güvenlik politikaları ve operasyonel kapasite de belirleyici. İkisini de anlayan bir sysadmin, doğru senaryoda doğru aracı kullanır.