Ich möchte einen Linux-Client (Mint/Ubuntu) so einrichten, dass er Redoscks verwendet, um alle TCP- und UDP-Verbindungen an einen SOCKS5-Proxyserver weiterzuleiten, auf dem Dante auf einem einzigen Port läuft, damit sie über einen Enterprise-Proxy geleitet werden. Bisher habe ich HTTP/HTTPS zu Hause erfolgreich umgeleitet (also ohne den restriktiven Enterprise-Proxy dazwischen), und Tests scheinen teilweisen Erfolg mit UDP zu zeigen. Ich möchte eine vollständige TCP- und UDP-Umleitung sicherstellen, damit alle Dienste, wie NTP, ausgeführt werden können. Eine Umleitung von DNS-Anfragen wäre auch gut.
Die Dante-Konfigurationsdatei ist wie folgt eingestellt, um UDP-Zuordnung mit grundlegender Benutzerauthentifizierung zuzulassen.
# /etc/danted.conf
logoutput: syslog
user.privileged: root
user.unprivileged: nobody
internal: veth0 port=1080
external: veth0
socksmethod: username
clientmethod: none
# Rules
client pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: error connect disconnect
}
client block {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: connect error
}
socks pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
command: bind connect udpassociate
log: error connect disconnect
socksmethod: username
}
socks block {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: connect error
}
socks pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
command: bindreply udpreply
log: error # connect disconnect iooperation
}
Der Sauberkeit halber, da ich mich von Vorlagen inspirieren lasse, verstehe ich nicht wirklich die Notwendigkeit für dieClient-BlockUndSockenblockRegeln. Sie scheinen nichts zu ändern, wenn sie auskommentiert sind. Ich verstehe auch nicht, warum ich sie wieder zurückschreiben soll.socksmethod:Benutzernamein der Socks-Pass-Regel, wenn global definiert. Das Auskommentieren hat keine Auswirkung.
Auf dem Client lautet die Redsocks-Konfigurationsdatei wie folgt
base {
log_debug = off;
log_info = on;
log = "syslog:daemon";
daemon = on;
user = redsocks;
group = redsocks;
redirector = iptables;
}
redsocks {
local_ip = 127.0.0.1;
local_port = 12345;
ip = myproxyserverIP;
port = 1080;
type = socks5;
login = myproxyuser;
password = myproxypassword;
}
redudp {
local_ip = 127.0.0.1;
local_port = 12345;
ip = myproxyserverip;
port = 1080;
login = myproxyuser;
password = myproxypassword;
dest_ip = 8.8.8.8;
dest_port = 53;
udp_timeout = 30;
udp_timeout_stream = 180;
}
dnstc {
// fake and really dumb DNS server that returns "truncated answer" to
// every query via UDP, RFC-compliant resolver should repeat same query
// via TCP in this case.
local_ip = 127.0.0.1;
local_port = 5300;
}
Dann verwende ich iptables, um 80 und 443 zu Redsocks umzuleiten, sowohl in TCP als auch in UDP. Außerdem füge ich UDP 5002 für den iperf-Testserver hinzu.
*nat
:PREROUTING ACCEPT [26:3850]
:INPUT ACCEPT [2:178]
:OUTPUT ACCEPT [8:3456]
:POSTROUTING ACCEPT [10:6452]
:REDSOCKS - [0:0]
-A PREROUTING -p tcp -m tcp --dport 443 -j REDSOCKS
-A PREROUTING -p tcp -m tcp --dport 80 -j REDSOCKS
-A PREROUTING -p udp -m udp --dport 443 -j REDSOCKS
-A PREROUTING -p udp -m udp --dport 80 -j REDSOCKS
-A PREROUTING -p udp -m udp --dport 5002 -j REDSOCKS
-A OUTPUT -p tcp -m tcp --dport 443 -j REDSOCKS
-A OUTPUT -p tcp -m tcp --dport 80 -j REDSOCKS
-A OUTPUT -p udp -m udp --dport 443 -j REDSOCKS
-A OUTPUT -p udp -m udp --dport 80 -j REDSOCKS
-A OUTPUT -p udp -m udp --dport 5002 -j REDSOCKS
-A REDSOCKS -d 0.0.0.0/8 -j RETURN
-A REDSOCKS -d 10.0.0.0/8 -j RETURN
-A REDSOCKS -d 127.0.0.0/8 -j RETURN
-A REDSOCKS -d 169.254.0.0/16 -j RETURN
-A REDSOCKS -d 172.16.0.0/12 -j RETURN
-A REDSOCKS -d 192.168.0.0/16 -j RETURN
-A REDSOCKS -d 224.0.0.0/4 -j RETURN
-A REDSOCKS -d 240.0.0.0/4 -j RETURN
-A REDSOCKS -p tcp -j REDIRECT --to-ports 12345
-A REDSOCKS -p udp -j REDIRECT --to-ports 12345
COMMIT
*filter
:INPUT ACCEPT [4510:4209873]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [6689:7022488]
COMMIT
Von da an scheint es zu funktionieren. Das Surfen im Internet funktioniert, wenn ich
curl ifconfig.co
Ich erhalte die Adresse des Proxyservers.
Wenn ich versuche, die UDP-Verbindung zu testen,
iperf -c speedtest.serverius.net -u -p 5002
und versuche, aktive UDP-Verbindungen anzusehen (obwohl zustandslos)
ss -u -pa
Ich sehe, dass eine UDP-Verbindung zu meinem Proxy-Server besteht, obwohl diese an den Ports 48066 und 48610 und nicht 1080 gemeldet werden. Ich sehe auch eine direkte Verbindung zum Serverius-Testserver, Portangabe RFE? Kann mir das jemand erklären?
Wenn ich versuche, etwas brutaler vorzugehen und iptables anzuweisen, den gesamten Datenverkehr umzuleiten, funktioniert nichts mehr und ich bekomme keine Verbindung zu irgendetwas. Ich muss etwas sehr falsch machen.
*nat
:PREROUTING ACCEPT [26:3850]
:INPUT ACCEPT [2:178]
:OUTPUT ACCEPT [8:3456]
:POSTROUTING ACCEPT [10:6452]
:REDSOCKS - [0:0]
-A PREROUTING -p tcp -m tcp -j REDSOCKS
-A PREROUTING -p udp -m udp -j REDSOCKS
-A OUTPUT -p tcp -m tcp -j REDSOCKS
-A OUTPUT -p udp -m udp -j REDSOCKS
-A REDSOCKS -d 0.0.0.0/8 -j RETURN
-A REDSOCKS -d 10.0.0.0/8 -j RETURN
-A REDSOCKS -d 127.0.0.0/8 -j RETURN
-A REDSOCKS -d 169.254.0.0/16 -j RETURN
-A REDSOCKS -d 172.16.0.0/12 -j RETURN
-A REDSOCKS -d 192.168.0.0/16 -j RETURN
-A REDSOCKS -d 224.0.0.0/4 -j RETURN
-A REDSOCKS -d 240.0.0.0/4 -j RETURN
-A REDSOCKS -p tcp -j REDIRECT --to-ports 12345
-A REDSOCKS -p udp -j REDIRECT --to-ports 12345
COMMIT
*filter
:INPUT ACCEPT [4510:4209873]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [6689:7022488]
COMMIT
Ich wäre für Ihre Hilfe sehr dankbar, mein Gehirn schmilzt :p Danke, Nicolas
Antwort1
Ich denke, Sie haben in der Dante-Konfiguration alle Verbindungen blockiert, wie in
client block {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: connect error
}