AWS环境下如何用VLAN测试特定应用及实现Linux层VLAN接口跨实例互通?
在AWS子网内实现跨实例Linux VLAN接口通信的方案
由于AWS底层是L3网络,默认无法直接传递L2 VLAN帧,但可以通过L2-over-L3隧道封装VLAN流量,实现同子网内两个实例的VLAN接口互通,以下是两种可行的原生Linux方案:
方案一:GRE隧道封装VLAN流量
GRE是轻量的L3隧道协议,可直接封装L2帧,步骤如下:
实例A操作(假设私有IP为10.0.0.10)
- 创建VLAN子接口(以VLAN ID 100为例):
ip link add link eth0 name eth0.100 type vlan id 100 ip link set eth0.100 up - 创建并启动GRE隧道接口(指向实例B的私有IP):
ip tunnel add gre-tun mode gre remote 10.0.0.11 local 10.0.0.10 ttl 255 ip link set gre-tun up - 创建网桥,桥接VLAN接口与隧道接口:
brctl addbr br0 brctl addif br0 eth0.100 brctl addif br0 gre-tun ip link set br0 up
实例B操作(假设私有IP为10.0.0.11)
重复上述步骤,仅需将GRE隧道的remote参数改为实例A的私有IP(10.0.0.10),确保VLAN ID和网桥配置一致。
方案二:VXLAN隧道封装VLAN流量
VXLAN是专为L3网络设计的L2 overlay协议,更适合大规模场景,步骤如下:
实例A操作
- 创建VLAN子接口(同GRE方案):
ip link add link eth0 name eth0.100 type vlan id 100 ip link set eth0.100 up - 创建并启动VXLAN接口(VNI需与对端一致,这里用1000):
ip link add vxlan100 type vxlan id 1000 remote 10.0.0.11 local 10.0.0.10 dev eth0 dstport 4789 ip link set vxlan100 up - 桥接VLAN接口与VXLAN接口:
brctl addbr br0 brctl addif br0 eth0.100 brctl addif br0 vxlan100 ip link set br0 up
实例B操作
同样重复步骤,VXLAN接口的remote改为实例A的私有IP,VNI保持1000即可。
关键注意事项
- 安全组配置:需允许两个实例之间的隧道流量:
- GRE:允许协议号47的入站/出站流量
- VXLAN:允许UDP 4789端口的入站/出站流量
- 内核支持:现代Linux内核(3.10及以上)默认支持GRE和VXLAN模块,无需额外编译
- 网桥参数优化:避免iptables拦截网桥流量,可临时执行:
如需永久生效,将该参数写入sysctl -w net.bridge.bridge-nf-call-iptables=0/etc/sysctl.conf并执行sysctl -p。
内容的提问来源于stack exchange,提问作者maiky
相关产品推荐
相关产品推荐

