根据Debian 网络配置文档“如果创建VLAN接口只是为了将其放入网桥中,则无需手动定义VLAN接口。只需配置网桥即可,创建网桥时会自动创建VLAN接口”.我有以下/etc/network/interfaces
文件:
# The loopback network interface
auto lo
iface lo inet loopback
# mgmt network interface
auto eth0
iface eth0 inet static
address 10.10.1.182
netmask 255.255.255.192
network 10.10.1.128
broadcast 10.10.1.191
gateway 10.10.1.190
# VLAN 100
auto br-VLAN-100
iface br-VLAN-100 inet manual
bridge_ports eth1.100
# VLAN 200
auto br-VLAN-200
iface br-VLAN-200 inet manual
bridge_ports eth1.200
# VLAN 300
auto br-VLAN-300
iface br-VLAN-300 inet manual
bridge_ports eth1.300
# VLAN 400
auto br-VLAN-400
iface br-VLAN-400 inet manual
bridge_ports eth1.400
# VLAN 500
auto br-VLAN-500
iface br-VLAN-500 inet manual
bridge_ports eth1.500
然而,接口eth1.100
、eth1.200
、eth1.300
、eth1.400
和eth1.500
并不是在我启动系统时自动创建的。我仍然需要手动创建这些接口还是我的/etc/network/interfaces
文件中有错误?
答案1
也许您缺少vlan
包含配置接口所需的二进制文件的包。
要解决这个问题: apt-get install vlan
.bridge-utils
还需要安装该包。
长解释:
vlan
您可以使用以下命令查看包内的脚本:
root@host:~# dpkg -L vlan
...snip...
/usr/share/doc/vlan/changelog.Debian.gz
/usr/share/doc/vlan/howto.html
/etc
/etc/network
/etc/network/if-post-down.d
/etc/network/if-post-down.d/vlan
/etc/network/if-pre-up.d
/etc/network/if-pre-up.d/vlan
...snip...
vlan 包添加了一些脚本,用于在 te 期间处理 vlan 接口ifup
。
eth*.*
这是将探测并将其显示为 802.1q 接口的代码片段:vim /etc/network/if-pre-up.d/vlan + 18
eth*.*|bond*.*|wlan*.*|em*.*|p[0-9]*.*)
vconfig set_name_type DEV_PLUS_VID_NO_PAD
VLANID=`echo $IFACE|sed "s/eth[0-9][0-9]*\.0*//g;s/bond[0-9][0-9]*\.0*//g;s/wlan
[0-9][0-9]*\.0*//g;s/em[0-9][0-9]*\.0*//g;s/p[0-9][0-9]*\(p[0-9][0-9]*\)\?\(_[0-9][0
-9]*\)\?\.0*//g"`
IF_VLAN_RAW_DEVICE=`echo $IFACE|sed "s/\(eth[0-9][0-9]*\)\..*/\1/;s/\(bond[0-9][0-9]*\)\..*/\1/;s/\(wlan[0-9][0-9]*\)\..*/\1/;s/\(em[0-9][0-9]*\)\..*/\1/;s/\(p[0-9][0-9]*\(p[0-9][0-9]*\)\?\(_[0-9][0-9]*\)\?\)\..*/\1/"`
;;
然而,这只能解释 debian 如何探测来自/etc/network/interfaces
.我们必须更深入。看一下 Bridge-utils 包中的脚本(dpkg -L bridge-utils
),我们会发现我们感兴趣的一个:vim /etc/network/if-pre-up.d/bridge +60
bridge_parse_ports $INTERFACES | while read i
do
for port in $i
do
# We attach and configure each port of the bridge
if [ "$MODE" = "start" ] && [ ! -d /sys/class/net/$IFACE/brif/$port ]; then
if [ -x /etc/network/if-pre-up.d/vlan ]; then
env IFACE=$port /etc/network/if-pre-up.d/vlan
fi
if [ "$IF_BRIDGE_HW" ]
then
ifconfig $port down; ifconfig $port hw ether $IF_BRIDGE_HW
fi
if [ -f /proc/sys/net/ipv6/conf/$port/disable_ipv6 ]
then
echo 1 > /proc/sys/net/ipv6/conf/$port/disable_ipv6
fi
brctl addif $IFACE $port && ifconfig $port 0.0.0.0 up
它将探测端口是否已经是网桥的成员,尝试通过调用 来探测它是否是 vlan 接口/etc/network/if-pre-up.d/vlan
。
基本上,发生的事情是if [ -x /etc/network/if-pre-up.d/vlan ];
表达式从未被评估。 ”如果 FILE 存在并且可执行,则为 True。”