OpenSSH 的本地转发承载的是 TCP。只要查询工具和远程 DNS 服务使用这种传输,DNS 同样可以走 TCP。

对于从 SSH 主机可访问的 DNS 服务器,打开一个只监听回环地址的转发:

ssh -N -L 127.0.0.1:1053:dns.internal:53 [email protected]

然后从本机发出显式的 TCP DNS 查询:

dig +tcp @127.0.0.1 -p 1053 app.internal A

把 DNS 服务器、SSH 主机和查询名替换成实际使用的值。SSH 服务器一侧必须能访问 dns.internal:53,转发策略也必须允许。

本地端口高于特权端口范围。查询本地 1053 端口不需要绑定系统的 DNS 端口 53。

这不会自动重定向普通的 UDP DNS 查询。原始的 UDP 到 TCP 字节管道并不够用,因为 DNS over TCP 会增加长度字段和流式分帧。要接入系统解析器,需要合适的 DNS 转发器或明确受支持的 TCP 配置。

最后,通过这条路径取得地址,并不会让后续的网页连接走 SSH。DNS 查询与到目的地的传输仍然是两个独立的选择。

相关文章