WireGuard ile Ubuntu 16.04 Üzerinde Noktadan-Noktaya (Point-To-Point) VPN Kurulumu
Bu rehber, Ubuntu 16.04 işletim sistemi üzerinde WireGuard VPN protokolünü kullanarak iki nokta arasında güvenli bir bağlantı (Point-To-Point VPN) nasıl kurulacağını adım adım açıklamaktadır. WireGuard, modern kriptografi teknikleri kullanan, hızlı, basit ve güvenli bir VPN çözümüdür. Ubuntu 16.04 eski bir sürüm olmasına rağmen, bu rehber WireGuard’ı bu platformda çalışır hale getirmek için gerekli adımları içermektedir.
1. WireGuard ve Noktadan-Noktaya VPN Nedir?
WireGuard, Linux çekirdeğine entegre edilmiş yeni nesil bir VPN tünelidir. OpenVPN veya IPsec gibi eski çözümlere kıyasla daha az kod satırına sahip olması, denetimini kolaylaştırır ve potansiyel güvenlik açıklarını azaltır. Yüksek performansı, düşük gecikme süresi ve modern kriptografi kullanımıyla öne çıkar.
Noktadan-Noktaya (Point-To-Point – P2P) VPN, adından da anlaşılacağı gibi, iki belirli cihaz veya ağ arasında doğrudan ve şifreli bir bağlantı kurar. Bu tür bir VPN, genellikle bir sunucu ile bir istemci arasında veya iki uzak ofis ağı arasında güvenli iletişim sağlamak için kullanılır. Bu rehberde, bir “sunucu” görevi görecek olan Ubuntu 16.04 makinesi ile bir “istemci” görevi görecek olan başka bir Ubuntu 16.04 makinesi arasında P2P VPN kuracağız.
Neden WireGuard ve Ubuntu 16.04?
* Basitlik ve Hız: WireGuard’ın yapılandırması basittir ve çok daha hızlı bağlantı süreleri sunar.
* Güvenlik: Modern ve güçlü şifreleme algoritmaları kullanır.
* Ubuntu 16.04 Desteği: WireGuard çekirdeğe daha sonra entegre edilmiş olsa da, 16.04 için PPA (Personal Package Archive) üzerinden kurulum mümkündür.
2. WireGuard Kurulumu (Ubuntu 16.04)
Ubuntu 16.04, WireGuard’ı doğrudan çekirdek içinde barındırmadığı için, onu bir PPA’dan yüklememiz gerekecektir. Bu, WireGuard’ı bir DKMS (Dynamic Kernel Module Support) modülü olarak kuracaktır.
Her iki Ubuntu 16.04 makinesinde de (sunucu ve istemci) aşağıdaki adımları uygulayın:
1. Sistem Güncellemesi:
Öncelikle, sisteminizin güncel olduğundan emin olun ve gerekli kernel başlıklarını yükleyin. DKMS modülü derlemek için bu başlıklar gereklidir.
sudo apt update
sudo apt upgrade -y
sudo apt install -y linux-headers-$(uname -r)
2. WireGuard PPA Ekleme:
WireGuard’ı kurmak için resmi PPA’yı ekleyin.
sudo add-apt-repository ppa:wireguard/wireguard -y
sudo apt update
3. WireGuard Kurulumu:
Şimdi WireGuard paketlerini yükleyin. Bu, wireguard-dkms ve wireguard-tools paketlerini kuracaktır.
sudo apt install -y wireguard
Kurulum sırasında DKMS modülünün derlenmesi biraz zaman alabilir. Herhangi bir hata alırsanız, linux-headers paketinin doğru yüklendiğinden emin olun.
3. Anahtar Çiftleri Oluşturma
WireGuard, kimlik doğrulama için genel (public) ve özel (private) anahtar çiftleri kullanır. Her iki tarafın da kendi anahtar çiftine sahip olması ve diğer tarafın genel anahtarını bilmesi gerekir.
Her iki makinede de (sunucu ve istemci) ayrı ayrı aşağıdaki adımları uygulayın:
1. Anahtar Çifti Oluşturma:
Bu komut, hem özel anahtarı (privatekey) hem de genel anahtarı (publickey) oluşturur ve ilgili dosyalara kaydeder.
umask 077
wg genkey | tee privatekey | wg pubkey > publickey
* umask 077 komutu, oluşturulan dosyaların yalnızca mevcut kullanıcı tarafından okunabilir olmasını sağlayarak güvenliği artırır.
* privatekey dosyasını asla kimseyle paylaşmayın!
* publickey dosyasını diğer tarafla paylaşmanız gerekecektir.
2. Anahtarları Görüntüleme:
Anahtarlarınızı konsolda görüntülemek için:
cat privatekey
cat publickey
Bu anahtarları not edin. Sunucunun genel anahtarını istemciye, istemcinin genel anahtarını sunucuya kopyalamanız gerekecek.
4. WireGuard Yapılandırması
Şimdi iki makine için WireGuard yapılandırma dosyalarını oluşturalım. VPN için 10.0.0.0/24 IP aralığını kullanacağız.
* Sunucu IP: 10.0.0.1/24
* İstemci IP: 10.0.0.2/24
* VPN Portu: 51820 (UDP)
4.1. WireGuard Sunucu Yapılandırması
Sunucu makinenizde /etc/wireguard/wg0.conf dosyasını oluşturun ve düzenleyin:
sudo nano /etc/wireguard/wg0.conf
Dosyanın içeriği aşağıdaki gibi olmalıdır:
[Interface]
PrivateKey = # SUNUCUNUN KENDİ ÖZEL ANAHTARI BURAYA GELECEK #
Address = 10.0.0.1/24
ListenPort = 51820
PostUp = sysctl -w net.ipv4.ip_forward=1 && 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
[Peer]
PublicKey = # İSTEMCİNİN GENEL ANAHTARI BURAYA GELECEK #
AllowedIPs = 10.0.0.2/32
Açıklamalar:
* PrivateKey: Sunucunun kendi özel anahtarını buraya yapıştırın (cat privatekey komutuyla aldığınız).
* Address: Sunucunun VPN tüneli içindeki IP adresi.
* ListenPort: WireGuard’ın gelen bağlantıları dinleyeceği UDP portu. Güvenlik duvarınızda bu portu açmanız gerekecek.
* PostUp / PostDown: Bu komutlar, VPN arayüzü başlatıldığında ve durdurulduğunda çalıştırılır.
* net.ipv4.ip_forward=1: IP yönlendirmeyi etkinleştirir. Bu, istemcinin sunucu üzerinden başka ağlara (örneğin internete veya sunucunun yerel ağına) erişmesini sağlar. Saf P2P bağlantısı için bu şart değildir ancak genellikle istenir.
* iptables kuralları: NAT (Network Address Translation) ve paket iletimi için gereklidir. Bu örnekte eth0 varsayılan dış arayüzdür; sizin sisteminizde farklı olabilir (örneğin enp0s3). Kendi dış ağ arayüzünüzü (ip a komutuyla kontrol edebilirsiniz) kullanmalısınız.
* [Peer]: Bu bölüm, bağlanacak istemciyi tanımlar.
* PublicKey: İstemcinin genel anahtarını buraya yapıştırın.
* AllowedIPs: İstemcinin VPN tüneli üzerinden erişmesine izin verilen IP adresleri. Burada sadece istemcinin VPN IP’sini (10.0.0.2/32) belirtiyoruz.
Güvenlik Duvarı (UFW) Ayarları (Sunucu):
Sunucu makinenizde UFW (Uncomplicated Firewall) kullanıyorsanız, WireGuard portunu açmanız gerekir:
sudo ufw allow 51820/udp
sudo ufw enable # Eğer aktif değilse
sudo ufw status
4.2. WireGuard İstemci Yapılandırması
İstemci makinenizde /etc/wireguard/wg0.conf dosyasını oluşturun ve düzenleyin:
sudo nano /etc/wireguard/wg0.conf
Dosyanın içeriği aşağıdaki gibi olmalıdır:
[Interface]
PrivateKey = # İSTEMCİNİN KENDİ ÖZEL ANAHTARI BURAYA GELECEK #
Address = 10.0.0.2/24
[Peer]
PublicKey = # SUNUCUNUN GENEL ANAHTARI BURAYA GELECEK #
Endpoint = SUNUCU_GENEL_IP_ADRESİ:51820
AllowedIPs = 10.0.0.0/24
PersistentKeepalive = 25
Açıklamalar:
* PrivateKey: İstemcinin kendi özel anahtarını buraya yapıştırın.
* Address: İstemcinin VPN tüneli içindeki IP adresi.
* [Peer]: Bu bölüm, bağlanılacak sunucuyu tanımlar.
* PublicKey: Sunucunun genel anahtarını buraya yapıştırın.
* Endpoint: Sunucunun genel IP adresi ve WireGuard portu. Eğer sunucu bir NAT arkasındaysa (örneğin ev router’ı), router’ınızda 51820 UDP portunu sunucu makinenizin yerel IP’sine yönlendirmeniz (port forwarding) gerekmektedir.
* AllowedIPs: İstemcinin bu VPN tüneli üzerinden erişebileceği IP adresleri. 10.0.0.0/24 ile tüm VPN ağına erişim izni veriyoruz. Eğer istemcinin tüm internet trafiğini sunucu üzerinden geçirmesini istiyorsanız, bunu 0.0.0.0/0 olarak değiştirmelisiniz (ancak sunucunun PostUp/PostDown kurallarının düzgün yapılandırıldığından emin olun).
* PersistentKeepalive: Bu ayar, her 25 saniyede bir boş bir paket göndererek NAT bağlantılarının açık kalmasını sağlar. İstemci bir NAT arkasındaysa ve sunucuya bağlantıyı sürdürmekte zorlanıyorsa kullanışlıdır.
5. VPN’i Etkinleştirme ve Test Etme
Her iki makinede de WireGuard yapılandırmasını tamamladıktan sonra, VPN tünelini etkinleştirebilir ve bağlantıyı test edebilirsiniz.
1. WireGuard Arayüzünü Başlatma:
Her iki makinede de aşağıdaki komutu çalıştırarak VPN arayüzünü başlatın:
sudo wg-quick up wg0
Herhangi bir hata olup olmadığını kontrol edin.
2. Otomatik Başlangıcı Etkinleştirme:
Sistem yeniden başlatıldığında WireGuard’ın otomatik olarak başlaması için:
sudo systemctl enable wg-quick@wg0
Şimdi de servisi başlatın:
sudo systemctl start wg-quick@wg0
3. Bağlantı Durumunu Kontrol Etme:
Her iki makinede de VPN tünelinin durumunu kontrol etmek için:
sudo wg show
Bu komut, aktif arayüzleri, genel/özel anahtarları ve eş (peer) bilgilerini gösterecektir. latest handshake alanı, en son başarılı bağlantı süresini gösterir.
4. Bağlantıyı Test Etme:
* İstemciden Sunucuya:
İstemci makinesinden sunucunun VPN IP adresine ping atın:
ping 10.0.0.1
Başarılı olursa, bağlantı kurulmuştur.
* Sunucudan İstemciye:
Sunucu makinesinden istemcinin VPN IP adresine ping atın:
ping 10.0.0.2
Bu da başarılı olursa, iki yönlü P2P VPN bağlantınız tamamen çalışır durumdadır.
5. VPN Tünelini Durdurma:
VPN tünelini durdurmak için:
sudo wg-quick down wg0
6. Sonuç ve Sıkça Sorulan Sorular (SSS)
Tebrikler! Ubuntu 16.04 üzerinde WireGuard kullanarak noktadan-noktaya VPN bağlantısını başarıyla kurdunuz. Artık iki makine arasında güvenli ve şifreli bir iletişim kanalına sahipsiniz. Bu bağlantı, hassas verileri güvenli bir şekilde aktarmak veya uzak kaynaklara erişmek için kullanılabilir.
Sıkça Sorulan Sorular (SSS)
S1: VPN çalışmıyor, ne yapmalıyım?
* Anahtarları Kontrol Edin: Genel ve özel anahtarların doğru yerlerde olduğundan emin olun. Özellikle PublicKey değerlerinin doğru eşleştiğini kontrol edin.
* IP Adreslerini Kontrol Edin: Address ve AllowedIPs ayarlarının doğru olduğundan emin olun.
* Güvenlik Duvarını Kontrol Edin: Sunucuda WireGuard portunun (varsayılan 51820/UDP) açık olduğundan emin olun (sudo ufw status). Eğer sunucu bir NAT arkasındaysa, router’da port yönlendirme yapıldığından emin olun.
* PostUp/PostDown Komutlarını Kontrol Edin: Sunucudaki iptables kurallarının doğru arayüz ismini kullandığından ve IP yönlendirmesinin (net.ipv4.ip_forward=1) etkin olduğundan emin olun.
* Logları Kontrol Edin: sudo journalctl -u wg-quick@wg0 komutuyla WireGuard servisinin loglarını inceleyin.
* Kernel Modülünü Kontrol Edin: lsmod | grep wireguard komutuyla WireGuard çekirdek modülünün yüklü olup olmadığını kontrol edin.
S2: Bağlantı neden yavaş veya kesiliyor?
* Ağ Hızı: Altta yatan internet bağlantınızın hızı VPN performansını doğrudan etkiler.
* CPU Kullanımı: Eski veya zayıf CPU’lar şifreleme/şifre çözme işlemlerinde darboğaz yaratabilir.
* Gecikme: Coğrafi mesafe veya ağ yoğunluğu gecikmeyi artırabilir.
* PersistentKeepalive: İstemci tarafında PersistentKeepalive = 25 ayarını kullanmak, NAT arkasındaki bağlantıların sürekli açık kalmasına yardımcı olabilir.
S3: Bu VPN’e başka cihazlar ekleyebilir miyim?
Evet, WireGuard’ın güzelliği de budur. Yeni bir istemci eklemek için:
1. Yeni istemci için bir anahtar çifti oluşturun.
2. Sunucunun wg0.conf dosyasına yeni bir [Peer] bölümü ekleyerek yeni istemcinin PublicKey‘ini ve AllowedIPs‘ini (örneğin 10.0.0.3/32) tanımlayın.
3. Yeni istemcinin wg0.conf dosyasını kendi özel anahtarı, sunucunun genel anahtarı ve sunucunun Endpoint‘i ile yapılandırın.
4. Sunucu ve yeni istemcide WireGuard’ı yeniden başlatın (sudo wg-quick down wg0 && sudo wg-quick up wg0).
S4: Ubuntu 16.04 yerine daha yeni bir sürüm kullanmanın avantajı var mı?
Kesinlikle. Ubuntu 18.04 ve üzeri sürümler (özellikle 20.04 ve sonrası) WireGuard’ı doğrudan çekirdekte barındırır, bu da kurulumu daha basit hale getirir ve DKMS modülüne bağımlılığı ortadan kaldırır. Performans ve kararlılık açısından da genellikle daha yeni çekirdek sürümleri tercih edilir. Bu rehber, özellikle 16.04 kullanma zorunluluğu olan durumlar için hazırlanmıştır.
S5: AllowedIPs = 0.0.0.0/0 ne anlama geliyor?
AllowedIPs = 0.0.0.0/0 ayarı, istemcinin tüm ağ trafiğini (internete giden dahil) VPN tüneli üzerinden geçirmesi anlamına gelir. Buna “full tünel” denir. Bu durumda, sunucunun PostUp/PostDown kurallarının internete çıkışı doğru bir şekilde yönlendirdiğinden emin olmalısınız. Eğer sadece VPN içindeki kaynaklara erişim sağlanacaksa (split tünel), 10.0.0.0/24 gibi daha spesifik bir aralık kullanmak daha iyidir.