我需要配置一个以太网接口,以便在存在 dhcp 服务器的情况下动态获取其 IP 地址,并且无论是否存在 dhcp 服务器,都始终拥有静态 IP。
我有以下/etc/network/interfaces
文件:
...
auto eth0
allow-hotplug eth0
iface eth0 inet dhcp
auto eth0:1
allow-hotplug eth0:1
iface eth0:1 inet static
address 10.0.10.2
netmask 255.255.255.0
...
如果在系统启动时插入电缆,虚拟接口 ( eth0:1
) 将获取其静态 IP。如果系统启动后插入电缆,eth0
则会从 dhcp 服务器获取其动态 IP,但eth0:1
没有任何 IP。
这是为什么?
答案1
十年后,我遇到了同样的问题。对我有用的解决方案是将以下几行添加到 eth0 配置中:
post-up ifup eth0:1 || true
pre-down ifdown eth0:1 || true
我还用 auto 替换了allow-hotplug(来源:https://unix.stackexchange.com/a/663955/601344)。
所以完整的配置如下:
auto lo eth0 eth0:1
iface lo inet loopback
iface eth0 inet dhcp
post-up ifup eth0:1 || true
pre-down ifdown eth0:1 || true
iface eth0:1 inet static
address ...
netmask ...
也许这会对使用旧系统的人有所帮助。 ;)
答案2
这是目前的解决方法。
我让这个脚本保持活力导师:
#!/bin/bash
is_cable_plugged() {
if [ "`ifconfig eth0|sed -n '/running/I p'`" == '' ];then echo no;else echo yes;fi
}
while true; do
if [[ "$(is_cable_plugged)" == "no" ]]; then
while true; do
if [[ "$(is_cable_plugged)" == "yes" ]]; then
echo "DEBUG: Cable is now connected, reloading networking..."
/etc/init.d/networking reload
break
fi
echo "DEBUG: Waiting for cable to be connected..."
sleep 2s
done
fi
echo "DEBUG: Cable is connected, do nothing..."
sleep 10s
done