OpenSourceWireGuard

WireGuard VPN Server Kurulumu ve Yapılandırması

WireGuard VPN Server Kurulumu ve Yapılandırması

Uzun süredir burayı ihmal etmiştim ki 2023’ün ilk yazısını Mart’ın sonlarına yazmak kısmet oldu. Web erişimlerimi SOCKS v5 proxy ile gerçekleştirirken yeni bir teknoloji olan ve diğer teknolojilere kıyasla çok daha güvenli ve hızlı olan WireGuard’a geçiş yaptım ve bu yazıda WireGuard VPN Server Kurulumu ve Yapılandırmasından bahsediyor olacağım.

Nedir bu WireGuard?

WireGuard VPN, son teknoloji kriptografi kullanan ve son derece basit bir o kadar da hızlı modern bir VPN’dir. IPsec’ten daha hızlı, daha basit ve daha yalın iken; OpenVPN’den çok daha performanslı olduğunu söyleyebiliriz. Başlangıçta Linux için geliştirilmiş olsa da platformlar arası desteği ile bir çok işletim sisteminde (Windows, macOS, BSD, iOS, Android) sorunsuzca çalışabilmektedir.

Her ne kadar geliştirilmesine devam ediliyor olsa da şimdiden sektördeki en güvenli, kullanımı en kolay ve en hızlı VPN çözümü olarak kabul edilebilir. Yapılan araştırmaların çıktısını içeren grafiği aşağıda paylaşıyorum.

WireGuard - OpenVPN - IPSec
WireGuard – OpenVPN – IPSec

Yukarıdaki grafikte bant genişliği en yüksek ve ping değeri en az olarak WireGuard liderliği almış bulunmaktadır.

WireGuard VPN Server Kurulumu

Hetzner’den kiralamış olduğum Ubuntu Server 22.04 üzerine kurulumu gerçekleştireceğim. Bu ortamı, internete erişimlerimi Cloud sunucum üzerinden yaparak kısıtlamalardan kurtulmak için yapacağım. Bu arada sadece cloud sunucusundan internete çıkmak için değil, özel ağınıza erişim için de kullanabilirsiniz adı üzerinde VPN… Örneğin, mikrotik router WireGuard VPN seçeneği sunmaktadır.

Server Kurulum

Aşağıdaki adımlar Ubuntu Server 22.04 üzerinde uygulanmıştır.

Aşağıdaki komut ile Ubuntu repomuzu güncelliyoruz.


sudo apt-get update && sudo apt-get upgrade -y

Sonrasında wireguard kurulumuna geçiyoruz.


sudo apt-get install wireguard

Kurulum tamamlandıktan sonra IP Forwarding için aşağıdaki sysctl.conf dosyasının en altına  net.ipv4.ip_forward=1  parametresini girip kayıt ediyoruz.

sysctl-conf
sysctl-conf

Aşağıdaki komut ile eklenen parametreyi görüyor ve parametrenin geçerli olmasını sağlıyoruz.

Firewall Yapılandırması

Aşağıdaki komutlar tek tek çalıştırılır. Bu sayede eğer yüklü değilse ufw kurulumu yapılacak, dışarıdan içeriye doğru 22 TCP (SSH) ve 51820/UDP (WireGuard) portuna erişim izni verilecek, firewall enable edilecek ve son olarak status komutu ile firewall’ın çalışıp çalışmadığı gözlemlenecektir.


sudo apt install ufw

sudo ufw allow ssh
sudo ufw allow 51820/udp

sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y

sudo ufw status

Not: Eğer sunucunuz cloud’da ise yukarıdaki firewall yapılandırmasına ek olarak, yönetim panelinden de ilgili portlara yine dışarıdan içeriye olacak şekilde izin vermek gerekecektir. Örnek:

Hetzner-FW-SS
Hetzner-FW-SS

Private ve Public Key’lerin Oluşturulması

WireGuard, bir çift kriptografik key kullanarak bağlantıyı şifreleyerek çalışır. Key çifti, public keyi diğer tarafla paylaşarak kullanılır ve bu taraf daha sonra mesajlarını yalnızca karşılık gelen private key ile şifresi çözülebilecek şekilde şifreleyebilir. İletişimi her iki yönde de güvenli hale getirmek için, her bir çift yalnızca tek yönlü mesajlaşmayı mümkün kıldığından, her bir tarafın kendi private ve public key çiftlerine sahip olması gerekir.

WireGuard’da kullanım için, server ve her client kendi key çiftini oluşturmalı ve ardından genel anahtarları değiş tokuş etmelidir.

Aşağıdaki komutlar sırası ile çalıştırılır.  Bu komutlarla önce  /etc/wireguard  dizinine geçiş yapacağız. Dizin izinlerimizi ayarlayacağız ardından  private – public key anahtar  çiftimizi oluşturacağız.


cd /etc/wireguard
umask 077
wg genkey | tee privatekey | wg pubkey > publickey
,

Not: Private Key’i lütfen kimse ile paylaşmayınız.

Server Config Dosyasını Oluşturmak

Genelde yapılandırma dosyaları  /etc/wireguard  klasöründe saklanır. Bu klasörde  wg0.conf  adlı yeni bir yapılandırma dosyası oluşturuyoruz.


sudo nano /etc/wireguard/wg0.conf

Aşağıdaki yapılandırma, WireGuard sunucunuzun 51820’ye olan bağlantıları kabul etmesini sağlayacak ve yukarıda oluşturduğumuz private key’e karşılık gelen public key’e sahip bir istemciye izin verecektir.

Yapılandırma dosyasına aşağıdaki parametreleri ekleyin.


[Interface]
PrivateKey = <server-privatekey-icerigi>
Address = 10.0.0.1/24
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
ListenPort = 51820

Aşağıdaki komutlarla private ve public key içeriklerini okuyabiliriz. Burada önemli olan husus yukarıdaki  wg0.conf  dosyasındaki PrivateKey parametresine bu sunucuda bulunan privatekey çıktısını yapıştıracağız. Bir de bu dosyada [Peer] kısmı da olacak ama client yapılandırmasını yaptıktan sonra gerekli parametreleri ekleyeceğiz.


sudo cat /etc/wireguard/privatekey
sudo cat /etc/wireguard/publickey

PrivateKey parametresine ilgili key’in çıktısını yapıştırdıktan sonra dosyayı kayıt ediyoruz ve bir sonraki aşamaya geçiyoruz. Bu arada daha sonra client tarafında kullanacağımız için public key çıktısını bir yere not almanızı tavsiye ederim.

WireGuard VPN’i Başlatmak

Aşağıdaki komut ile hazırlamış olduğumuz config dosyasına göre Ubuntu sunucumuz üzerinde yeni bir interface’imiz ayağa kalkacaktır.

Komutun başarı ile çalıştığını anlamak için aşağıdakine benzer bir çıktı ile karşılaşmanız gerekmektedir.


[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.0.0.1/24 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
 wg show  komutu ile hali hazırda geçerli olan yapılandırma ayarlarını görebiliriz.

interface: wg0
  public key: mGF/C/cEK4a1cxIMQ1GHNGORYQSKubwnUKD1A5K7Vlc=
  private key: (hidden)
  listening port: 51820

Sistem her yeniden açıldığında (boot) ilgili servisin ve interface’in çalışması için aşağıdaki komutu kullanıyoruz.


systemctl enable wg-quick@wg0

Client Kurulum

Evet şimdi client kısmına geçebiliriz. Client’ta pub-priv anahtar çifti oluşturduğumuzda, public key içeriğini  [Peer]  alanına yazmak için tekrar sunucuya bağlanacağız. Server Config Dosyası Oluşturmak kısmında yarım kalan işimiz buydu.

İşletim sistemine göre bu kısım ufak farklılıklar gösterse de çalışma mantığı aynı olduğu için sorun yaşacağınızı sanmıyorum.

macOS işletim sistemi üzerinden devam edecek olursam. AppStore üzerinden bile rahatlıkla wireguard uygulamasını edinebilirsiniz. Uygulama kurulumundan sonra  Manage Tunel ve Add Empty Tunnel  seçenekleri ile devam edebiliriz.

WireGuard-Client
WireGuard-Client

Yukarıda görüleceği üzere yeni pencere açılırken bizim için Private ve Public Key çiftlerini oluşturdu. Bu ekranda bulunan Public Key’i Ubuntu Server’da bulunan wg0.conf altına gireceğiz. Ama önce client ayarlarımıza devam ediyoruz.


[Interface]
PrivateKey = Otomatik Oluşan Private Key aynı şekilde bıraktım.
Address = Bu, Client'a Atanacak IP (Hatırlarsanız IP blogumuz 10.0.0.1/24 idi wg0.conf'da) Burada macbook'un alacağı IP'yi 10.0.0.2/32 olarak belirledim.
DNS = Bazı durumlarda DNS parametresi belirtilmediği takdirde cloud sunucu üzerinden internet çıkışı olmuyor. 8.8.8.8 olarak set ettim.
[Peer]
PublicKey = Ubuntu Server'da bulunan Public Key çıktısı buraya yapıştırılmalı.
AllowedIPs = 0.0.0.0/0
Endpoint = Ubuntu Server IP:51820
WireGuard-Client-2
WireGuard-Client-2

Son kez Ubuntu Server’a geri dönüyoruz ve  /etc/wireguard/wg0.conf  dosyasına [Peer] kısmını da ekliyoruz.

Son durum aşağıdaki gibi olmalı. Dikkat ederseniz Public Key kısmına Client Pub Key’ini ve IP yerine 10.0.0.2/32 client IP’sini belirttik.


[Interface]
PrivateKey = <server-privatekey-icerigi>
Address = 10.0.0.1/24
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
ListenPort = 51820

[Peer]
PublicKey = 6dRBvfWzd5xeJGkcrg9s0kk/MqqtW5AFIUcHFtyUkRU=
AllowedIPs = 10.0.0.2/32

Değişikliklerin geçerli olması için önce  wg-quick down wg0  sonrasında  sudo systemctl restart wg-quick@wg0  ile servisi yeniden başlatıyoruz. Eğer interface ayağa kalkmadıysa tekrardan  wg-quick up wg0  komutunu kullanabiliriz.

Macbook cihazıma geri dönüyorum ve activate butonu ile wireguard bağlantımı sağlıyorum.

WireGuard-Client-3
WireGuard-Client-3

Google üzerinden dış IP’mi sorguladığımda ise başarılı olduğumu görüyorum.

Bu arada sadece internet erişimleri için değil evinizde bulunan lab ortamı vs için de WireGuard VPN kullanabilirsiniz.

Referans: WireGuard

Serdar Kurt

Merhaba, 1986 Ankara doğumluyum. Sakarya Üniversitesi Bilgisayar Programcılığı mezunuyum. Şu an özel bir şirkette Security Engineer pozisyonunda görev yapıyorum. Bilişim Teknolojileri alanında kendimi geliştirmeye devam ediyorum.

İlgili Makaleler

Abone ol
Bildir
guest
4 Yorum
Eskiler
En Yeniler Beğenilenler
Satır İçi Geri Bildirimler
Tüm yorumları görüntüle
Başa dön tuşu

Reklam Engelleyici Algılandı

Bana destek olmak için lütfen reklam engelleyicinizi devre dışı bırakınız ya da bu siteyi izin verilenler listesine ekleyiniz.