如果使用DHCP,而不是静态IP,则Ubuntu 14.04只能访问外部networking

我在Ubuntu服务器14.04(没有GUI)configuration一些服务器,我有以下configuration:

auto lo iface lo inet loopback ## Management network eth0 auto eth0 iface eth0 inet static address 10.0.0.11 netmask 255.255.255.0 gateway 10.0.0.1 dns-nameservers 8.8.8.8 8.8.4.4 

不幸的是,当使用这种configuration时,我只能访问局域网,任何尝试ping或者访问我们networking之外的任何东西都会失败。

如果我使用DHCP,只需要路由器给我的IP地址,我就可以访问内部和外部networking。 为了testing,我一直试图使用“ping google.com”来testing外部连接。

还有一点需要注意的是,在路由器中,如果将IP绑定到MAC地址,它似乎可以正常工作,但是我不希望这些规则存在于我的路由器中,我宁愿将它们configuration在服务器上。

看来正在发生的事情是,你的路由器没有得到你的机器的网卡的MAC地址,或者你的网卡没有得到路由器的MAC地址。 为了validation这一点,你可能想转储两个mac表。 在Linux中你可以做arp -an来validation。

接下来的问题是为什么,为什么它能工作(即为什么本地IP可以ping通)。 我有两个想法,两者都不太合适:

  1. 你的静态configuration是错误的。 例如,这是错误的网关IP,错误的子网掩码或其他。 东西经常起作用,因为Linux是特别热衷于使用代理ARP。 我知道你说你已经检查了这个,但是在我检查过两次之前,我一直处于这种情况,而且他们还是被打字错了。 所以我包括这个完整性。 发布ip route showip addr show的输出(而不仅仅是configuration文件)以validation它们对于dhcp和static是相同的将是有用的。 这将检查您的configuration文件是否正确parsing。

  2. 你的路由器或你的交换机是“试图聪明”。 例如,路由器可能有一个function,试图阻止人们通过阻止未分配池中IP地址的IPstream量来窃取IP地址; 要解决此问题,请closures该function,或使用池外的IP地址。 同样的交换机可能会使用DHCP监听 ,这将有相同的效果; 要么将IP列入白名单,要么将其closures。