1. 程式人生 > >KVM虛擬機器,使用linux bridge配置vlan隔離

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的隔離是生效的;