虚拟机vlan(转自zgy666)

利用linux bridge + vlan方式配置KVM虚拟机的vlan,如下图所示:

配置过程:

1、安装vconfig工具;

2、增加vlan子接口:

     vconfig add eth1 100;

     vconfig add eth1 200;

3、增加vlan子接口对应的bridge设备,配置br100的IP为172.20.100.1,配置br200的IP为172.20.200.1:

      brctl add br br100;

      brctl add br br200;

4、将vlan子接口挂到bridge上:

     brctl  addif br100 eth1.100;

     brctl addif br200 eth1.200;

5、创建2个VM,将veth设备分别挂在br100和br200上;

6、进入VM,配置IP分配为172.20.100.3,172.20.200.3。

问题:

以上配置完成后,发现在宿主机上ping VM1(172.20.100.1)能ping通,但是pingVM2(172.20.200.3)不通,通过抓包工具发现在ping VM2的时候,走的是br100网桥,如下图所示:

在宿主机上查看路由配置信息如下:

从上面的路由表可以发现宿主机上存在两个172.20.0.0/24的表项,其中一个走br100,一个走br200,所以发往172.20.0.0/24的报文都默认走第一条记录,即通过br100发送,这跟上面的转包信息也符合;

修复过程:

1、将原来的两条172.20.0.0/24的路由表信息删除,添加如下两条路由表:

ip route add 170.20.100.0/24 via 0.0.0.0 dev  br100

ip route add 170.20.200.0/24 via 0.0.0.0 dev  br200

添加完成的路由信息如下图所示:

现在再去ping VM1、VM2发现都ping不通!同样通过在宿主机抓取发往VM1的报文,发现报文的源IP为br0的IP,说明此时走的路由规则应该是route -n查询的第一条记录,如下所示:

2、ifconfig 发现br100、br200默认的掩码位数是16位,这与route表里配置的Genmask不符,因此修改br100、br200的ifcfg配置文件,设置NETMASK=255.255.255.0,重启服务;

3、宿主机上ping VM1、VM2均能ping通,VM1、VM2ping宿主机也能ping通, VM1、VM2之间ping不通,说明vlan的隔离是生效的;

猜你喜欢

转载自blog.csdn.net/chinamasala/article/details/82756542