Siy*_*Ren 6 ssh openssh ssh-tunneling
当我使用创建的 SOCKS 代理时,DNS 解析是否通过隧道传输到另一端ssh -D?我已经阅读了手册,在互联网上搜索,但没有找到相关的文档。
您的应用程序可以使用SOCKS代理来解析名称所指示的 位置。
如果您问 系统范围的查找是否通过隧道进行,那么答案是否定的。
如果你控制了服务器端,那么你可以在客户机上指示启动UDP到TCP代理 在这里:
socat -T15 udp4-recvfrom:53,reuseaddr,fork tcp:localhost:5353
Run Code Online (Sandbox Code Playgroud)
然后通过 SSH 将 TCP 连接转发到您启动 TCP-to-UDP 守护进程的服务器:
socat tcp4-listen:5353,reuseaddr,fork UDP:nameserver:53
Run Code Online (Sandbox Code Playgroud)
理所当然地,您可能对此不以为然。幸运的是,有 SSHuttle(例如这里提到的 )。有一个补丁可以轻松转发 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
Run Code Online (Sandbox Code Playgroud)
通过 Socks 的 DNS 解析由客户端决定。您必须明确告诉应用程序通过 Socks 查找 DNS。
名称解析就像连接到主机一样,由gethostbyname()或等系统调用完成getaddrinfo()。
除非另有说明,程序可能只使用此函数进行名称解析,当然,它不知道您的隧道。
例如,curl 仅在指定时查找 DNS socks5h://,而不仅仅是socks5://.