On iki kurulum

Gerçekten yönlendirme yapan IPv6 destekli, sertleştirilmiş bir WireGuard sunucusu

İstemcilere özel bir v4 adresi ve gerçekten yönlendirilen bir IPv6 öneki veren, istenmeyen her şeyi reddeden bir nftables politikası arkasında çalışan bir WireGuard uç noktası oluşturun.

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.com kullanı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 link

Son 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 --system

accept_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/128

Sunucu 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.conf

4. 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: yes

Unbound, 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 -20

6. Başlatın

systemctl enable --now wg-quick@wg0
systemctl restart unbound
wg show wg0

7. İ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 = 25

Telefon için, bunu sunucuda QR koduna dönüştürün ve terminalin fotoğrafını çekin:

qrencode -t ansiutf8 < /root/laptop.conf

Debian 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 transfer

Son 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

BelirtiNedenÇözüm
El sıkışma başarılı, trafik geçmiyorYönlendirme kapalı veya forward zinciri düşürüyorsysctl net.ipv4.ip_forward, ardından forward zincirini yeniden okuyun
Küçük istekler sorunsuz, büyük indirmeler takılıyorMTU ve yol keşfiHer iki yapılandırmayı MTU = 1380'ye düşürüp yeniden deneyin
IPv6, açılıştan yaklaşık on dakika sonra ölüyorYö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 kaybolduBirimler hiç etkinleştirilmedisystemctl 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.

Hazır olduğunda

Bir şehir seç. Bir boyut seç. Kripto ile öde.

Kim olduğunuzla ilgili formlar yok, onay için insan bekleme yok, doğrulama için telefon görüşmesi yok. Ödeme onaylanır ve kimlik bilgileri gelen kutunuza düşer.