我有两台 DNS 服务器 A 和 B(A 位于受控区域内,即使使用 DoH,DNS 请求也可能受到监控 - DoH 被阻止或 DoH 服务器本身也受到监控),B 位于受控区域之外。的服务器在端口 53 上提供 DNS 服务。不同的是,A 的上游服务器设置为 127.0.0.1:1234(本地 ip),而 B 的上游服务器指向真实的 DNS 服务器,例如 8.8.8.8。
我想在 A 和 B 之间建立 SSH 隧道:
ssh -L 1234:localhost:53 user@B_ip
使A的127.0.0.1:1234可以作为A的上游DNS服务器。这样,当我使用A作为我的本地DNS服务器时,它的请求将安全地传输到B并且永远不会被ISP监控。但是,我无法让它工作:
我确保A和B都可以单独工作(将A的上游设置为8.8.8.8,B相同),隧道创建成功,但是一旦我将A的上游DNS更改为127.0.0.1:1234(隧道),它超时。
这是我在同一局域网内的测试服务器: A的dnsmasq.conf:
port=53
listen-address=10.0.0.125
server=127.0.0.1#5533
#server=10.0.0.130
B 的 dnsmasq.conf:
port=53
listen-address=127.0.0.1,10.0.0.130
server=8.8.8.8
我不确定我是否错过了任何东西,这两台服务器位于同一个局域网内,可以单独正常工作,我只是无法让隧道工作,非常感谢任何想法!
我找到了它不起作用的原因...我使用 dig 命令来测试服务,但事实证明 dig 命令默认使用 UDP 来发送 DNS 请求,这就是为什么 reuqests 无法通过 SSH 隧道使用 TCP。使用相同的设置,使用 +tcp 选项将使其正常工作:
dig example.com -p 1234 @127.0.0.1 +tcp