すべてのネットワークトラフィックが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トンネル経由で機能させるにはどうすればよいですか?
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
(いずれかのコマンドが失敗した場合にすぐに失敗する)を追加することもお勧めします。
tun
/tap
を指すには、一般に「SSHトンネリング」という用語を使用する必要があります。-oTunnel
および-oTunnelDevice
のように)。代わりに シャトル を使用しますか?シャトルはDNSとTCPを正しく処理し、この量のいじりをせずに---dns
オプション。
IME SOCKSは少し古く、愛されていないようでした。そして、私はipfwとredsocksのこの使用法を本当に理解していません。
ただし、SOCKS4はDNSのトンネリングをサポートしていないため、問題が発生していることは驚きではありません。 SOCKSの後続のバージョンはそれをサポートしているので、それを見ることができます。 そして明らかにSSHはSOCKS5をサポートできます 。
すでに使用しているものに加えて、sSHは、採用されているレイヤー4プロトコルから独立して、すべてのIPトラフィックのトンネリングを許可します。リモートサーバーにはPermitTunnel yes
が必要であり、クライアントはTunnel
ディレクティブを使用してトンネルを要求する必要があります。次に、その新しいリンクをデフォルトゲートウェイとして使用できます。ここで トンネルの詳細な手順を参照してください。