Wireguard VPN Sunucu Kurulumu ve CGNAT Kurtulma Yöntemi

Wireguard nedir ne değildir, nasıl kullanılır ve Linux sunucu kurulumu ve sunucunuzun sabit IP adresi üzerinden port yönlendirme işlemi ile CGNAT arkasında olsanız bile port yönlendirme işlemini anlatacağım.



Wireguard Nedir?

Wireguard, OpenVPN aksine yeni nesil bir VPN sunucusudur. OpenVPN’e göre çok daha yüksek hızlar sağlamakta ve daha fazla güvenlik vaat etmektedir. Hızlı bağlantı ve düşük gecikme (ping) süreleri önce gelen özelliklerindendir. Kolay yapılandırması ve hızlı çalışması diğer VPN çözümlerinden öne çıkarlar.



Wireguard Kurulumu

Wireguard Linux 4.x çekirdeğine sahip tüm Linux sürümlerine rahatça kurulabilmektedir.
Ubuntu 16.04 LTS , Ubuntu 18.04 ve Ubuntu 20.04 LTS sürümlerine rahatça kurulabildiği gibi, Debian, Fedora, Mageia, Arch, OpenSUSE, Slackware, Alpine, Gentoo, Exherbo, NixOS, Red Hat, CentOS, OpenBSD, FreeBSD gibi distrolara kurulabildiği gibi OpenWRT ve Windows üzerine de kurulabilmektedir.
Ayrıca MacOS, iOS ve Android client sürümleri de bulunmaktadır.
Bu yazıda sizlere Ubuntu, Windows ve OpenWRT kurulumlarını anlatacağım. Diğer sürümlerin kurulum bilgileri için WG Install adresini ziyaret edebilirsiniz.



Sunucu Lokasyon Seçimi

Kuruluma başlamadan önce sunucu ve lokasyon seçimi hakkında bilgi vermek istiyorum. Türkiye lokasyon bir sunucu seçmeniz ping süresini kısaltacağı gibi mevcut internet hızınızı daha yakın hızlar almanızı sağlayacaktır. Genel olarak düşünmeniz gereken durum ise, daha çok nereye bağlantı gerçekleştirdiğinizdir. Örneğin Almanya merkezli sunucuda barınan bir oyun oynuyorsanız, Almanya merkezli bir sanal sunucu sizin için daha elverişli olacaktır. Wireguard ile peer-to-peer bağlantı sağladıktan sonra, arada kalan route sunucunuz ile erişmek istediğiniz sunucu arasında olacaktır. Sunucu seçimi tamamen sizin isteklerine göre şekillenmelidir.
Ben kendi kullanımım için Türkiye lokasyon sınırsız trafikli bir sunucu kullanıyorum ve tüm ev trafiğimi bu sunucu üzerinden yönlendiriyorum.



Wireguard Kurulum Adımları

Öncelikle sunucumuza SSH ile bağlanıp root ile oturum açıyoruz. Kurulum Ubuntu 18.04 LTS için anlatılmaktadır.

Aşağıdaki komut ile gerekli repoyu sunucumuza ekleyelim.

add-apt-repository ppa:wireguard/wireguard


Repoları güncelleyelim.

apt update


Aşağıdaki komut ile kurulumu gerçekleştirelim.

apt install wireguard

Kurulum sunucu özelliklerine ve hat kapasitesine göre biraz zaman alabilir.

Kurulum tamamlandıktan sonra sunucumuzu konfigüre edebiliriz.



Wireguard Server Yapılandırması

Wireguard Public ve Private key mantığı ile noktadan noktaya yetkilendirme işlemi yapmaktadır.

Öncelikle sunucumuz için key oluşturalım.

mkdir /etc/wireguard/server
cd /etc/wireguard/server


İleride kullanabilmek için bir klasör oluşturduk ve bu klasör altında işlemlerimizi yapacağız.

Aşağıdaki komutları uygulayarak key oluşturuyoruz.

umask 077
wg genkey | tee privatekey | wg pubkey > publickey


Öncelikle aşağıdaki aşağıdaki komut ile server için oluşturduğumuz private keyi not edelim.

cat /etc/wireguard/server/privatekey


Sıra geldi server için conf dosyasını oluşturmaya. Conf dosyasından önce sunucumuzun internete çıkış yaptığı interface adını da not etmemiz gerekiyor. Aşağıdaki komut ile sunucudaki interfaceler listelenecektir. Sunucunuzun IP adresinin yer aldığı interface adını not ediyoruz.

ifconfig


Benim sunucum için aşağıdaki gibi sonuç verdi. Kullandığum interface ens3. Sizin sunucunuzda farklı olacaktır.

root@trweb:/etc/wireguard# ifconfig
ens3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1436
        inet XXX.219.135.XX  netmask 255.255.255.0  broadcast 185.219.135.255
        inet6 fe80::f816:3eff:feb2:5615  prefixlen 64  scopeid 0x20<link>
        ether fa:16:3e:b2:56:15  txqueuelen 1000  (Ethernet)
        RX packets 78562706  bytes 22673552359 (22.6 GB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 24103005  bytes 19094976069 (19.0 GB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


Aşağıdaki komut ile Wireguard interface oluşturuyoruz.

nano /etc/wireguard/wg0.conf


Conf dosyası aşağıdaki gibi düzenleyelim.

[Interface]
PrivateKey = <ServerPrivateKey> # Az önce server için oluşturduğumuz private key
Address = 192.168.100.1/24 # VPN için noktadan noktaya iletişim kurulacak subnet. Evinizde kullandığınız subnetten farklı olmalıdır!
ListenPort = 51820
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT # VPN için IP yönlendirmeyi aktif eder
PostUp = iptables -t nat -A POSTROUTING -o <SunucumuzunPublicIPAdresineSahipInterfaceIsmi> -j MASQUERADE # VPN için NAT özelliğini aktif eder. Benim sunucum için ens3

PostDown = iptables -D FORWARD -i wg0 -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
SaveConfig = true


Şimdi ise sunucuya bağlanacak kullanıcı için key oluşturalım.

mkdir /etc/wireguard/client1
cd /etc/wireguard/client1
umask 077
wg genkey | tee privatekey | wg pubkey > publickey
cat publickey


Bağlanacak client için public key dosyasını not ettikten sonra wg0.conf dosyasını tekrardan düzenleyelim.

Dosyanın en aşağısını aşağıdakileri ekleyelim.

[Peer]
PublicKey = <ClientPublicKey>
AllowedIPs = 192.168.100.2/32


Dosyayı kayıt ettikten sonra çıkış yapalım.

Serveri çalıştırmadan önce IP yönlendirmeyi aktif edelim.

/etc/sysctl.conf dosyasını düzenleyerek en alta aşağıdaki parametreyi ekleyelim.

net.ipv4.ip_forward = 1


Aşağıdaki komut ile aktif edelim.

sysctl -p /etc/sysctl.conf


Aşağıdaki komut ile sunucuyu başlatalım.

wg-quick up wg0


Wireguard Client Yapılandırması

Server çalıştıktan sonra server için oluşturduğumuz conf dosyasını, client için de oluşturmalıyız. Conf dosyası aşağıdaki gibi olmalıdır.

[Interface]
PrivateKey = <ClientPrivateKey> # Client için oluşturuduğumuz private key
Address = 192.168.100.2/32

[Peer]
PublicKey = <ServerPublicKey> # Server için oluşturduğumuz public key
Endpoint = <ServerPublicIP>:51820 # Sunucumuzun public IP adresi
AllowedIPs = 192.168.100.0/24, 0.0.0.0/0 # 0.0.0.0/0 parametresi tüm trafiğimizi sunucu üzerinden yönlendirmek için gerekldiir.

[Interface]
PrivateKey = # Client için oluşturuduğumuz private key
Address = 192.168.100.2/32


Windows için WG Client Kurulumu

https://download.wireguard.com/windows-client/wireguard-amd64-0.1.0.msi adresinden Windows client indiriyoruz.

Yukarıdaki dosyayı wg0.conf olarak kayıt edip masaüstümüzde saklıyoruz.
Import tunnel(s) from file seçeneği ile oluşturduğumuz client dosyasını import ediyoruz.

Wireguard Windows Client Import


Active tuşuna basarak bağlantıyı aktif ediyoruz. Tüm trafiğimiz sunucumuz üzerinden sağlanacaktır.

Wireguard Windows Client Active


OpenWRT için WG Client Kurulumu

WG client OpenWRT üzerine kurarak tüm cihazlarımızın trafiğini sunucu üzerinden yönlendirebilirsiniz.

System -> Software altından wireguard araması yaparak luci-app-wireguard uygulamasını yüklüyoruz.

OpenWRT Client Install


Kurulum tamamlandıktan sonra router yeniden başlatıyoruz.

Network -> Interface kısmından yeni interface ekleyerek WG VPN seçiyoruz ve isim olarak wg0 veriyoruz.

OpenWRT New Interface


General Settings kısmından client için oluşturduğumuz keyi ve IP adresi
ekliyoruz.

OpenWRT General Settings


Firewall Settings kısmından WAN seçiyoruz ve Peers kısmından Add Peer seçeneğine tıklıyoruz.

Public key kısmınına sunucunun Public key değerini, Allowed IPs kısmına server için ayarladığımız IP adresini (192.168.100.1/24) ve tüm internet trafiğini yönlendirmek için 0.0.0.0/0 IP adreslerini ekliyoruz.

Route Allowed IPs seçerek tüm trafiği izin veriyoruz. Endpoint Host kısmında sunucumuzun public IP adresini Endpoint Port kısmında 51820 ve Persistent Keep Alive değerine de 25 yazıp kayıt ediyoruz.

OpenWRT Peers


Routerimizi yeniden başlattıktan sonra tüm trafiğimiz VPN sunucumuz üzerinden yönlenecektir.



CGNAT için Port Yönlendirmesi

Geldik en önemli konuya :)
VPN sunucumuz public IP adresine sahip olduğundan dolayı bu IP adresindeki istediğimiz portu client tarafına yönlendirebiliriz.

Linux network işlemleri için çok uygun bir yazılım olduğundan istediğimiz şekilde istediğimiz portları yönlendirebilir, istediklerimize engel olabiliriz.

Tüm TCP portlarının yönlendirilmesi için aşağıdaki komutu kullanabiliriz.

iptables -t nat -A PREROUTING  -p tcp -i <SunucumuzunPublicIPAdresineSahipInterfaceIsmi> -d <SunucununPublicIPAdresi> --dport 1:21 -j DNAT --to-destination 192.168.100.2 

iptables -t nat -A PREROUTING  -p tcp -i <SunucumuzunPublicIPAdresineSahipInterfaceIsmi> -d <SunucununPublicIPAdresi> --dport 23:65389 -j DNAT --to-destination 192.168.100.2

Yukaridaki komutla VPN client IP adresimiz olan 192.168.100.2 adresine 22 TCP portu hariç tüm portları yönlendirdik.
22 portu SSH için kullanılan port numaralarıdır. Eğer sizin sunucunuzda farklı bir SSH portu yapılandırılmış ise o portu yönlendirmemeniz gerekmektedir.


Eğer UDP yönlendirme isterseniz de aşağıdaki komutu kullanabilirsiniz.

iptables -t nat -A PREROUTING  -p udp -i <SunucumuzunPublicIPAdresineSahipInterfaceIsmi> -d <SunucununPublicIPAdresi> --dport 52222 -j DNAT --to-destination 192.168.100.2

52222 UDP portunu clienta yönlendirmiş olduk.

Windows client kullanmanız durumundan portlar bilgisayarınıza, OpenWRT üzerinden kullanmanız durumunda ise belirlediğniiz portlar routerınıza yönlenmiş olacaktır.

OpenWRT router üzerinden port yönlendirme, DMZ ve ya UpNP özelliklerini açarak ev ağınız içindeki cihazlara gerekli portları yönlendirmiş olursunuz.


Konu ile ilgili yardıma ihtiyacınız olursa yoruma kısmında iletmekten çekinmeyin :)
Hepinize kolay gelsin dilerim.

“Wireguard VPN Sunucu Kurulumu ve CGNAT Kurtulma Yöntemi” üzerine 3 yorum

  1. Ellerine sağlık.Kısa, öz, pratik ve açıklayıcı bir makale olmuş.
    Dediğin gibi sunucu lokasyon seçimi çok önemli bu konuda.
    Teşekkürler kılavuz için.

    Yanıtla
  2. Merhaba Fatih bey,
    Raspberry pi 3 de çalışan Nextcloud serverım var ve serverıma CGNAT havuzuna alınmadan önce herhangi bir yerden bağlanabiliyordum. Sormak istediğim aynı Raspi ye 2nci olarak WG serverı kurabilir ve Nextcloud’a tekrar herhangi bir yerden bağlanabilir miyim?
    İlginiz için şimdiden teşekkür ederim. İyi çalışmalar.

    Yanıtla

Yorum yapın