模拟普通VLAN
需要三台虚拟机:openwrt,虚拟交换机和客户机
这里的重点在虚拟交换机,如果不需要模拟VLAN的access口,vmware是可以很方便的添加普通的交换机的。
整体的网络架构如下图所示
graph LR
A[网关] --- B{虚拟交换机}
B -->|VLAN 1001| C[客户机 192.168.100.*]
B -->|VLAN 1002| D[客户机 192.168.101.*]
网关这台虚拟机配置2个虚拟网卡即可,一个用于连接虚拟交换机,一个用于做WAN口
图中的网络适配器4就是连接虚拟交换机的网卡,连接配置成LAN区段,LAN区段就是一个vmware提供的虚拟交换机,不过不能打vlan tag。
然后在界面上添加2个VLAN,分别对应VLANID 1001和1002,注意要把dhcp也开启了
虚拟交换机用任意linux都可以,我用的ubuntu 20.04,添加3块网卡,分别对应2个access口和1个trunk口。
这里新建了一个LAN区段 switch-1,用于连接客户机
这个和网关的网卡在一个LAN区段,也就是网络上是互通的
然后可以打vlan tag的虚拟交换机用openvswitch实现
sudo apt update
sudo apt install openvswitch-switch
# 测试一下安装是否正确
sudo ovs-vsctl show
安装好之后,执行如下操作添加虚拟交换机,access口和trunk口
# 先up网卡
sudo ip link set ens38 up
sudo ip link set ens39 up
# 给交换机添加两个access口,id分别是1001和1002
sudo ovs-vsctl add-port br1001 ens38 tag=1001
sudo ovs-vsctl add-port br1001 ens39 tag=1002
# 添加一个trunk口
sudo ovs-vsctl add-port br1001 ens34 trunks=1001,1002
最后是客户机,只要加入switch-1这个lan区段就可以了
这时客户机已经可以上网了,并且在网关上抓包是可以看到vlan id的
不过有个缺点,这样建立的VLAN之间是互通的,通过独臂路由,需要加防火墙规则禁掉
vlan1002可以ping通vlan1001
模拟Super VLAN
前面虚拟交换机和客户机的配置不需要改变,需要调整一下网关的配置,删掉上面配置的VLAN,重新添加两个vlan设备,然后用一个网桥把这两个设备连起来
然后用br_vlan添加一个接口,记得开启dhcp,现在配置ip是102网段
然后客户端的机器现在dhcp获取的就是102网段的ip了
并且此时已经可以上网了,VLANID也可以带上了,但是还是和普通VLAN一个问题,两个不同的VLAN之间是可以通讯的,现在可以用ebtables来限制一下,在openwrt上执行
ebtables -P FORWARD DROP
ebtables -I FORWARD -i eth3.+ -o eth1.+ -j ACCEPT
只转发外网的包,内网之间的都DROP掉,这样就实现了超级VLAN的效果了
可以上网,但是不同vlan间不通