Puncte:2

Înlănțuirea serverelor WireGuard: Se poate ping ambele de la client, dar nu poate accesa internetul. Problemă cu rutarea IP?

drapel cn

Încerc o configurare VPN înlănțuită/double-hop în care tot traficul clientului trece prin 2 servere înainte de a ajunge pe internet:

Client â Server1 â Server2 â Internet public

Toți colegii se află pe aceste blocuri de adrese private: 10.103.213.0/24 (IPv4) și fd6f:9403:2887:9cd6:10:103:213:0/112 (IPv6). Mai jos sunt configurațiile colegilor și regulile IPTables în vigoare. (Vă rugăm să rețineți și numele fișierelor de configurare, în cazul în care contează.)


Configurare Server2

Fişier: /etc/wireguard/wg0.conf

# Server2

[Interfață]
PrivateKey = SERVER2_PRIVATE_KEY
Adresă = 10.103.213.2/24, fd6f:9403:2887:9cd6:10:103:213:2/112
ListenPort = 53701
SaveConfig = false

# CLIENȚI

[Peer] # Server1
PublicKey = SERVER1_PUBLIC_KEY
PresharedKey = SERVER1_PRESHARED_KEY
# â pentru a permite traficul de la client (10.103.213.11/32) prin Server1 (10.103.213.1/32), permiteți ambele
IP-uri permise = 10.103.213.0/24, fd6f:9403:2887:9cd6:10:103:213:0/112

Configurare firewall. comenzi:

ufw permit 53701/udp comentariu „WireGuard VPN”

iptables -A FORWARD -i wg0 -j ACCEPT &&
iptables -A FORWARD -o wg0 -j ACCEPT &&
ip6tables -A FORWARD -i wg0 -j ACCEPT &&
ip6tables -A FORWARD -o wg0 -j ACCEPT

iptables -t nat -A POSTROUTING -s 10.103.213.0/24 -o enp8s0 -j ​​MASQUERADE
ip6tables -t nat -A POSTROUTING -s fd6f:9403:2887:9cd6:10:103:213:0/112 -o enp8s0 -j ​​MASQUERADE

Configurare Server1

Fişier: /etc/wireguard/wg0.conf

# Server1

[Interfață]
PrivateKey = SERVER1_PRIVATE_KEY
Adresă = 10.103.213.1/24, fd6f:9403:2887:9cd6:10:103:213:1/112
ListenPort = 53701
SaveConfig = false

# CLIENȚI

[Peer] # Server2
PublicKey = SERVER2_PUBLIC_KEY
PresharedKey = SERVER1_PRESHARED_KEY
Punct final = SERVER2_PUBLIC_IP:53701
IP-uri permise = 10.103.213.2/32, fd6f:9403:2887:9cd6:10:103:213:2/128
#PersistentKeepalive = 25

[Peer] # PC
PublicKey = CLIENT_PUBLIC_KEY
PresharedKey = CLIENT_PRESHARED_KEY
IP-uri permise = 10.103.213.11/32, fd6f:9403:2887:9cd6:10:103:213:11/128

Configurare firewall. comenzi:

ufw permit 53701/udp comentariu „WireGuard VPN”

iptables -A FORWARD -i wg0 -j ACCEPT &&
iptables -A FORWARD -o wg0 -j ACCEPT &&
ip6tables -A FORWARD -i wg0 -j ACCEPT &&
ip6tables -A FORWARD -o wg0 -j ACCEPT

Configurare client

# CLIENT: PC

[Interfață]
PrivateKey = CLIENT_PRIVATE_KEY
Adresă = 10.103.213.11/24, fd6f:9403:2887:9cd6:10:103:213:11/112
DNS = 10.103.213.1, fd6f:9403:2887:9cd6:10:103:213:1

[Peer] # Server1
PublicKey = SERVER1_PUBLIC_KEY
PresharedKey = CLIENT_PRESHARED_KEY
Punct final = SERVER1_PUBLIC_IP:53701
AllowedIPs = 0.0.0.0/0, ::0/0
#PersistentKeepalive = 25

Acum, așa cum am spus, pot să dau ping la Server1 (10.103.213.2) și Server2 (10.103.213.1) de la Client (10.103.213.11) în rețeaua privată (WireGuard) când VPN-ul este activat pe toți colegii, dar nu pot accesa internetul.

Știu că îmi lipsesc unele rute IP foarte necesare sau reguli IPTables, dar în ciuda faptului că încerc să găsesc o solutie pe care o pot intelege de zile întregi, nu am avut succes. Văd că există puține speranțe pentru mine fără să citesc de fapt o carte despre rețele/firewall Linux.

Deocamdată, sper că cineva mă poate ajuta cu o soluție împreună cu o explicație despre ceea ce facem și de ce, astfel încât să pot înțelege mai bine și să iau notițe.

Mulțumesc foarte mult!


NOTE:

  • Dacă îmi lipsește informații utile, vă rugăm să întrebați și o voi primi cu plăcere.

  • Clientul rulează macOS. Server1 și Server2 rulează Debian 11 „Bullseye”. Doar o informație, în cazul în care este relevant.

  • Server1 și Server2 au Unbound instalat și configurat pentru rezoluția DNS locală. De aceea vezi DNS = 10.103.213.1, fd6f:9403:2887:9cd6:10:103:213:1 în Config client. Dacă nu pentru asta, aș folosi fie CloudFlare, fie IP-urile Google acolo.

  • Cineva de pe #wireguard IRC mi-a sugerat să încerc să adaug Tabel = 123 sub [Interfață] în configurația WireGuard a Server1. și apoi rulați comanda regulă ip adăugați iif wg0 tabelul 123. Nu a funcționat și nici nu am putut înțelege ce ar trebui să facă (nu am putut înțelege paginile de manual sau detaliile tehnice).

  • Din lectura mea am ajuns la concluzia că iptables și ufw pot fi folosite împreună, cu excepția cazului în care trebuie să aveți grijă când utilizați iptables-persistent. Trebuie să fugi netfilter-salvare persistentă chiar și după alergare ufw comenzile pentru ca regulile firewall să fie persistente la reporniri chiar dacă starea ufw spune că sunt la locul lor. Dacă dintr-un motiv oarecare reporniți înainte de a salva, ștergeți regulile UFW și adăugați-le din nou și apoi rulați netfilter-salvare persistentă.

iBug avatar
drapel um
Amestecarea UFW și iptables nu mi se pare o idee bună.
drapel cn
@iBug IDK, am citit despre asta și aproape am ajuns la concluzia că pot fi folosite împreună, cu excepția faptului că trebuie să fii atent când folosești `iptables-persistent` (`netfilter-persistent salvare` chiar și după rularea `ufw ` comenzi). Nu există alte probleme.
Puncte:1
drapel cn

Oamenii amabili de la #wireguard Canal IRC pe Libera.Chat m-a ajutat!

Problemele cu configurația mea. au fost după cum urmează:

  • Configurația Server1 are Server2 cu IP-uri permise doar adresele IP ale Server2. Asta nu va permite "Internetul". Trebuie să fie 0.0.0.0/0, ::0/0.

  • Interfața WireGuard a Server1 trebuie configurată pentru a adăuga rute (pentru toate intrările în IP-uri permise) la un tabel de rutare IP personalizat (să-l numim fireguard2x) in loc de principal masa. Apoi adăugați o regulă de politică IP care spune că traficul cu interfața de intrare (iif) wg0 accesați tabelul personalizat, ceea ce înseamnă, de asemenea, că alte tipuri de trafic iau ruta implicită, în mod obișnuit.


Configurație corectată

Configurare Server2

Fişier: /etc/wireguard/wg0.conf

# Server2

[Interfață]
PrivateKey = SERVER2_PRIVATE_KEY
Adresă = 10.103.213.2/24, fd6f:9403:2887:9cd6:10:103:213:2/112
ListenPort = 53701
SaveConfig = false

# CLIENȚI

[Peer] # Server1
PublicKey = SERVER1_PUBLIC_KEY
PresharedKey = SERVER1_PRESHARED_KEY
# â pentru a permite traficul de la client (10.103.213.11/32) prin Server1 (10.103.213.1/32), permiteți ambele
IP-uri permise = 10.103.213.0/24, fd6f:9403:2887:9cd6:10:103:213:0/112

Configurare firewall. comenzi:

ufw permit 53701/udp comentariu „WireGuard VPN”

iptables -A FORWARD -i wg0 -j ACCEPT &&
iptables -A FORWARD -o wg0 -j ACCEPT &&
ip6tables -A FORWARD -i wg0 -j ACCEPT &&
ip6tables -A FORWARD -o wg0 -j ACCEPT

iptables -t nat -A POSTROUTING -s 10.103.213.0/24 -o enp7s0 -j ​​MASQUERADE
ip6tables -t nat -A POSTROUTING -s fd6f:9403:2887:9cd6:10:103:213:0/112 -o enp7s0 -j ​​MASQUERADE

Configurare Server1

Fişier: /etc/wireguard/wg0.conf

# Server1

[Interfață]
PrivateKey = SERVER1_PRIVATE_KEY
Adresă = 10.103.213.1/32, fd6f:9403:2887:9cd6:10:103:213:1/128
ListenPort = 53701
Tabel = wireguard2x
# â ar trebui setat numai dacă rezolvconf sau openresolv este instalat pe sistem, altfel lăsați sistemul să folosească valorile implicite
# â nu este necesar dacă este configurată rezoluția DNS locală
#DNS = 1.1.1.1, 1.0.0.1, 2606:4700:4700::1111, 2606:4700:4700::1001
DNS = 10.103.213.1, fd6f:9403:2887:9cd6:10:103:213:1
SaveConfig = false

# CLIENȚI

[Peer] # Server2
PublicKey = SERVER2_PUBLIC_KEY
PresharedKey = SERVER1_PRESHARED_KEY
Punct final = SERVER2_PUBLIC_IP:53701
AllowedIPs = 0.0.0.0/0, ::0/0
#PersistentKeepalive = 25

[Peer] # PC
PublicKey = CLIENT_PUBLIC_KEY
PresharedKey = CLIENT_PRESHARED_KEY
IP-uri permise = 10.103.213.11/32, fd6f:9403:2887:9cd6:10:103:213:11/128

Configurare firewall. comenzi:

ufw permit 53701/udp comentariu „WireGuard VPN”

iptables -A FORWARD -i wg0 -j ACCEPT &&
iptables -A FORWARD -o wg0 -j ACCEPT &&
ip6tables -A FORWARD -i wg0 -j ACCEPT &&
ip6tables -A FORWARD -o wg0 -j ACCEPT

echo 123 wireguard2x >> /etc/iproute2/rt_tables
regulă ip add iif wg0 tabel wireguard2x

Configurare client

# CLIENT: PC

[Interfață]
PrivateKey = CLIENT_PRIVATE_KEY
Adresă = 10.103.213.11/32, fd6f:9403:2887:9cd6:10:103:213:11/128
DNS = 10.103.213.1, fd6f:9403:2887:9cd6:10:103:213:1

[Peer] # Server1
PublicKey = SERVER1_PUBLIC_KEY
PresharedKey = CLIENT_PRESHARED_KEY
Punct final = SERVER1_PUBLIC_IP:53701
AllowedIPs = 0.0.0.0/0, ::0/0
#PersistentKeepalive = 25

NOTE:

  • Puteți vedea toate regulile de rutare a politicii care sunt în vigoare în prezent folosind această comandă: lista de reguli ip sau regula ip

  • Vizualizați tabelele de rutare cu, de exemplu, IP route show table wireguard2x sau IP route list table wireguard2x.

  • Pentru a goli memoria cache a rutei: cache de spălare a rutei ip

  • Lectură suplimentară: Linux Advanced Routing & Traffic Control (LARTC) HOWTO

  • Puteți monitoriza fluxul de trafic de rețea al Clientului, dacă este pe Linux, folosind sudo iptraf-ng; pe macOS folosind sudo iftop. (A se rula pe client.)

    • Mi s-a părut că rularea este greu de analizat din cauza prea multor modificări live. Așa că mi s-a sugerat să încerc ruta obține 192.0.2.0 (care arată interfața utilizată, de ex., interfață: utun2) și apoi alergând ifconfig <interfață> (de exemplu., ifconfig utun2) pe macOS. Acesta din urmă ar trebui să arate adresa IP privată a Clientului (peer WireGuard), de exemplu, 10.103.213.11, confirmând că traficul este direcționat prin interfața WG. Nu este mult, dar este un început.

    • UDPATE: traceroute este genial pentru asta! De exemplu, traceroute 8.8.8.8. (Vârful pălăriei lui Chrispus Kamau.)

  • curl ipinfo.io pentru a vă verifica adresa IP cu VPN-ul activat. (A se rula pe client.)

LEGATE DE:

Puncte:0
drapel cn

(Bazat pe excelentul lui Chrispus Kamau Wireguard VPN tutoriale pentru Configurare tipică și Configurare înlănțuită, se pare că am o soluție (netestat!) într-un format care arată cum ar putea fi gestionate setările oarecum neobișnuite/complexe... sau cel puțin să vă ofere o idee. Multumesc mult CK!)

Prin intermediul: https://github.com/iamckn/chained-wireguard-ansible


Cum functioneaza:

  • Client (vpn0) â 10.200.200.0/24 â (wg0) â intermediar (poarta0) â 10.100.100.0/24 â (wg0) Poartă (wg0) â Internet public

  • Se presupune că Unbound este configurat atât pe Middleman, cât și pe Gate pentru rezoluția DNS locală.

Configurarea porții

Configurați interfața VPN a porții (wg0).

Fişier: /etc/wireguard/wg0.conf

# SERVER

[Interfață] # Poarta
PrivateKey = GATE_PRIVATE_KEY
Adresa = 10.100.100.1/24
ListenPort = 53701
SaveConfig = false

# CLIENȚI

[Peer] # Middleman
PublicKey = MIDDLEMAN_PUBLIC_KEY
PresharedKey = MIDDLEMAN_PRESHARED_KEY
AllowedIPs = 10.0.0.0/8

Configurare firewall. comenzi:

# Urmăriți conexiunea VPN
## Urmăriți lanțul de intrare
iptables -A INPUT -m conntrack --ctstate RELATED,STABLISHED -j ACCEPT
## Urmărește lanțul înainte
iptables -A FORWARD -m conntrack --ctstate RELATED,STABLISHED -j ACCEPT

# Permiteți conexiunile WireGuard de intrare/traficul VPN pe portul de ascultare
iptables -A INPUT -p udp -m udp --dport 53701 -m conntrack --ctstate NOU -j ACCEPT

# Permite atât traficul DNS recursiv TCP, cât și UDP
iptables -A INPUT -s 10.100.100.0/24 -p tcp -m tcp --dport 53 -m conntrack --ctstate NOU -j ACCEPT
iptables -A INPUT -s 10.100.100.0/24 -p udp -m udp --dport 53 -m conntrack --ctstate NOU -j ACCEPT

# Permiteți redirecționarea pachetelor care rămân în tunelul VPN
iptables -A FORWARD -i wg0 -o wg0 -m conntrack --ctstate NOU -j ACCEPT

# Configurați NAT
iptables -t nat -A POSTROUTING -s 10.100.100.0/24 -o enp7s0 -j ​​MASQUERADE

Afișați interfața VPN a porții și activați serviciul WireGuard să repornească automat la pornire:

wg-quick up wg0
systemctl enable wg-quick@wg0

Configurația intermediarului

Configurați interfața intermediarului orientată spre poarta (poarta0). Aici intermediarul acționează ca client.

Fişier: /etc/wireguard/gate0.conf

[Interfață] # Middleman
PrivateKey = MIDDLEMAN_PRIVATE_KEY
Adresa = 10.100.100.2/32
DNS = 10.100.100.1
SaveConfig = false

# PEERS

[Peer] # Poarta
PublicKey = GATE_PUBLIC_KEY
PresharedKey = MIDDLEMAN_PRESHARED_KEY
Punct final = GATE_PUBLIC_IP:53701
AllowedIPs = 0.0.0.0/0
#PersistentKeepalive = 21

Configurați interfața intermediarului orientată către client (wg0). Aici intermediarul acționează ca server.

Fişier: /etc/wireguard/wg0.conf

# SERVER

[Interfață] # Middleman
PrivateKey = MIDDLEMAN_PRIVATE_KEY
Adresa = 10.200.200.1/24
ListenPort = 53701
SaveConfig = false

# CLIENȚI

[Peer] # PC
PublicKey = CLIENT_PUBLIC_KEY
PresharedKey = CLIENT_PRESHARED_KEY
IP-uri permise = 10.200.200.2/32

Configurare firewall. comenzi:

iptables -A INPUT -m conntrack --ctstate RELATED,STABLISHED -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate RELATED,STABLISHED -j ACCEPT

iptables -A INPUT -p udp -m udp --dport 53701 -m conntrack --ctstate NOU -j ACCEPT

iptables -A INPUT -s 10.200.200.0/24 -p tcp -m tcp --dport 53 -m conntrack --ctstate NOU -j ACCEPT
iptables -A INPUT -s 10.200.200.0/24 -p udp -m udp --dport 53 -m conntrack --ctstate NOU -j ACCEPT

iptables -A FORWARD -i wg0 -o wg0 -m conntrack --ctstate NOU -j ACCEPT

iptables -t nat -A POSTROUTING -s 10.200.200.0/24 -o enp41s0 -j ​​MASQUERADE

# Configurați lanțul VPN NAT
iptables -t nat -A POSTROUTING -s 10.200.200.0/24 -j SNAT --to-source 10.100.100.2

Configurați rutarea politicii pe intermediar pentru a direcționa traficul de la client la poartă.

echo "1 intermediar" >> /etc/iproute2/rt_tables

# Redirecționați tot traficul către poartă
IP route add 0.0.0.0/0 dev gate0 table middleman

# SAU redirecționați numai traficul către 4.2.2.2 (de ex.), către poartă
#ip route add 4.2.2.2/32 dev gate0 table middleman

regulă ip adăugați de la 10.200.200.0/24 intermediar de căutare

Afișați interfețele WireGuard ale intermediarului și activați serviciul WireGuard să repornească automat la pornire:

wg-quick up gate0
systemctl enable wg-quick@gate0

wg-quick up wg0
systemctl enable wg-quick@wg0

Configurare client

Fişier: /etc/wireguard/vpn0.conf

[Interfață]
PrivateKey = CLIENT_PRIVATE_KEY
Adresa = 10.200.200.2/32
DNS = 10.200.200.1

# PEERS

[Peer] # Middleman
PublicKey = MIDDLEMAN_PUBLIC_KEY
PresharedKey = CLIENT_PRESHARED_KEY
Punct final = MIDDLEMAN_PUBLIC_IP:53701
AllowedIPs = 0.0.0.0/0
#PersistentKeepalive = 21

În cele din urmă, activați WireGuard pe client.

Puncte:0
drapel us

Răspunsul lui its_me funcționează grozav pentru mine. Mai jos sunt câteva modificări pe care le-am făcut pentru a automatiza crearea/eliminarea tabelului de rute, iptables și regulile ip. Automatizarea are loc pe măsură ce interfața wireguard este adusă în sus și în jos. Vă rugăm să rețineți că nu folosesc ipv6 sau ufw în această configurație:

Server1:

# Adăugați un tabel de rute pentru această interfață
PreUp = echo 1 wireguard2x >> /etc/iproute2/rt_tables
# Adăugați regulă ip pentru a indica această interfață către noul tabel de rute
PreUp = regulă ip add iif %i tabel wireguard2x
# Configurați iptables
PostUp = iptables -A FORWARD -i %i -j ACCEPT
PostUp = iptables -A FORWARD -o %i -j ACCEPT

# Eliminați iptables
PostDown = iptables -D FORWARD -i %i -j ACCEPT
PostDown = iptables -D FORWARD -o %i -j ACCEPT
# Găsiți și eliminați regula ip
PostDown = regulă ip | grep „din toate iif %i” | tăiat -d: -f1 | xargs -L1 ip rule del prio
# Îndepărtați tabelul ip
PostDown = sed -i '/wireguard2x/d' /etc/iproute2/rt_tables

Server2:

PostUp = iptables -A FORWARD -i %i -j ACCEPT
PostUp = iptables -A FORWARD -o %i -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT
PostDown = iptables -D FORWARD -o %i -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
drapel cn
Da, sunt conștient de `PostUp` și `PostDown` în configurația WG. Îmi place ca toate regulile mele de firewall (inclusiv regulile de sistem și alte aplicații) să fie într-un singur loc și, prin urmare, prefer să le adaug manual.
Aman Juman avatar
drapel ng
@computerguy1 Am încercat configurația dvs. și se poate conecta la Server-II, dar în cele din urmă am pierdut accesul SSH la Server-I. În plus, nu mă pot conecta la Server-I folosind niciun client WireGuard.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.