WireGuard Windows kurulumu
Bu kılavuz, iki Windows makinesi arasında WireGuard VPN tüneli kurmayı açıklar: uzak bir Windows ana bilgisayarında, örneğin bir Windows VPS'te çalışan bir WireGuard sunucusu ve yerel Windows bilgisayarınızda çalışan bir WireGuard istemcisi. Tünel etkin olduğunda iki makine, şifreli özel bir bağlantı üzerinden veri alışverişi yapar ve isteğe bağlı olarak istemcinin tüm trafiğini sunucu üzerinden yönlendirebilirsiniz.
Anahtar oluşturmayı basit tutmak için bu kılavuz, hem sunucu hem de istemci yapılandırmasını tek bir WireGuard uygulaması içinde oluşturur ve ardından her yapılandırma dosyasını ait olduğu makineye dağıtır. Sunucu yapılandırması sunucuda, istemci yapılandırması ise istemcide çalışır. Sunucu ve istemci her zaman ayrı makinelerdir. İstediğiniz sayıda ek istemci eklemek için aynı işlem kullanılır.
Başlamadan önce, WireGuard'ın en son sürümünü resmi kurulum sayfasından (https://www.wireguard.com/install/) hem sunucuya hem de istemciye kurun ve her makinede yönetici haklarına sahip olduğunuzdan emin olun.
Bu kılavuzdaki kurulum şöyle görünür:
Server (public IP, listening on UDP 51820) Tunnel address 10.0.0.1/24 | | encrypted WireGuard tunnel | Client Tunnel address 10.0.0.2/32
Sunucu yapılandırmasını oluşturma
C:\Program Files\WireGuard\wireguard.exe dosyasını çalıştırın, Add tunnel öğesine tıklayın ve Add empty tunnel öğesini seçin. WireGuard otomatik olarak bir anahtar çifti oluşturur. Pencerenin üst kısmında gösterilen ortak anahtar, sunucunun ortak anahtarıdır. İstemciyi yapılandırırken daha sonra buna ihtiyacınız olacaktır.

Tünele bir ad verin ve interface bölümünü sunucunun özel anahtarı, WireGuard'ın dinleyeceği bağlantı noktası ve sunucunun tünel içinde kullanacağı dahili adres ile doldurun.
[Interface] PrivateKey = # private key of the WireGuard server ListenPort = # port that WireGuard will listen on Address = # internal IP address of the WireGuard server, for example 10.0.0.1/24

Tünel ağı için özel bir alt ağ kullanın ve sunucu ile tüm istemcileri aynı aralıkta tutun. Yaygın bir seçim, sunucu için 10.0.0.1/24 ve her istemci için 10.0.0.2/32, 10.0.0.3/32 ve benzeridir. Sunucu /24 öneki kullanır, bu nedenle tüm tünel aralığını WireGuard arabirimi üzerinden erişilebilir olarak değerlendirir. Her istemci /32 kullanır, çünkü bir istemci bir alt ağı değil, tek bir adresi temsil eder. /24 olarak ayarlanmış bir istemci, tüm aralığın kendi arabiriminde olduğunu varsayar ve diğer tünel adreslerine yönelik trafiği tünel üzerinden göndermez.
Tünel düzenleyicisinde, yapılandırma alanının altında, isteğe bağlı olarak Block untunneled traffic (kill-switch) seçeneğini etkinleştirebilirsiniz; bu, tünelin dışına çıkacak her türlü trafiği engeller. Ayrıca ek bir güvenlik katmanı ekleyen bir Pre-shared key ayarlayabilirsiniz. Her iki seçenek de isteğe bağlıdır. Kill-switch'in ne zaman yararlı olduğu ve neyi engellediği için "AllowedIPs'i anlama" bölümüne bakın.

İstemci yapılandırmasını oluşturma
İkinci kez Add tunnel öğesine tıklayın ve bu kez istemci için Add empty tunnel öğesini seçin. Bu tünel için gösterilen ortak anahtar, sunucunun istemciyi kabul etmek için ihtiyaç duyduğu istemci ortak anahtarıdır.
İstemci yapılandırmasını doldurun:
[Interface] PrivateKey = # private key of the WireGuard client Address = # internal IP address of the WireGuard client, for example 10.0.0.2/32 DNS = 1.1.1.1, 1.0.0.1 [Peer] PublicKey = # public key of the WireGuard server AllowedIPs = # 0.0.0.0/0 for a full tunnel, or 10.0.0.0/24 for a split tunnel Endpoint = # public IP address and port of the WireGuard server PersistentKeepalive = 25
Endpoint, sunucunun dahili tünel adresi değil, sunucunun ListenPort değerinde ayarlanan bağlantı noktasıyla birlikte gerçek genel IP adresi olmalıdır. AllowedIPs değerini seçme konusunda yardım için aşağıdaki "AllowedIPs'i anlama" bölümüne bakın.
DNS ve PersistentKeepalive satırları isteğe bağlıdır. DNS, tünel etkinken kullanılan DNS sunucularını ayarlar; bu da bağlantıdan sonra ad çözümleme sorunlarını önler. 1.1.1.1, 1.0.0.1 veya 8.8.8.8, 8.8.4.4 gibi genel çözümleyicileri ya da VPN ağının kendi DNS sunucusunu kullanabilirsiniz. PersistentKeepalive = 25, her 25 saniyede bir küçük bir paket gönderir ve istemci NAT arkasındayken bağlantının açık kalmasına yardımcı olur.
Anahtarları ve Endpoint'i çok dikkatli kopyalayın. Yanlış yazılmış bir anahtar veya yanlış bir Endpoint, bir tünelin bağlanamamasının en yaygın nedenidir.

İstemciyi sunucuya ekleme
Sunucu yapılandırmasını yeniden açın ve önceki adımdaki istemci ortak anahtarını kullanarak istemci için bir [Peer] bölümü ekleyin.
[Peer] PublicKey = # public key of the WireGuard client AllowedIPs = # internal IP address of the client
Sunucu yapılandırmasında AllowedIPs'in iki rolü vardır. Sunucuya hangi tünel adresinin bu istemciye ait olduğunu bildirir ve bir yönlendirme listesi gibi davranır: bu aralıklara adreslenen her paket şifrelenir ve bu peer'a gönderilir. Tek bir istemci için bu, onun tünel adresidir, örneğin 10.0.0.2/32. İstemcinin tünel üzerinden bir yerel ağı da erişilebilir kılması gerekiyorsa, o alt ağı da buraya ekleyin, örneğin 10.0.0.2/32, 192.168.1.0/24. Bu adımı her ek istemci için tekrarlayın.

Sunucuda Windows Güvenlik Duvarı'nı yapılandırma
Sunucu, UDP bağlantı noktasında gelen WireGuard trafiğini kabul etmelidir. Gelişmiş Güvenlik özellikli Windows Defender Güvenlik Duvarı'nı açın, Gelen Kuralları'nı seçin ve Yeni Kural'a tıklayın. Bağlantı Noktası'nı seçip İleri'ye tıklayın. UDP'yi seçin, WireGuard bağlantı noktasını, örneğin 51820, girin ve İleri'ye tıklayın. Birden fazla bağlantı noktası kullanıyorsanız, bunları virgülle ayırarak listeleyin, örneğin 51820, 51821. Bağlantıya izin ver'i seçip İleri'ye tıklayın. Kuralın geçerli olacağı profilleri seçin. Sunucu bir veri merkezinde barındırılıyorsa genellikle Genel profili yeterlidir; aksi takdirde Etki Alanı, Özel ve Genel profillerini seçili bırakın. İleri'ye tıklayın, kurala WireGuard UDP 51820 gibi anlaşılır bir ad verin ve Son'a tıklayın.
Bu gelen kuralı yalnızca sunucuda gereklidir, çünkü gelen bağlantıları alan taraf sunucudur. Bir VPS'te ayrıca barındırma sağlayıcınızın bu bağlantı noktasındaki gelen UDP trafiğine yalnızca Windows Güvenlik Duvarı'nda değil, ağ düzeyinde de izin verdiğinden emin olun.
Yapılandırmaları dışa aktarma ve dağıtma
Her iki yapılandırma da hazır olduğunda Export all tunnels to zip'e tıklayın, bir konum seçin ve kaydedin.

Tüm tünellerin yapılandırma dosyalarını bulmak için arşivi açın. Sunucu yapılandırmasını sunucuya yerleştirin ve her istemciye kendi yapılandırma dosyasını verin. Makinede çok sayıda tünel varsa, tek bir tüneli bağlam menüsünden de dışa aktarabilirsiniz. Her iki tünel de bu kılavuzdaki gibi aynı makinede oluşturulduğunda, zip dosyasına dışa aktarmak pratiktir. Her yapılandırmayı doğrudan kendi ana bilgisayarında oluşturursanız, dışa aktarma gerekmez ve yapılandırma dosyasını elle kopyalayabilirsiniz.
Sunucuda, sunucu yapılandırmasını seçin ve Etkinleştir'e tıklayın.

İstemcide Add Tunnel'a tıklayın, istemci yapılandırma dosyasını seçin ve açın.

Ardından Etkinleştir'e tıklayın.

İlk istemci artık yapılandırıldı. Ek istemcileri aynı şekilde ekleyin: her istemci için yeni bir boş tünel oluşturun ve "İstemciyi sunucuya ekleme" bölümünde açıklandığı gibi, o istemcinin ortak anahtarı ve tünel adresiyle eşleşen bir [Peer] bölümünü sunucu yapılandırmasına ekleyin.
Warning: WireGuard'ı uzak bir sunucuda bir RDP oturumu üzerinden yapılandırıyorsanız, tüm trafiği yönlendiren bir tüneli etkinleştirmeden önce "AllowedIPs'i anlama" bölümünü okuyun. AllowedIPs = 0.0.0.0/0 içeren bir yapılandırma, sunucunun kendi trafiğini tünele yönlendirebilir ve RDP bağlantınızı kesebilir.
Bağlantıyı doğrulama
Tüneli etkinleştirdikten sonra Windows, Ağ ve Paylaşım Merkezi'nde WireGuard arabirimini "Ağ erişimi yok" veya "İnternet erişimi yok" olarak gösterebilir. Bu beklenen bir davranıştır, çünkü Windows VPN tünel arabirimlerini standart internet bağlantıları olarak değerlendirmez ve bu, tüneli etkilemez. Windows bu durumu, belirli Microsoft URL'lerini yoklayan bağlantı denetimiyle belirler; bu nedenle uyarı, tünel çalışsa bile bu yoklamalar engellendiğinde veya DNS'iniz tarafından çözümlenmediğinde de görünebilir.
Tünelin çalıştığını doğrulamak için WireGuard istemcisinde durumunu kontrol edin. Etkin bir tünel, veri aktarım sayaçlarıyla birlikte Etkin durumunu gösterir. Sayaçlar artıyorsa tünel trafiği iletmektedir.
Sunucuda, tünel etkinken WireGuard'ın UDP bağlantı noktasını dinlediğini de doğrulayabilirsiniz:
netstat -ano | findstr 51820
PowerShell'de eşdeğeri şudur:
Get-NetUDPEndpoint -LocalPort 51820
51820'yi kendi WireGuard bağlantı noktanızla değiştirin. Hiçbir şey döndürülmezse tünel etkin değildir veya bağlantı noktası, sunucu yapılandırmasında ayarlanandan farklıdır.
Ardından Komut İstemi'ni açın ve sunucunun dahili tünel adresine ping gönderin:
ping 10.0.0.1
10.0.0.1'i sunucu için ayarladığınız gerçek dahili IP ile değiştirin. Yanıtlar, tünelin çalıştığını doğrular.
İstemci AllowedIPs = 0.0.0.0/0 kullanıyorsa, trafiğin tünel üzerinden yönlendirildiğini de doğrulayabilirsiniz:
tracert 8.8.8.8
İlk atlama, WireGuard sunucusunun dahili IP adresi olmalıdır.
WireGuard el sıkışmasını kontrol etme
El sıkışma (handshake), bir WireGuard bağlantısını teşhis ederken en yararlı göstergedir. WireGuard uygulamasında tüneli açın ve Latest handshake alanını izleyin. Çalışan bir tünelde el sıkışma, etkinleştirmeden sonra birkaç saniye içinde görünür ve ardından veri aktarılırken düzenli olarak güncellenir. Tünel boştaysa el sıkışmalar arasında biraz zaman geçebilir, bu nedenle kısa bir ara normaldir. Alan boş kalırsa peer'lar birbirine ulaşamıyordur; bu genellikle yanlış bir Endpoint'e, kapalı bir UDP bağlantı noktasına veya eşleşmeyen anahtarlara işaret eder.
El sıkışmayı, WireGuard ile birlikte gelen wg aracıyla komut satırından da kontrol edebilirsiniz:
wg show
Çıktı, her peer'ı son el sıkışma zamanı ve aktarım sayaçlarıyla birlikte listeler.
AllowedIPs'i anlama
İstemci yapılandırmasındaki AllowedIPs değeri, hangi trafiğin tünel üzerinden gönderileceğine karar verir. Kısacası, istemcide AllowedIPs hangi paketlerin tünele gönderileceğini belirlerken, sunucuda belirli bir istemciden hangi paketlerin kabul edileceğini ve nereye yönlendirileceğini belirler.
AllowedIPs = 0.0.0.0/0, normal internette gezinme dahil tüm trafiği tünel üzerinden yönlendirir. Tam trafik koruması istediğinizde kullanın. Bu trafiğin internete ulaşması için sunucunun onu çevirmesi gerekir. Aşağıdaki "Tam tünelleme için sunucuda NAT yapılandırma" bölümüne bakın.
AllowedIPs = 10.0.0.0/24, yalnızca dahili ağ trafiğini tünel üzerinden yönlendirir; normal internet trafiği ise olağan bağlantıyı kullanmaya devam eder. Yalnızca uzak ağdaki belirli kaynaklara erişmeniz gerektiğinde kullanın.
Birkaç alt ağı virgülle ayırarak listeleyebilirsiniz, örneğin AllowedIPs = 10.0.0.0/24, 192.168.1.0/24.
Tip: Tünel düzenleyicisindeki Block untunneled traffic (kill-switch) seçeneği, AllowedIPs = 0.0.0.0/0 ile tam etkisini gösterir. Tünelin dışına çıkacak her şeyi engeller; bu da yerel ağı engeller. Yazıcılara veya diğer LAN aygıtlarına erişmeniz gerekiyorsa kill-switch'i devre dışı bırakın.
Warning: AllowedIPs = 0.0.0.0/0 ayarlamak her bağlantıyı tünel üzerinden gönderir. Bunu RDP üzerinden yönettiğiniz uzak bir sunucuda uygularsanız, sunucunun trafiği yeniden yönlendirildiği için tünel etkin olduğu anda RDP oturumu kesilebilir. RDP ile erişilen bir sunucuda yalnızca ihtiyaç duyduğunuz alt ağları yönlendirin ve 0.0.0.0/0'a geçmeden önce dar bir AllowedIPs değeriyle test edin.
Tam tünelleme için sunucuda NAT yapılandırma
İstemciler AllowedIPs = 0.0.0.0/0 kullanıyorsa ve trafiklerinin sunucu üzerinden gerçekten internete ulaşmasını istiyorsanız, sunucunun dahili WireGuard adreslerini kendi dış adresine çevirmesi gerekir. Windows'ta bu, Linux'ta kullanılan PostUp ve PostDown betikleriyle değil, New-NetNat komutuyla yapılır.
Sunucuda PowerShell'i yönetici olarak açın ve sunucuya atadığınız tünel alt ağını kullanarak aşağıdakini çalıştırın:
New-NetNat -Name WireGuardNAT -InternalIPInterfaceAddressPrefix 10.0.0.0/24
10.0.0.0/24'ü kendi tünel alt ağınızla değiştirin ve önekin atadığınız her istemci adresini kapsadığından emin olun. Bu aralığın dışındaki bir istemci, örneğin 10.0.1.2, bu kuralla eşleşmez. Etkin kuralları istediğiniz zaman gözden geçirebilirsiniz:
Get-NetNat
NAT kuralını daha sonra kaldırmak için şunu çalıştırın:
Remove-NetNat -Name WireGuardNAT
İstemciler bağlanıyor ve el sıkışma başarılı oluyor ancak internet trafikleri yine de sunucudan geçmiyorsa, yönlendirmede yer alan arabirimlerde IP iletmeyi etkinleştirin ve yeniden test edin. Tam biçim Windows sürümüne bağlıdır, örneğin:
Set-NetIPInterface -InterfaceAlias "Ethernet" -Forwarding Enabled
Bunu, internet trafiğini taşıyan dış arabirime ve WireGuard arabirimine, gerçek adlarını Get-NetIPInterface'ten alarak uygulayın.
Info: New-NetNat, Windows 10, Windows 11 veya Windows Server 2016 ve sonrasını gerektirir ve bazı sistemlerde Hyper-V'yi başka bir amaçla kullanmasanız bile Hyper-V özelliğinin etkinleştirilmesini gerektirir. Bazı VPS planlarında Hyper-V etkinleştirilemez, bu da bu yöntemi engeller. Yalnızca New-NetNat'in yeterli olup olmadığı veya ayrıca IP iletmenin de etkinleştirilmesi gerekip gerekmediği Windows sürümüne bağlı olabilir; bu nedenle tam tünelleme çalışmadığında bunu kendi sunucunuzda doğrulayın.
Sorun giderme
Tünel etkin ancak sunucuyla bağlantı yok. WireGuard UDP bağlantı noktasının, örneğin 51820, sunucudaki güvenlik duvarında açık olduğunu kontrol edin. Ortak anahtarların sunucu ve istemci yapılandırmaları arasında doğru kopyalandığını doğrulayın. İstemci yapılandırmasındaki Endpoint'in, dahili tünel adresine değil, sunucunun gerçek genel IP adresine işaret ettiğinden emin olun.
Bağlandıktan sonra DNS çalışmıyor. İstemcinin interface bölümüne bir DNS sunucusu ekleyin:
[Interface] PrivateKey = ... Address = ... DNS = 1.1.1.1, 1.0.0.1
Paket sayaçları artmıyor. Tünel veri iletmiyor. AllowedIPs'in her iki tarafta da doğru ayarlandığını, dahili WireGuard adreslerinin mevcut yerel ağla çakışmadığını ve ListenPort'un başka bir uygulama tarafından kullanılmadığını kontrol edin.
Bir sorunu teşhis etmek için daha fazla ayrıntıya ihtiyacınız var. Tüneli WireGuard uygulamasında açın ve el sıkışmaları, hataları ve bağlantı olaylarını gerçekleştikçe kaydeden Log sekmesine bakın. Paylaşmanız gerekiyorsa günlüğü oradan dışa aktarabilirsiniz.
Sunucu yeniden başlatıldıktan sonra WireGuard'ı otomatik başlatma
Tünelin yeniden başlatmalar boyunca çalışmaya devam etmesi için onu bir Windows hizmeti olarak kurun. Bir tünel hizmet olarak kurulduğunda, yeniden başlatmadan sonra otomatik olarak başlar. Komut İstemi'ni veya PowerShell'i yönetici olarak açın ve sunucu yapılandırma dosyanızın yolunu kullanarak aşağıdakini çalıştırın:
wireguard /installtunnelservice "C:\Program Files\WireGuard\wg_server.conf"
Kurulumdan sonra tünel, Windows Hizmetler listesinde WireGuard Manager olarak, Çalışıyor durumu ve Otomatik başlangıç türüyle görünür; bu da yeniden başlatmadan sonra kendi kendine başlayacağını doğrular.

Bu komutu yalnızca bir kez çalıştırın, her başlangıçta değil. Tüneli WireGuard uygulamasından etkinleştirmek normalde aynı hizmeti kurar, bu nedenle çoğu durumda bir kez etkinleştirmek yeterlidir. Hizmeti daha sonra kaldırmak için, .conf uzantısı olmadan yapılandırma dosyasının adı olan tünel adını kullanın:
wireguard /uninstalltunnelservice wg_server
Hizmeti yeniden başlatmak için, örneğin yapılandırmayı düzenledikten sonra, kaldırma komutunu çalıştırın ve ardından kurulum komutunu yeniden çalıştırın.
Info: Tünel bir hizmet olarak çalıştığından, ayrı bir Görev Zamanlayıcı görevi gerekmez.
Sunucuyu yeniden başlatın ve tünelin kendi kendine başladığını doğrulayın.