Was macht iptables -j REDIRECT * tatsächlich * mit Paket-Headern?

7

Aus Neugier lese ich einige Tutorials über transparente TOR-Proxys, da dies vom Standpunkt des Netzwerks aus ein recht interessantes Thema ist. Im Gegensatz zu VPN-Gateways, die nur tun/ tapSchnittstellen verwenden und für mich völlig klar sind, verwendet der TOR-Proxy einen einzelnen Port. Alle Tutorials wiederholen die magische Linie:

iptables -t nat -A PREROUTING -i eth0 -p tcp --syn -j REDIRECT --to-ports 9040

Wo eth0ist die Eingangsschnittstelle (LAN) und 9040ist ein TOR-Port. Die Sache ist, ich verstehe überhaupt nicht, warum so etwas vom Standpunkt der Vernetzung überhaupt Sinn macht.

Nach meinem Verständnis von redirect/ chain dst-natund wie es in physischen Routern zu funktionieren scheint, dst-natnimmt Chain Takes dst-portund dst-addr BEVOR die Routing-Entscheidung getroffen wird und ändert sie in etwas anderes. Also zum Beispiel:

  • vorher dst-nat:192.168.1.2:46364 -> 88.88.88.88:80
  • nachher dst-nat:192.168.1.2:46364 -> 99.99.99.99:8080

Und 99.99.99.99:8080das sehen weitere Ketten in der IP-Paketflussspur (z. B. filterTabelle), und so sieht das Paket von nun an beispielsweise nach dem Verlassen des Geräts aus.

Nun behaupteten viele Leute im Internet (einschließlich dieses Stapelaustauschs), dass dies redirectim Grunde dasselbe sei wie dst-natbei der dst-addrEinstellung der lokalen Adresse der Schnittstelle. In diesem Licht gilt diese Regel:

iptables -t nat -A PREROUTING -i eth0 -p tcp --syn -j REDIRECT --to-ports 9040

macht eindeutig keinen Sinn. Wenn es so funktionieren würde, würde TOR alle Pakete mit Ziel erhalten 127.0.0.1:9040. Für typische Anwendungen, bei denen die App ein Paket entgegennimmt und irgendwie darauf reagiert (z. B. Webserver), ist dies absolut sinnvoll, da ein solcher Serverprozess ohnehin das endgültige Ziel des Pakets ist und es in Ordnung ist, dass die Zieladresse localhost ist. Aber der TOR-Router ist gut ... ein Router, der das ursprüngliche Ziel des Pakets kennen muss. Vermisse ich etwas Hat dies DNATkeinen Einfluss darauf, welche lokalen Anwendungen empfangen werden? Oder ist es spezifisches Verhalten der REDIRECTRichtlinie?

Lapsio
quelle
Ich habe Demo installiert und es funktioniert. Was mehr ist - Ich habe den NodeJS-Server anstelle von Tor eingerichtet und er wird 192.168.1.1:9040in den Verbindungsdetails wirklich als Ziel angezeigt, sodass ich keine Ahnung habe, woher der Tor-Proxy weiß, was das tatsächliche Ziel des Pakets ist ... Es ist vollständig ... Magie
Lapsio

Antworten:

0

Tatsächlich haben Sie Recht mit TOR. Jedes empfangene TCP-Paket wird an localhost umgeleitet: 9040.

Das Ziel REDIRECT ist ein spezieller Typ des DNAT-Ziels, der die IP-Adresse in die lokale Schnittstelle ändert und dem von Ihnen angegebenen Port zuordnet.

Angenommen, es gibt einen Router, dessen LAN-Schnittstelle eth0(mit Netzwerk- 192.168.1.0/24und IP-Adresse :) lautet, 192.168.1.1und die iptables-Regel für diesen Router lautet:

iptables -t nat -A PREROUTING -i eth0 -p tcp --syn -j REDIRECT --to-ports 9040

dann würden alle TCP-Pakete von den Clients innerhalb des LANs umgeleitet 192.168.1.1:9040.

Angenommen, es besteht eine TCP-Verbindung vom Client (mit IP-Adresse 192.168.1.2) innerhalb des LAN zu google.com (angenommen, IP :) 8.8.1.1dann.

rohe Anfrage: 192.168.1.2:12345 -> 8.8.1.1:80

nach der Prerouting-Kette des Routers: 192.168.1.2:12345->192.168.1.1:9040

Jichao
quelle