3

After new install of Ubuntu15.10 my commands(ping, ssh, ...) are using different IP address than one resolved by nslookup, host, dig, ... How could this happen?

user@ubuntu-15-10:~$ nslookup foobar.com
 Server:        127.0.1.1
 Address:   127.0.1.1#53

 Non-authoritative answer:
 foobar.com canonical name = foobar.homeip.net.
 Name:  foobar.homeip.net
 Address: 12.34.56.78

user@ubuntu-15-10:~$ host foobar.com
 foobar.com is an alias for foobar.homeip.net.
 foobar.homeip.net has address 12.34.56.78

user@ubuntu-15-10:~$ ping foobar.com
 PING foobar.com (192.168.1.3) 56(84) bytes of data.
 64 bytes from foobar.localdomain.home (192.168.1.3): icmp_seq=1 ttl=64 time=0.245 ms
 64 bytes from foobar.localdomain.home (192.168.1.3): icmp_seq=2 ttl=64 time=0.285 ms
 64 bytes from foobar.localdomain.home (192.168.1.3): icmp_seq=3 ttl=64 time=0.269 ms
 ^C
 --- foobar.com ping statistics ---
 3 packets transmitted, 3 received, 0% packet loss, time 2000ms
 rtt min/avg/max/mdev = 0.245/0.266/0.285/0.021 ms

user@ubuntu-15-10:~$

My /etc/resolv.conf

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.1.1
search localdomain.home

My /etc/nsswitch.conf

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat
group:          compat
shadow:         compat

hosts:          files mdns4_minimal [NOTFOUND=return] wins dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

No entry for foobar.com in /etc/hosts

Anyone any idea?

4

2 回答 2

2

经过一番调查,我找到了一个修复 myslef ... 问题出在 /etc/nsswitch.conf 中:在“hosts”行:“dns”条目应该在“wins”条目之前...但是我不明白后面是什么现在它按预期工作

于 2015-11-15T17:58:06.957 回答
1

对不起,配置的服务器是一些奇怪的假服务器,可能在你自己的机器上。服务器地址[127.0.1.1]通常是为 localhost 接口保留的(这很奇怪,因为 localhost 地址实际上是127.0.0.1,而不是127.0.1.1

您收到不同响应的最可能原因是这nslookup(1)是一个BIND测试 dns 访问的实用程序(它仅使用 dns 查找)并ping(1)使用gethostbyname(3)库例程(它考虑/etc/nsswitch.conf文件中配置的所有可能性以获取有关如何继续的信息,在这种情况下,是dns部分是最后的手段)

另一方面,主机的实际地址foobar.com不是那个(见下文)。

最后,您的输出中显示的地址foobar.com解析ping(1)为一个私有地址(不是实际地址,请参阅 RFC-1918),您无法通过 Internet 找到该主机。

最有可能的是您没有要求任何官方互联网名称服务器的 dns 解析,所以一切都是本地 dns 配置的问题。

差异的可能原因:

  • mdns4_minimal是一些不询问实际名称服务器的假程序。
  • dns是 中的最后一个选项/etc/nsswitch.conf,所以官方 DNS 协议最后(当所有其他协议都失败时)
  • 您的 dns 没有在地址中侦听,127.0.1.1并且您有一些 ssh 端口重定向或隧道到其他名称服务器,给出了错误的答案。当用于例如配置客户端连接时,该地址127.0.1.1通常由网络设备使用。tap*openvpn(1)
  • 您没有显示在您的机器上运行的名称服务器配置文件。也许您获得的地址的来源就在那里。查找配置文件并在这些配置文件中named(8)搜索域。foobar.com

您显示的所有地址都不是真正的互联网地址(127.0.0.0/8, 10.0.0.0/8,和出于某种原因都是保留的互联网地址172.16-31.0.0/16,并且您不会在来自互联网的数据包中看到任何这些地址)原因多种多样,但事实是,您的所有流量都在您的专用网络中是本地的,没有任何东西,除了您机器上运行的名称服务器可能可以访问互联网。192.168.0-255.0/24169.254.0.0/16

抱歉,但是根据您提供的信息,这是我唯一可以争辩尝试解决您的错误的方法。

您可以执行以下操作(以获得干净的 dns 分辨率):

  • dns之后配置。这将在此之前给予 dns 优先级和分辨率)files/etc/nsswitch.confmdns4_minimalwins
  • 使用您的域名服务器的实际地址进行配置nameserver <ip>(它们应该由您的互联网提供商传达给您。如果您不知道该放什么,请尝试nameserver 8.8.8.8使用谷歌域名服务器来解决地址。幸运的是,它对所有人开放)

这些步骤将使 dns 解析完全超越您的本地名称服务器,您将获得类似

$ nslookup foobar.com
Server:     46.183.73.1
Address:    46.183.73.1#53

Non-authoritative answer:
Name:   foobar.com
Address: 69.89.31.56

$ ping foobar.com
PING foobar.com (69.89.31.56): 56 data bytes
64 bytes from 69.89.31.56: icmp_seq=0 ttl=50 time=173.196 ms
64 bytes from 69.89.31.56: icmp_seq=1 ttl=50 time=175.091 ms
64 bytes from 69.89.31.56: icmp_seq=2 ttl=50 time=208.612 ms
64 bytes from 69.89.31.56: icmp_seq=3 ttl=50 time=177.145 ms
^C
--- foobar.com ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 173.196/183.511/208.612/14.559 ms
$ _

如果您安装了 ubuntu 并且在安装时没有配置 Internet 连接,最可能的原因是它在本地配置了 dns 并使用允许您进行实验的假数据库,然后再将其配置为真正的 Internet 访问。

于 2015-11-16T11:38:52.637 回答