Bu ne kurar
WireGuard çalıştıran bir örnek, her istemciye özel bir IPv4 adresi, kendi /48'inizden yönlendirilmiş bir IPv6 adresi ve tünelin içinde yaşayan bir çözümleyici verir; böylece DNS sorguları trafiğin geri kalanından farklı bir yol izlemez. Güvenlik duvarı her iki yönde de varsayılan olarak engeller. Yönlendirme yalnızca tünel arayüzü için ve yalnızca giden yönde etkinleştirilir.
AMS-01'de Debian 13 ile bir R-4 üzerinde test edilmiştir. WireGuard tek akışlı ve çekirdek tarafındadır, bu nedenle birden fazla gigabit aktarmadığınız sürece daha fazla çekirdek size hiçbir şey kazandırmaz. Çok daha önemli olan konumdur: gerçekte bulunduğunuz yere en yakın olanı seçin, çünkü buraya eklediğiniz her milisaniyeyi her pakete eklersiniz.
Başlamadan önce
- Dağıtılmış bir örnek ve SSH üzerinden root erişimi.
- Panelde etkinleştirilmiş IPv6 /48 eklentisi. Dahil edilen /64 tek bir istemci için çalışır, ancak tek bir /64 içinden istemci başına alt ağlar, komşu keşfi için proxy gerektirir ve bu bir yapılandırma değil, bir hobidir.
- Örneğe işaret eden bir ana bilgisayar adı. Aşağıdaki her şey
vpn.example.comkullanır. - Buradaki her
2001:db8:adresi belgeleme alanıdır. Öneki, örnek sayfanızda gösterilenle değiştirin.
1. Paketler ve çekirdek ayarları
apt update && apt full-upgrade -y
apt install -y wireguard-tools nftables unbound qrencode
ip -br linkSon komut, dışa dönük arayüz adınızı yazdırır. KVM görüntülerimizde bu ens3'dir; sizinki farklıysa, aşağıda her yerde onunla değiştirin. Şimdi çekirdek:
cat > /etc/sysctl.d/99-wireguard.conf <<EOF
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.ens3.accept_ra = 2
net.ipv4.conf.all.rp_filter = 1
EOF
sysctl --systemaccept_ra = 2 satırı insanların unuttuğu satırdır. IPv6 yönlendirmeyi açmak, çekirdeğin yönlendirici reklamlarını kabul etmesini durdurur, varsayılan yol on dakika içinde kaybolur ve makine v6 üzerinden kararırken v4 üzerinden yanıt vermeye devam eder. İki olarak ayarlamak, yönlendirme yapan bir ana bilgisayarda reklamları kabul etmeye devam eder.
2. Anahtarlar
install -d -m 700 /etc/wireguard
umask 077
wg genkey | tee /etc/wireguard/server.key | wg pubkey > /etc/wireguard/server.pub
wg genkey | tee /etc/wireguard/laptop.key | wg pubkey > /etc/wireguard/laptop.pub
wg genpsk > /etc/wireguard/laptop.pskÖn paylaşımlı anahtar bu kurulumda isteğe bağlı değildir. Hiçbir maliyeti yoktur, her yapılandırmada bir satırdır ve yalnızca bugün güvenli olan bir tünel ile şimdi trafiği kaydedip daha sonra şifresini çözmek isteyen bir saldırgana karşı güvenli kalan bir tünel arasındaki farktır.
3. Sunucu arayüzü
/etc/wireguard/wg0.conf dosyasını yazın, anahtar içeriklerini işaretli yerlere yapıştırın:
[Interface]
Address = 10.7.0.1/24, 2001:db8:1a2b:7::1/64
ListenPort = 51820
PrivateKey = <contents of /etc/wireguard/server.key>
MTU = 1420
[Peer]
# laptop
PublicKey = <contents of /etc/wireguard/laptop.pub>
PresharedKey = <contents of /etc/wireguard/laptop.psk>
AllowedIPs = 10.7.0.2/32, 2001:db8:1a2b:7::2/128Sunucu tarafında AllowedIPs bir izin listesi değil, bir yönlendirme tablosudur. Her eşe yalnızca sahip olduğu adresleri verin ve daha genişini vermeyin; aksi takdirde iki istemci aynı yol için savaşır ve kaybeden paket almayı bırakır.
chmod 600 /etc/wireguard/wg0.conf4. Tünelin içinde bir çözümleyici
İstemcileri genel bir çözümleyiciye yönlendirmek, amacın büyük bir kısmını bozar. Unbound zaten kurulu; ona /etc/unbound/unbound.conf.d/tunnel.conf verin:
server:
interface: 10.7.0.1
interface: 2001:db8:1a2b:7::1
access-control: 10.7.0.0/24 allow
access-control: 2001:db8:1a2b:7::/64 allow
do-ip6: yes
prefetch: yes
hide-identity: yes
hide-version: yes
qname-minimisation: yesUnbound, tünel var olmadan önce başlatılırsa başarısız olur, çünkü bu adresler henüz açık değildir. Bununla savaşmak yerine düzgün bir sırayla başlatın:
systemctl edit unbound[Unit]
[email protected]
[email protected]5. Güvenlik duvarı
/etc/nftables.conf dosyasını tamamen değiştirin:
flush ruleset
table inet filter {
chain input {
type filter hook input priority filter; policy drop;
ct state established,related accept
ct state invalid drop
iif lo accept
ip protocol icmp accept
ip6 nexthdr icmpv6 accept
tcp dport 22 accept
udp dport 51820 accept
iifname "wg0" udp dport 53 accept
iifname "wg0" tcp dport 53 accept
}
chain forward {
type filter hook forward priority filter; policy drop;
ct state established,related accept
iifname "wg0" oifname "ens3" accept
iifname "wg0" oifname "wg0" drop
}
chain output {
type filter hook output priority filter; policy accept;
}
}
table ip nat {
chain postrouting {
type nat hook postrouting priority srcnat; policy accept;
ip saddr 10.7.0.0/24 oifname "ens3" masquerade
}
}Ne eksik olduğuna dikkat edin: IPv6 için NAT tablosu yoktur. İstemciler /48'inizden kendi adresleriyle çıkarlar; /48'i almanın tüm nedeni budur. iifname "wg0" oifname "wg0" drop satırı, eşlerin birbirine ulaşmasını engeller; bu, kasıtlı olarak bir ağ kurmuyorsanız istediğiniz şeydir.
systemctl enable --now nftables
nft list ruleset | head -206. Başlatın
systemctl enable --now wg-quick@wg0
systemctl restart unbound
wg show wg07. İstemci
[Interface]
PrivateKey = <contents of /etc/wireguard/laptop.key>
Address = 10.7.0.2/24, 2001:db8:1a2b:7::2/64
DNS = 10.7.0.1
MTU = 1420
[Peer]
PublicKey = <contents of /etc/wireguard/server.pub>
PresharedKey = <contents of /etc/wireguard/laptop.psk>
Endpoint = vpn.example.com:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25Telefon için, bunu sunucuda QR koduna dönüştürün ve terminalin fotoğrafını çekin:
qrencode -t ansiutf8 < /root/laptop.confDebian veya Ubuntu istemcisinde DNS = satırı için openresolv kurulu olmalıdır; aksi takdirde wg-quick bir uyarı yazdırır ve eski çözümleyicinizi sessizce yerinde bırakır. Bu, mükemmel çalışan ve her aramayı sızdıran bir tünelin en yaygın nedenidir.
Doğrulayın
Sırayla dört kontrol. Başarısız olan herhangi biri size hangi adıma geri döneceğinizi söyler.
# on the server, after connecting the client
wg show wg0 latest-handshakes
wg show wg0 transferSon iki dakika içinde bir el sıkışma zaman damgası ve her iki yönde de sıfır olmayan sayaçlar, şifrelemenin ve yönlendirmenin her ikisinin de düzgün olduğu anlamına gelir.
# on the client
ping -c3 10.7.0.1
ping -c3 2001:db8:1a2b:7::1
dig @10.7.0.1 paragonvps.com AAAA +shortÜçüncü komut, tünel çözümleyicisinin yanıt verdiğini kanıtlar. Zaman aşımına uğrarsa, unbound wg0'dan önce başlatılmıştır; yeniden başlatın.
Son kontrol, trafiğinizin düşündüğünüz yerden çıktığını kanıtlayan tek kontroldür ve ikinci bir makine gerektirir. Filodaki herhangi bir başka örnek, herhangi bir şehirde yeterlidir:
# on the second instance
nc -lv 9101
# on the client, tunnel up
curl -m5 -4 http://second.example.com:9101/
curl -m5 -6 http://second.example.com:9101/Dinleyici her bağlantının kaynak adresini yazdırır. v4 denemeniz WireGuard sunucusundan gelmelidir, çünkü maskeleme yapılmıştır. v6 denemeniz, /48'iniz içinde istemcinin kendi tünel adresinden, dokunulmamış olarak gelmelidir; yönlendirilmiş olan budur ve proxy ile yapılan bu değildir.
Sorun giderme
| Belirti | Neden | Çözüm |
|---|---|---|
| El sıkışma başarılı, trafik geçmiyor | Yönlendirme kapalı veya forward zinciri düşürüyor | sysctl net.ipv4.ip_forward, ardından forward zincirini yeniden okuyun |
| Küçük istekler sorunsuz, büyük indirmeler takılıyor | MTU ve yol keşfi | Her iki yapılandırmayı MTU = 1380'ye düşürüp yeniden deneyin |
| IPv6, açılıştan yaklaşık on dakika sonra ölüyor | Yönlendirme, yönlendirici reklamlarını öldürdü | Dış arayüzde accept_ra = 2 |
| DNS tünel dışında çözümleniyor | İstemci DNS ='yi yok saydı | İstemciye openresolv kurun |
| Yeniden başlatmadan sonra her şey kayboldu | Birimler hiç etkinleştirilmedi | systemctl enable wg-quick@wg0 nftables unbound |
Buradan sonraki mantıklı adımlar, başka bir bölgede ikinci bir uç nokta ve bunlardan birinin yanıt vermeyi bıraktığında size bildiren bir izleme yığınıdır. Her ikisi de rehberlerde ele alınmıştır; ağ sayfası, uç noktanın trafiğinizle size ulaşmadan önce ne yaptığını açıklar.