Puncte:1

Configurarea corectă a iptables pentru două straturi de redirecționare porturi: server extern conectat la serverul local prin VPN

drapel ru

Aveam un server Minecraft care rulează pe un VPS (Debian 10), dar VPS-ul era prea mic pentru a-l gestiona, așa că am vrut să folosesc un server local mai robust pentru al rula (Ubuntu 22.04). VPS-ul găzduiește un server OpenVPN, iar serverul local se conectează ca singur client. VPS-ul este la 10.8.0.1, iar serverul local este la 10.8.0.6 (192.168.1.185 pe rețeaua locală).

Am folosit regulile iptables pentru a redirecționa pachetele VPN tun0 la 10.8.0.6:25565 către IP-ul serverului local. Funcționează bine: pot interoga serverul Minecraft de la VPS. Apoi am configurat același set de reguli (cu IP-urile relevante schimbate desigur) pe VPS pentru a redirecționa conexiunile de la vps_external_ip:25565 la 10.8.0.6:25565. Această regulă este redirecționarea pachetelor până la serverul local, dar conexiunea expiră întotdeauna. Lucrul ciudat este că nici conexiunile de lucru de la VPS -> server local, nici extern -> VPS -> server local nu măresc contoarele de pachete ale niciunei reguli POSTROUTING MASQUERADE, dar o fac pentru regulile PREROUTING. Conexiunile TCP/UDP pur și simplu expiră atunci când accesează VPS-ul pe eth0:25565, nu există erori de conexiune refuzată.

Redirecționarea IPV4 este activată pe ambele mașini și am încercat cu UFW dezactivat, fără noroc acolo.

Am configurat o regulă de jurnal pe NAT POSTROUTE ale ambelor servere, dar nu sunt foarte sigur cum să rezolv problema, deoarece nu am găsit niciuna.

Ieșire jurnal POSTROUTE (iptables -t nat -I POSTROUTING -j LOG --log-prefix "NAT:" --log-level 7)

##### VPS
Apr 23 20:52:02 vpskernel: [1552376.122382] NAT1:IN= OUT=tun0 SRC=<ip-ul meu> DST=10.8.0.6 LEN=48 TOS=0x08 PREC=0x20 TTL=114 ID=21284 ID=21284 SDF PROTO=CPPT =1806 DPT=25565 WINDOW=64240 RES=0x00 SYN URGP=0

#### Server local
<nu s-a putut găsi niciun jurnal relevant grepping /var/log/kern.log pentru NAT1 și nu au existat jurnalele deloc pentru tun0>

Am folosit /etc/ufw/before.rules pentru fiecare server pentru a configura regulile iptables.
VPS /etc/ufw/before.rules:

# START REGULILE OPENVPN
# reguli de masă NAT
*nat
:ACCEPTAREA PRE-ROUTARE [0:0]
: POSTROUTING ACCEPT [0:0]
# Permiteți traficul de la clientul OpenVPN către eth0
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
# Terminați REGULILE OPENVPN

-A PREROUTING -i eth0 -d <vps external IP> -p tcp --dport 25565 -j DNAT --to-destination 10.8.0.6:25565
-A PREROUTING -i eth0 -d <vps external IP> -p udp --dport 25565 -j DNAT --to-destination 10.8.0.6:25565
-A POSTOUTING -s 10.0.0.0/8 ! -d 10.0.0.0/8 -j MASCARAT
COMMIT

Serverul local /etc/ufw/before.rules:

*nat
:ACCEPTAREA PRE-ROUTARE [0:0]
: POSTROUTING ACCEPT [0:0]
-A PREROUTING -i tun0 -d 10.8.0.6 -p tcp --dport 25565 -j DNAT --to-destination 192.168.1.185:25565
-A PREROUTING -i tun0 -d 10.8.0.6 -p udp --dport 25565 -j DNAT --to-destination 192.168.1.185:25565
# configurați rutarea
-A POSTROUTING -s 192.168.1.0/24 ! -d 192.168.1.0/24 -j MASCARAT
COMMIT

Regulile PREROUTING funcționează, dar contoarele pentru regulile POSTROUTING nu cresc.

Am rulat tcpdump pe 25565 pentru a depana. Văd pachetele care vin, dar nu văd nicio revenire pe nicio interfață atunci când mă conectez extern. Când interog direct de la VPS, văd că serverul local răspunde pe tun0. Se pare că problema este că serverul local încearcă să răspundă direct la IP-ul meu de pe en01 în loc de la VPS-ul de pe tun0, dar nu sunt sigur cum să rezolv asta.

VPS tcpdump:

# et 0
21:43:39.972647 IP my_ip.2729 > vps_ip.25565: Flags [S], seq 1483515507, win 64240, options [mss 1460,nop,nop,sackOK], lungime 0
# tun0
21:43:39.972739 IP my_ip.2729 > 10.8.0.6.25565: Flags [S], seq 1483515507, win 64240, options [mss 1460,nop,nop,sackOK], lungime 0

Server local tcpdump:

#tun0
21:43:39.972566 IP my_ip.2729 > 10.8.0.6.25565: Flags [S], seq 1483515507, win 64240, options [mss 1356,nop,nop,sackOK], lungime 0

#en01
21:43:39.972618 IP 10.8.0.6.25565 > my_ip.2729: Flags [S.], seq 2141764446, ack 1483515508, win 64240, options [mss 1460p, nock length, 0ckp,]

Puncte:0
drapel ru

În sfârșit mi-am dat seama. Majoritatea ghidurilor de redirecționare a porturilor online au avut o regulă de POSTROUTING care nu funcționează pentru OpenVPN (sau pentru situația mea). În loc să permit IP-urile locale ca sursă cu o destinație care nu era un IP local, a trebuit să fac regula de postrouting pentru orice altceva decât pentru un IP local pentru a fi rescris ca un IP VPS tun0.

VPS /etc/ufw/before.rules (s și d schimbate):
-A POSTOUTING -d 10.0.0.0/8 ! -s 10.0.0.0/8 -j MASQUERADE -t nat

În plus, regula POSTROUTING a fost necesară doar pe VPS.

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.