Puncte:0

Redirecționarea portului WireGuard de la client în gazdă

drapel us

Încerc să conectez un port de la un client wireguard la rețeaua gazdă a serverului.

Am încercat să o fac cu IPtables, dar întotdeauna primesc răspunsul „unreachable”

Se pare că configurația mea ar putea fi problema?

Mulțumiri!


Test de conexiune

root@wiretest3:~# curl -I 10.7.0.2:6060
HTTP/1.1 200 OK
Server: nginx/1.20.1
Data: duminica, 18 iulie 2021 10:37:38 GMT
Tip de conținut: text/html
Lungimea conținutului: 988
Ultima modificare: sâmbătă, 17 iulie 2021 10:07:05 GMT
Conexiune: păstrați-vă în viață
ETag: „60f2abc9-3dc”
Accept-Range: octeți

root@wiretest3:~# curl -I 192.168.1.180:6060
curl: (28) Nu s-a putut conecta la portul 192.168.1.180 6060: Conexiune a expirat
root@wiretest3:~# curl -I 127.0.0.1:6060
curl: (7) Nu s-a putut conecta la portul 127.0.0.1 6060: Conexiune a fost refuzată

Configurare server:

Gazdă: 192.168.1.183 Rețea Wireguard: 10.7.0.1

root@wiretest3:~# cat /etc/wireguard/wg0.conf
# Nu modificați rândurile comentate
# Sunt folosite de wireguard-install
# ENDPOINT wireguard.demo.net

[Interfață]
Adresa = 10.7.0.1/24
PrivateKey = QAOETAJYMK3PcDhN/y+xFJKcJetm4...........
ListenPort = 51823

# BEGIN_PEER client
[Peer]
PublicKey = YxM7cwbmBm7VIyNcRdDBhtiEwFWL........
PresharedKey = W9Y0qCku0Fv1uFiMpy5ImStbs+.........
IP-uri permise = 10.7.0.2/32, 192.168.1.183/32
# client END_PEER

IP a

root@wiretest3:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue stare UNKNOWN grup implicit qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft pentru totdeauna preferred_lft pentru totdeauna
    inet6 ::1/128 scope host 
       valid_lft pentru totdeauna preferred_lft pentru totdeauna
2: eth0@if47: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue stare UP grup implicit qlen 1000
    link/ether 2e:f5:1e:38:32:06 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 192.168.1.183/24 brd 192.168.1.255 scope global eth0
       valid_lft pentru totdeauna preferred_lft pentru totdeauna
    inet6 fe80::2cf5:1eff:fe38:3206/64 scope link 
       valid_lft pentru totdeauna preferred_lft pentru totdeauna
3: wg0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1420 qdisc mq state NECUNOSCUT grup implicit qlen 500
    link/niciuna 
    inet 10.7.0.1/24 scope global wg0
       valid_lft pentru totdeauna preferred_lft pentru totdeauna
    inet6 fe80::6613:2cc4:bb7d:6bd4/64 scope link stabil-confidențialitate 
       valid_lft pentru totdeauna preferred_lft pentru totdeauna

Reguli IPtables:

    iptables -P FORWARD DROP;
    iptables -A FORWARD -i eth0 -j ACCEPT;
    iptables -t nat -A PREROUTING -p tcp --dport 6060:6060 -j DNAT --to-destination 10.7.0.2;
    iptables -w -t nat -A POSTROUTING -o eth0 -j MASQUERADE;

IPtables: (iptables-salvare)

root@wiretest3:~# iptables-save
# Generat de iptables-save v1.8.7 pe duminica 18 iulie 13:17:28 2021
*filtru
:INPUT ACCEPT [0:0]
: FORWARD DROP [0:0]
: ACCEPT IEȘIRE [0:0]
-A INTRARE -p udp -m udp --dport 51823 -j ACCEPT
-A FORWARD -m stare --stare RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.7.0.0/24 -j ACCEPT
-A FORWARD -i eth0 -j ACCEPT
COMMIT
# Finalizat duminică, 18 iulie 13:17:28 2021
# Generat de iptables-save v1.8.7 pe duminica 18 iulie 13:17:28 2021
*nat
:ACCEPTAREA PRE-ROUTARE [0:0]
:INPUT ACCEPT [0:0]
: ACCEPT IEȘIRE [0:0]
: POSTROUTING ACCEPT [0:0]
-A PREROUTING -p tcp -m tcp --dport 6060 -j DNAT --to-destination 10.7.0.2
-A POSTOUTING -s 10.7.0.0/24 ! -d 10.7.0.0/24 -j SNAT --to-source 192.168.1.183
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
# Finalizat duminică, 18 iulie 13:17:28 2021
root@wiretest3:~# 

IPtables: iptables -L -n -t nat (acum)

root@wiretest3:~# sudo iptables -L -n -t nat
PRERUUTARE în lanț (politica ACCEPTĂ)
target prot opt ​​sursă destinație         
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:6060 la:10.7.0.2

INTRARE în lanț (politica ACCEPTĂ)
target prot opt ​​sursă destinație         

Ieșire în lanț (politica ACCEPT)
target prot opt ​​sursă destinație         

POSTOUTING în lanț (politica ACCEPT)
target prot opt ​​sursă destinație         
SNAT toate -- 10.7.0.0/24 !10.7.0.0/24 la:192.168.1.183
MASQUERADE toate -- 0.0.0.0/0 0.0.0.0/0 

Configurare client:

root@wiredocker:/etc/wireguard# cat /etc/wireguard/wg0.conf
[Interfață]
Adresa = 10.7.0.2/24
DNS = 8.8.8.8, 8.8.4.4
PrivateKey = GAF31cqwu2YSWQPdiSvlWie2Pma.........

[Peer]
PublicKey = 3VMnaI8JvoXZ6DthLcDy5MnVmNq..............
PresharedKey = W9Y0qCku0Fv1uFiMpy5ImStbs+...............
IP-uri permise = 0.0.0.0/0, ::/0, 192.168.1.0/24
Punct final = wireguard.demo.net:51823
PersistentKeepalive = 25

IP a

root@wiredocker:/etc/wireguard# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue stare UNKNOWN grup implicit qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft pentru totdeauna preferred_lft pentru totdeauna
    inet6 ::1/128 scope host 
       valid_lft pentru totdeauna preferred_lft pentru totdeauna
2: eth0@if12: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue stare UP grup implicit qlen 1000
    link/ether 76:d3:5b:64:b4:f0 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 192.168.178.178/24 brd 192.168.178.255 scope global eth0
       valid_lft pentru totdeauna preferred_lft pentru totdeauna
    inet6 fe80::74d3:5bff:fe64:b4f0/64 scope link 
       valid_lft pentru totdeauna preferred_lft pentru totdeauna
4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP grup implicit 
    link/ether 02:42:bb:9b:28:90 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft pentru totdeauna preferred_lft pentru totdeauna
    inet6 fe80::42:bbff:fe9b:2890/64 scope link 
       valid_lft pentru totdeauna preferred_lft pentru totdeauna
10: veth508c767@if9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 stare UP grup implicit 
    link/ether ea:cd:96:6e:33:0b brd ff:ff:ff:ff:ff:ff link-netnsid 1
    inet6 fe80::e8cd:96ff:fe6e:330b/64 scope link 
       valid_lft pentru totdeauna preferred_lft pentru totdeauna
15: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue stare UNKNOWN grup implicit qlen 1000
    link/niciuna 
    inet 10.7.0.2/24 scope global wg0
       valid_lft pentru totdeauna preferred_lft pentru totdeauna
drapel us
@MichaelHampton a adăugat, îmi pare rău.
Tom Yan avatar
drapel in
Utilizați întotdeauna `iptables-save` pentru a vă împărtăși regulile
Tom Yan avatar
drapel in
Vă sugerez să lăsați tabelul „filtru” pentru moment. Mai bine pune `nat` să lucreze așa cum ai dorit mai întâi.
drapel us
@TomYan acum este iptables-save adăugat, filtru de tabel?
Puncte:0
drapel in

Se dovedește a face DNAT asa pt 127.0.0.1 pare a fi imposibil (ei bine, cel puțin pentru cazul IEȘIRE), probabil datorită faptului că 127.0.0.0/8 Sunt de gazdă domeniului sau din motive similare.

Cu toate acestea, următoarele nftables setul de reguli ar trebui să vă ajute să obțineți ceea ce doriți:

rescrie ip tabel {
        deblocare lanț {
                tip route hook ieșire filtru de prioritate; acceptarea politicii;
                ip daddr 127.0.0.1 tcp dport 80 ip daddr set 10.7.0.2 ip saddr set 10.7.0.1
        }

        reluare lanț {
                tip filtru cârlig prioritate de intrare 101; acceptarea politicii;
                ip saddr 10.7.0.2 tcp sport 80 ip saddr set 127.0.0.1 ip daddr set 127.0.0.1
        }
}
table ip realnat {
        lanț de destinație {
                tip filtru prioritar de ieșire nat hook; acceptarea politicii;
                ip daddr 192.168.1.183 tcp dport 80 dnat la 10.7.0.2
        }

        sursă în lanț {
                tip nat hook postrouting priority srcnat; acceptarea politicii;
                ip daddr 10.7.0.2 tcp dport 80 snat la 10.7.0.1
        }
}

În loc să faceți NAT de destinație „corespunzător”, trebuie să faceți un fel de rescriere „ne urmărită” a adresei de destinație (și sursă). Cu ajutorul unui tip traseu lanț, va fi efectuată o nouă căutare a rutei. În plus, va trebui să faceți ca traficurile de răspuns să aibă sursa lor și adresele de destinație se schimbă înapoi la 127.0.0.1 astfel încât răsuci poate recunoaște traficurile.

Cu intrare cârlig, aceasta ar trebui să (adică NETESAT) evitați rescrierile nedorite pentru traficurile care nu sunt pentru gazdă în sine (adică traficurile de răspuns pentru traficurile redirecționate). Pe de altă parte, prioritatea 101 (adică 1 mai mare decat srcnat / toate prioritățile standard) va evita rescrierea nedorită a răspunsurilor care răspund la solicitări care au fost corectate NAT.

După cum puteți vedea, pentru 192.168.1.183 caz, un alt tabel care face NAT'ing normal îl urmează pe cel pentru 127.0.0.1 caz special.

Rețineți că acest set de reguli este doar pentru răsucidin interiorul containerului (sau cel mult, gazda acestuia; nu sunt familiarizat cu containerele și, din câte știu, poate exista o abordare diferită de rețea pentru ele). Dacă, de exemplu, aveți nevoie ca containerul să fie redirecționat pentru alte gazde 192.168.1.0/24, veți avea nevoie de același lucru dnat regulă într-un lanț de tip nat hook prerouting priority dstnat. Redirecționarea IP va trebui, de asemenea, activată și permisă. Și așa cum am spus, NU sunt sigur dacă trucurile de rescriere de mai sus pentru 127.0.0.1 va intra în conflict cu asta.

drapel us
iptables-restore-translate -f rules.txt îmi dă „iptables-translate-restore: linia 1 a eșuat”
Tom Yan avatar
drapel in
`nft -f rules.txt`
drapel us
funcționează bine !!, cum pot folosi asta pentru mai multe porturi? exemplu 80,6060,6061,6062, trebuie să fac aceste reguli pe port sau pot face pentru mai multe porturi?
drapel us
când încerc să sun la 192.168.1.183:6060 de pe alt computer din aceeași rețea, care este din nou inaccesibil :/
Tom Yan avatar
drapel in
Vă rugăm să citiți răspunsul cu mai multă atenție. Am menționat deja ce trebuie făcut suplimentar pentru acest caz. Adaptați/extindeți setul de reguli pentru nevoi ulterioare. Rețineți că lanțurile nu pot avea același nume în același tabel. De asemenea, înainte de a citi noul fișier de reguli cu `nft -f`, rulați `nft flush ruleset` pentru a-l șterge pe cel vechi. Puteți face ca regulile să se aplice și pe mai multe porturi. IIRC puteți folosi ceva de genul `{80, 6060-6062}`. Încercați să găsiți/să citiți câteva documentații ale nftables. Parcurgeți `man nft` ar trebui să vă ajute.

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.