Linux不显式支持super-vlan,只支持vlan,如果要实现super-vlan,就必须通过vlan桥接+ectables过滤二层数据帧的方式来实现。
vlan桥接可以实现super-vlan下的vlan互访和对外访问:通过super-vlan的三层接口地址;
ectables可以过滤vlan之间的广播帧:这是因为linux下的桥接实现并不能隔离广播域,也就是说假如桥接一边的VLAN 2中发出一个广播包,桥接另一边的VLAN 3也能收到该广播包,这显然不符合super-vlan的“二层隔离,三层互通”的原则。
简单的配置示例(不包含ectables的配置),vmware验证通过:
1.创建bridge1:
brctl addbr bridge1
2.将eth0接口加入bridge1:
ifconfig eth0 0.0.0.0 down
ifconfig eth0 0.0.0.0 promisc
brctl addif bridge1 eth0
ifconfig bridge1 192.168.0.2 netmask 255.255.255.0 up
3.创建VLAN:
vconfig add eth0 2
vconfig add eth0 3
4.将VLAN加入bridge:
ifconfig eth0.2 0.0.0.0 down
ifconfig eth0.2 0.0.0.0 promisc
brctl addif bridge1 eth0.2
ifconfig eth0.3 0.0.0.0 down
ifconfig eth0.3 0.0.0.0 promisc
brctl addif bridge1 eth0.3
5.进行arp绑定(因为网关192.168.0.1是vmware的vmnet1,不是路由器,无法获取到目的IP的MAC地址):
arp -s 192.168.1.120 00:26:18:c2:4f:c0 -i eth0.2
arp -s 192.168.1.120 00:26:18:c2:4f:c0 -i eth0.3
arp -s 192.168.1.29 BC:AE:C5:C1:77:89 -i eth0.2
arp -s 192.168.1.29 BC:AE:C5:C1:77:89 -i eth0.3
route add default gw 192.168.0.1
6.利用traceroute工具进行测试,在目标PC 192.168.1.29 上进行抓包:
traceroute -i eth0.2 192.168.1.29
traceroute -i eth0.3 192.168.1.29
7.可以发现两次traceroute的源地址一样,但是所携带的VLAN ID却不相同。
上述配置只是当前有效,如果需要启动后生效,需要将上述配置加入/etc/rc.d/rc.local中,让系统每次启动时候自动运行