Trotz guter Planung und der Verwendung von DNS Einträgen statt IP Adressen lässt es sich bei einem Serverumzug oder einer Migration bei der die IP des neuen Host ändert fast nicht vermeiden dass ein Teil des Traffics vorübergehend noch auf dem alten Server landet. Um die Folgen davon zu eliminieren bzw. abzuschwächen kann dieser Traffic mittels iptables weitergeleitet werden.
Den Ausschlag diese kleine Anleitung zu schreiben hat der Umzug unseres Teamspeak 3 Servers auf einen neuen Host gegeben. Da der TS3 Server mit einer NPL Lizenz zwar grundsätzlich auf mehreren authorisierten IP Adressen läuft, aber jeweils nur auf einer gleichzeitig konnte der präferenzierte Plan mit einem Parallelbetrieb in einer Übergangsphase nicht umgesetzt werden. Deshalb soll der TS3 Server nur noch auf der neuen Infrastruktur laufen und für Clients welche auf die alte IP verbinden wird der Traffic automatisch vom alten Host zwischen TS3 Client und neuem TS3 Server "durchgeschleust".
Was dabei beachtet werden muss:
- Der User bemerkt nicht dass er weitergeleitet wurde, ihm wird im Teamspeak 3 Server immer noch die alte IP auf welche er connected hat angezeigt
- Für den neuen Host haben alle weitergeleiteten Pakete den alten Host als Absender und nicht die des Endusers
oder
iptables -A PREROUTING -t nat -i eth0 -p udp --dport 9987 -j DNAT --to-destination 10.10.100.100:9987
iptables -A FORWARD -p udp -d 10.10.100.100 --dport 9987 -j ACCEPT
iptables -A POSTROUTING -t nat -j MASQUERADE
Bei mehreren Ports einfach Zeilen 1+2 ensprechend angepasst erneut ausführen.
Für andere Dienste/Anwendungszwecke müssen In- und Output Adressen ggf. angepasst werden. Statt eth0 als Input kann z.B auch eine IP verwendet werden oder der Traffic auch auf einen Zielport welcher ungleich dem Quellport ist weitergeleitet werden. Das Protokoll, in diesem Fall UDP muss natürlich auch stimmen. Es kann auch komplett aller Traffic portunabhängig weitergeleitet werden, aber aufpassen dass ihr euch nicht selber aussperrt dadurch
Falls Kernel Module fehlen:
Networking Support -> Networking Options -> Network packet filtering framework (Netfilter) -> Core Netfilter Configuration -> -*- Netfilter Xtables support (required for ip_tables)
und
Networking Support -> Networking Options -> Network packet filtering framework (Netfilter) -> IP: Netfilter Configuration -> <*> IP tables support (required for filtering/masq/NAT)
Dies äussert sich durch Fehlermeldungen wie
iptables v1.6.1: can't initialize iptables table `nat': Table does not exist (do you need to insmod?) Perhaps iptables or your kernel needs to be upgraded.
beim anlegen der Rules.