Adım Adım WireGuard VPN Kurulumu ve İstemci (Client) Yapılandırması
Linux VDS üzerinde WireGuard VPN kurulumu: anahtar çifti, wg0.conf, firewall, NAT ve istemci yapılandırması; terminalde adım adım ve hata çözümleriyle.

İçindekiler
- Örnek Topoloji ve Kullanılan Değerler
- WireGuard Nedir ve Ne Sağlar?
- WireGuard Kimler İçin Uygun?
- WireGuard Kurulum Öncesi Gereksinimler
- VDS Neden WireGuard Sunucusu İçin Kullanılır?
- Sunucuyu Hazırlama: Bağlantı, Güncelleme ve Güvenlik Duvarı
- WireGuard Kurulumu: Terminalde Adım Adım
- Yaygın WireGuard Hataları ve Çözümleri
- WireGuard ve Diğer VPN Teknolojileri
- Ryzen VDS WireGuard İçin Neden Tercih Edilebilir?
- WireGuard Sunucusunu Güvenli Hale Getirme
- Sonuç
- Sıkça Sorulan Sorular
- WireGuard nedir?
- WireGuard hangi portu kullanır?
- OpenVPN mi WireGuard mı?
- WireGuard’a yeni istemci nasıl eklenir?
- VPN için VDS gerekir mi?
- WireGuard sunucusu için kaç GB RAM gerekir?
- Ucuz VDS ile WireGuard kurulabilir mi?
- Ryzen VDS WireGuard için uygun mudur?
WireGuard, son yılların en çok tercih edilen VPN protokolü. Birkaç satırlık yapılandırması, çekirdek içinde çalışan hızlı yapısı ve modern şifrelemesiyle kişisel VPN’den ekip erişimine kadar pek çok ihtiyaca sade bir cevap veriyor. Kendi WireGuard sunucunuzu kurmak için internete açık, sabit IP’li ve root erişimli bir Linux sunucu yeterli; bunun için bir VDS kiralayıp birkaç dakika içinde başlayabilirsiniz.
Bu rehberde boş bir Ubuntu VDS’e SSH ile bağlanıp WireGuard sunucusunu terminalde adım adım kuruyoruz: anahtar çiftleri, wg0.conf, IP yönlendirme, UFW ile firewall ve NAT, servis yönetimi, istemci (client) yapılandırması ve bağlantı testi. Son bölümde en sık karşılaşılan sekiz WireGuard hatasını belirti, kontrol ve çözüm adımlarıyla ele alıyoruz.
Örnek Topoloji ve Kullanılan Değerler
203.0.113.10- VDS public IPv4 adresi (VPN_SERVER_IP)
198.51.100.24- İstemcinin internet IP’si (CLIENT_PUBLIC_IP)
eth0- Sunucunun internete çıkan ağ arayüzü
laptop- Örnek istemci adı (CLIENT_NAME)
10.8.0.0/24- WireGuard ağı
10.8.0.1- Sunucunun VPN adresi (wg0)
10.8.0.2- İstemcinin VPN adresi
51820/udp- WireGuard dinleme portu
203.0.113.0/24 ve 198.51.100.0/24 blokları RFC 5737 ile belgeler için ayrılmış örnek adreslerdir; komutlarda bunları kendi sunucu ve istemci IP’nizle değiştirin. Örnek sunucu: Ubuntu Server 24.04 LTS, 2 vCPU, 2–4 GB RAM, 30 GB+ NVMe/SSD disk, public IPv4 ve root SSH erişimi. Debian 12/13’te farklılaşan noktaları ilgili adımlarda belirttik.
Terminal çıktıları hakkında: Çıktılar, Ubuntu 24.04’te bu komutların tipik görünümünü gösteren örneklerdir. Paket sürümü, tarih, PID, anahtar ve trafik değerleri sizin sunucunuzda farklı olur. Önemli olan, kontrol komutlarında anlatılan durumu görmenizdir. Her terminalin sağ üstündeki düğmeyle o adımın komutlarını kopyalayabilirsiniz.
WireGuard Nedir ve Ne Sağlar?
WireGuard, 2020’de Linux çekirdeğine (5.6) giren modern bir VPN protokolüdür. Şifreleme seçenekleri sabittir: anahtar değişimi için Curve25519, veri şifreleme için ChaCha20-Poly1305, özetleme için BLAKE2s. Yöneticinin seçmesi gereken bir şifre listesi olmadığı için yanlış yapılandırma riski de düşüktür.
Her uç (peer) bir anahtar çiftiyle tanımlanır. Sunucu, hangi public key’in hangi VPN adresini kullanabileceğini AllowedIPs listesiyle bilir. Buna cryptokey routing denir. WireGuard yalnızca UDP kullanır ve kimliği doğrulanmamış paketlere hiç yanıt vermez; bu yüzden port taramalarında “kapalı” görünür.
Kod tabanı küçük, yapılandırması birkaç satırdır. Kullanıcı adı/parola, sertifika ya da dinamik IP dağıtımı yoktur: her istemciye bir anahtar ve sabit bir VPN adresi verirsiniz. Bu sadelik, onu kişisel kullanım ve küçük ekipler için en hızlı kurulan seçenek yapar.

WireGuard Kimler İçin Uygun?
- Sistem yöneticileri: SSH, veritabanı ve yönetim panellerini internete açmadan yalnızca VPN içinden erişilebilir yapmak için.
- Uzaktan çalışan küçük ekipler: Her çalışana bir anahtar dosyası veya QR kod vererek dakikalar içinde erişim tanımlamak için.
- Mobil kullanıcılar: Wi-Fi ile mobil veri arasında geçişte tünel kopmadan devam eder.
- VDS’ler arası özel ağ: Farklı lokasyonlardaki sunucuları şifreli bir iç ağda birleştirmek için.
WireGuard Kurulum Öncesi Gereksinimler
| Gereksinim | Açıklama |
|---|---|
| İşletim sistemi | Ubuntu 22.04/24.04, Debian 12/13 (5.6+ çekirdekte WireGuard yerleşik) |
| Yetki | root veya sudo |
| Public IPv4 | Gerekli; istemciler bu adrese bağlanır |
| RAM | 512 MB yeterli, 1–2 GB rahat çalışma alanı bırakır |
| CPU | 1–2 vCPU onlarca istemciye yeter; şifreleme yükü trafikle artar |
| Firewall | UDP 51820 (veya seçtiğiniz port) açık olmalı |
| Sanallaştırma | KVM gibi tam sanallaştırma; çekirdek modülü yüklenebilmeli |
VDS Neden WireGuard Sunucusu İçin Kullanılır?
Kendi bilgisayarınızda ya da ev internetinizde VPN sunucusu çalıştırmak mümkün olsa da sabit IP, açık port ve kesintisiz çalışma gerektirdiği için pratikte zorlanırsınız. VDS (sanal adanmış sunucu) bu ihtiyaçları tek pakette karşılar:
- Public IP: İstemciler her zaman aynı adrese bağlanır; dinamik IP veya CGNAT sorunu yaşanmaz.
- Root erişimi: Paket kurmak, çekirdek parametresi değiştirmek ve servis yönetmek için tam yetki gerekir.
- Sabit, 7/24 çalışan sunucu: Veri merkezindeki sunucu elektrik ve bağlantı kesintilerinden etkilenmez.
- Firewall ve port yönetimi: Hangi portun kime açık olacağını UFW veya nftables ile kendiniz belirlersiniz.
- Trafik ve kaynak kontrolü: CPU, RAM ve bant genişliğini başka müşterilerle paylaşmadan kullanırsınız.
- VPN yazılımı kurabilme: WireGuard çekirdek modülü ve
/dev/net/tunaygıtı için KVM gibi tam sanallaştırma gerekir; bazı konteyner tabanlı sanal sunucularda bu modüller yüklenemez. - Dağıtım seçimi: Ubuntu, Debian veya AlmaLinux gibi alıştığınız Linux dağıtımıyla başlarsınız.
- Kaynak yükseltme: Kullanıcı sayısı arttığında sunucuyu taşımadan daha güçlü bir pakete geçebilirsiniz.
Kısacası WireGuard kurmak isteyen herkesin ilk ihtiyacı root erişimli, internete açık bir Linux sunucudur. İstanbul lokasyonlu, 1 Gbit hatlı ve DDoS korumalı VPN için VDS seçenekleriyle bu rehberi kendi sunucunuzda uygulayabilirsiniz.
Sunucuyu Hazırlama: Bağlantı, Güncelleme ve Güvenlik Duvarı
WireGuard kurulumuna geçmeden önce sunucuyu hazırlıyoruz: güncel bir sistem, internete çıkan arayüzün adı, açılmış IP yönlendirmesi ve devrede bir güvenlik duvarı.
VDS sunucusuna SSH ile bağlanma
Kendi bilgisayarımızın terminalinden sunucuya root olarak bağlanıyoruz. Windows 10/11’de PowerShell’de de aynı ssh komutu çalışır. PuTTY kullanıyorsanız PuTTY ile SSH bağlantısı rehberine bakabilirsiniz.
kullanici@laptop:~$ ssh root@203.0.113.10
The authenticity of host '203.0.113.10 (203.0.113.10)' can't be established.
ED25519 key fingerprint is SHA256:Xk3v9Qm0bT8eLw2pZr7sYc4uNfH1aJdG6oV5iKqE0tM.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '203.0.113.10' (ED25519) to the list of known hosts.
[email protected]'s password:
Welcome to Ubuntu 24.04 LTS (GNU/Linux x86_64)
* Documentation: https://help.ubuntu.com
* Support: https://ubuntu.com/pro
IPv4 address for eth0: 203.0.113.10
root@vds:~#
Ne yaptık? İlk bağlantıda sunucunun kimlik parmak izini onayladık ve parolayla giriş yaptık. Parmak izi ~/.ssh/known_hosts dosyasına kaydedildi; sunucu kimliği değişirse SSH sizi uyaracak.
Beklenen sonuç: İstem satırının root@vds:~# olarak değişmesi. Kalıcı kullanımda parola yerine SSH anahtarı kullanmanızı güvenlik bölümünde anlatıyoruz.
Paket listesini ve sistemi güncelleme
Kuruluma eski paketlerle başlamamak için paket listesini yeniliyor, bekleyen güncellemeleri uyguluyoruz.
root@vds:~# apt update
Hit:1 http://archive.ubuntu.com/ubuntu noble InRelease
Get:2 http://archive.ubuntu.com/ubuntu noble-updates InRelease [126 kB]
Get:3 http://security.ubuntu.com/ubuntu noble-security InRelease [126 kB]
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
6 packages can be upgraded. Run 'apt list --upgradable' to see them.
root@vds:~# apt upgrade -y
Reading package lists... Done
Calculating upgrade... Done
6 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
root@vds:~# [ -f /var/run/reboot-required ] && echo "Yeniden başlatma gerekli" || echo "Gerek yok"
Gerek yok
root@vds:~#
Ne yaptık? apt update depo listelerini yeniledi, apt upgrade kurulu paketleri güncelledi. Üçüncü komut, çekirdek güncellemesi sonrası yeniden başlatma gerekip gerekmediğini kontrol ediyor.
Beklenen sonuç: Hatasız biten bir güncelleme. “Yeniden başlatma gerekli” çıkarsa reboot ile sunucuyu yeniden başlatıp tekrar bağlanın.
İnternete çıkan ağ arayüzünü bulma
Firewall ve NAT kurallarında sunucunun internete çıktığı arayüzün adını kullanacağız. Bu ad sağlayıcıya göre eth0, ens3 veya ens18 olabilir.
root@vds:~# ip -4 route show default
default via 203.0.113.1 dev eth0 proto static
root@vds:~# ip -br -4 addr
lo UNKNOWN 127.0.0.1/8
eth0 UP 203.0.113.10/24
root@vds:~#
Ne yaptık? Varsayılan rotanın hangi arayüzden geçtiğine baktık: dev eth0. İkinci komut aynı arayüzde public IP adresimizin tanımlı olduğunu gösteriyor.
Beklenen sonuç: Sizde farklı bir ad çıkarsa (ör. ens3), yazıdaki tüm eth0 ifadelerini o adla değiştirin.
IP yönlendirmesini (IP forwarding) açma
Linux varsayılan olarak bir arayüzden gelen paketi başka bir arayüze aktarmaz; yalnızca kendisine gelen trafiği işler. VPN istemcisinin internete çıkabilmesi için sunucunun, tünelden gelen paketleri eth0 üzerinden dışarı yönlendirmesi gerekir. Buna IP forwarding denir.
Ayarı /etc/sysctl.d/ altında ayrı bir dosyaya yazıyoruz. Bu yöntem Ubuntu’da ve /etc/sysctl.conf dosyasının artık gelmediği Debian 13’te aynı şekilde çalışır.
root@vds:~# cat > /etc/sysctl.d/99-vpn-forward.conf <<'EOF'
> net.ipv4.ip_forward = 1
> EOF
root@vds:~# sysctl --system | grep -A1 99-vpn
* Applying /etc/sysctl.d/99-vpn-forward.conf ...
net.ipv4.ip_forward = 1
root@vds:~# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
root@vds:~#
Ne yaptık? Çekirdeğin paket yönlendirme özelliğini kalıcı olarak açtık; ayar yeniden başlatmalardan sonra da geçerli.
Beklenen sonuç: net.ipv4.ip_forward = 1.
UFW güvenlik duvarını hazırlama
Ubuntu’da UFW kurulu gelir ama kapalıdır. Debian’da önce apt install ufw ile kurun. Etkinleştirmeden önce SSH portuna izin veriyoruz; aksi halde açık oturumumuz kopabilir.
Çıktıdaki deny (routed) satırına dikkat edin: UFW, sunucu üzerinden geçen (yönlendirilen) trafiği varsayılan olarak engeller. Kurulum adımlarında yalnızca VPN ağımıza özel bir ufw route allow kuralı ekleyeceğiz.
root@vds:~# ufw allow 22/tcp
Rules updated
Rules updated (v6)
root@vds:~# ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
root@vds:~# ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
22/tcp (v6) ALLOW IN Anywhere (v6)
root@vds:~#
Ne yaptık? SSH’ye izin verip UFW’yi açtık. Artık yalnızca izin verdiğimiz portlar dışarıdan erişilebilir.
Beklenen sonuç: Status: active ve 22/tcp için ALLOW IN. SSH’yi farklı bir portta çalıştırıyorsanız ilk komutta o portu yazın.
NAT neden gerekli? VPN istemcilerinin adresleri özel adreslerdir ve internette yönlendirilemez. Sunucu, istemciden gelen paketin kaynak adresini kendi public IP’siyle değiştirir (MASQUERADE) ve dönen cevabı tekrar istemciye iletir. UFW kullanan sistemlerde bu kuralı kalıcı tutmanın en temiz yolu, /etc/ufw/before.rules dosyasının en başına bir *nat bloğu eklemektir. Bunu kurulum adımlarında yapacağız.
WireGuard Kurulumu: Terminalde Adım Adım
Aşağıdaki on adımla çalışan bir WireGuard sunucusu ve bağlı bir istemciniz olacak.
WireGuard paketlerini kurma
Ubuntu ve Debian’da wireguard paketi, wg ve wg-quick araçlarını içeren wireguard-tools paketini de beraberinde kurar. Çekirdek modülü zaten sistemde hazırdır.
root@vds:~# apt install wireguard -y
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following NEW packages will be installed:
wireguard wireguard-tools
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Setting up wireguard-tools (1.0.20210914-1ubuntu4) ...
Setting up wireguard (1.0.20210914-1ubuntu4) ...
root@vds:~# wg --version
wireguard-tools v1.0.20210914 - https://git.zx2c4.com/wireguard-tools/
root@vds:~#
Ne yaptık? WireGuard’ın kullanıcı alanı araçlarını kurduk. Asıl VPN işini çekirdek modülü yapar; wg anahtarları ve eşleri yönetir, wg-quick arayüzü ayağa kaldırır.
Beklenen sonuç: wg --version komutunun sürüm satırını döndürmesi.
Sunucu anahtar çiftini oluşturma
WireGuard’da her uç bir private key (gizli anahtar) ve ondan türetilen bir public key (açık anahtar) taşır. Public key’i karşı tarafa verirsiniz; private key ise sunucudan hiç çıkmamalıdır. Bu anahtarı ele geçiren biri sunucunuzu taklit edebilir.
umask 077 sayesinde oluşan dosyaları yalnızca root okuyabilir.
root@vds:~# cd /etc/wireguard
root@vds:~# umask 077
root@vds:~# wg genkey | tee server.key | wg pubkey > server.pub
root@vds:~# ls -l
total 8
-rw------- 1 root root 45 Oct 5 20:14 server.key
-rw------- 1 root root 45 Oct 5 20:14 server.pub
root@vds:~# cat server.pub
LyCZ7RtzL0zuv1YCcZ9+z1vuw9iHPsIQkbfFIuGESQs=
root@vds:~#
Ne yaptık? wg genkey rastgele bir private key üretti, tee onu dosyaya yazarken wg pubkey aynı anahtardan public key’i türetti.
Beklenen sonuç: İki dosyanın da -rw------- izinleriyle görünmesi. server.pub içeriğini not alın; istemci yapılandırmasında kullanacağız. Örnekteki anahtarlar yalnızca gösterim içindir.
WireGuard sunucu yapılandırmasını yazma
/etc/wireguard/wg0.conf dosyası, oluşacak wg0 arayüzünü tanımlar. Private key’i dosyaya elle kopyalamak yerine $(cat ...) ile doğrudan okutuyoruz. Bu yüzden heredoc işaretini tırnaksız (EOF) yazdık.
İstemciyi (Peer) birazdan, onun anahtarı oluştuktan sonra ekleyeceğiz. Yapılandırmada geçen tüm parametrelerin görevi:
| Parametre | Nerede | Görevi |
|---|---|---|
Address | Interface | Bu ucun VPN içindeki adresi (sunucu 10.8.0.1/24, istemci 10.8.0.2) |
ListenPort | Interface | WireGuard’ın dinlediği UDP portu; sunucuda sabit olmalı |
PrivateKey | Interface | Bu ucun gizli anahtarı; dosyadan asla dışarı çıkmamalı |
PublicKey | Peer | Karşı ucun public anahtarı; kimlik doğrulama bununla yapılır |
AllowedIPs | Peer | Sunucuda: o istemciye ait adres (/32). İstemcide: tünele yönlendirilecek hedefler |
Endpoint | Peer (istemci) | Sunucunun public IP’si ve portu: 203.0.113.10:51820 |
PersistentKeepalive | Peer (istemci) | NAT arkasındaki istemcinin tüneli açık tutmak için 25 sn’de bir paket göndermesi |
root@vds:~# cat > /etc/wireguard/wg0.conf <<EOF
> [Interface]
> Address = 10.8.0.1/24
> ListenPort = 51820
> PrivateKey = $(cat /etc/wireguard/server.key)
> EOF
root@vds:~# cat /etc/wireguard/wg0.conf
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = qPeaFBqf/vKnwcliLWnJ8s9D3emyOgzXs2MRd9f0YWk=
root@vds:~#
Ne yaptık? Sunucunun VPN adresini (10.8.0.1), dinleyeceği UDP portunu ve kendi private key’ini tanımladık.
Beklenen sonuç: PrivateKey satırında $(cat ...) yerine gerçek anahtarın görünmesi. Dosyanın izni, umask sayesinde 600’dür.
Firewall ve NAT ayarı
Üç iş yapıyoruz: UDP 51820’yi açmak, wg0‘dan eth0‘a yönlendirmeye izin vermek ve 10.8.0.0/24 ağı için NAT kuralı eklemek. nano açıldığında dosyanın en başına şu bloğu ekleyip kaydedin (Ctrl+O, Enter, Ctrl+X):
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
COMMIT
root@vds:~# ufw allow 51820/udp
Rules updated
Rules updated (v6)
root@vds:~# ufw route allow in on wg0 out on eth0
Rules updated
Rules updated (v6)
root@vds:~# nano /etc/ufw/before.rules
# *nat bloğu dosyanın en başına eklendi ve kaydedildi
root@vds:~# ufw reload
Firewall reloaded
root@vds:~# iptables -t nat -S POSTROUTING
-P POSTROUTING ACCEPT
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
root@vds:~#
Ne yaptık? İstemcilerin bağlanacağı portu açtık, tünelden gelen trafiğin internete yönlendirilmesine izin verdik ve kaynak adreslerin sunucu IP’siyle değiştirilmesini (MASQUERADE) sağladık.
Beklenen sonuç: iptables -t nat -S çıktısında MASQUERADE satırını görmek. Ubuntu 24.04 ve Debian 12/13’te iptables komutu arka planda nftables kullanır; kural iki tarafta da aynı şekilde çalışır.
WireGuard servisini başlatma
wg-quick@wg0 servisi, yapılandırma dosyasını okuyup arayüzü kurar. enable --now hem hemen başlatır hem de açılışta otomatik başlamasını sağlar.
root@vds:~# systemctl enable --now wg-quick@wg0
Created symlink /etc/systemd/system/multi-user.target.wants/[email protected] → /usr/lib/systemd/system/[email protected].
root@vds:~#
Ne yaptık? Servisi etkinleştirip başlattık. Debian 12’de hedef yol /lib/systemd/system/ olarak görünür; davranış aynıdır.
Beklenen sonuç: Hata mesajı olmadan dönen komut. Sonraki adımda arayüzü kontrol ediyoruz.
WireGuard durumunu kontrol etme
Arayüzün kurulduğunu dört açıdan doğruluyoruz: WireGuard durumu, IP adresi, rota ve systemd kaydı.
root@vds:~# wg show
interface: wg0
public key: LyCZ7RtzL0zuv1YCcZ9+z1vuw9iHPsIQkbfFIuGESQs=
private key: (hidden)
listening port: 51820
root@vds:~# ip addr show wg0
4: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
link/none
inet 10.8.0.1/24 scope global wg0
valid_lft forever preferred_lft forever
root@vds:~# ip route | grep wg0
10.8.0.0/24 dev wg0 proto kernel scope link src 10.8.0.1
root@vds:~# systemctl status wg-quick@wg0 --no-pager
● [email protected] - WireGuard via wg-quick(8) for wg0
Loaded: loaded (/usr/lib/systemd/system/[email protected]; enabled; preset: enabled)
Active: active (exited) since Mon 2026-10-05 20:16:02 +03; 41s ago
wg-quick[2817]: [#] ip link add wg0 type wireguard
wg-quick[2817]: [#] wg setconf wg0 /dev/fd/63
wg-quick[2817]: [#] ip -4 address add 10.8.0.1/24 dev wg0
wg-quick[2817]: [#] ip link set mtu 1420 up dev wg0
root@vds:~#
Ne yaptık? wg show arayüzün 51820’yi dinlediğini, ip addr VPN adresini, rota tablosu ise 10.8.0.0/24 ağının wg0 üzerinden gittiğini gösterdi.
Beklenen sonuç: Servisin active (exited) görünmesi normaldir: wg-quick arayüzü kurup çıkar, tüneli çekirdek taşır. Henüz peer olmadığı için wg show çıktısında eş satırı yok.
İstemci cihazda anahtar oluşturma
Bu adım istemci bilgisayarda (örnekte Ubuntu masaüstü) yapılıyor. Private key istemcide üretildiği için sunucuya hiç gitmez; sunucuya yalnızca public key’i bildireceğiz. Windows, macOS, Android ve iOS uygulamalarında “Boş tünel ekle” dediğinizde anahtar çifti otomatik oluşur.
kullanici@laptop:~$ sudo apt install wireguard -y
Setting up wireguard (1.0.20210914-1ubuntu4) ...
kullanici@laptop:~$ sudo ln -s /usr/bin/resolvectl /usr/local/bin/resolvconf
kullanici@laptop:~$ umask 077
kullanici@laptop:~$ wg genkey | tee laptop.key | wg pubkey > laptop.pub
kullanici@laptop:~$ cat laptop.pub
Ocfjxsa5t1n0fVogpkwXqUmdFDc1HKkT6T4MTCb51Hs=
kullanici@laptop:~$
Ne yaptık? İstemcinin kendi anahtar çiftini oluşturduk. Aradaki ln -s komutu, systemd-resolved kullanan Ubuntu masaüstünde wg-quick aracının DNS = satırını uygulayabilmesi için resolvconf komutunu resolvectl aracına bağlar.
Beklenen sonuç: Public key’i kopyalayın; bir sonraki adımda sunucuya peer olarak ekleyeceğiz.
İstemciyi sunucuya peer olarak ekleme
Sunucuya dönüp istemciyi yapılandırma dosyasına ekliyoruz. AllowedIPs = 10.8.0.2/32, bu anahtarın tünel içinde yalnızca 10.8.0.2 adresini kullanabileceği anlamına gelir. reload, mevcut bağlantıları koparmadan yeni peer’i devreye alır.
root@vds:~# cat >> /etc/wireguard/wg0.conf <<'EOF'
> [Peer]
> # laptop
> PublicKey = Ocfjxsa5t1n0fVogpkwXqUmdFDc1HKkT6T4MTCb51Hs=
> AllowedIPs = 10.8.0.2/32
> EOF
root@vds:~# systemctl reload wg-quick@wg0
root@vds:~# wg show wg0 allowed-ips
Ocfjxsa5t1n0fVogpkwXqUmdFDc1HKkT6T4MTCb51Hs= 10.8.0.2/32
root@vds:~#
Ne yaptık? İstemcinin public key’ini ve izinli VPN adresini sunucuya tanıttık.
Beklenen sonuç: wg show wg0 allowed-ips çıktısında istemci anahtarının yanında 10.8.0.2/32.
İstemci (client) yapılandırmasını oluşturma
İstemcide /etc/wireguard/wg0.conf dosyasını oluşturuyoruz. Endpoint sunucunun adresini, PublicKey sunucunun public key’ini gösterir. AllowedIPs = 0.0.0.0/0 tüm IPv4 trafiğinin tünelden gitmesini sağlar. Yalnızca VPN ağına erişmek istiyorsanız (split tunnel) bunu 10.8.0.0/24 yapın.
Telefona aktarmak için yapılandırmayı bir dosyada hazırlayıp apt install qrencode sonrası qrencode -t ansiutf8 < laptop.conf ile terminalde QR kod olarak gösterebilir, WireGuard mobil uygulamasıyla okutabilirsiniz.
kullanici@laptop:~$ sudo tee /etc/wireguard/wg0.conf > /dev/null <<EOF
> [Interface]
> PrivateKey = $(cat laptop.key)
> Address = 10.8.0.2/24
> DNS = 1.1.1.1, 9.9.9.9
>
> [Peer]
> PublicKey = LyCZ7RtzL0zuv1YCcZ9+z1vuw9iHPsIQkbfFIuGESQs=
> Endpoint = 203.0.113.10:51820
> AllowedIPs = 0.0.0.0/0
> PersistentKeepalive = 25
> EOF
kullanici@laptop:~$ sudo chmod 600 /etc/wireguard/wg0.conf
kullanici@laptop:~$
Ne yaptık? İstemcinin kendi anahtarını, VPN adresini, DNS sunucularını ve bağlanacağı sunucuyu tanımladık.
Beklenen sonuç: Dosyanın yalnızca root tarafından okunabilir olması. Windows uygulamasında aynı içeriği “Boş tünel ekle” penceresine yapıştırmanız yeterli.
VPN bağlantısını test etme
Tüneli istemcide açıyor, önce sunucunun VPN adresine ping atıyor, ardından internete hangi IP ile çıktığımıza bakıyoruz. Son olarak handshake bilgisini kontrol ediyoruz.
kullanici@laptop:~$ sudo wg-quick up wg0
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.8.0.2/24 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] resolvconf -a wg0 -m 0 -x
[#] wg set wg0 fwmark 51820
[#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820
[#] ip -4 rule add not fwmark 51820 table 51820
[#] ip -4 rule add table main suppress_prefixlength 0
[#] sysctl -q net.ipv4.conf.all.src_valid_mark=1
[#] nft -f /dev/fd/63
kullanici@laptop:~$ ping -c 3 10.8.0.1
PING 10.8.0.1 (10.8.0.1) 56(84) bytes of data.
64 bytes from 10.8.0.1: icmp_seq=1 ttl=64 time=21.4 ms
64 bytes from 10.8.0.1: icmp_seq=2 ttl=64 time=20.9 ms
64 bytes from 10.8.0.1: icmp_seq=3 ttl=64 time=21.6 ms
--- 10.8.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
kullanici@laptop:~$ curl -4 ifconfig.me; echo
203.0.113.10
kullanici@laptop:~$ sudo wg show
interface: wg0
public key: Ocfjxsa5t1n0fVogpkwXqUmdFDc1HKkT6T4MTCb51Hs=
private key: (hidden)
listening port: 41622
fwmark: 0xca6c
peer: LyCZ7RtzL0zuv1YCcZ9+z1vuw9iHPsIQkbfFIuGESQs=
endpoint: 203.0.113.10:51820
allowed ips: 0.0.0.0/0
latest handshake: 8 seconds ago
transfer: 12.41 KiB received, 4.87 KiB sent
persistent keepalive: every 25 seconds
kullanici@laptop:~$
Ne yaptık? wg-quick arayüzü kurdu, DNS’i ayarladı ve tüm trafiği tünele yönlendiren kuralları ekledi. Ping tünelin, curl sonucu ise NAT’ın çalıştığını kanıtladı.
Beklenen sonuç: latest handshake satırının görünmesi ve dış IP’nin 203.0.113.10 olması. Sunucuda wg show çalıştırırsanız peer satırında istemcinin public IP’sini (198.51.100.24) endpoint olarak görürsünüz. Tüneli kapatmak için sudo wg-quick down wg0 yeterli.
Windows, macOS, Android ve iOS’ta resmi WireGuard uygulamasını kurup aynı istemci yapılandırmasını içe aktarmanız yeterli. Her yeni cihaz için 7–9. adımları tekrarlayın ve her birine yeni bir adres (10.8.0.3, 10.8.0.4 …) verin. Bir cihazın erişimini kaldırmak için sunucudaki ilgili [Peer] bloğunu silip systemctl reload wg-quick@wg0 çalıştırmanız yeterli.
Yaygın WireGuard Hataları ve Çözümleri
Kurulum sonrası sorun yaşarsanız aşağıdaki kartlarda belirtiye en yakın olanı bulun; her kartta kontrol komutu, olası neden, çözüm ve tekrar test komutu var.
Handshake olmuyor
Belirti: İstemcide latest handshake satırı hiç görünmüyor, transfer yalnızca “sent” artıyor.
Kontrol:
wg show wg0 latest-handshakes
journalctl -u wg-quick@wg0 -n 20 --no-pager
Olası neden: Yanlış Endpoint IP/portu, karşılıklı yanlış girilmiş public key ya da UDP portunun yolda engellenmesi.
Çözüm: İstemcideki Endpoint değerini ve iki taraftaki PublicKey satırlarını kontrol edin. Sunucuda tcpdump ile paketin gelip gelmediğine bakın (bir sonraki madde).
Tekrar test:
sudo wg-quick down wg0 && sudo wg-quick up wg0
sudo wg show | grep handshake
UDP portu kapalı veya paket ulaşmıyor
Belirti: Handshake yok; sunucu tarafında hiçbir hata kaydı da yok.
Kontrol:
ss -ulpn | grep 51820
ufw status | grep 51820
tcpdump -ni eth0 udp port 51820
Olası neden: UFW’de port açılmamış, sağlayıcı panelinde ek bir güvenlik duvarı var ya da istemcinin bulunduğu ağ UDP’yi engelliyor.
Çözüm: ufw allow 51820/udp ile portu açın. tcpdump istemci bağlanırken paket göstermiyorsa sorun sunucuya ulaşmadan önce, yani ağda ya da sağlayıcı firewall’undadır. Kısıtlı ağlarda ListenPort’u 443 gibi genelde açık bir UDP portuna taşıyabilirsiniz.
Tekrar test:
tcpdump -ni eth0 udp port 51820 -c 5
AllowedIPs yanlış
Belirti: Handshake var ama ping gitmiyor ya da yalnızca bazı hedeflere erişiliyor.
Kontrol:
wg show wg0 allowed-ips
Olası neden: Sunucudaki peer’e istemcinin adresi (10.8.0.2/32) yazılmamış ya da iki peer’e aynı adres verilmiş. İstemcide AllowedIPs yalnızca 10.8.0.0/24 ise internet trafiği tünele girmez.
Çözüm: Sunucuda her istemciye benzersiz bir /32 verin. İstemcide tam tünel için 0.0.0.0/0 kullanın.
Tekrar test:
systemctl reload wg-quick@wg0
wg show wg0 allowed-ips
IP forwarding kapalı
Belirti: Ping 10.8.0.1 çalışıyor, internet çalışmıyor.
Kontrol:
sysctl net.ipv4.ip_forward
Olası neden: Çıktı 0: çekirdek paketleri eth0‘a aktarmıyor.
Çözüm: Hazırlık bölümündeki 4. adımı (IP yönlendirme) uygulayın ve sysctl --system çalıştırın.
Tekrar test:
sysctl net.ipv4.ip_forward
curl -4 ifconfig.me
NAT eksik veya yanlış arayüz
Belirti: Handshake ve forwarding tamam; internet sitelerine yine de erişilemiyor.
Kontrol:
iptables -t nat -S POSTROUTING
ufw status verbose | grep -i route
Olası neden: MASQUERADE satırı yok, -o parametresinde yanlış arayüz adı var ya da ufw route allow kuralı eksik.
Çözüm: /etc/ufw/before.rules dosyasındaki *nat bloğunu ve arayüz adını düzeltip ufw reload çalıştırın.
Tekrar test:
iptables -t nat -S POSTROUTING
Private ve public key karışmış
Belirti: Yapılandırma doğru görünüyor ama handshake asla gerçekleşmiyor.
Kontrol:
wg pubkey < /etc/wireguard/server.key
wg show wg0 public-key
Olası neden: İstemcinin [Peer] bölümüne sunucunun private key’i ya da kendi public key’i yazılmış. [Interface] içinde her zaman kendi private key’iniz, [Peer] içinde karşı tarafın public key’i olmalı.
Çözüm: İlk komutun çıktısını istemcideki [Peer] PublicKey ile karşılaştırın; farklıysa düzeltin.
Tekrar test:
sudo wg-quick down wg0 && sudo wg-quick up wg0
DNS çözümlenmiyor
Belirti: IP adresine ping gidiyor ama alan adları açılmıyor; Ubuntu istemcide resolvconf: command not found hatası çıkıyor.
Kontrol:
resolvectl status wg0
getent hosts example.com
Olası neden: İstemcide DNS = satırını uygulayacak resolvconf komutu yok veya DNS sunucusu tünelden erişilemiyor.
Çözüm: systemd-resolved kullanan Ubuntu istemcide sudo ln -s /usr/bin/resolvectl /usr/local/bin/resolvconf yeterlidir. Alternatif olarak DNS satırını kaldırıp sistem DNS’ini kullanabilirsiniz.
Tekrar test:
sudo wg-quick down wg0 && sudo wg-quick up wg0
getent hosts example.com
MTU problemi
Belirti: Bazı siteler yarım yükleniyor, büyük dosya indirmeleri ya da SSH oturumları donuyor.
Kontrol:
ping -M do -s 1392 -c 2 10.8.0.1
ping -M do -s 1252 -c 2 10.8.0.1
Olası neden: İstemcinin bulunduğu ağ (PPPoE, mobil operatör, başka bir tünel) 1420 baytlık paketleri parçalıyor ya da düşürüyor.
Çözüm: İstemcinin [Interface] bölümüne MTU = 1380, sorun sürerse MTU = 1280 ekleyin.
Tekrar test:
sudo wg-quick down wg0 && sudo wg-quick up wg0
ip link show wg0 | grep mtu
WireGuard ve Diğer VPN Teknolojileri
Bu seride dört VPN teknolojisini ayrı ayrı kuruyoruz. Her birinin güçlü olduğu alan farklı; tek bir “en iyi VPN” yok. Doğru seçim kullanım senaryonuza bağlı:
| Özellik | WireGuard | OpenVPN | SoftEther | strongSwan IKEv2 |
|---|---|---|---|---|
| Kurulum kolaylığı | Çok kolay | Orta (PKI gerekir) | Orta (derleme + vpncmd) | Orta (sertifika + swanctl) |
| Performans | Çok yüksek, çekirdek içi | İyi; kullanıcı alanında, CPU’ya duyarlı | İyi; SecureNAT’ta CPU yükü artar | Yüksek; çekirdek IPsec, AES-NI ile verimli |
| Yapılandırma | Birkaç satırlık INI dosyası | Çok seçenekli metin dosyası | vpncmd veya grafik arayüz | Yapılandırılmış swanctl.conf |
| Sertifika yönetimi | Yok (anahtar çifti) | Tam PKI, CRL ile iptal | İsteğe bağlı (parola, sertifika, RADIUS) | Tam PKI; EAP ile parola da olur |
| Mobil kullanım | Resmi uygulamalar, ağ geçişinde kesintisiz | OpenVPN Connect uygulaması | Yerleşik L2TP/IPsec ya da istemci uygulaması | Yerleşik istemci, MOBIKE desteği |
| Kurumsal kullanım | Küçük/orta ekipler | Yaygın, olgun | Çok protokollü ortamlar | Standart uyumu, MDM, site-to-site |
| Esneklik | Bilinçli olarak sade | Çok yüksek (push, TCP/UDP, eklentiler) | Çok yüksek (L2 köprü, çoklu protokol) | Yüksek (IKEv2 standardı, çok sayıda eklenti) |
| Yönetim kolaylığı | Peer ekle/sil | Sertifika yaşam döngüsü takibi gerekir | Grafik yönetici ile kolay | Kullanıcı ve sertifika yönetimi gerekir |
| Kullanım senaryosu | Yönetici erişimi, kişisel VPN, sunucular arası ağ | Kısıtlı ağlar, karma cihazlar, kurumsal uzaktan erişim | Farklı istemcileri tek sunucuda toplamak | Ek uygulama kurdurmadan kurumsal cihaz VPN’i |

- Hızlı, sade ve modern bir tünel istiyorsanız WireGuard: bu yazı.
- Sertifika tabanlı, merkezi olarak iptal edilebilir erişim ya da TCP 443 üzerinden bağlantı gerekiyorsa OpenVPN: kurulum rehberi.
- Aynı sunucuda farklı protokolleri ve grafik yönetimi bir arada istiyorsanız SoftEther: kurulum rehberi.
- Cihazlara uygulama kurdurmadan yerleşik istemcilerle bağlanmak istiyorsanız strongSwan IKEv2: kurulum rehberi.
Ryzen VDS WireGuard İçin Neden Tercih Edilebilir?
WireGuard şifrelemeyi çekirdekte yapar ve yükü işlemci çekirdeklerine dağıtır; bu yüzden aynı donanımda genellikle en yüksek aktarım hızına ulaşan VPN’dir. Yine de istemci sayısı ve trafik arttıkça her paketin şifrelenmesi işlemciye yük bindirir. Yüksek frekanslı, modern bir işlemci bu yükü daha az gecikmeyle taşır.
Bununla birlikte VPN performansı yalnızca işlemciye bağlı değildir. Sunucunun ağ kapasitesi ve port hızı, şifreleme yükü, eşzamanlı istemci sayısı, MTU ayarı, yönlendirme ve firewall kurallarının yükü, hatta istemcinin kendi internet bağlantısı sonucu birlikte belirler. Yanlış MTU ayarlı bir tünel, en güçlü işlemcide bile yavaş hissettirir.
Küçük bir ekip ya da kişisel kullanım için standart bir Linux VDS fazlasıyla yeterlidir. Çok sayıda kullanıcı, yüksek bant genişliği ya da VPN’in yanında web sunucusu ve izleme gibi başka servisler çalıştıracaksanız Ryzen 9 işlemcili, NVMe diskli ve 1 Gbit hatlı Ryzen VDS paketleri daha geniş bir performans payı bırakır.
WireGuard Sunucusunu Güvenli Hale Getirme
| Servis | Port / protokol | Not |
|---|---|---|
| SSH | TCP 22 | Mümkünse yalnızca sabit IP’lerinize açın |
| WireGuard | UDP 51820 | Kimliği doğrulanmamış pakete yanıt vermez |
- SSH anahtarı kullanın: Kendi bilgisayarınızda
ssh-keygen -t ed25519ile anahtar üretipssh-copy-id [email protected]ile sunucuya ekleyin. Anahtarla giriş yapabildiğinizi doğruladıktan sonra/etc/ssh/sshd_config.d/10-sertlestirme.confdosyasınaPasswordAuthentication noyazıpsystemctl reload sshçalıştırın. - Root giriş politikası: Günlük yönetim için sudo yetkili ayrı bir kullanıcı açın ve
PermitRootLogin no(ya da en azındanprohibit-password) kullanın. - Yalnızca gerekli portlar: Yukarıdaki tablo dışındaki portları kapalı tutun; kullanmadığınız servisleri durdurun.
- Düzenli güncelleme: Ubuntu’da kurulu gelen
unattended-upgradesgüvenlik güncellemelerini otomatik uygular;dpkg-reconfigure -plow unattended-upgradesile açık olduğundan emin olun. - Private key güvenliği:
/etc/wireguard/altındaki*.keydosyaları vewg0.confyalnızca root tarafından okunabilir olmalı (600). Private key’i e-postayla ya da mesajlaşma uygulamalarıyla göndermeyin; mümkünse her istemci kendi anahtarını kendisi üretsin. - fail2ban’ı yerinde kullanın: Parolayla SSH girişi açık bırakılan sunucularda kaba kuvvet denemelerini engellemek için faydalıdır. WireGuard ise yetkisiz paketlere hiç yanıt vermediği için onun için ayrıca fail2ban gerekmez.
- Log takibi:
journalctl -u wg-quick@wg0ile servis kayıtlarını,/var/log/auth.logile SSH denemelerini kontrol edin.wg showçıktısındakilatest handshakedeğerleri de hangi cihazın ne zaman bağlandığını gösterir. - Yedekleme:
/etc/wireguardklasörünü şifreli olarak sunucu dışında yedekleyin. Önem Bilişim’de sepette seçilebilen ücretli Sunucu Yedekleme hizmeti, sunucunun günlük otomatik yedeğini alır. - VPN kullanıcılarının yönetimi: Her cihaza ayrı anahtar, sertifika veya kullanıcı verin. Kimin hangi erişime sahip olduğunu bir listede tutun; ayrılan kişilerin erişimini aynı gün kaldırın.
- Sistem izleme: CPU, RAM, bant genişliği ve servis durumunu izleyin.
vnstattrafik geçmişi için, harici bir çalışma süresi kontrolü de sunucunun erişilebilirliği için iyi bir başlangıçtır.
İlk sertleştirme ayarlarını VDS sunucunuzu korumak için ilk 5 ayar yazımızda ayrıntılı anlattık.
Sonuç
WireGuard; az sayıda satırdan oluşan yapılandırması, çekirdek içi hızı ve anahtar tabanlı sade güvenlik modeliyle kendi VPN sunucusunu kurmak isteyenler için en hızlı başlangıç noktası. Sunucu tarafında birkaç dakikada çalışır, istemci tarafında ise tüm büyük platformlarda resmi uygulaması vardır.
Rehberi uygulamak için VDS kiralayarak Ubuntu veya Debian kurulu bir sunucuyla hemen başlayabilirsiniz. Çok kullanıcılı ya da yüksek trafikli bir yapı kuracaksanız Ryzen VDS kiralayarak daha güçlü bir işlemci ve NVMe diskle ilerleyebilirsiniz.
İlginizi çekebilir: Ubuntu / Debian üzerinde OpenVPN server kurulumu ve sertifika yönetimi
Sıkça Sorulan Sorular
WireGuard nedir?
WireGuard, Linux çekirdeğine dahil, anahtar çifti tabanlı modern bir VPN protokolüdür. Sabit ve güçlü şifreleme kullanır, yalnızca UDP üzerinden çalışır ve birkaç satırlık yapılandırmayla kurulur.
WireGuard hangi portu kullanır?
Varsayılan olarak UDP 51820 kullanılır, ancak ListenPort ile istediğiniz UDP portunu seçebilirsiniz. WireGuard TCP üzerinde çalışmaz.
OpenVPN mi WireGuard mı?
Hız ve sadelik öncelikliyse WireGuard; sertifika tabanlı merkezi yönetim, TCP 443 üzerinden bağlantı veya eski cihaz desteği gerekiyorsa OpenVPN daha uygundur. İkisi aynı sunucuda farklı portlarda birlikte çalışabilir.
WireGuard’a yeni istemci nasıl eklenir?
İstemcide yeni bir anahtar çifti üretin, sunucudaki wg0.conf dosyasına benzersiz bir adresle (ör. 10.8.0.3/32) yeni bir [Peer] bloğu ekleyin ve systemctl reload wg-quick@wg0 çalıştırın.
VPN için VDS gerekir mi?
Kendi VPN sunucunuzu kuracaksanız sabit public IP’li, 7/24 çalışan ve root erişimli bir sunucu gerekir. VDS bu ihtiyaçları ev bağlantısına göre çok daha güvenilir şekilde karşılar.
WireGuard sunucusu için kaç GB RAM gerekir?
WireGuard çok hafiftir; 512 MB–1 GB RAM kişisel kullanım ve küçük ekipler için yeterlidir. Aynı sunucuda başka servisler de çalışacaksa 2 GB ve üzeri daha rahattır.
Ucuz VDS ile WireGuard kurulabilir mi?
Evet. Düşük kaynaklı bir Linux VDS bile birkaç kullanıcıya rahatça yeter. Önemli olan KVM tabanlı sanallaştırma ve public IPv4 adresidir; kullanıcı sayısı arttıkça paketi yükseltebilirsiniz.
Ryzen VDS WireGuard için uygun mudur?
Evet. Çok sayıda istemci ve yüksek trafik olduğunda yüksek frekanslı Ryzen işlemci şifreleme yükünü rahat taşır. Yine de ağ kapasitesi ve MTU gibi etkenler de sonucu belirler.
VPN için VDS
Kendi WireGuard sunucunuzu bugün kurun
İstanbul lokasyonlu, root erişimli, 1 Gbit hatlı ve DDoS korumalı Linux VDS’lerle bu rehberi dakikalar içinde uygulayın. Yüksek trafik için Ryzen 9 işlemcili ve NVMe diskli paketleri seçin.