DNS over SSH Tunnel

DNS over SSH Tunnel

Ich möchte mein OSX-System so einrichten, dass der gesamte Netzwerkverkehr über einen SSH-Tunnel erfolgt.

Ich habe zu diesem Zweck ein kleines Skript geschrieben und dies sind die von ihm ausgeführten Befehle:

# setup tunnel
ssh -fN -D 1080 -p 22 user@remote

# start up redsocks
sudo redsocks -c /tmp/redsocks.conf -p /tmp/redsocks.pid

# forward all tcp traffic to tunnel
sudo ipfw add 0010 \
    fwd 127.0.0.1,12345 \
    tcp from me \
    to any not dst-port 12345 \
           not dst-port 1080 \
           not dst-ip REMOTE_IP

Ich verwende Redsocks, um einen HTTP-Proxy für meinen SSH-Tunnel zu erstellen (damit ichalleTCP-Verkehr dorthin über IPFW), sieht redsocks.conf folgendermaßen aus:

base {
    log_debug = on;
    log_info = on;
    log = "file:/tmp/redsocks.log";
    redirector = generic;
}
redsocks {
    local_ip = 127.0.0.1;
    local_port = 55660;
    ip = 127.0.0.1;
    port = 1080;
    type = socks4;
}

Bisher scheint alles zu funktionieren, der gesamte TCP-Verkehr auf meinem OSX-System wird über den SSH-Tunnel abgewickelt, aber das Problem liegt beim UDP-Verkehr und aus diesem Grund funktionieren DNS-Abfragen nicht.

Wie kann ich DNS auf meinem lokalen Computer über den SSH-Tunnel zum Laufen bringen?

Antwort1

Ihre ipfw …Leitung leitet nur TCP-Verkehr weiter. Vielleicht fügen Sie die folgende Zeile hinzu?

sudo ipfw add 0011 fwd 127.0.0.1,12345 \
                   udp from me \
                   to any not dst-port 12345 \
                          not dst-port 1080 \
                          not dst-ip REMOTE_IP

set -xEs ist auch eine gute Idee , (zum Debuggen) und set -e(um sofort abzubrechen, wenn einer der Befehle fehlschlägt) hinzuzufügen .

  • Im Allgemeinen sollte man den Begriff „SSH-Tunneling“ verwenden, wenn man sich auf tun/ tapmit SSH bezieht.
  • Portweiterleitung ist eine spezielle Form des Tunnelns, sollte in diesem Kontext aber dennoch nur als „Portweiterleitung“ bezeichnet werden.
  • Verwenden Sie SSH-Tunneling (wie in -oTunnelund -oTunnelDevice) nur für schnelle Ad-hoc-Jobs.
  • DNS kann TCP als Transportmittel verwenden. Es ist nicht auf UDP beschränkt, obwohl dies diebevorzugtTransport.

Antwort2

VerwendenShuttlestattdessen? sshuttle behauptet, DNS und TCP korrekt zu handhaben, ohne diesen Aufwand – nur die --dnsOption.

Meiner Erfahrung nach schienen mir SOCKS etwas alt und ungeliebt. Und ich verstehe diese Verwendung von ipfw und redsocks nicht wirklich.

Ich möchte jedoch darauf hinweisen, dass SOCKS4 DNS-Tunneling nicht unterstützt. Daher überrascht es mich nicht, dass Sie Probleme haben. Spätere Versionen von SOCKS unterstützen es, also könnten Sie sich das ansehen. Und anscheinend kann SSH SOCKS5 unterstützen.

Antwort3

Besides what you are already using, sSH permits tunneling all IP traffic, independet from the employed layer 4 protocol. Your remote server must have PermitTunnel yes and the client must request a tunnel using the Tunnel directive. Then you can use that new link as your default gateway. See detailed instruction for the tunnel here.

verwandte Informationen