KVM虛擬機器,使用linux bridge配置vlan隔離
利用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的隔離是生效的;