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.
[email protected]:/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.
Active tuşuna basarak bağlantıyı aktif ediyoruz. Tüm trafiğimiz sunucumuz üzerinden sağlanacaktır.
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.
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.
General Settings kısmından client için oluşturduğumuz keyi ve IP adresi
ekliyoruz.
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.
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.
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.
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.
Merhabalar,
Raspberry pi 3’ü WG peer olarak eklerseniz, sunucu üzerinden port yönlendirme ile dışarıdan doğrudan erişim sağlayabilirsiniz.