月度归档:2021年11月

Raspberry Pi OS 中给网卡设置静态IP地址的问题,BUG?

通常在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文件。

参考:https://superuser.com/questions/985082/is-there-a-way-to-disable-the-dhcp-client-in-raspbian-linux-on-a-rasperry-pi