web-dev-qa-db-ja.com

SOCKSプロキシ経由でSSHを実行しますか?

VPNを使用せずに、ローカルでVPNのような動作が必要です。

WANから到達可能な特定のサーバーへのSOCKSプロキシを作成しました。すべてのトラフィックをそのプロキシ経由で転送して、ネットワーク内のホストに到達できるようにしたいと考えています。

私のSOCKSプロキシは次のようになります。

ssh -t -D 8088 user@proxy-Host 'watch -n 1 date'

これをシステム設定を使用してプロキシするようにシステムをセットアップしました:

enter image description here

私の環境変数が正しく設定されていることを確認しました:

naftuli@macbook-nkay:~$ env | grep socks_proxy
socks_proxy=socks://127.0.0.1:8088/

ただし、特定のサーバーにSSHでアクセスすると、サーバーにアクセスできません。

$ ssh internal-Host
ssh: Could not resolve hostname internal-Host: Name or service not known

問題は、DNSがSOCKSトンネルを介して転送されていないことだと思います。それを設定する方法はありますか?私は手動でリモートDNSを使用するようにFirefoxを構成することができ、それはうまくいきました。このための環境変数はありますか?

6
Naftuli Kay

同様のトピックが [〜#〜] su [〜#〜] で議論されました:

openssh自体はsocks_proxy環境変数を理解していません。プロキシを介してトラフィックを送信するには、たとえばnetcatを使用する必要があります。

 ssh -o ProxyCommand='nc -X 5 --proxy 127.0.0.1:8088 %h %p' user@Host

Opensshの低レベル関数は環境変数を考慮しないため、DNS要求を転送する場合はより複雑になります。おそらく、リクエストをプロキシに転送するローカルDNSリゾルバを設定する必要があります。 dns-tcp-socks-proxy があり、処理する必要があります。

./dns_proxy --socks_port=8088 --listen_port=53

このデーモンを実行するときは、このDNSを使用するように/etc/resolv.conf(Macがこれを尊重することを期待)を設定する必要があります。

nameserver 127.0.0.1

Digを使用すると簡単なテストが可能になるはずですが、このリゾルバーが機能している場合は、プロキシ部分は必要ありません。

Dig example.com

ジャンプボックスとしての代替:

簡単な代替手段として、通常のホストをジャンプホストとして使用し、プロキシ部分をスキップして、IOリダイレクトを-Wスイッチを使用して実行することをお勧めします。

ssh -oProxyCommand="ssh -W %h:%p jumpbox" destination_Host

ジャンプボックスでDNSの再検索とルーティングを行う必要があります。このオプションは、~/.ssh/configに簡単に組み込むことができます

4
Jakuje