如果 VLAN 子接口是 /etc/network/interfaces 文件中网桥的一部分,则自动创建 VLAN 子接口

如果 VLAN 子接口是 /etc/network/interfaces 文件中网桥的一部分,则自动创建 VLAN 子接口

根据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.100eth1.200eth1.300eth1.400eth1.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。

相关内容