在同一接口上设置两个 IP(一个使用 DHCP,另一个使用静态 IP)

在同一接口上设置两个 IP(一个使用 DHCP,另一个使用静态 IP)

我正在尝试使用一个接口设置 2 个 IP。我需要这样做,因为如果 DHCP 服务器不可用,则必须通过静态 IP 访问设备。在阅读了这里(和其他论坛)的许多帖子并进行了许多测试后,我的 /etc/network/interfaces 如下:

auto lo
iface lo inet loopback

auto enp0s3
allow-hotplug enp0s3
iface enp0s3 inet dhcp

auto enp0s3:0
allow-hotplug enp0s3:0
iface enp0s3:0 inet static
address 192.168.254.250
netmask 255.255.255.0

这似乎可行,但在配置 DHCP IP 之前,静态 IP 无法访问,如果网络中没有运行 DHCP 服务器,我需要通过静态 IP 访问设备。重要的是要记住,在最好的情况下,我应该能够使用从 DHCP 获得的 IP 和静态 IP 访问设备。

我们非常欢迎任何建议。

答案1

根据对各种设置的测试,看来你的allow-hotplug问题出在了你的身上。

根据 unix 站点上另一个用户的解释(见下面的链接),除非您通过事件将您的应用程序连接到网络系统,否则您确实不需要它hotplug


为适配器添加另一个 IP 地址

在您的文件中/etc/network/interfaces创建标准接口定义。
创建后,按以下方式添加辅助配置:

模板:

auto [iface]:[n]
iface [iface]:[n] inet static
standard attributes here...

每当您指定接口名称时,请确保还指定新虚拟接口(辅助 IP 地址)的索引号。
n是接口索引。

例子:

auto lo
iface lo inet loopback

auto enp0s3
iface enp0s3 inet dhcp

auto enp0s3:1
iface enp0s3:1 inet static
address 192.168.254.250
netmask 255.255.255.0

auto enp0s3:2
iface enp0s3:2 inet static
address 10.0.0.2
netmask 255.255.0.0
gateway 10.0.0.1

在上面的例子中,我们正常创建了环回适配器,并为正常接口提供了标准的 dhcp 配置。

然后我们创建两个额外的接口,都是静态配置的,一个在网络上192.168.254.0,另一个在10.0.0.0网络上。第二个虚拟接口配置了网关,而第一个没有。


太长了

allow-hotplug从您的网络配置中删除这些行。


链接

什么是allow-hotplug
https://unix.stackexchange.com/questions/192671/what-is-a-hotplug-event-from-the-interface

如何在单个接口上拥有多个 IP 地址:
https://www.garron.me/en/linux/add-secondary-ip-linux.html

答案2

我假设您使用的是 Ubuntu,因此可能还有 Netplan(if-up-down您现在使用的替代品)。我将让您自己研究 Netplan,以及 Cloud-init 如何融入其中,但只是为了向您展示我用来执行相同操作的简单 Netplan 配置:

network:
  version: 2
  renderer: networkd
  ethernets:
    ens3:
      dhcp4: yes
      dhcp6: yes
      addresses:
        - 11.22.33.44/24

您的解决方案的主要区别在于它不需要别名接口。出于各种原因,它们很烦人。这也意味着ifconfig不会显示两个地址,但ifconfig(某种程度上)已被弃用,您应该改用ip -4 addr

上述配置将使 11.22.33.44 成为主要地址,DHCP 地址将显示secondaryip -4 addr

相关内容