我的目标是将某些与工作相关的主机的 DNS 请求转发到跳转服务器,该服务器能够解析这些请求。
我53
在跳转服务器上5353
本地映射了端口,如下所示:
ssh -L 5353:localhost:53 pritzl@jump
在此会话中,我能够nslookup server.work
。现在,我希望能够在家里的机器上执行相同操作。
我的配置dnsmasq.conf
如下/etc/NetworkManager/dnsmasq.d/dnsmasq.conf
:
server=/google.com/1.1.1.1
server=/server.work/127.0.0.1#5353
然后,我重新启动了网络管理器:service network-manager restart
。
现在,我们来测试一下:
- 对于
google.com
,我得到:
pritzl@pritzl-vault:~$ nslookup google.com
Server: 127.0.1.1
Address: 127.0.1.1#53
Non-authoritative answer:
Name: google.com
Address: 172.217.17.78
- 对于
server.work
,我得到:
pritzl@pritzl-vault:~$ nslookup server.work
;; connection timed out; no servers could be reached
- 对于
server-2.work
,我立即得到:
pritzl@pritzl-vault:~$ nslookup server-2.work
Server: 127.0.1.1
Address: 127.0.1.1#53
** server can't find server-2.work: NXDOMAIN
(关于后者,我想这是有道理的,因为我的 ISP 的 DNS 不知道server-2.work
,并且可以立即响应。我想我应该改变我的dnsmasq.conf
以包含来自的所有内容*.work
,但在这里进行限制是一个很好的测试。)
出了点问题,但我不知道是什么。我该如何继续?
附加信息
我也尝试过设置server=/google.com/127.0.0.1#5353
,dnsmsaq.conf
然后nslookup google.com
就不起作用了(除了结论之外,什么都不起作用,不仅仅是与工作相关的主机)。我不确定这是什么意思确切地,但我认为这是一个值得在这里添加的有趣测试。
答案1
从man ssh
:
-L local_socket:remote_socket Specifies that connections to the given TCP port or Unix socket on the local (client) host are to be forwarded to the given host and port, or Unix socket, on the remote side.
DNS 通常使用 UDP,而不是 TCP。虽然可以使用 TCP,并且 dnsmasq 对此的支持有限,但这并不代表您的远程 DNS 服务器支持(或配置)此协议。