Puncte:0

Trimiteți răspunsul înapoi prin același dispozitiv pentru conexiunile care vin prin Wireguard

drapel us

Am un server lanserver rulează în LAN-ul meu privat care este conectat la un server public publicserver folosind Wireguard. publicserver transmite conexiunile TCP către anumite porturi către lanserver prin conexiunea Wireguard folosind un iptables DNAT regulă.

Pe lanserver, Wireguard este configurat ca o conexiune NetworkManager. Acesta direcționează tot traficul de internet prin Wireguard folosind AllowedIPs = 0.0.0.0/0, ::/0. Acest lucru face ca următoarele reguli IP să fie configurate lanserver:

[root@lanserver ~]# arată regulă ip
0: din toate căutările locale
31100: din toate căutările principale suppress_prefixlength 0
31101: nu din toate căutările fwmark 0xcb2e 52014
32766: din toate căutările principale
32767: din toate căutările implicite
[root@lanserver ~]# ip route show table 52014
default dev wg0 proto static scope link metric 50

Această configurație funcționează corect. O conexiune TCP de intrare la publicserver este redirecționat către lanserver folosind regula iptables. Răspunsul este trimis înapoi publicserver deoarece regula ip 31101 se potrivește cu el.

Există o excepție: când încerc să deschid o conexiune TCP la publicserver folosind IPv6 de pe computerul meu personal pc, care se află și în LAN-ul meu privat, nu funcționează. Problema pare să fie că ambele pc și lanserver au o adresă IPv6 în aceeași subrețea publică. publicserver transmite conexiunea către lanserver cu succes, dar răspunsul nu este redirecționat prin conexiunea Wireguard, ci direct către pc datorită regulii ip 31100.

Cum mă pot asigura că toate răspunsurile pentru conexiunile care vin prin interfața Wireguard sunt activate lanserver sunt de asemenea trimise înapoi prin interfața Wireguard, indiferent dacă IP-ul lor sursă se află într-o subrețea locală?

Mă pot gândi la soluții în următoarele direcții:

  • Dezactivați IPv6 activat lanserver, ceea ce face ca acesta să nu fie pe aceeași subrețea ca pc. Nu este o soluție foarte bună.
  • Utilizare SNAT pe publicserver pentru port forward. Nu este o soluție acceptabilă, deoarece unele dintre serviciile din spatele porturilor redirecționate trebuie să cunoască adevărata IP sursă.
  • Menționați în mod explicit subrețeaua IPv6 locală în IP-uri permise de egalul Wireguard. Acest lucru nu funcționează deoarece subrețeaua IPv6 se modifică la fiecare 24 de ore.
  • Adăugați o regulă IP personalizată care se potrivește cumva cu toate conexiunile care vin wg0 și utilizează tabelul de rutare 52014 pentru ei. Nu sunt sigur cum să specific exact o astfel de regulă. De asemenea, problema este că numărul tabelului de rutare se modifică de fiecare dată când conexiunea Wireguard este repornită. Locul potrivit pentru a crea o astfel de regulă ar fi probabil Documenta script, dar NetworkManager nu pare să permită specificarea unuia.
Puncte:0
drapel us

După ce am experimentat cu diferite opțiuni, am decis să nu mai folosesc NetworkManager și să folosesc în schimb wg-quick direct. Pe Fedora Server, acest lucru a fost destul de ușor și a trebuit doar să elimin conexiunea NetworkManager folosind nmcli con del wg0 și activați serviciul wg-quick folosind systemctl enable --now wg-quick@wg0 (care citește configurația din /etc/wireguard/wg0.conf). Trecerea la wg-quick are următoarele avantaje:

  • Pot specifica personalizarea Documenta comenzi pentru a configura o setare de rutare mai complexă
  • Numărul tabelului de rutare Wireguard pare să fie constant la 51820, chiar dacă nu am găsit nicio documentație despre asta. Acest lucru facilitează configurarea regulilor IP personalizate.

Am folosit apoi Documenta comanda in wg0.conf pentru a configura reguli IP suplimentare care să se asigure că orice trafic Wireguard va răspunde și prin Wireguard. Există două opțiuni pentru a realiza acest lucru:

Opțiunea 1: potrivirea IP-ului sursă

Regulile IP se potrivesc cu pachetele Wireguard pe baza adreselor lor IP sursă (care este setată automat la adresa IP la care a venit inițial cererea):

[Interfață]
Adresa = 10.139.192.4/24
Adresă = fd52:30a4:f9e7:647a::4/64
PostUp = ip -4 rule add from 10.139.192.4 lookup 51820
PreDown = ip -4 rule del din 10.139.192.4 căutare 51820
PostUp = adăugare regulă ip -6 din fd52:30a4:f9e7:647a::4 căutare 51820
PreDown = ip -6 rule del din fd52:30a4:f9e7:647a::4 căutare 51820

Opțiunea 2: fwmark

Unele reguli iptables sunt configurate pentru a seta a marcă pe pachetele care vin prin wg0:

iptables -t mangle -A INPUT -j CONNMARK -i wg0 --set-mark 1
ip6tables -t mangle -A INPUT -j CONNMARK -i wg0 --set-mark 1
iptables -t mangle -A OUTPUT -j CONNMARK -m connmark --mark 1 --restore-mark
ip6tables -t mangle -A OUTPUT -j CONNMARK -m connmark --mark 1 --restore-mark

Apoi asta marcă se potrivește cu regula IP:

PostUp = ip -4 rule add fwmark 1 lookup 51820
PreDown = ip -4 rule del fwmark 1 lookup 51820
PostUp = ip -6 rule add fwmark 1 lookup 51820
PreDown = ip -6 rule del fwmark 1 lookup 51820

Mai multe detalii despre această soluție pot fi găsite Aici.

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.