2025年12月18日/ 浏览 43
标题:Linux网络VLAN透明传输实战:802.1q隧道配置详解
关键词:Linux VLAN, 802.1q隧道, Q-in-Q, 透明传输, 网络虚拟化
描述:本文详细讲解如何在Linux系统中配置802.1q隧道实现VLAN标签的透明传输,解决跨物理网络的二层隔离与扩展问题,附完整操作代码及避坑指南。
正文:
在大型企业网络或云基础设施中,经常需要将不同物理位置的服务器划归同一VLAN,实现二层互通。传统方案需交换机支持VLAN中继并手动协调标签,而Linux的802.1q隧道(又称Q-in-Q)技术可通过封装原始VLAN标签实现透明传输,无需修改底层网络配置。本文将手把手教你完成配置。
假设以下场景:
– 主机A(VLAN 10)位于机房A,通过物理网卡ens1f1连接交换机。
– 主机B(VLAN 10)位于机房B,物理网卡为ens2f1。
– 机房之间通过不支持VLAN 10的三层网络互通。
目标:使主机A与主机B在同一个二层网络内通信,且保留原始VLAN标签。
解决逻辑:
1. 在主机A与主机B分别创建隧道接口,封装原始VLAN帧。
2. 隧道接口间通过UDP/IP建立虚拟链路,承载带标签的以太网帧。
执行以下命令加载802.1q及网络隧道模块:
bash
sudo modprobe 8021q # VLAN支持
sudo modprobe udp_tunnel # UDP隧道核心模块
sudo modprobe ipip # IP-over-IP封装(可选)
确保物理网卡驱动支持VLAN_VID过滤(以ixgbe驱动为例):
bash
ethtool -k ens1f1 | grep “vlan-filter”
bash
sudo ip link add vxlan10 type vxlan id 10 dev ens1f1 remote 192.168.1.2 local 192.168.1.1 dstport 4789
sudo ip link set vxlan10 up
sudo ip link add link ens1f1 name ens1f1.10 type vlan id 10
sudo ip link set ens1f1.10 up
sudo bridge fdb append dev vxlan10 00:00:00:00:00:00 dst 192.168.1.2
bash
sudo ip link add vxlan10 type vxlan id 10 dev ens2f1 remote 192.168.1.1 local 192.168.1.2 dstport 4789
sudo ip link set vxlan10 up
sudo ip link add link ens2f1 name ens2f1.10 type vlan id 10
sudo ip link set ens2f1.10 up
sudo bridge fdb append dev vxlan10 00:00:00:00:00:00 dst 192.168.1.1
在主机A的VLAN接口发起ping:
bash
ping -I ens1f1.10 192.168.10.100 # 目标为主机B的VLAN 10 IP
在主机A的物理接口抓包:
bash
tcpdump -i ens1f1 -nn -e vlan
关键输出:
18:00:00.000000 00:11:22:33:44:55 > 00:aa:bb:cc:dd:ee, ethertype 802.1Q (0x8100), vlan 10, ...
隧道封装帧:
18:00:00.000001 IP 192.168.1.1.4789 > 192.168.1.2.4789: VXLAN, vni 10
MTU问题:封装后数据包增大,需调整MTU(建议1420字节):
bash
ip link set vxlan10 mtu 1420
防火墙放行:确保UDP 4789端口互通(VXLAN默认端口):
bash
ufw allow 4789/udp
交换机配置:物理交换机端口需设为Trunk模式,允许所有VLAN通过。
通过802.1q隧道,Linux将物理网络转化为灵活的虚拟化载体,实现“网络无感知”的架构升级。