Re: Idee zur TCP-Paket-Manipulation gesucht
Am 19.11.2013 21:14, schrieb Heiko Schlittermann:
ich bin mir nicht sicher, ob ich alles korrekt verstanden habe…
Schau' mer mal...
Du kannst also nicht den Zielport modifizieren? Dann kannst Du auf dem
Kompressions-Rechner aber sehr viele Adressen haben. Dein
Kompressions-Script kann die Adresse, unter der er kontaktiert wurde,
abfragen. Daraus kann er dann ableiten, zu welchem Zielsystem er sich
verbinden muss.
Nein, genau das will ich eben nicht, weil es nicht skaliert.
Jedes neue Zielsystem heißt dann neue Konfiguration auf Pack- und evtl.
auch Entpackserver, und auf dem Absendesystem.
Ich möchte, dass alle absendenden Systeme im LAN 1 an alle Zielsysteme
im LAN 2 Pakete schicken können, ohne dass man da was konfigurieren
muss. Die sollen einfach alle meinen, sie reden mit dem Zielsystem, weil
sie das Datenpaket ja an dessen IP und dessen Standardport geschickt haben.
Hat auch den Vorteil, wenn man meint, die Kompression verursacht Fehler,
dann steckt man den Kasten einfach aus bzw. nimmt die Regel aus dem
Regelwerk und leitet die Pakete 1:1 durch.
[...]
Das klappt so lange, wie es nur ein Zielsystem gibt und man die IP
daher hart ins Entpackskript eincodieren kann.
Du meinst sicher das Einpack-Script, oder?
Nein, das Entpack-Skript. So lange es nur ein Zielsystem gibt, entpackt
der Entpack-Server in LAN2 das Paket und schiebt es auf die im
entpackskript hart eincodierte Ziel-IP.
Aber wie gesagt, es wäre auch möglich, die IP im gepackten Paket
mitzugeben - wenn ich sie in LAN 1 irgendwie abfragen kann. Der Teil vor
dem Bindestrich im vorigen Satz ist trivial, der dahinter nicht. ;-)
Geht es auch irgendwie eleganter, so dass das auch für n>1
…
Wenn es per iptables/ebtables geht, sind die zwei zentralen Fragen wohl:
1) Wie greife ich das Paket ab und leite es an mein
Komprimierungsskript weiter?
2) Wie komme ich an die Ziel-IP, die der Absender eigentlich
erreichen wollte, so dass ich sie ebenfalls an das Skript übergeben
kann?
Wie oben beschrieben, indirekt über ein Ziel-IP >Port-Mapping, oder
Ziel-IP->lokale-IP Mapping.
Wie gesagt, das skaliert nicht, weil es ein manueller Eingriff bei jeder
Erweiterung ist.
Ich will (sinngemäß und in Pseudocode):
myPort='4223'
If $Port = $myPort {
cat $Data | compressor.sh $DestinationIP
DoNotRouteOriginalPacketTo($DestinationIP)
}
compressor.sh würde dann von STDIN die Daten einlesen und komprimieren,
dabei die Ziel-IP aus den Parametern lesen und mit einpacken, und das
als "Gesamtpaket" an das Entpacksystem senden.
Dabei wäre es dann egal, an welche IP das Paket gehen soll, es passiert
automagisch immer das richtige, ohne dass man eine neue Regel einstellen
muss, wenn neue Ziel-IPs dazukommen.
Dass so was prinzipiell mit iptables geht, sieht man ja bei HTTP und dem
transparenten Proxy. Nur dass dort, soweit ich weiß, im Datenstrom noch
mal die Information steckt, wo der Aufruf hingehen soll ("GET
http://foobar.com/ HTTP/1.0"), was die Sache natürlich einfacher macht.
Oder iptables mit TPROXY-Target kann Dein Freund werden. Gemeinsam mit
dem redir-Paket.
--verbose, bitte. :-)
Gruß
Stefan
Reply to: