Merhaba arkadaşlar, ben Cem Zengin.
Ağ dünyasında uzun yıllardır OpenVPN ve IPsec gibi hantal ve yapılandırması karmaşık protokolleri kullandık. Ancak son yıllarda siber güvenlik dünyasını kasıp kavuran, Linux çekirdeğine entegre edilmiş, son derece hafif ve hızlı bir tünelleme protokolü hayatımıza girdi: WireGuard. WireGuard, sadece birkaç bin satır koddan oluşan yapısıyla hem minimum kaynak tüketir hem de mobil cihazlarda dahi milisaniyeler içinde tünel bağlantısı kurabilir.
Bu yazıda, bir Ubuntu Server 22.04 LTS sunucusu üzerinde sıfırdan WireGuard VPN kurulumunu, public/private anahtarların yönetimini ve istemci (client) yapılandırmasını uygulamalı olarak gerçekleştireceğiz.
1. WireGuard Nedir ve Nasıl Çalışır?
WireGuard, şifreleme anahtarı yönlendirmesi (Cryptokey Routing) adı verilen bir yöntemle çalışır. IPsec veya OpenVPN’in aksine karmaşık el sıkışma protokolleri yerine, her iki ucun da birbirinin public key (açık anahtar) ve IP adresini bildiği, SSH benzeri asimetrik bir şifreleme modeli kullanır.
2. Sunucu Tarafında WireGuard Kurulumu
Ubuntu sunucumuza SSH ile bağlandıktan sonra kurulum paketlerini yükleyelim:
# Paket listesini güncelleyip WireGuard'ı yükleyelim
sudo apt update
sudo apt install wireguard -y
Anahtar Çiftlerini (Private/Public Key) Oluşturma
WireGuard’da kimlik doğrulama anahtarlarla yapılır. Sunucu için bir adet özel (private) ve genel (public) anahtar çifti oluşturuyoruz:
# Anahtarların saklanacağı dizine gidelim ve yetkileri düzenleyelim
cd /etc/wireguard
umask 077
# Sunucu için anahtarları üretelim
wg genkey | tee privatekey | wg pubkey > publickey
Sunucunun private key içeriğini okumak için cat privatekey komutunu çalıştırabilirsiniz (Bu anahtarı sunucu konfigürasyon dosyasına yazacağız).
3. Sunucu Konfigürasyon Dosyasının (wg0.conf) Oluşturulması
Sunucu yapılandırması için /etc/wireguard/wg0.conf dosyasını oluşturup düzenleyelim:
sudo nano /etc/wireguard/wg0.conf
Açılan editöre aşağıdaki yapılandırmayı ekleyin:
[Interface]
PrivateKey = <SUNUCU_PRIVATE_KEY_ICERIGI>
Address = 10.8.0.1/24 # VPN ağımızın subnet adresi
ListenPort = 51820 # WireGuard'ın dinleyeceği varsayılan UDP portu
# Sunucu üzerinden internete çıkış için IP Yönlendirme (NAT) kuralları (PostUp / PostDown)
# (Not: 'eth0' yerine sunucunuzun kendi dış bacak fiziksel arayüz adını yazmalısınız)
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
4. Linux Çekirdeğinde IP Yönlendirmeyi (IP Forwarding) Aktif Etmek
Sunucunun VPN istemcilerinden gelen paketleri internete veya iç ağdaki diğer cihazlara yönlendirebilmesi için IP Forwarding özelliğinin açılması şarttır.
# IP Forwarding'i aktif edelim
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
5. İstemci (Client) Konfigürasyonunun Hazırlanması
Şimdi de VPN’e bağlanacak istemci cihaz (Örn: Windows bilgisayar veya mobil telefon) için anahtar çiftlerini üretelim ve konfigürasyon dosyasını hazırlayalım:
# İstemci için anahtarları üretelim
wg genkey | tee client_privatekey | wg pubkey > client_publickey
İstemci bilgisayarımızda kullanacağımız client.conf dosyasını şu şekilde hazırlıyoruz:
[Interface]
PrivateKey = <ISTEMCI_PRIVATE_KEY_ICERIGI>
Address = 10.8.0.2/32 # İstemcinin alacağı VPN IP adresi
DNS = 8.8.8.8 # İstemcinin kullanacağı DNS sunucusu
[Peer]
PublicKey = <SUNUCU_PUBLIC_KEY_ICERIGI>
Endpoint = <SUNUCU_DIS_IP_ADRESI>:51820 # Sunucunun dış IP adresi ve portu
AllowedIPs = 0.0.0.0/0 # Tüm internet trafiğini VPN tüneline yönlendirir
İstemciyi Sunucuya Tanımlama (Sunucu Tarafında)
Oluşturduğumuz istemcinin sunucuya bağlanabilmesi için, sunucudaki /etc/wireguard/wg0.conf dosyasının en altına istemciyi Peer olarak eklemeliyiz:
sudo nano /etc/wireguard/wg0.conf
En alta ekleyin:
[Peer]
PublicKey = <ISTEMCI_PUBLIC_KEY_ICERIGI>
AllowedIPs = 10.8.0.2/32 # Bu istemciye tahsis ettiğimiz IP adresi
6. WireGuard Servisini Başlatmak
Tüm konfigürasyonlar bittikten sonra sunucu üzerinde tünel arayüzünü aktif edip servisi başlatalım:
# WireGuard servisini başlatalım
sudo systemctl start wg-quick@wg0
# Sunucu her açıldığında otomatik başlamasını sağlayalım
sudo systemctl enable wg-quick@wg0
Tünelin durumunu ve bağlı istemcileri doğrulamak için şu komutu çalıştırabilirsiniz:
sudo wg show
Bu komutla arayüz bilgilerini, veri transfer miktarlarını ve istemcilerin en son el sıkışma (handshake) sürelerini anlık olarak izleyebilirsiniz.
7. İstemci Bağlantısı (Windows/Mobile QR Code)
Windows, Mac veya Linux istemciler için resmi WireGuard istemcisini indirip oluşturduğunuz client.conf dosyasını içeri aktararak (Import) doğrudan tünele bağlanabilirsiniz.
Mobil telefonlar için konfigürasyon yazmak yerine QR kod oluşturup kamerayla okutmak en hızlı yöntemdir:
# QR kod üreteci kuralım (Sunucu üzerinde)
sudo apt install qrencode -y
# İstemci dosyasını ekranda QR koda dönüştürelim
qrencode -t ansiutf8 < /etc/wireguard/client.conf
Telefonunuzdaki WireGuard uygulamasını açıp “Create from QR Code” seçeneğini seçtikten sonra ekrandaki kodu okutarak anında tünel profilini yükleyebilirsiniz.
Tebrikler, artık son derece hızlı ve güvenli bir WireGuard VPN altyapısına sahipsiniz! Sorularınızı yorumlarda veya iletişim formunda belirtebilirsiniz.