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.
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.
sudo nano /etc/sysctl.conf
Aşağıdaki komut ile eklenen parametreyi görüyor ve parametrenin geçerli olmasını sağlıyoruz.
sudo sysctl -p
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:
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.
wg-quick up wg0
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
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.
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
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.
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