使用网络管理器 (nmcli) 配置 DHCP,使用备用静态 IP 地址以防 DHCP 失败

Using Network Manager (nmcli) to configure DHCP, with a fallback static IP address in case DHCP fails

我正在使用嵌入式 linux 设备,我们通常在开发过程中通过静态 IP 地址连接到该设备。但是,在现场我们需要使用 DHCP 进行连接,因此,我想设置一个主要的 DHCP 连接,并在不同的网络上使用备用静态 IP 地址。这可能吗?

我可以使用 nmcli 配置 DHCP 连接(IPV4.method=手动)并且可以成功添加额外的静态 IP 地址。当 DHCP 服务器存在时两者将同时存在,但是当没有 DHCP 服务器时,连接将被禁用,包括静态 IP 地址。

我还尝试设置多个连接,分配给 eth0,即一个静态连接和一个 DHCP,并且可以使用

手动启用它们
nmcli con up ConnectionName

但这不符合要求,因为在其他失败的情况下需要手动启用它们。我当然可以 运行 一个脚本来检查连接状态并在需要时启用另一个,但我认为这是网络管理员的现实期望。

有没有办法告诉网络管理员尝试一个连接,如果失败再尝试另一个?

我正在使用 Ubuntu 18.04.

您需要设置两个不同的连接,将它们都设置为connection.autoconnect yes,并根据需要的优先级设置connection.autoconnect-priority

我设法使用的解决方案引用自Static IP nmcli

基本上,您所要做的就是为接口分配静态 IP address/s,同时将 ipv4.method 保持为 DHCP 的 "auto"。对于像我这样的人,是的,很有可能同时拥有一个具有多个 IP 地址的物理接口(以太网端口)。要通过 NM 查看当前静态 IPv4 地址和模式集,请使用:

nmcli con show <ConnectionName> | grep "ipv4.addresses"
nmcli con show <ConnectionName> | grep "ipv4.method"

现在设置 1 个或多个静态 IP 地址:

sudo nmcli con modify <ConnectionName> ipv4.addresses "10.10.10.10/24,192.168.88.88/24"

为了完整删除通过 NM 设置的静态 address/s 使用:

sudo nmcli con modify <ConnectionName> ipv4.addresses ""

现在有点令人困惑的是 ifconfig 不会显示多个 IP 地址。但是,检查普通 nmcli 命令的输出,您会看到您的连接有多个 inet4 地址。

还要确认您可以检查路由 table route -n 的输出,您会看到只有您的静态 IP 才会在本地网络上路由。 DHCP IP 将在外部路由数据包。

希望对您有所帮助!