Hizmetler Hosting & Sunucu Araçlar Blog Ara Kurumsal EnglishEN
Teklif Alın

WireGuard, son yıllarda OpenVPN ve IPsec gibi köklü VPN protokollerinin yerini hızla almaya başladı. Bunun nedeni pazarlama değil, mimari tercih: WireGuard modern kriptografi (Curve25519, ChaCha20, Poly1305) kullanır, kod tabanı klasik VPN yazılımlarına göre çok daha küçüktür ve çekirdek seviyesinde çalıştığı için performans kaybı düşüktür. Ama bu sadeliğin bir bedeli var — WireGuard, OpenVPN'in aksine karmaşık bir sertifika otoritesi veya kullanıcı adı/şifre sistemi sunmaz; her şey iki basit dosyadan ibarettir: anahtar çiftleri ve bir yapılandırma dosyası.

Anahtar çifti üretmek

WireGuard kimlik doğrulamasını genel/özel anahtar çiftleriyle yapar; kullanıcı adı, şifre veya sertifika yoktur. Her uç nokta (sunucu ve her istemci) kendi anahtar çiftini üretir ve yalnızca genel anahtarını karşı tarafla paylaşır. Özel anahtar hiçbir zaman diskten veya cihazdan dışarı çıkmamalıdır.

wg genkey | tee privatekey | wg pubkey > publickey

Bu komut önce rastgele bir özel anahtar üretir (wg genkey), bunu privatekey dosyasına yazar, aynı zamanda wg pubkey komutuna aktararak karşılık gelen genel anahtarı hesaplar ve publickey dosyasına kaydeder. Bu işlemi hem sunucuda hem de bağlanacak her istemci cihazda ayrı ayrı çalıştırmanız gerekir — her uç noktanın kendine ait, benzersiz bir anahtar çifti olmalıdır.

wg0.conf dosyasının yapısı

Bir WireGuard yapılandırma dosyası iki bölümden oluşur. [Interface] bölümü bu cihazın kendi ayarlarını tanımlar: özel anahtarı, tünel içindeki IP adresi ve isteğe bağlı bir DNS sunucusu. [Peer] bölümü ise bağlanılacak karşı tarafı tanımlar: onun genel anahtarını, adresini ve hangi trafiğin bu tünelden geçeceğini.

Burada önemli bir nüans var: "Peer" mutlak bir rol değil, karşılıklı bir kavramdır. Bir istemcinin config dosyası tek bir [Peer] bloğu içerir (bu blok sunucuyu temsil eder). Ama sunucu tarafındaki config kendi [Interface] bloğuna sahiptir ve bağlı her istemci için ayrı bir [Peer] bloğu listeler. Yani sunucu ile istemci arasındaki fark yalnızca kaç tane Peer bloğu tanımladığınızdır.

Interface alanları

AlanAnlamı
PrivateKeyBu cihazın özel anahtarı; asla paylaşılmaz
AddressBu cihazın tünel içindeki IP adresi (ör. 10.0.0.2/32)
DNSİsteğe bağlı; tünel aktifken kullanılacak DNS sunucusu
ListenPortGenellikle yalnızca sunucu tarafında belirtilir; varsayılan WireGuard portu 51820/UDP'dir

Peer alanları

AlanAnlamı
PublicKeyKarşı tarafın (peer'ın) genel anahtarı
EndpointKarşı tarafın adresi ve portu (ör. vpn.example.com:51820); yalnızca dışarıdan erişilebilir tarafta gereklidir
AllowedIPsBu peer üzerinden hangi hedef IP'lere giden trafiğin tünelden yönlendirileceği
PersistentKeepaliveİstemci NAT arkasındayken bağlantıyı canlı tutmak için saniye cinsinden aralık

Örnek bir istemci yapılandırması

[Interface]
PrivateKey = <ISTEMCININ_OZEL_ANAHTARI>
Address = 10.0.0.2/32
DNS = 1.1.1.1

[Peer]
PublicKey = <SUNUCUNUN_GENEL_ANAHTARI>
Endpoint = vpn.example.com:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25

Bu dosyayı hazırladıktan sonra sunucuya kopyalayıp etkinleştirme adımları şu şekildedir:

sudo cp wg0.conf /etc/wireguard/wg0.conf
sudo chmod 600 /etc/wireguard/wg0.conf
sudo wg-quick up wg0

AllowedIPs: full-tunnel mi, split-tunnel mi

AllowedIPs = 0.0.0.0/0, ::/0 yazıldığında, tüm IPv4 ve IPv6 adres uzayı kapsanmış olur; bu pratikte "tüm trafiği VPN üzerinden gönder" anlamına gelir — internet erişiminiz de dahil (full-tunnel VPN). Bunun yerine yalnızca VPN'in kendi alt ağını yazarsanız (örneğin 10.0.0.0/24), sadece o alt ağa giden trafik tünelden geçer; geri kalan her şey, genel internet erişiminiz dahil, normal ağ yolunu kullanır. Buna split-tunnel denir ve genellikle yalnızca iç kaynaklara (ör. bir sunucu filosuna) erişmek isteyip tüm internet trafiğini VPN üzerinden yönlendirmek istemediğiniz durumlarda tercih edilir.

PersistentKeepalive neden önemli

PersistentKeepalive = 25, WireGuard'ın istemci NAT arkasındayken (ev/mobil bağlantıların neredeyse tamamı) resmi olarak önerdiği bir değerdir. NAT cihazları, belirli bir süre trafik geçmeyen bağlantılar için tuttukları port eşleme kaydını sessizce siler. Keepalive olmadan bu eşleme zaman aşımına uğrarsa, sunucu artık istemciye giden paketleri o NAT üzerinden iletemez ve istemci yeniden trafik gönderene kadar bağlantı tek yönlü kopuk kalır. 25 saniyede bir gönderilen boş bir keepalive paketi bu eşlemeyi canlı tutar ve sunucunun her an istemciye ulaşabilmesini garanti eder.

Bağlantıyı doğrulamak

Tünel etkinleştirildikten sonra bağlantının gerçekten kurulup kurulmadığını görmek için wg show komutu kullanılır. Bu komut her peer için karşılıklı el sıkışmanın (handshake) ne zaman gerçekleştiğini, o peer'dan bu yana kaç bayt alınıp gönderildiğini ve tanımlı AllowedIPs değerini listeler. Yakın zamanda bir handshake görünmüyorsa, bağlantı büyük olasılıkla hiç kurulmamıştır; bu durumda ilk kontrol edilmesi gereken yerler doğru genel anahtarların karşılıklı girilip girilmediği, sunucu tarafında UDP portunun açık olup olmadığı ve istemcinin Endpoint alanındaki adrese erişebildiğidir. WireGuard, bağlantı hataları için OpenVPN'deki gibi ayrıntılı log mesajları üretmez; bu yüzden wg show çıktısı ve el sıkışma zaman damgası, sorun gidermede başvurulacak en pratik referanstır.

wg show <arayüz>

Belirtilen WireGuard arayüzündeki tüm peer'ların son handshake zamanını ve trafik istatistiklerini gösterir.

Örnek: wg show wg0

Sık yapılan hatalar

  • Aynı anahtar çiftini birden fazla cihazda kullanmak. Her istemcinin kendi özel/genel anahtar çiftine sahip olması gerekir; anahtar paylaşımı hem güvenlik açığı yaratır hem de WireGuard'ın peer eşleştirme mantığıyla çakışabilir.
  • AllowedIPs'i yanlış ayarlamak. Sunucu tarafında bir istemcinin AllowedIPs değerini gereğinden geniş tanımlamak (örneğin başka bir istemcinin alt ağını da kapsayacak şekilde) yönlendirme çakışmalarına ve trafiğin beklenmedik bir peer'a gitmesine yol açar.
  • NAT arkasındaki istemcide PersistentKeepalive'ı unutmak. Bu değer boş bırakıldığında bağlantı bir süre sonra tek yönlü hale gelebilir; özellikle mobil ağlarda ve ev yönlendiricilerinin arkasında bu ayar neredeyse zorunludur.
  • UDP portunu güvenlik duvarında açmayı unutmak. WireGuard varsayılan olarak 51820/UDP üzerinden çalışır; sunucu tarafında bu port güvenlik duvarında (ör. ufw, iptables, bulut sağlayıcının güvenlik grubu) açılmadıkça istemciler sunucuya hiç bağlanamaz.
  • wg0.conf dosyasının izinlerini gevşek bırakmak. Bu dosya özel anahtarı düz metin olarak içerdiği için chmod 600 ile yalnızca root erişimine kapatılmalıdır.
Uyarı
Özel anahtarınızı hiçbir zaman herkese açık bir yerde (repo, forum, destek talebi) paylaşmayın. Bir anahtar sızarsa, o peer'ı hem sunucudan hem istemciden kaldırıp yeni bir anahtar çiftiyle yeniden yapılandırmanız gerekir.

Anahtarlarınızı ürettikten sonra geriye kalan iş, bu alanları doğru sözdizimiyle bir araya getirmektir. Elle yazarken bir boşluk, eksik satır veya yanlış CIDR notasyonu bağlantının hiç kurulamamasına neden olabilir.

Bu araç kriptografik anahtar üretmez; yalnızca sizin wg genkey ve wg pubkey ile ürettiğiniz gerçek anahtarları alıp geçerli Interface/Peer sözdizimine dönüştürür. Anahtarları üretip bu formu doldurduktan sonra çıkan dosyayı doğrudan /etc/wireguard/wg0.conf olarak kaydedip wg-quick up wg0 ile etkinleştirebilirsiniz.

WhatsApp