kvm+linux bridge实现trunk vlan
kvm+linux bridge实现trunk vlan
1引言
1.1编写目的
其实不用linux bridge 也可以,比如说用ovs,而且会更方便,用Linux bridge主要是因为kvm 和 Linux bridge都是Linux系统自带的工具,不需要额外安装,而且性能和稳定性都十分有保证
如果能在Linux bridge上实现trunk 口 那么我们就可以在vm层面模仿vlan的所有操作。所有关于vlan的验证都可以不用跑到机房配置交换机来验证,而是在物理机上配置vm就轻松搞定了一个vlan的环境
2安装配置
2.1部署拓扑
-
最终可以实现 虚拟机eth0 能够通过物理交换机和物理机2的em1网卡进行trunk vlan交互,而虚拟机的eth1和物理机2的em2 网卡通过物理交换机互通,最终看起来虚拟机就和一个物理机是一样的
2.2 前置条件
-
关闭Linux bridge的防火墙 添加下面几个参数到 文件 /etc/sysctl.conf中
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
net.bridge.bridge-nf-filter-pppoe-tagged = 0
net.bridge.bridge-nf-filter-vlan-tagged = 0
-
按照上面的拓扑图设置好交换机的trunk口,并且连接好对应的网卡到交换机的trunk口
-
手动添加好两个Linux bridge网桥
brctl addbr br0
brctl stp br0 on
brctl addbr br1
brctl stp br1 on
2.3配置管理网络网桥
按照上面的拓扑,br0是一个管理网络的网桥,虚拟机通过桥接方式连接到br0网桥上,从而连接到物理网络上,由于vm可以通过br0网桥直接连接到物理网络,也就是vm可以直接使用物理网络的ip,所以需要把管理网络的网卡插入到br0中
这个可以通过修改网卡配置文件来进行上面的配置
/etc/sysconfig/network-scripts/ifcfg-br0
把原来物理网卡em2的ip直接复制给br0,br0代替了原来的em2
下面看下em2网卡变成了什么样子
可以看到原来的ip都被注释了,而且BOOTPROTO=none了
配置好两个文件后,重启network 服务就可以看到这样的效果了
上面的图里面的em3 应该是em2 截图错了
em3 网卡被插入到了br0中
2.4配置Trunk vlan网络网桥
按照上面的方法,通过配置文件我们也可以实现把Trunk vlan 对应的网卡插入到br1 网桥中,或者你也可以手动的添加物理网卡到br1中
brctl addif br1 em1
这样就把em1网卡插入到br1中,注意的是em1的网卡配置文件要和上面的em2的配置文件修改成一样,不能再有ip 最终应该实现的效果如下图:
下面我们说下最重要的部分就是怎么让br1 这个Linux bridge能够设置trunk口
其实就是用Linux里面的 vconfig来设置子网口的方式
比如你想让br1 网桥允许 301、302、303 这三个vlan 通过,也就是经过br1的时候要给报文打上这三个vlan的标签,那么只需要被br1 设置这三个网络的子网口就可以了
vconfig add br1 301
vconfig add br1 302
vconfig add br1 303
把三个子网口up起来
ifconfig br1.301 0 up
ifconfig br1.302 0 up
ifconfig br1.303.0 up
查看三个子网口
最终实现的效果如下图
通过以上步骤就完成了所有网络方面的配置了,下面就是建立vm并且使用这两个网桥来实现管理网络的互通和数据网络的(也就是可以通过多个vlan的网络)互通
另外注意的是我们想让多少个vlan通过 就给br1 添加多少个子接口就可以了
2.5配置虚拟机
-
虚拟机建议使用virt-manage来启动,没有安装virt-manage 可以用如下命令来安装virt-manager
yum install -y epel-release
yum install -y virt-manager
-
创建一个vm,其中网卡是这样创建的
管理网段的网卡配置
trunk vlan 网络的网卡配置
总之就是虚拟机的两个网卡要分别使用 br0 和br1 这两个Linux bridge,不一定和我这个截图一样
最终的效果图如下:
2.6测试连通性
我们拓扑图中还有一个物理机2 那个上面没有任何的Linux bridge,但是上面有一个网卡是连接了trunk 口的我们可以让这个物理机2上面的trunk口 就是下图的 em1
让物理机的em1 trunk 口配置个vlan 301 并且给给ip
vconfig add em1 301
ifconfig em1.301 192.168.200.222/24 up
这样em1.301 这个子接口就是一个能接收 vlan 301的网卡了
下面去虚拟机中进行相同的配置,给虚拟机的 eth1 网卡加一个301 的子接口
vconfig add eth1 301
ifconfig eth1.301 192.168.200.221/24 up
这样就在虚拟机中有了一个能接收vlan 301 的网卡
在虚拟机中ping 物理机2 的 192.168.200.222 是可以通的
然后可以在物理机2 的网卡上抓包会发现有 vlan tag
证明虚拟机通过物理交互机的trunk口,正确的到达了物理机2的物理口
另外虚拟机的eth0 管理口ip 就可以正常的配置就可以了,因为它不是一个trunk口,不需要配置子接口,配置的ip 就能和物理网络互通了