环境
Debian Buster 10.9
ens33 桥接 Windows 主机网络适配器
ens37 桥接 Windows 主机虚拟网络适配器
以下均以 root 身份执行
interfaces
"/etc/network/interfaces"
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug ens33
#auto ens33
#iface ens33 inet dhcp
iface ens33 inet static
address 192.168.2.234/24
gateway 192.168.2.1
dns-nameservers 114.114.114.114 8.8.8.8
allow-hotplug ens37
iface ens37 inet static
address 192.168.3.10/24
gateway 192.168.3.1
#post-up ip route add default via 192.168.3.1
#pre-down ip route del default via 192.168.3.1
#post-up ip rule add from 192.168.3.10 table isp2
#pre-down ip rule del from 192.168.3.10 table isp2
问题
以下均以先启动 ens33,后启动 ens37 为例。
当 ifup ens33 后,再 ifup ens37 时,必然报错如下,但是 ens37 却已启动。
RTNETLINK answers: File exists
ifup: failed to bring up ens37
当关闭先启动的 ens33 时,正常,再关闭后启动的 ens37 时,必然报错如下。
ifdown: interface ens37 not configured
若此时 ifdown ens37 --force 强制关闭 ens37 时,可强制关闭,但是报错如下。
RTNETLINK answers: No such process
原因
第二个接口多配置了 gateway 导致报错。
解决
方法一
注释其中一个接口的 gateway。
方法二
使用 iproute2 创建一个新的路由表,将第二个网络接口网关指定到新路由表中,并配置策略路由。
wltwo: 网络2
echo -e "200\tbwltwo" >> /etc/iproute2/rt_tables
在 "/etc/network/interfaces" 的第二个接口中,将网关改为
#gateway=192.168.3.1
# 注意缩进
post-up ip route add default via 192.168.3.1 table wltwo
pre-down ip route del default via 192.168.3.1 table wltwo
post-up ip rule add from 192.168.3.10 table isp2
pre-down ip rule del from 192.168.3.10 table isp2
ifup 配置文件
ifstate
"/run/network/ifstate"
正确时,ifup 接口后,会在此处新增“接口名称=接口名称”,ifdown 后,会从此处删除。
lo=lo
ens33=ens33
ifstate.接口名称
"/run/network/ifstate.接口名称"
正确时,ifup 接口后,会在此处记录“接口名称”,ifdown 后,会从此处删除。
ens33
参考
manpages.debian.org/jessie/ifupdown/ifdown.8.en.html
manpages.debian.org/buster/ifupdown/interfaces.5.en.html