问题如下:
root@home:~# ping 8.8.8.8
connect: Network is unreachable
root@home:~# dhclient eth0
RTNETLINK answers: File exists
root@home:~# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_req=1 ttl=51 time=16.8 ms
64 bytes from 8.8.8.8: icmp_req=2 ttl=51 time=16.6 ms
^C
--- 8.8.8.8 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 16.654/16.737/16.820/0.083 ms
root@home:~#
只有在我手动调用 dhclient 后,网络才能正常工作。我没有 NetworkManager(已将其删除)。以下是来自的相关行/etc/network/interfaces
:
auto eth0
iface eth0 inet dhcp
以下是启动日志:
root@home:~# cat /var/log/syslog | grep dhclient
May 28 21:39:44 home kernel: [ 7.237076] type=1400 audit(1369762781.497:2): apparmor="STATUS" operation="profile_load" name="/sbin/dhclient" pid=405 comm="apparmor_parser"
May 28 21:39:44 home kernel: [ 7.238298] type=1400 audit(1369762781.497:4): apparmor="STATUS" operation="profile_load" name="/usr/lib/connman/scripts/dhclient-script" pid=405 comm="apparmor_parser"
May 28 21:39:45 home dhclient: DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 8 (xid=0x79607e29)
May 28 21:39:45 home dhclient: DHCPREQUEST of 192.168.0.103 on eth0 to 255.255.255.255 port 67 (xid=0x79607e29)
May 28 21:39:45 home dhclient: DHCPOFFER of 192.168.0.103 from 192.168.0.1
May 28 21:39:45 home dhclient: DHCPACK of 192.168.0.103 from 192.168.0.1
May 28 21:39:45 home dhclient: bound to 192.168.0.103 -- renewal in 234779 seconds.
May 28 21:39:45 home kernel: [ 11.695666] type=1400 audit(1369762785.953:10): apparmor="STATUS" operation="profile_replace" name="/sbin/dhclient" pid=1154 comm="apparmor_parser"
May 28 21:40:11 home dhclient: DHCPREQUEST of 192.168.0.103 on eth0 to 255.255.255.255 port 67 (xid=0x2aa61c47)
May 28 21:40:11 home dhclient: DHCPACK of 192.168.0.103 from 192.168.0.1
May 28 21:40:11 home dhclient: bound to 192.168.0.103 -- renewal in 243414 seconds.
有什么想法可能导致此类问题吗?
更新:我发现默认网关在启动时没有添加,但在我重新启动服务或手动运行 dhclient 时会添加networking
。但我还没有找到导致这种行为的原因。
答案1
就我而言,在 CentOS 6/Fedora 下,这与 /etc/sysconfig/network-scripts/ifcfg-eth0 和 /etc/udev/rules.d/70-persistent-net.rules 之间的不一致有关。
在这两个文件中,都声明了与 eth0 接口关联的 MAC。在虚拟机克隆中,分配了新的 MAC,但未在此处反映(管理员应该这样做)。
启动时,您可以在 dmesg 中看到真正的 eth0 被重命名为 eth1(与 ifcfg-eth0 冲突),然后在 70-persistent-net.rules 下自动创建一个新条目,将找到的 MAC 与 eth1 关联。
dhclient 未启动(或者如果启动了,则中止) - 结果是系统未从 DHCP 服务器获取 IP。
值得注意的是,运行 dhclient 手动强制获取假 eth1 的 IP,之后网络正常工作......直到下次重启。
手动编辑上面引用的文件以使 MAC 和 eth* 名称一致已解决问题 - 现在 dhclient 在启动时启动并自行获取 IP。
答案2
编辑:
一般来说,你应该通过以下方式从 DHCP 服务器获取默认网关选件 003。最好的方法是配置您的 DHCP 服务器以正确地向客户端提供此信息。如果您出于某种原因无法做到这一点,我相信您可以/etc/network/interfaces
使用gateway
指令在文件中手动指定它(请参阅手册页)。我从来没有这样做过,但我相信它应该适用于非静态配置的接口。
如果没有,您可以使用初始化脚本手动添加它。
看起来您使用 dhclient 正确地接收了 DHCP 租约。我怀疑 NetworkManager 未完全删除,或者您有另一个正在启动的网络自动配置实用程序(可能与您的桌面环境绑定)并尝试重新配置您的网络设置。
/etc/network/interfaces
首先通过运行网络初始化脚本来确认您的配置是否正确:
sudo /etc/init.d/networking restart
或者直接使用ifup
and ifdown
:
sudo ifdown eth0 && ifup eth0
然后确保你没有任何残留的网络管理器:
sudo apt-get purge network-manager