我正在尝试使用一个接口设置 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 地址将显示secondary
为ip -4 addr