我在为运行 Ubuntu 14.04.5 的系统上的默认接口分配永久静态 IP 地址时遇到了困难,eth0
因为系统最终没有 IP 地址。
作为以下内容的前提,目标系统是一个嵌入式系统,我们不能允许在系统运行期间发生任何网络接口变化。
我的设置如下:
network-manager
已被禁用。
/etc/network/interfaces
配置如下:
auto eth0
iface eth0 inet static
address 192.168.200.1
netmask 255.255.255.0
启动过程中出现问题,NTP 服务器守护程序可能会导致系统挂起长达 5 分钟。通过谷歌搜索发现一个名为 的包ntpdate
有点不正常 - 因此已将其删除(我们有自己的方法来设置系统的日期/时间)。
该avahi-autoip
服务已被禁用以防止自动分配私有 IP。
但从根本上来说,稍后某个时间点会发生一些事情,即删除绑定的静态 IP 地址eth0
- 无论是挥之不去的 DHCP 服务(肯定应该iface eth0 inet static
阻止这种情况发生)还是我不知道的其他正在运行的东西。
我注意到的一件事是,在某个时间点,PING
对内部网络上的 DNS 服务器(IP 192.168.0.5,由于子网不同,此 DNS 服务器无法访问)执行了某种包更新检查,该检查失败 - 失败后,出现持续不断的消息流,RTNETLINK answers: Network is unavailable
没有可行的方法摆脱它们。
作为参考,这里有一些输出:
是否配置
eth0 Link encap:Ethernet HWaddr 00:14:2d:2c:6f:5b
inet addr:192.168.200.1 Bcast:192.168.200.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:92 errors:0 dropped:0 overruns:0 frame:0
TX packets:29 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:13544 (13.5 KB) TX bytes:7311 (7.3 KB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:112131 errors:0 dropped:0 overruns:0 frame:0
TX packets:112131 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:11558635 (11.5 MB) TX bytes:11558635 (11.5 MB)
IP 地址
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: dummy0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default
link/ether 92:23:f9:47:e0:5a brd ff:ff:ff:ff:ff:ff
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:14:2d:2c:6f:5b brd ff:ff:ff:ff:ff:ff
inet 192.168.200.1/24 brd 192.168.200.255 scope global eth0
valid_lft forever preferred_lft forever
4: ip6tnl0: <NOARP> mtu 1452 qdisc noop state DOWN group default
link/tunnel6 :: brd ::
5: rmnetctl: <NOARP> mtu 1500 qdisc noop state DOWN group default
link/ipip 0.0.0.0 brd 0.0.0.0
6: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 00:16:6f:db:90:a2 brd ff:ff:ff:ff:ff:ff
路线-n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth0
192.168.200.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
dh客户端
root 1301 0.0 0.1 3980 2728 ? S 00:00 0:00 dhclient eth0
root 3198 0.0 0.1 3980 2728 ? S 00:02 0:00 dhclient eth0
PING 错误
PING 192.168.0.5 (192.168.0.5) 56(84) bytes of data.
--- 192.168.0.5 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms
ii librsync1:armhf 0.9.7-10 armhf rsync remote-delta algorithm library
ii rsync 3.1.0-2ubuntu0.2 armhf fast, versatile, remote (and local) file-copying tool
Reading package lists... Done
Building dependency tree
Reading state information... Done
rsync is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 8 not upgraded.
Reading package lists... Done
Building dependency tree
Reading state information... Done
netcat-openbsd is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 8 not upgraded.
RTNETLINK answers: Network is unreachable
RTNETLINK answers: Network is unreachable
RTNETLINK answers: Network is unreachable
RTNETLINK answers: Network is unreachable
RTNETLINK answers: Network is unreachable
PING 之后进行 ifconfig (注意,没有 IP 地址)
RTNETLINK answers: Network is unreachable
g
eth0 Link encap:Ethernet HWaddr 00:14:2d:2c:6f:5b
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:113 errors:0 dropped:0 overruns:0 frame:0
TX packets:86 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:16588 (16.5 KB) TX bytes:23129 (23.1 KB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:1425523 errors:0 dropped:0 overruns:0 frame:0
TX packets:1425523 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:214682465 (214.6 MB) TX bytes:214682465 (214.6 MB)
答案1
好的,所以看起来发生的事情是,最初,当系统配置时,它连接到一个可见 DHCP 服务器的网络。从 DHCP 服务器获得的租约的 IP 地址存储在一个/var/lib/dhcp/dhclient.leases
文件中。
eth0
通过文件指定的静态 IP 地址也会在 DHCP 客户端超时约 5 分钟后被/etc/network/interfaces
撤销,此时dhclient
(及类似的相关服务)也会被撤销。avahi-autoip
系统尝试分配上一个租约中的地址,但是由于无法与 DHCP 服务器协商,因此该地址也被撤回,适配器eth0
最终获得自动私有 IP 地址。此 APIPA 地址由avahi-autoip
服务分配 - 如果停止,则阻止分配私有地址。
针对此问题,有几个临时的解决方案:
- 删除
/var/lib/dhcp/dhclient.leases
文件 dhclient
使用以下命令彻底停止服务pkill
dhclient
彻底删除包
在我们的案例中,选项 3 是最佳方法。
此外,导致PING
执行并最终失败的原因RTNETLINK answers: Network is unavailable
仍在继续发生。虽然这会阻塞调试终端输出,但问题并不大。