WireGuard VPN Sunucusu Kurulumu: Linux, NAT ve Mobil İstemci
WireGuard VPN sunucusu kurulumu, Linux sunucuda wireguard paketini kurmak, bir anahtar çifti üretmek, /etc/wireguard/wg0.conf dosyasını yazmak, IP forwarding ile NAT'ı açmak ve UDP portunu güvenlik duvarında izinlemekten ibarettir. Bu rehberde Ubuntu 22.04/24.04 ve Debian 12 için komutlarla sunucuyu, masaüstü istemciyi ve mobil istemciyi (QR kodla) kuruyoruz. Sonda sık yapılan hataları da listeledik.
WireGuard Nedir, Neden Tercih Edilir?
WireGuard, Linux çekirdeğine entegre çalışan, modern kriptografi (Curve25519, ChaCha20-Poly1305) kullanan ve yalnızca UDP üzerinden konuşan bir VPN protokolüdür. Yapılandırması birkaç satırdır, bağlantı kurulumu çok hızlıdır ve ağ değiştiğinde (Wi-Fi'dan mobil veriye geçiş gibi) oturum sorunsuz devam eder. Her eş (peer) bir açık anahtar ve izinli IP listesiyle tanımlanır; ayrı bir "sunucu/istemci" ayrımı protokol düzeyinde yoktur, ama pratikte biri sabit IP'li uç nokta olarak çalışır.
Tipik kullanım alanları:
- Dışarıdan yönetim panellerine ve SSH'a güvenli erişim
- Kamusal Wi-Fi'da trafiği şifrelemek
- Ofis ve veri merkezi arasında site-to-site bağlantı
- Sabit çıkış IP'si gerektiren servisler
Ön Hazırlık
- Genel (public) IPv4 adresli bir Linux sunucu. Örnekte
203.0.113.10kullanıyoruz. - Root veya sudo yetkisi.
- Dış arayüz adı. Şu komutla bulun:
ip route get 1.1.1.1çıktısındakidevdeğeri (örnekteeth0). - Seçtiğiniz bir UDP port: varsayılan olarak
51820. - VPN iç ağı için özel bir alt ağ: örnekte
10.8.0.0/24.
Kendi sunucunuzu kurmak için kaynak ayırmanız gerekiyorsa, sabit IP ve esnek kaynak sunan bir VDS sunucu bu iş için yeterlidir; WireGuard çok az CPU ve RAM tüketir.
1. Kurulum
sudo apt update
sudo apt install -y wireguard qrencode
Çekirdek modülü 5.6 ve üzeri çekirdeklerde zaten mevcuttur. Kontrol: modinfo wireguard | head -3.
2. Sunucu Anahtarlarını Üretme
cd /etc/wireguard
umask 077
wg genkey | tee server_private.key | wg pubkey > server_public.key
umask 077 anahtar dosyalarının yalnızca root tarafından okunabilmesini sağlar. Özel anahtarı (server_private.key) kimseyle paylaşmayın.
3. Sunucu Yapılandırması (wg0.conf)
# /etc/wireguard/wg0.conf
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = <server_private.key içeriği>
# NAT ve forward kuralları (dış arayüz: eth0)
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
# İstemciler aşağıya [Peer] olarak eklenecek
PrivateKey satırına cat /etc/wireguard/server_private.key çıktısını yapıştırın. Dosyanın izinlerini sıkılaştırın:
sudo chmod 600 /etc/wireguard/wg0.conf
4. IP Forwarding'i Açma
VPN istemcilerinin trafiğini internete çıkarmak için sunucunun paket yönlendirmesi açık olmalıdır:
echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/99-wireguard.conf
sudo sysctl --system
IPv6 de yönlendirecekseniz net.ipv6.conf.all.forwarding=1 satırını ekleyin ve Address satırına bir ULA veya sağlayıcınızdan aldığınız 2001:db8::/32 benzeri bir alt ağ tanımlayın (örnek dokümantasyon aralığıdır).
5. Güvenlik Duvarı
UFW kullanıyorsanız SSH'ı kilitlemeden önce kuralları ekleyin:
sudo ufw allow 51820/udp
sudo ufw route allow in on wg0 out on eth0
sudo ufw reload
Yalnızca iptables/nftables kullanıyorsanız INPUT zincirinde UDP 51820'ye izin verdiğinizden emin olun. Ayrıca bulut/hosting panelinde ayrı bir güvenlik grubu veya firewall varsa orada da portu açın.
6. Servisi Başlatma
sudo systemctl enable --now wg-quick@wg0
sudo wg show
wg show çıktısında interface: wg0 ve dinleme portu görünmelidir. Henüz peer olmadığı için el sıkışma (handshake) satırı yoktur.
7. İstemci Ekleme (Masaüstü)
İstemci anahtarlarını sunucuda üretmek pratiktir (üretimde istemcinin kendi cihazında üretmesi daha güvenlidir):
cd /etc/wireguard
umask 077
wg genkey | tee client1_private.key | wg pubkey > client1_public.key
wg genpsk > client1_psk.key
Sunucudaki wg0.conf dosyasına peer ekleyin:
[Peer]
# client1
PublicKey = <client1_public.key içeriği>
PresharedKey = <client1_psk.key içeriği>
AllowedIPs = 10.8.0.2/32
Servisi kesintisiz güncellemek için:
sudo bash -c 'wg syncconf wg0 <(wg-quick strip wg0)'
İstemci tarafı yapılandırması (client1.conf):
[Interface]
PrivateKey = <client1_private.key içeriği>
Address = 10.8.0.2/32
DNS = 9.9.9.9
MTU = 1420
[Peer]
PublicKey = <server_public.key içeriği>
PresharedKey = <client1_psk.key içeriği>
Endpoint = 203.0.113.10:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25
Linux istemcide sudo apt install wireguard resolvconf, ardından dosyayı /etc/wireguard/client1.conf olarak kaydedip sudo wg-quick up client1 ile bağlanın. Windows ve macOS'ta resmi WireGuard uygulamasında "Import tunnel(s) from file" yeterlidir.
Full tunnel mı, split tunnel mı?
AllowedIPs istemcide hangi trafiğin tünele gireceğini belirler:
| Hedef | AllowedIPs |
|---|---|
| Tüm trafik tünelden | 0.0.0.0/0, ::/0 |
| Sadece VPN iç ağı | 10.8.0.0/24 |
| VPN + ofis ağı | 10.8.0.0/24, 192.0.2.0/24 |
Sunucu tarafında ise AllowedIPs o peer'in kaynak adreslerini sınırlar; her istemci için yalnızca kendi /32 adresini yazın.
8. Mobil İstemciler (Android ve iOS)
Mobilde en kolay yol QR koddur. Android ve iOS için "WireGuard" uygulamasını resmi mağazadan kurun, ardından istemci dosyasını sunucuda QR olarak gösterin:
qrencode -t ansiutf8 < /etc/wireguard/client2.conf
Uygulamada "+" → "QR kodundan tara" deyin. QR kod özel anahtarı içerir; ekran görüntüsünü paylaşmayın ve işiniz bitince terminal geçmişini temizleyin. Mobil için önerilen ayarlar:
PersistentKeepalive = 25: NAT arkasındaki telefonun bağlantıyı canlı tutması için.MTU = 1380: bazı operatör ağlarında 1420 parçalanmaya yol açıyorsa.- Uygulamadaki "On-demand" seçeneğiyle belirli ağlarda otomatik bağlanma.
- Her cihaz için ayrı anahtar ve ayrı IP (
10.8.0.3/32,10.8.0.4/32gibi) kullanın; aynı anahtarı iki cihazda kullanmak bağlantıları birbirini düşürür.
9. Doğrulama
sudo wg show
ping -c3 10.8.0.1 # istemciden sunucuya
curl -4 ifconfig.me # full tunnel'da sunucunun IP'sini göstermeli
latest handshake değeri birkaç saniye ile 2 dakika arasında görünüyorsa tünel çalışıyordur. Sunucuda trafiği izlemek için sudo tcpdump -ni eth0 udp port 51820 kullanabilirsiniz.
Sık Yapılan Hatalar ve Çözümleri
El sıkışma hiç oluşmuyor. UDP 51820 kapalıdır (sunucu firewall'u, hosting paneli veya yerel ağ) ya da Endpoint IP'si yanlıştır. Anahtarların karşılıklı doğru yapıştırıldığını kontrol edin: istemcide sunucunun public, sunucuda istemcinin public anahtarı bulunmalı.
El sıkışma var ama internet yok. Büyük olasılıkla ip_forward kapalı veya NAT kuralındaki arayüz adı yanlış (eth0 yerine ens3, enp1s0 olabilir). sysctl net.ipv4.ip_forward ve iptables -t nat -S POSTROUTING ile kontrol edin.
IP'ye gidiyor, alan adı çözülmüyor. İstemcideki DNS satırı eksik ya da erişilemez. Linux'ta resolvconf veya systemd-resolved kurulu olmayabilir.
Bağlantı yavaş veya bazı siteler açılmıyor. MTU sorunudur; 1380 veya 1280 deneyin.
wg-quick up sonrası SSH kopuyor. İstemci 0.0.0.0/0 yönlendiriyorsa ve sunucuya SSH'la kendi VPN'iniz üzerinden bağlanıyorsanız rota döngüsü oluşabilir. Yönetim IP'sini AllowedIPs dışında bırakmak için hesaplanmış bir liste kullanın veya split tunnel tercih edin.
Aynı istemci iki yerde bağlı. Aynı anahtar çifti iki cihazda kullanılamaz; her cihaza ayrı peer tanımlayın.
UFW açıkken forward çalışmıyor. /etc/default/ufw içinde DEFAULT_FORWARD_POLICY değerini kontrol edin veya ufw route allow kuralını ekleyin.
Güvenlik ve İşletme Önerileri
- Özel anahtarlar ve
wg0.confiçinchmod 600uygulayın; yedeklerde şifreleyin. - Peer eklerken
PresharedKeykullanmak ek bir simetrik katman sağlar. - Ayrılan kullanıcının peer bloğunu silip
wg syncconfile uygulayın. - UDP portu internete açık olduğundan, hacimsel saldırılara maruz kalabilecek üretim ortamlarında DDoS koruma ve firewall katmanını göz önünde bulundurun.
- SSH'ı yalnızca VPN iç IP'sine (
10.8.0.1) dinleterek yönetim yüzeyini daraltabilirsiniz; ancak önce VPN'in çalıştığından emin olun.
Site-to-Site İçin Kısa Not
İki ofisi bağlamak için her iki uca da WireGuard kurup karşı tarafın LAN'ını AllowedIPs'e yazmanız yeterlidir. Örneğin A ofisi 192.0.2.0/24, B ofisi 198.51.100.0/24 ise A'daki peer AllowedIPs = 10.8.0.2/32, 198.51.100.0/24, B'dekinde AllowedIPs = 10.8.0.1/32, 192.0.2.0/24 olur. Her iki uçta forwarding açık olmalı ve LAN'daki cihazlar rotayı bu ağ geçidi üzerinden almalıdır.
Sık sorulan sorular
WireGuard hangi portu kullanır?
Varsayılan port yoktur ama yaygın olarak UDP 51820 kullanılır. ListenPort ile değiştirebilirsiniz; seçtiğiniz UDP portunu sunucu güvenlik duvarında ve varsa hosting panelindeki firewall'da açmanız gerekir.
WireGuard sunucusu için kaç GB RAM ve kaç çekirdek gerekir?
WireGuard çekirdek seviyesinde çalıştığı için hafiftir. Birkaç kullanıcı için küçük bir VDS yeterlidir; asıl belirleyici olan ağ bant genişliği ve şifreleme yapılan toplam trafiktir.
Aynı anahtarla birden fazla cihaz bağlanabilir mi?
Teknik olarak mümkün görünse de önerilmez. Aynı anahtar çifti ve IP iki cihazda kullanılırsa bağlantılar birbirini düşürür. Her cihaz için ayrı anahtar çifti ve ayrı /32 iç IP tanımlayın.
WireGuard bağlantısı kuruldu ama internet çalışmıyor, ne yapmalıyım?
Önce sunucuda net.ipv4.ip_forward değerinin 1 olduğunu, ardından iptables NAT (MASQUERADE) kuralındaki dış arayüz adının doğru olduğunu kontrol edin. DNS ve MTU ayarları da sık görülen nedenlerdir.