を使用して作成されたSOCKSプロキシを使用すると、DNS解決はもう一方の端にトンネリングされますかssh -D
?ドキュメントを読み、インターネットで検索しましたが、ドキュメントが見つかりませんでした。
答え1
SocksによるDNS解決はクライアントによって決定されます。 Socksを介してDNSを検索するようにアプリケーションに明示的に指示する必要があります。
名前解決は、ホストへの接続と同様にシステムコールで行われます。gethostbyname()
またはgetaddrinfo()
。
特に明記しない限り、プログラムは名前解決のためにのみこの機能を使用でき、もちろんトンネルについての知識はありません。
socks5h://
たとえば、カールではなく指定された場合にのみDNSを検索しますsocks5://
。
答え2
アプリケーションはSOCKSプロキシを使用して表示された名前を解決できます。 ここ。
かどうか尋ねたら システム全体の照会はトンネルを介して行われます。、そうであれば、答えはいいえ。
サーバー側を制御する場合は、次のようにクライアントでUDP-TCPプロキシを起動できます。 ここ:
socat -T15 udp4-recvfrom:53,reuseaddr,fork tcp:localhost:5353
次に、SSHを介してTCP-UDPデーモンを起動したサーバーにTCP接続を渡します。
socat tcp4-listen:5353,reuseaddr,fork UDP:nameserver:53
あなたはこれに眉をひくことができ、もちろんそうです。幸いなことに SSHシャトル(例えば言及 ここ)。 DNSクエリを簡単に配信できるパッチがあります。
YMMVですが、次のように成功しました。
#!/bin/bash
# Taken from http://stackoverflow.com/questions/4594319/shell-replace-cr-lf-by-comma
DNSSERVERS=$(nmcli d show | grep DNS | awk '{print $2}' | sed -e 'H;${x;s/\n/,/g;s/^,//;p;};d' )
sshuttle \
-vvv \
--dns-hosts ${DNSSERVERS} \
-r server \
254.254.254.254/32
答え3
ssh -D操作(man ssh経由)
ローカルの「動的」アプリケーションレベルのポート転送を指定します。これは、ローカル側ポートでリッスンするようにソケットを割り当てることによって行われます。
それではソケットとは何ですか? 渡す
ソケットは単に通信のための論理的な終点です。トランスポート層に存在します。ソケットでコンテンツを送受信でき、ソケットをバインドして受信できます。ソケットはプロトコル、システム、ポートによって異なり、パケットヘッダにアドレスが割り当てられます。
そして
クライアントはソケットプロキシを介してDNSルックアップを実行できます。