web-dev-qa-db-ja.com

DNS overSSHトンネル

すべてのネットワークトラフィックがSSHトンネルを介して行われるようにOSXシステムをセットアップしたいと思います。

私はこの目的のために小さなスクリプトを書きました、そしてこれらはそれによって実行されるコマンドです:

// 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

Redsocksを使用してssh-tunnelにhttpプロキシを作成します(ipfwを介してalltcpトラフィックを転送できるようにします)、redsocks.confはこのような:

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;
}

これまでのところすべてが機能しているようです。OSXシステムのすべてのTCPトラフィックはsshトンネルを介して行われますが、問題はUDPトラフィックにあり、そのためDNSクエリが機能していません。

ローカルマシンのDNSをSSHトンネル経由で機能させるにはどうすればよいですか?

6
Cihan Keser

ipfw …行はTCPトラフィックのみを転送します。次の行を追加しますか?

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 -x(デバッグ用)とset -e(いずれかのコマンドが失敗した場合にすぐに失敗する)を追加することもお勧めします。

  • SSHでtun/tapを指すには、一般に「SSHトンネリング」という用語を使用する必要があります。
  • ポートフォワーディングは特定の形式のトンネリングですが、このコンテキストでは「ポートフォワーディング」とのみ呼ばれる必要があります。
  • 迅速なアドホックジョブを除いて、SSHトンネリングを使用しないでください(-oTunnelおよび-oTunnelDeviceのように)。
  • DNSはTCPをトランスポートとして使用できます。UDPに制限されていませんが、それはpreferredトランスポートです。
3
pilona

代わりに シャトル を使用しますか?シャトルはDNSとTCPを正しく処理し、この量のいじりをせずに---dnsオプション。

IME SOCKSは少し古く、愛されていないようでした。そして、私はipfwとredsocksのこの使用法を本当に理解していません。

ただし、SOCKS4はDNSのトンネリングをサポートしていないため、問題が発生していることは驚きではありません。 SOCKSの後続のバージョンはそれをサポートしているので、それを見ることができます。 そして明らかにSSHはSOCKS5をサポートできます

3
sourcejedi

すでに使用しているものに加えて、sSHは、採用されているレイヤー4プロトコルから独立して、すべてのIPトラフィックのトンネリングを許可します。リモートサーバーにはPermitTunnel yesが必要であり、クライアントはTunnelディレクティブを使用してトンネルを要求する必要があります。次に、その新しいリンクをデフォルトゲートウェイとして使用できます。ここで トンネルの詳細な手順を参照してください。

1
user1129682