我一直在绕圈子试图弄清楚这一点。我在 Windows 网络上有许多 Ubuntu 机器(一些是虚拟的)。从 Windows 机器,我可以ping
或nslookup
Ubuntu 机器,但不能反过来,除非 Ubuntu 机器指定完全限定的 DNS 名称。但我似乎无法从 Ubuntu 环境中获取限定后缀。
举个例子可以解释一下发生了什么。假设 Windows 机器名为Win1
,Ubuntu 机器名为Ubu1
,网络后缀为.notlocalatall
。
On Win1:
$ echo %USERDNSDOMAINNAME%
notlocalatall
$ nslookup Ubu1
[...]
Name: Ubu1.notlocalatall
Address: 131.132.32.14
$ nslookup Ubu1.notlocalatall
[...]
Name: Ubu1.notlocalatall
Address: 131.132.32.14
$ ping Ubu1
[works normally, with 0% packet loss]
$ ping Ubu1.notlocalatall
[works normally, with 0% packet loss]
On Ubu1:
$ hostname -d
[blank]
$ nslookup Win1
[...]
** server can't find Win1: SERVFAIL
$ nslookup Win1.notlocalatall
[...]
Name: Win1.notlocalatall
Address: 131.132.32.167
$ ping Win1
ping: unknown host Win1
$ ping Win1.notlocalatall
[works normally, with 0% packet loss]
出于ssh
目的,我可以忍受指定 DNS 后缀,但我需要从某些命令或脚本中获取它。
不,解决方案不是编辑/etc/hosts
,因为整个过程在 DHCP 下运行。
Ubu1
正在运行 Ubuntu 12.04.5 LTS,并且网络控制面板的选项:IPv4 参数设置为“自动(DHCP)”。
答案1
您需要配置 DHCP 服务器,以便它在 DHCP 客户端上设置域搜索
http://linux.die.net/man/5/dhcp-options
选项域搜索域列表;域搜索选项指定客户端用来查找非完全合格域名的域名“搜索列表”。此选项与历史上用于相同目的的域名选项的区别在于,此选项在线路上以 RFC1035 压缩标签进行编码。例如:
选项域搜索“example.com”、“sales.example.com”、“eng.example.com”;
这样,当您执行 nslookup 时,它将尝试所有指定的域,直到找到有效的响应(或直到循环遍历所有域)。
因此,如果你执行nslookup server1
if 将尝试查询 DNS
- server1.example.com
- 服务器1.sales.example.com
- eng.example.com