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
/ tap
Schnittstellen 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 eth0
ist die Eingangsschnittstelle (LAN) und 9040
ist 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-nat
und wie es in physischen Routern zu funktionieren scheint, dst-nat
nimmt Chain Takes dst-port
und 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:8080
das sehen weitere Ketten in der IP-Paketflussspur (z. B. filter
Tabelle), 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 redirect
im Grunde dasselbe sei wie dst-nat
bei der dst-addr
Einstellung 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 DNAT
keinen Einfluss darauf, welche lokalen Anwendungen empfangen werden? Oder ist es spezifisches Verhalten der REDIRECT
Richtlinie?
192.168.1.1:9040
in 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 ... MagieAntworten:
Sehen Sie sich diese Antwort an: Woher weiß ein transparenter SOCKS-Proxy, welche Ziel-IP verwendet werden soll?
Zitat:
iptables überschreibt die ursprüngliche Zieladresse, merkt sich jedoch die alte. Der Anwendungscode kann ihn dann abrufen, indem er nach einer speziellen Socket-Option fragt
SO_ORIGINAL_DST
.quelle
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/24
und IP-Adresse :) lautet,192.168.1.1
und 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.1
dann.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
quelle