通常在linux中给一个网络接口(网卡)设置IP信息,是修改一个以该网络接口名称命名的文件,比如在CentOS中给eth0设置IP信息:
CentOS: /etc/sysconfig/network-scripts/ifcfg-eth0
相对应的Raspberry Pi OS中,也提供了文件:
/etc/network/interfaces
or
/etc/network/interfaces.d/eth0
我有如下配置
/etc/network/interfaces:
source /etc/network/interfaces.d/*
/etc/network/eth0:
auto eth0
allow-hotplug wlan0
iface eth0 inet static
address 192.168.80.100
netmask 255.255.255.0
network 192.168.80.0
gateway 192.168.80.3
重启网络(或系统)使之生效之后,发现一奇怪的问题:
在将eth0设置为静态IP地址192.168.80.100之后,eth0通过DHCP获取到的另一个IP地址192.168.80.4却依然可以ping通,且可以通过SSH连接,但同时ifconfig命令的输出信息中却没有显示192.168.80.4的信息。
显然,DHCP忽略了interfaces文件的设置内容,继续去dhcp服务器获取动态IP地址了。
Google之后,知道此问题2015年即出现了,所以至今问题依旧。解决问题的办法,无非就是两条路:
方法一:用interfaces文件,不用dhcp
1、在interfaces文件中设置静态IP地址信息
2、完全禁用dhcp服务:sudo systemctl disable dhcpcd.service
3、或者修改/etc/dhcpcd.conf文件,添加 denyinterfaces eth0 来让dhcp服务直接忽略eth0设备
方法二:不用interfaces文件,用dhcp
1、清除interfaces文件中的IP地址信息
2、直接在/etc/dhcpcd.conf中设置网络设备的静态IP地址:具体操作可见官方手册
所以,鉴于以上问题,建议在Raspberry Pi OS中给网络设备设置IP地址信息,尽量直接通过配置DHCP来操作。
另外,Raspberry Pi OS是基于Debian的,不知道Debian系的其他系统是不是也会有这个问题,总之Debian系的,忘掉interfaces文件。