dhcpcd 和 /etc/network/interfaces

dhcpcd 和 /etc/network/interfaces

我有这个配置/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

它奏效了。我很困惑,这里有几个问题:

  1. 何时使用哪个文件?

  2. 为什么wifi可以用/etc/网络/接口但 eth0 没有?

  3. DHCPCD在某种程度上优先于 /etc/网络/接口

  4. 如何检查哪个服务具有优先级或某项?以及使用哪个服务/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 接口。

相关内容