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,]