Kompletten Netzwerkverkehr per iptables umleiten

Um den kompletten Netzwerkverkehr per iptables zu einer anderen Adresse umzuleiten, muss zunächst die Weiterleitung von IP-Paketen im System aktiviert werden (sysctl -w net.ipv4.ip_forward=1).
Als nächstes aktiviert man die eigentliche Weiterleitung mit folgenden Regeln:
iptables -t nat -A PREROUTING -s 0.0.0.0/0 -p all -j DNAT --to-destination $ipdeszielsystems
iptables -t nat -A POSTROUTING -j MASQUERADE

Bei mir kommt die Umleitung immer dann zum Einsatz, wenn ich einen vServer migriert habe, sich die IP gewechselt hat und nur noch die neuen Einstellungen des DNS-Servers wirksam werden müssen. Dies kann 24h dauern, wodurch Zugriffe auf das alte und neue System erfolgen können. Damit dies nicht passiert, leitet das alte System auf das neue um.
Nachteil: Auch der SSH-Zugriff wird umgeleitet, sodass auf dem Altsystem nur noch per VNC-Konsole über den Host zugegriffen kann. Zudem erscheinen alle umgeleiteten Zugriffe auf dem neuen System mit der IP-Adresse des alten Systems.

Tethering und Cyanogenmod 10.1

Cyanogenmod (und wie es aussieht gibts den Bug auch unter Stock-Android) schleppt einen Bug mit sich sich rum, wodurch WLAN Thethering nicht wirklich möglich ist. Zwar können sich Geräte verbinden, bekommen dann aber keinen Internetzugriff. Die Lösung ist eine fehlende iptables-Regel.
“su -c “iptables -t nat -A natctrl_nat_POSTROUTING -s 192.168.0.0/16 -o rmnet_usb0 -j MASQUERADE”” (leicht abgewandelt für das Nexus 4, die Schnittstelle heißt hier anders, von hier: http://code.google.com/p/android/issues/detail?id=38563#c122)
im Terminal ausgeführt löst das Problem. Ich lasse den Befehl regelmäßig von Tasker aufführen, sonst vergesse ich das garantiert ;-).