Ich versuche, ein japanisches Karaoke-Spiel auf einer PS3 zu spielen, aber die Latenz ist einfach horrend und das Herunterladen von Songs dauert ewig. Eine Empfehlung war, meinen Laptop in einen SOCKS-Proxy zu verwandeln, indem ich mich über OpenSSH beim Server meines Freundes in Japan anmeldete.
[server] ---- (ssh tunnel) --- [wlan0 <laptop> eth0] --- [PS3]
So habe ich es gemacht:
ssh -ND 4711 login@friend.server
In diesem Moment habe ich versucht, mit Firefox (mit SOCKS-Proxyeinstellungen) von meinem Laptop aus auf google.com zuzugreifen, und ich wurde zu google.co.jp weitergeleitet. Toll.
Dann wollte ich meine PS3 über Ethernet mit meinem Laptop verbinden.
Ich habe eth0 zuerst eine statische IP zugewiesen mit:
ip link set dev eth0 up
ip addr add 139.96.30.100/24 dev eth0
Ich habe dann einen DHCP-Server auf meinem Laptop gestartet, um der PS3 eine IP zu geben:
systemctl start dhcp4.service
Und schließlich habe ich NAT mit etwas iptables magic aktiviert:
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
Ich ging zu "Netzwerkeinstellungen" und testete die Verbindung von meiner PS3 und schön, es schien zu funktionieren. Ich habe den Webbrowser gestartet und google.com wurde zu google.fr umgeleitet. Wie blöd, ich habe vergessen die Verbindung an den richtigen Port weiterzuleiten.
Nach vielen Verbindungsweiterleitungen über nicht funktionierende iptables habe ich mich für einen transparenten Proxy entschieden: redsocks. http://darkk.net.ru/redsocks/
Nach der Installation habe ich /etc/redsocks.conf an meine Bedürfnisse angepasst:
redsocks {
local_ip=0.0.0.0; // documentation says: "use 0.0.0.0 if you want to listen on every interface"
local_port=31388;
ip=127.0.0.1;
port=4711;
}
Der Rest wurde wie in https://github.com/darkk/redsocks/blob/master/redsocks.conf.example ausgelassen
Ich habe die grundlegenden redsocks.rules verwendet, die in dem Paket enthalten sind, das ich installiert habe:
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:REDSOCKS - [0:0]
# Redirect all output through redsocks
-A OUTPUT -p tcp -j REDSOCKS
# Whitelist LANs and some other reserved addresses.
# https://en.wikipedia.org/wiki/Reserved_IP_addresses#Reserved_IPv4_addresses
-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
# Redirect everything else to redsocks port
-A REDSOCKS -p tcp -j REDIRECT --to-ports 31338
COMMIT
Dadurch konnte ich die Verwendung der SOCKS-Proxy-Einstellungen unter Firefox und luakit einstellen, was ich durch die Umwandlung von google.com in den google.co.jp-Test bestätigt habe.
Ich dachte, ich müsste noch NAT aktivieren, also habe ich Folgendes geändert:
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
Die PS3 hat anscheinend den systemweiten Proxy umgangen und google.com wurde auf google.fr umgeleitet. Ich habe dann die redsocks.rules-Datei so verwendet, als ob sie nicht maskiert wäre. Ich glaubte, dass ich NAT sowieso nicht brauchen würde, da der Redsocks-Server anscheinend auf jeder Schnittstelle lauscht.
Ich habe versucht, die PS3 erneut zu verbinden, und die folgende Meldung erhalten (nachdem die PS3 eine IP-Adresse von meinem DHCP-Server bezogen und keine Internetverbindung hergestellt hat):
"Während der Kommunikation mit dem Server ist ein Fehler aufgetreten. Dies ist ein DNS-Fehler."
Dort bin ich gerade. Ich denke, es könnte ein Problem mit Redsocks sein, da es einen DNS-Server namens dnstc verwendet, der dies gemäß der Dokumentation tut:
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;
}
Meine wilde Vermutung ist, dass meine PS3 DNS-Auflösung über UDP anfordert und dass dnstc die ganze Zeit mit "abgeschnittener Antwort" antwortet. Wenn ich es richtig verstehe, sollte es die Anfrage erneut über TCP senden, aber anscheinend wird stattdessen ein DNS-Fehler erzeugt?
Was soll ich machen? Oder genauer:
- Sind Redsocks unnötig? Bin ich nur ein Analphabet?
- Sollte ich einen DNS-Server installieren und die DNS-Anforderungen weiterleiten? Wenn das so ist, wie?
Vielen Dank, dass Sie diese Textmauer gelesen haben! Hoffe, es ist nicht zu viel für eine erste Frage saugen ...