WireGuard Nasıl Kurulur? Ubuntu VPN Kurulum Rehberi
WireGuard, Linux çekirdeğine entegre çalışan, yapılandırması kısa ve hızlı bir VPN protokolüdür. Bu rehberde Ubuntu 22.04 ve Ubuntu 24.04 üzerinde WireGuard sunucusunu sıfırdan kuracak, bir Windows istemcisini bağlayacak ve en sık karşılaşılan sorunların nedenlerini göreceksiniz. Komutları sırayla uygularsanız sonunda kendi VPN sunucunuz çalışır durumda olacak.
İçindekiler
- WireGuard Nedir?
- WireGuard Ne İçin Kullanılır?
- WireGuard Kurmak İçin Gereksinimler
- Ubuntu Sunucuyu Güncelleme
- WireGuard Paketinin Kurulması
- Sunucu Private/Public Key Oluşturma
- IP Forwarding Aktifleştirme
- Sunucunun Ağ Arayüzünü Bulma
- wg0.conf Sunucu Yapılandırması
- 51820/UDP Firewall Ayarları
- WireGuard Servisini Başlatma ve Otomatik Başlatma
- İstemci Anahtarlarını Oluşturma
- Peer Ekleme
- Windows WireGuard İstemci Yapılandırması
- AllowedIPs Nedir?
- Bağlantıyı Test Etme
- "Handshake Var Ama İnternet Yok" Sorunu
- "Handshake Oluşmuyor" Sorunu
- Birden Fazla Cihaz Ekleme
- WireGuard Güvenlik Önerileri
- WireGuard İçin VDS Gerekir mi?
- Sonuç
WireGuard Nedir?
WireGuard, iki cihaz arasında şifreli bir tünel oluşturan açık kaynaklı bir VPN yazılımıdır. Modern şifreleme algoritmaları kullanır ve kod tabanı OpenVPN ya da IPsec gibi alternatiflere göre çok daha küçüktür. Bu da hem denetlenmesini hem de yapılandırılmasını kolaylaştırır.
WireGuard, Linux çekirdeğinin içinde çalışan bir modül olarak gelir. Ubuntu 22.04 ve 24.04 çekirdekleri bu desteği
zaten içerir. Sunucuda yalnızca yönetim araçlarını (wireguard-tools) kurmanız yeterlidir.
WireGuard'da klasik anlamda "kullanıcı adı ve parola" yoktur. Her cihazın bir özel (private) ve bir açık (public) anahtarı bulunur. İki taraf birbirinin açık anahtarını tanıdığında bağlantı kurulur.
WireGuard Ne İçin Kullanılır?
Kendi WireGuard VPN sunucunuzu en çok şu amaçlarla kullanabilirsiniz:
- Güvenli internet çıkışı: Halka açık Wi-Fi gibi güvenmediğiniz ağlarda trafiğinizi sunucunuz üzerinden geçirmek.
- Sabit çıkış IP adresi: Dışarıya her zaman sunucunuzun IP adresiyle çıkmak. Bu, IP kısıtlaması olan servislere erişimde işe yarar.
- Uzaktan erişim: Ev ya da ofis ağınızdaki cihazlara, panellere veya veritabanlarına internete açmadan erişmek.
- Sunucular arası özel ağ: Birden fazla sunucuyu şifreli bir iç ağ üzerinden birbirine bağlamak.
Bu rehber, tüm trafiğin sunucu üzerinden çıktığı klasik "kendi VPN sunucum" senaryosunu anlatıyor. Başka bir senaryoya uyarlamak için AllowedIPs bölümüne bakabilirsiniz.
WireGuard Kurmak İçin Gereksinimler
Başlamadan önce şunlara ihtiyacınız var:
- Ubuntu 22.04 veya Ubuntu 24.04 yüklü bir sunucu
- Sunucuda root yetkisi veya
sudokullanabilen bir kullanıcı - Sunucuya SSH ile erişim
- Public (genel) IPv4 adresi
- Sunucuda ve varsa sağlayıcı panelindeki güvenlik duvarında 51820/UDP portunu açabilme yetkisi
- İstemci cihaz (bu rehberde Windows)
Kendi WireGuard sunucunuzu kurmak için public IPv4 adresine sahip bir VPS/VDS kullanabilirsiniz. Henüz bir sunucunuz yoksa Netiyo VDS çözümlerini inceleyebilirsiniz.
Ubuntu Sunucuyu Güncelleme
SSH ile sunucuya bağlanın ve paket listesini güncelleyin:
sudo apt update
sudo apt upgrade -y
Güncelleme sırasında çekirdek (kernel) güncellenirse sunucuyu yeniden başlatmanız gerekebilir:
sudo reboot
WireGuard Paketinin Kurulması
sudo apt install wireguard -y
Kurulumun tamamlandığını sürüm bilgisiyle doğrulayın:
wg --version
Komut wireguard-tools sürümünü yazdırıyorsa kurulum tamamdır.
Sunucu Private/Public Key Oluşturma
Her WireGuard cihazının bir anahtar çifti olur. Sunucu için anahtarları /etc/wireguard dizininde
oluşturuyoruz. Aşağıdaki komut, dosyaları yalnızca root okuyabilecek şekilde (umask 077) üretir:
cd /etc/wireguard
sudo sh -c 'umask 077; wg genkey | tee /etc/wireguard/server_private.key | wg pubkey > /etc/wireguard/server_public.key'
İki anahtarı da ekrana yazdırıp bir kenara not edin:
sudo cat /etc/wireguard/server_private.key
sudo cat /etc/wireguard/server_public.key
Önemli: Private key değerini kimseyle paylaşmayın; e-posta, mesajlaşma uygulaması, destek talebi veya ekran görüntüsü yoluyla da iletmeyin. Private key'e sahip olan kişi sunucunuzu taklit edebilir. Yalnızca public key paylaşılabilir.
IP Forwarding Aktifleştirme
VPN istemcilerinin trafiğini sunucunun internete iletebilmesi için çekirdekte IPv4 yönlendirmesi açık olmalıdır. Ayarı kalıcı hale getirmek için ayrı bir dosyaya yazıyoruz:
echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/99-wireguard.conf
sudo sysctl --system
Değerin etkinleştiğini kontrol edin:
sysctl net.ipv4.ip_forward
Çıktı net.ipv4.ip_forward = 1 olmalıdır.
Sunucunun Ağ Arayüzünü Bulma
Bir sonraki adımda NAT kuralı yazacağız. Bu kuralda sunucunun internete çıkan ağ arayüzünün adı gerekir.
Bu ad her sunucuda eth0 değildir. Sanallaştırma altyapısına ve Ubuntu sürümüne göre
eth0, ens3, ens18 ya da enp1s0 gibi farklı adlarla
karşılaşabilirsiniz. Gerçek adı şu komutla bulun:
ip route
Örnek bir çıktı:
default via 203.0.113.1 dev ens3 proto dhcp src 203.0.113.10 metric 100
default ile başlayan satırdaki dev kelimesinden sonra gelen değer arayüz adınızdır.
Yukarıdaki örnekte bu ens3'tür. Bu adı bir sonraki bölümdeki yapılandırmada kullanacaksınız.
wg0.conf Sunucu Yapılandırması
Yapılandırma dosyasını bir metin editörüyle açın:
sudo nano /etc/wireguard/wg0.conf
Aşağıdaki içeriği yapıştırın. SUNUCU_PRIVATE_KEY yerine server_private.key dosyasındaki
değeri yazın. eth0 yerine de bir önceki adımda bulduğunuz arayüz adını yazın:
[Interface]
Address = 10.66.66.1/24
ListenPort = 51820
PrivateKey = SUNUCU_PRIVATE_KEY
PostUp = iptables -I FORWARD 1 -i wg0 -j ACCEPT; iptables -I FORWARD 1 -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -s 10.66.66.0/24 -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -s 10.66.66.0/24 -o eth0 -j MASQUERADE
Dosyayı kaydedip çıkın (nano'da Ctrl+O, Enter, Ctrl+X). Ardından dosya iznini kısıtlayın:
sudo chmod 600 /etc/wireguard/wg0.conf
Satırların anlamı
- Address: Sunucunun VPN ağındaki adresi.
10.66.66.0/24özel bir iç ağdır ve sunucunun gerçek IP adresinden bağımsızdır. - ListenPort: WireGuard'ın dinleyeceği UDP portu. Varsayılan olarak 51820 kullanılır.
- PrivateKey: Sunucunun özel anahtarı.
- PostUp / PostDown: Arayüz açılırken ve kapanırken çalışan komutlar. VPN istemcilerinin trafiğine izin verir ve bu trafiği sunucunun IP adresiyle internete çıkarır (NAT/MASQUERADE).
Arayüz adı yanlış yazılırsa el sıkışma (handshake) başarılı olur ama istemci internete çıkamaz. Sorun yaşarsanız önce bu satırı kontrol edin.
51820/UDP Firewall Ayarları
WireGuard yalnızca UDP kullanır. Ubuntu'da UFW kullanıyorsanız önce durumuna bakın:
sudo ufw status
UFW aktif değilse ve etkinleştirmeyi düşünüyorsanız önce SSH erişimine izin verin. Aksi halde sunucuya bağlantınızı kaybedebilirsiniz:
sudo ufw allow OpenSSH
Ardından WireGuard portunu açın:
sudo ufw allow 51820/udp
UFW'yi henüz etkinleştirmediyseniz son olarak etkinleştirin:
sudo ufw enable
sudo ufw status
Sağlayıcınızın panelinde ayrıca bir güvenlik duvarı veya güvenlik grubu varsa 51820/UDP portunu orada da açmanız gerekir.
WireGuard Servisini Başlatma ve Otomatik Başlatma
WireGuard arayüzünü başlatmak ve sunucu yeniden başladığında otomatik açılmasını sağlamak için tek komut yeterlidir:
sudo systemctl enable --now wg-quick@wg0
Servis durumunu kontrol edin:
sudo systemctl status wg-quick@wg0
Arayüzün ve dinleme durumunun doğru olduğunu görmek için:
sudo wg show
ip addr show wg0
ip addr show wg0 çıktısında 10.66.66.1/24 adresini görmelisiniz. Servis hata verirse
sudo journalctl -u wg-quick@wg0 --no-pager komutuyla ayrıntıya bakabilirsiniz. Çoğu zaman sorun
yapılandırma dosyasındaki yazım hatalarından kaynaklanır.
İstemci Anahtarlarını Oluşturma
Her cihaz için ayrı bir anahtar çifti gerekir. En güvenli yöntem, private key'in cihazdan hiç çıkmamasıdır.
Windows için: WireGuard uygulamasında "Add empty tunnel" seçeneğini kullandığınızda anahtar çifti uygulama tarafından otomatik üretilir. Uygulama ekranında yalnızca public key'i görüp kopyalamanız yeterlidir. Ayrıntılar aşağıdaki Windows bölümünde.
Linux istemci için: Anahtarları istemcinin kendi terminalinde üretebilirsiniz:
umask 077
wg genkey | tee client_private.key | wg pubkey > client_public.key
Hangi yöntemi kullanırsanız kullanın, sunucuya yalnızca public key verilir. Private key hiçbir zaman sunucuya veya başkasına gönderilmez.
Peer Ekleme
Sunucu, hangi istemcilere izin vereceğini [Peer] bloklarından öğrenir. Yapılandırmayı tekrar açın:
sudo nano /etc/wireguard/wg0.conf
Dosyanın sonuna ilk istemciyi ekleyin:
[Peer]
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.66.66.2/32
CLIENT_PUBLIC_KEY yerine istemcinin public key değerini yazın. /32 bu
istemciye yalnızca tek bir VPN IP adresi (10.66.66.2) tanımlandığı anlamına gelir.
Değişikliği uygulamak için servisi yeniden başlatabilirsiniz. Bu işlem mevcut bağlantıları kısa süreliğine keser:
sudo systemctl restart wg-quick@wg0
Bağlı kullanıcıları kesmeden uygulamak isterseniz şu komutu kullanabilirsiniz:
sudo bash -c 'wg syncconf wg0 <(wg-quick strip wg0)'
Windows WireGuard İstemci Yapılandırması
İstemci uygulamasını yalnızca resmi WireGuard sitesinden indirin ve kurun. Ardından:
- Uygulamayı açın ve sol alttaki Add Tunnel yanındaki oku tıklayıp Add empty tunnel... seçeneğini seçin.
- Açılan pencerede bir tünel adı verin. Uygulama otomatik olarak bir
PrivateKeyüretir ve üstte Public key değerini gösterir. - Bu public key'i kopyalayın ve sunucudaki
[Peer]bloğunaCLIENT_PUBLIC_KEYolarak ekleyin (önceki bölüm). - İstemci tarafındaki yapılandırmayı aşağıdaki gibi tamamlayın. Mevcut
PrivateKeysatırını silmeyin; geri kalanını altına ekleyin.
[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.66.66.2/32
DNS = 1.1.1.1
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = SUNUCU_IP:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
SERVER_PUBLIC_KEY: Sunucuda oluşturduğunuzserver_public.keydeğeriSUNUCU_IP: Sunucunuzun public IPv4 adresiDNS: Örnekte 1.1.1.1 kullanıldı; isterseniz kendi tercih ettiğiniz bir DNS'i yazabilirsiniz.PersistentKeepalive = 25: NAT arkasındaki istemcilerin bağlantısını canlı tutar. Ev ve mobil ağlarda faydalıdır.
Kaydedip Activate düğmesine tıklayın. Bağlantı başarılıysa durum "Active" olur ve el sıkışma bilgisi görünür.
AllowedIPs Nedir?
AllowedIPs, WireGuard'ın en sık yanlış anlaşılan ayarıdır. Aslında iki işi birden yapar:
- İstemci tarafında: Hangi hedeflerin tünel üzerinden gönderileceğini belirler (yönlendirme tablosu gibi).
- Sunucu tarafında: Bir peer'den hangi kaynak IP adreslerinden gelen paketlerin kabul edileceğini belirler.
İstemcide AllowedIPs = 0.0.0.0/0 yazarsanız tüm IPv4 trafiği VPN üzerinden geçer. Web
siteleri sizi sunucunun IP adresiyle görür. Bu, tam tünel kullanımıdır.
Yalnızca WireGuard ağındaki cihazlara ve sunucuya erişmek istiyorsanız şu değeri kullanabilirsiniz:
AllowedIPs = 10.66.66.0/24
Bu durumda yalnızca 10.66.66.0/24 ağına giden trafik tünelden geçer; internet trafiğiniz normal
bağlantınızdan çıkmaya devam eder. Buna bölünmüş tünel (split tunnel) denir.
Not: 0.0.0.0/0 yalnızca IPv4 trafiğini kapsar. Bu rehberdeki yapılandırma IPv6 yönlendirmesi içermez.
IPv6'yı da tünelden geçirmek için ek sunucu yapılandırması gerekir.
Sunucudaki peer bloklarında ise her istemciye yalnızca kendi VPN adresini (/32) vermeniz doğru olandır.
Bağlantıyı Test Etme
İstemci aktifken Windows'ta komut istemcisini veya PowerShell'i açın ve sunucunun VPN adresine ping atın:
ping 10.66.66.1
Yanıt alıyorsanız tünel çalışıyordur. Sunucu tarafında bağlantıyı doğrulayın:
sudo wg show
Çıktıda peer için latest handshake ve transfer satırları görünmelidir. Handshake bilgisi
birkaç saniye ile birkaç dakika öncesini gösteriyorsa bağlantı kuruludur.
Tam tünel kullanıyorsanız çıkış IP'nizin sunucunun IP'si olduğunu da kontrol edin. Windows PowerShell'de:
curl.exe -4 ifconfig.me
Dönen adres sunucunuzun public IP'siyle aynı olmalıdır. Tünel kapalıyken aynı komutu çalıştırıp farkı da görebilirsiniz.
"Handshake Var Ama İnternet Yok" Sorunu
El sıkışma tamamlanıyor, VPN adresine ping gidiyor ama internete çıkılamıyorsa sorun genellikle sunucudaki yönlendirme ve NAT ayarlarındadır. Şu sırayla kontrol edin:
- IP forwarding kapalı olabilir.
sysctl net.ipv4.ip_forwardçıktısı1olmalı. - Yanlış ağ arayüzü adı yazılmış olabilir.
wg0.confiçindeki-o eth0kısmıip routeçıktısındaki arayüzle birebir aynı olmalı. - NAT veya FORWARD kuralları eksik olabilir. Kuralları şu komutlarla görebilirsiniz.
sudo iptables -t nat -L POSTROUTING -n -v
sudo iptables -L FORWARD -n -v
NAT tablosunda 10.66.66.0/24 kaynağı için bir MASQUERADE kuralı görmelisiniz. Yoksa
PostUp satırı çalışmamış demektir. Servisi yeniden başlatıp hata mesajlarına bakın.
- DNS sorunu olabilir. İstemcide IP adresine ping atıp alan adına atın. IP'ye ping gidiyor ama
alan adı çözülmüyorsa
DNSsatırını kontrol edin.
ping 1.1.1.1
ping example.com
- MTU sorunu olabilir. Bazı siteler açılıp bazıları yarım yükleniyorsa istemci yapılandırmasının
[Interface]bölümüneMTU = 1380satırı ekleyip deneyin.
Sunucuda UFW kullanıyorsanız ve yönlendirme politikası sıkılaştırılmışsa, FORWARD zincirinde trafik engellenebilir.
Bu durumda sudo ufw status verbose çıktısını ve iptables kurallarını birlikte inceleyin.
"Handshake Oluşmuyor" Sorunu
sudo wg show çıktısında peer için latest handshake satırı hiç görünmüyorsa sunucu ile
istemci birbirine ulaşamıyor demektir. Olası nedenler:
- 51820/UDP kapalı. UFW'de açık olsa bile sağlayıcı panelindeki güvenlik duvarında kapalı olabilir. TCP değil, UDP portu açılmalıdır.
- Endpoint hatalı. İstemcideki
Endpointsatırında sunucunun doğru IP adresi ve portu olmalı. - Anahtarlar karışmış. İstemcinin
PublicKeyalanında sunucunun public key'i, sunucudaki peer bloğunda ise istemcinin public key'i olmalı. Private key'lerle karıştırmak çok sık yapılan bir hatadır. - Servis çalışmıyor.
sudo systemctl status wg-quick@wg0ile kontrol edin. - İstemcinin bulunduğu ağ UDP'yi kısıtlıyor. Bazı kurumsal veya okul ağları 51820/UDP'yi engeller. Farklı bir ağda (örneğin telefon hotspot'u) deneyerek ayırt edebilirsiniz.
Sunucunun portu dinleyip dinlemediğini şu komutla görebilirsiniz:
sudo ss -ulpn | grep 51820
Paketlerin sunucuya ulaşıp ulaşmadığını görmek için tcpdump kullanabilirsiniz:
sudo apt install tcpdump -y
sudo tcpdump -ni any udp port 51820
İstemciden bağlanmayı denerken bu komutta hiç paket görünmüyorsa sorun ağ, firewall veya Endpoint tarafındadır. Paket geliyor ama handshake oluşmuyorsa anahtarları yeniden kontrol edin.
Birden Fazla Cihaz Ekleme
Her cihaz kendi anahtar çiftine ve kendi VPN IP adresine sahip olmalıdır. Aynı yapılandırmayı birden fazla cihazda kullanmayın; aynı anda bağlanan iki cihaz birbirinin bağlantısını düşürür.
Sunucudaki wg0.conf dosyasına her cihaz için ayrı bir blok ekleyin:
[Peer]
# Windows dizüstü
PublicKey = LAPTOP_PUBLIC_KEY
AllowedIPs = 10.66.66.2/32
[Peer]
# Telefon
PublicKey = TELEFON_PUBLIC_KEY
AllowedIPs = 10.66.66.3/32
[Peer]
# Tablet
PublicKey = TABLET_PUBLIC_KEY
AllowedIPs = 10.66.66.4/32
Her cihaz için istemci yapılandırmasındaki Address değeri, sunucudaki ilgili AllowedIPs
değeriyle eşleşmelidir (örneğin telefon için 10.66.66.3/32). Satırların başına # ile
açıklama eklemek, ileride hangi anahtarın hangi cihaza ait olduğunu hatırlamanızı kolaylaştırır.
Değişikliği uyguladıktan sonra sudo systemctl restart wg-quick@wg0 veya syncconf komutunu
çalıştırmayı unutmayın.
WireGuard Güvenlik Önerileri
- Private key'leri paylaşmayın. Sunucu ve istemci private key'leri hiçbir koşulda paylaşılmaz. Bir anahtarın ele geçirildiğinden şüpheleniyorsanız yeni bir anahtar çifti oluşturup eski peer'i kaldırın.
- Dosya izinlerini kısıtlayın.
wg0.confve anahtar dosyaları600izniyle yalnızca root tarafından okunabilir olmalı. - Her cihaza ayrı anahtar verin. Bir cihazı kaybettiğinizde yalnızca onun peer bloğunu silmeniz yeterli olur.
- Kullanılmayan peer'leri kaldırın. Artık kullanmadığınız cihazların erişimini sunucudan silin.
- Sunucudaki peer'lere
/32verin. Her istemci yalnızca kendi VPN adresini kullanabilmeli. - Gereksiz portları kapalı tutun. Güvenlik duvarında yalnızca ihtiyacınız olan portları açın. SSH için anahtar tabanlı girişi ve root girişinin kapatılmasını değerlendirin.
- Sistemi güncel tutun. Ubuntu güvenlik güncellemelerini düzenli uygulayın.
Sunucunun genel güvenliği bu rehberin kapsamını aşıyor; sunucu sertleştirme konusuna ayrı bir yazıda değineceğiz.
WireGuard İçin VDS Gerekir mi?
Kendi WireGuard sunucunuzu kurmak için sürekli açık kalan, public IPv4 adresine sahip ve root erişimi olan bir Linux sunucuya ihtiyacınız var. Evdeki bilgisayar da teknik olarak bu işi görebilir; ancak ev internetinde genellikle IP adresi değişir, modem arkasında port yönlendirmesi gerekir ve bazı operatörler gelen bağlantılara izin vermez. Bu yüzden çoğu kullanıcı için bir VDS daha pratik bir seçenektir.
Kaynak ihtiyacı konusunda şunları söylemek mümkün:
- WireGuard çekirdek seviyesinde çalıştığı için genellikle düşük CPU ve bellek tüketir.
- Kişisel kullanımda ve birkaç cihazla başlangıç seviyesinde bir VDS çoğu senaryo için yeterli olabilir.
- Gerçek ihtiyaç; bağlanan kullanıcı sayısına ve geçen trafik miktarına göre değişir. Tüm trafiği tünelden geçiriyorsanız sunucunun bant genişliği ve aylık trafik limiti önem kazanır.
- Sunucunun bulunduğu lokasyon, bağlantı gecikmesini doğrudan etkiler.
Satın almadan önce sanallaştırma türünü de kontrol edin. WireGuard çekirdek modülü kullandığı için bazı konteyner tabanlı sanallaştırma ortamlarında çalışmayabilir. Emin değilseniz sağlayıcıdan teyit alın. Ayrıca VPN kullanımınızın sağlayıcının kullanım koşullarına ve yürürlükteki mevzuata uygun olduğundan emin olun.
Sonuç
Bu rehberde Ubuntu üzerinde WireGuard'ı kurduk, sunucu ve istemci anahtarlarını oluşturduk, NAT ve güvenlik duvarı ayarlarını yaptık, bir Windows istemcisini bağladık ve en sık karşılaşılan iki sorunun nedenlerini inceledik. Kurulum bir kez doğru yapıldığında ek cihaz eklemek yalnızca birkaç satırlık bir işlemdir.
Sorun yaşarsanız önce sudo wg show çıktısına bakın: handshake yoksa sorun bağlantı veya anahtarlarda,
handshake var ama internet yoksa NAT ve yönlendirme ayarlarındadır.
WireGuard sunucunuzu kendi VDS'niz üzerinde kurmak istiyorsanız Netiyo VDS paketlerini inceleyebilirsiniz.