Ten temat zakładam po 8 godzinach szukania i próbowania różnych rozwiązań z anglojęzycznej części Internetu.
Wkrótce będziemy grać w grę, której serwery są od dawna nieaktywne, nie posiada integracji Steam (w związku z tym P2P jest niemożliwe), dedykowanych serwerów nie da się znaleźć. Chcę jednocześnie ograniczyć ilość instalowanego oprogramowania na naszych komputerach.
Maszyna hostująca serwer gry (serwer 1) będzie dynamicznie wybierana (Windows 10). Serwer gry nasłuchuje na 0.0.0.0:27015 protokołu UDP. Połączenie z nią będzie możliwe poprzez publiczny gateway (maszyna z systemem Ubuntu 18.04.4 LTS; serwer 2). Serwer 1 jest połączony z serwerem 2 poprzez OpenVPN. Serwer 1 dostaje w tej sieci 10.0.0.2, serwer 2 - 10.0.0.1. Sieć w obie strony działa.
Mam problem ze znalezieniem właściwych reguł forwardujących pakiety z publicznego interfejsu serwera 2 do interfejsu sieci VPN. Obecne reguły przesyłają pakiet do serwera gry, ale pakiet pytający o połączenie w swoim nagłówku jako adres źródłowy ma ustawiony publiczny adres serwera 2, przez co serwer gry wysyła pakiet odpowiadający przez interfejs internetowy (nie VPN).
Próbowałem takich kwiatków (przegrzebałem o wiele więcej, linkować tego nie warto):
Linux change source ip adress of incoming traffic
iptables: change local source address if destination address matches
How To Forward Ports through a Linux Gateway with Iptables (z odpowiednim dostosowaniem do obecnej sytuacji)
Wpisywałem wszysko, włącznie z irracjonalnymi wartościami i dalej leciał pakiet z publicznym IP serwera 2, i dalej pakiet odpowiadający przez nieprawidłowy interfejs.
Konfigurację forwardingu na serwerze 2 zostawiłem na takim poziomie:
iptables -A INPUT -p udp --dport 7777 -j ACCEPT #openvpn
#iptables -A FORWARD -i ens3 -o tun0 -p udp -m state --state NEW,ESTABLISHED,RELATED --dport 27015 -j ACCEPT
#iptables -A FORWARD -i tun0 -o ens3 -p udp -m state --state ESTABLISHED,RELATED --sport 27015 -j ACCEPT
iptables -A FORWARD -i ens3 -p udp -d 10.0.0.2 --dport 27015 -j ACCEPT
#iptables -A INPUT -p udp --dport 27015 -j ACCEPT
#iptables -t nat -A PREROUTING -i ens3 -p udp -d <publiczne ip serwera 2> --dport 27015 -j DNAT --to-destination 10.0.0.2:27015
iptables -t nat -A POSTROUTING -p udp --destination 10.0.0.2 -j SNAT --to-source 10.0.0.1
#iptables -t nat -A POSTROUTING -o tun0 -p udp --dport 27015 -d 10.0.0.2 -j SNAT --to-source <publiczne ip serwera 2>