OVS+Linux Vxlan组网
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OVS+Linux Vxlan组网相关的知识,希望对你有一定的参考价值。
参考技术A 因为科研需要做些小实验,涉及到交换机的网口数据的镜像转发。之前疫情在家使用一台本地虚拟机搭建OVS并作为KVM宿主机,OVS搭建网桥,OVS新建虚拟机并使用指定网桥。因为KVM中的虚拟机需要更改内核并重新编译,所以过程确实很繁琐。这次学校内的“私有云”搭建好了,所以准备用OVS+Linux Vxlan组网的形式把实验重新做一遍。我的实验需要将两台实验机和一台测试机,三个服务器进行组网。这里使用了三台2核4G的Centos 7.6的虚拟机
在前面查资料的时候发现,网上很多教程或者案例要不是两头都是Linux ip link来组网,要不就是两边都是OVS,使用OVS来组网。在我的场景里,两边都使用Linux ip link的话,不能很好地进行流量镜像转发,两头都是OVS的话虽然也可以,但是过于繁重了,所以我们的实验是一边是OVS,另一边是Linux ip link进行点对点的Vxlan组网。测试机作为虚拟交换设备承载OVS,两台实验机分别和测试机进行点对点的Vxlan组网。
Client1 :eth0 ip:10.122.0.22/16
Clinet2 :eth0 ip:10.122.3.152/16
Test(Server) :eth0 ip:10.122.1.103/16
Firewalld Status :Stop
三台机器的eth0网卡互通
管理 VXLAN 接口
Linux VXLAN 接口的基本管理如下:
创建点对点的 VXLAN 接口:
上面这条命令创建一个名字为 vxlan0,类型为 vxlan 的网络 interface,后面是 vxlan interface 需要的参数:
id 4100 :指定 VNI 的值,这个值可以在 1 到 2^24 之间,互联的两端的ID必须保持一致,相当于一根网线的两头
dstport :vtep 通信的端口,linux 默认使用 8472(为了保持兼容,默认值一直没有更改),而 IANA 分配的端口是 4789,且OVS默认的Vxlan通信端口也是4789,所以我们这里指定了它的值为4789
remote 10.122.1.103 :对方 vtep 的地址,类似于点对点协议
local 10.122.0.22 :当前节点 vtep 要使用的 IP 地址
dev eth0 :当节点用于 vtep 通信的网卡设备,用来读取 IP 地址。注意这个参数和 local 参数含义是相同的,在这里写出来是为了告诉大家有两个参数存在
创建多播模式的 VXLAN 接口:
多播组主要通过 ARP 泛洪来学习 MAC 地址,即在 Vxlan 子网内广播 ARP 请求,然后对应节点进行响应。group 指定多播组的地址。
查看 VXLAN 接口详细信息:
启动/关闭网卡
给指定网卡分配ip
Client1和Client2分别建立一个Vxlan0的网卡, remote address 为 Test 机器 eth0 网卡的地址 10.122.1.103 , local adress 为本地服务器的 eth0 网卡的地址。
这个时候使用 ip a 命令就可以看到两个新的 vxlan0 的网卡了。
给两个网卡配上IP并启动
到这一步相当于两根网线的一头插在了两台虚拟机上了,接下来就需要把这两个网线的另一头都插到交换机上就可以了。可以使用 ip r 命令看看,在新建网卡的时候,路由也自动加上了。
这个时候先给Test服务器上的vxlan0网卡配上IP并启动就可以了。
这个时候相当于把一根网线一头插在 Test 的网口上,另一头插在 Client1 的网卡上。看一看 Test 也自动生成了路由,可以进行 ping 命令检测点到点Vxlan是否建立成功。
这里大致思路就是在Test服务器上利用OVS搭建一个网桥,然后把两个vxlan网卡加到这个网桥就可以啦。
这里不要忘记手动更改路由,删除之前vxlan0和vxlan1的路由,把所有192.168.0.0/24的指向br0网桥就可以了。
到这里就可以进行ping测试了。后面的实验就是对网桥上port的操作,就不多说了。
[参考] https://juejin.im/post/6844904126539628557
[参考] https://cizixs.com/2017/09/28/linux-vxlan/
openstack使用openvswitch实现vxlan组网
openstack使用openvswitch实现vxlan
openstack环境:
1 版本:ocata
2 系统:ubuntu16.04.2
3 控制节点 1个 + 计算节点 1个
4 控制节点网卡为ens33,ip = 172.171.5.200 ens34 manual模式 无IP
一 下载openswitch
controller :
apt-get install neutron-openvswitch-agent
compute :
apt-get install neutron-openvswitch-agent
二 配置openvswitch
配置 /etc/neutron/plugins/ml2/ml2_conf.ini 文件
etc/neutron/plugins/ml2/openvswitch_agent.ini 在[ovs]增加
配置 /etc/neutron/l3_agent.ini
配置修改/etc/neutron/plugins/ml2/ml2_conf.ini 设置如下
配置修改/etc/neutron/plugins/ml2/openvswitch_agent.ini 设置如下
增加用于外部网络的网桥
ovs-vsctl add-br br-ex
向外部网桥添加物理网卡
ovs-vsctl add-port br-ex ens33
三 dashboard配置租户网络
1 使用admin用户登录,创建外部网络。
2 以demo用户登录,创建内网。因为在后台配置时已经选择了内部网络为vxlan,所以demo用户创建的网络为vxlan。
这里配置的网段是创建的实例能够分配的地址。
创建好内网和外网之后,创建一个路由器连接两个网段。在这个路由器上完成的功能是NAT,当实例出外网时,将内网地址NAT成外网地址以便访问公网。
当网络创建好之后,网络拓扑应该是如下图所示。蓝色为公网网段,黄色为私网网段,中间是路由器,连接黄色的为开启的实例。
四 底层网络分析
与Linux-bridge不同,使用Openvswitch作为网络驱动之后创建vxlan网络会生成在controller生成三个网桥,分别是:
br-int 连接 Dnsmasq,流表逻辑处理
br-ex 连接网卡,出外网网桥
br-tun 隧道端点
在compute节点生成两中网桥,分别是:
br-int 连接虚拟机
br-tun 隧道端点,连接到controller。
如下图所示,分别是controller与compute节点的br-tun分析。
local_ip为本地隧道端点IP地址,remote_ip为对端隧道端点IP地址。本环境是管理网卡为隧道端点,也可以使用单独的网卡。
具体如下图所示:
下图为 compute节点的br-int网桥,网桥上挂有两个端点,第一个是与实例有关,第二个连接br-tun
具体见下图compute节点
下图为controller节点的端口信息,第一个为controller上br-int与br-tun的连接;第二个是dhcp的设备;第三个是dashboard中创建的路由器的一端;第四个是br-int与br-ex的连接。
上图对应的连接为下图所示
下图为controller节点的br-ex网桥,三个端口分别是:
1 路由器的另一端(还有一端在br-int)
2 自身环回口,类似linux中的环回口。
3 外网网卡
上图对应的关系如下图所示:
openstack使用openvswitch实现的VxLAN就如下图所示。图片出处为about 云 。
以上是关于OVS+Linux Vxlan组网的主要内容,如果未能解决你的问题,请参考以下文章
openstack使用openvswitch实现vxlan组网