
Ich versuche, den Datenverkehr von einem lokalen Port über SSH an einen Remotecomputer weiterzuleitenProxy(kein Tunnel). Ich habe gelernt, dass dies nicht nur mit iptables-Regeln möglich ist (bitte korrigieren Sie mich, wenn das nicht stimmt), also habe ich REDSOCKS so eingerichtet, dass TCP-Verbindungen zum SSH-SOCKS-Proxy umgeleitet werden.
Ich habe es geschafft, den lokalen Datenverkehr mit iptables-Regeln in der OUTPUT-Kette zum Remote-Computer zu transportieren, aber das gleiche Konzept im PREROUTING funktioniert nicht. Das Ziel besteht darin, dass der lokale Computer das externe Internet so sieht, wie es im Netzwerk des Remote-Computers wäre (wie ein VPN).
---------- --------------
| inside | <-- 10.0.0.0/24 --> |-> iptables |
---------- | | |
| ˇ |
| redsocks |
| | |
| ˇ | ----------
| ssh -> | <-- internet --> | remote |
-------------- ----------
Hinweis: Ich möchte auf dem Remote-Computer nichts tun (Konfiguration ändern, Routen hinzufügen)!
SSH-Verbindung mit hergestellt ssh -D 1337 user@remote
.
Redsocks ist bereits konfiguriert und gestartet und lauscht auf Port 12345
.
auf der mittleren Maschine:
OUTSIDE_INTERFACE=wlan0
INSIDE_INTERFACE=eth0
SSH_SOCKS_PORT=1337
REDSOCKS_PORT=12345
# set the ip address
ifconfig $INSIDE_INTERFACE 10.0.0.1 netmask 255.255.255.0
# enable ip forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
# reset iptables
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -F
iptables -F
iptables -X
# redirect local traffic, except traffic from redsocks to ssh
iptables -t nat -A OUTPUT -p tcp --dport $SSH_SOCKS_PORT -j RETURN
iptables -t nat -A OUTPUT -p tcp -j REDIRECT --to-ports $REDSOCKS_PORT
# redirect traffic from inside
iptables -t nat -A PREROUTING -p tcp -j REDIRECT --to-ports $REDSOCKS_PORT
Danach wird der Verkehr von der lokalen Maschine umgeleitet und ich sehe das Internet, als wäre ich im Remote-Netzwerk!
Aber die Maschine im Innerenkann nichtZugang zum Internet.
(Die IP-Adresse auf deminnenMaschine bereits eingestellt, getestet mit erfolgreichem Ping.)
Ich habe es versucht:
iptables -t nat -A PREROUTING -s 10.0.0.0/24 -p tcp -j REDIRECT --to-ports 12345
- Hinzufügen
iptables -t nat -A POSTROUTING -o $OUTSIDE_INTERFACE -j MASQUERADE
Wenn ichnurdie iptables -t nat -A POSTROUTING -o $OUTSIDE_INTERFACE -j MASQUERADE
Regel festlegenallein, kann die interne Maschine auf das Internet zugreifen (aber nicht über den Proxy).
Nach dem Verbindungsversuch werden mir die folgenden Statistiken angezeigt:
# iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 10 packets, 641 bytes)
pkts bytes target prot opt in out source destination
42 2184 REDIRECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 redir ports 12345
Chain INPUT (policy ACCEPT 43 packets, 2244 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 19 packets, 1164 bytes)
pkts bytes target prot opt in out source destination
18 1080 RETURN tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:1337
18 1080 REDIRECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 redir ports 12345
Chain POSTROUTING (policy ACCEPT 46 packets, 2825 bytes)
pkts bytes target prot opt in out source destination
So wie ich es verstehe, bedeutet das, dass die Pakete von der internen Maschine ebenfalls umgeleitet werden, dann aber irgendwo verloren gehen ...
Außerdem habe ich einige Fragen
iptables -t nat -A OUTPUT -p tcp -j REDIRECT --to-ports $REDSOCKS_PORT
warum wird der SSH-Verkehr nicht durch die Regel umgeleitet ? Ich habe nur den$SSH_SOCKS_PORT
Port gefiltert ...
Antwort1
Ok, das Problem lag nicht an den iptables-Regeln, oder zumindest nicht hauptsächlich.
Iptables REDIRECTMach Folgendes:
Es leitet das Paket an die Maschine selbst weiter, indem es die Ziel-IP auf die primäre ändertAdresse der eingehenden Schnittstelle(lokal generierte Pakete werden der Adresse 127.0.0.1 zugeordnet).
Und Redsocks hören standardmäßig nur auf Pakete, die an127.0.0.1, sodass Pakete mit dem Ziel einer Schnittstellenadresse nicht bei Redsocks ankommen.
Nach der Änderung der Redsocks-Konfiguration auflocal_ip = 0.0.0.0;
es funktionierte.
(Hinweis: Dies gilt nur für TCP. Für UDP (wie DNS) sind weitere Einstellungen erforderlich.)
Antwort2
Je nach Ihrer Situation müssen Sie nur Redsocks bis 10.0.0.1 überwachen, dann beispielsweise REDIRECT oder DNAT
iptables -t nat -A PREROUTING -p tcp -m tcp --syn -j DNAT --to 10.0.0.1:12345
Ich hatte das gleiche Problem wie Sie. Ich war von OUTPUT verwirrt und hörte ständig auf 127.0.0.1 zu.
Referenz:Weiterleiten einer VPN-Verbindung zu einem Socks-Proxy auf demselben Server