我有这个配置/etc/网络/接口:
auto lo
iface lo inet loopback
allow-hotplug wlan0
iface wlan0 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
allow-hotplug wlan1
iface wlan1 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
allow-hotplug wlan0
#iface wlan0 inet dhcp
iface wlan0 inet static
address 192.168.0.110
netmask 255.255.255.0
network 192.168.0.1
gateway 192.168.0.1
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
#iface default inet dhcp
iface eth0 inet static
address 192.168.0.115
netmask 255.255.255.0
network 192.168.0.1
gateway 192.168.0.1
无线静态 IP 有效,但 eth0 无效。
所以我尝试在中进行配置/etc/dhcpcd.conf:
interface eth0
static ip_address=192.168.0.115/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1
它奏效了。我很困惑,这里有几个问题:
何时使用哪个文件?
为什么wifi可以用/etc/网络/接口但 eth0 没有?
做DHCPCD在某种程度上优先于 /etc/网络/接口?
如何检查哪个服务具有优先级或某项?以及使用哪个服务/etc/网络/接口?
答案1
为什么 wifi 可以与 /etc/network/interfaces 配合使用,但 eth0 却不能?
通过网络接口名称,我假设您正在谈论 Raspbian Jessie 或更早版本;这些在 Stretch 和更新版本中会有所不同。
您没有告诉它在启动时启动(使用auto eth0
)或在检测到网络硬件时启动(使用allow-hotplug eth0
)。
如果这些行中都不存在,则仅当使用显式手动命令时/etc/network/interfaces
,接口eth0
才会启动。ifup eth0
dhcpcd 是否具有比 /etc/network/interface 更高的优先级?
在 Debian 和相关发行版中,/etc/network/interfaces
通常用作手动配置网络接口的主要位置;此处未列出的接口将由 控制(NetworkManager
如果已安装)。
然而,默认的启动dhcpcd5
显然不包括它可以工作的接口的严格列表(我猜是为了允许热插拔),并且它显然可以通过/etc/network/interfaces
提供配置/etc/dhcpcd.conf
代替。
Raspbian Stretch 实际上将其用作标准实践。
我对 Raspbian 不太熟悉,但我认为他们的解决方案可能是有意义的:在资源最少的系统中,他们可能希望最大限度地减少 GUI/TUI 配置工具需要能够解析的不同语法的数量。如果dhcpd.conf
类似语法已在其他一些配置文件中使用,则标准化使用的决定可能允许更有效地重用配置解析器组件。
何时使用哪个文件?
在常规 Debian 系统中,我建议主要使用/etc/network/interfaces
,并且/etc/dhcpcd.conf
仅用于您无法在 中实现的事情/etc/network/interfaces
,例如添加或操作您请求/接收的 DHCP 选项。
但似乎对于 Raspbian Stretch 及更新版本,这/etc/dhcpcd.conf
是推荐的文件。
答案2
1)根据问题的答案“如何设置网络/WiFi/静态 IP”:如果您正在运行 dhcpcd,则编辑 dhcpcd.conf。看到那个关联使用 dhcpcd 时正确配置 /etc/network/interfaces。
2) 目前尚不清楚为什么 /etc/network/interfaces 的更改会影响 wifi 接口而不是 eth0。由于涉及多个子系统,因此调试起来可能会很困难。
3)据我所知,dhcpcd 有效地忽略了 /etc/network/interfaces。
4)我不认为 dhcpcd 或 /etc/network/interfaces 具有优先级,而是存在冲突导致不可预测的行为。 ifupdown 使用 /etc/network/interfaces,并且 (IIRC) NetworkManager 将尊重“手动”和“静态”条目。快速扫描 /lib/udev 显示 udev 直接调用 ifup 或 systemd[电子邮件受保护]然后调用 ifup。
在我看来:如果在任何接口上使用静态地址,目前还不清楚 dhcpcd 相对于旧的 ifupdown 方法有什么优势。我已经用命令解决了不可预测的行为
sudo apt-get remove dhcpcd5
关于@瑞·F·里贝罗的关于 eth0 和 wlan0 的地址是否在同一子网的评论:Linux 不关心两个接口是否在同一子网。大多数家用路由器/接入点桥接有线和无线局域网,因此您的配置可能会起作用。请注意,Linux 将使用路由表中的第一个默认路由,因此即使以太网已连接,您的计算机也可能使用 wifi 接口。