美文网首页Openstack
OVS+Linux Vxlan组网

OVS+Linux Vxlan组网

作者: 折戟尘风 | 来源:发表于2020-08-05 16:25 被阅读0次

    背景

    因为科研需要做些小实验,涉及到交换机的网口数据的镜像转发。之前疫情在家使用一台本地虚拟机搭建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 接口:

    ip link add vxlan0 type vxlan id 4100 remote 10.122.1.103 local 10.122.0.22 dstport 4789 dev eth0
    

    上面这条命令创建一个名字为 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 接口:

    ip link add vxlan0 type vxlan id 4100 group 224.1.1.1 dstport 4789 dev eth0
    

    多播组主要通过 ARP 泛洪来学习 MAC 地址,即在 Vxlan 子网内广播 ARP 请求,然后对应节点进行响应。group 指定多播组的地址。
    查看 VXLAN 接口详细信息:

    ip -d link show vxlan0
    

    启动/关闭网卡

    ip link set vxlan0 up/down
    

    给指定网卡分配ip

    ip addr add 192.168.0.2/24 dev vxlan0
    

    实验开始

    Client1和Client2分别建立一个Vxlan0的网卡,remote addressTest机器eth0网卡的地址10.122.1.103,local adress为本地服务器的eth0网卡的地址。

    #Client1
    ip link add vxlan0 type vxlan id 4200 remote 10.122.3.152 local 10.122.1.103 dstport 4789 dev eth0
    #Clinet2
    ip link add vxlan0 type vxlan id 4300 remote 10.122.1.103 local 10.122.3.152 dstport 4789 dev eth0
    

    这个时候使用ip a命令就可以看到两个新的vxlan0的网卡了。
    给两个网卡配上IP并启动

    #Client1
    ip addr add 192.168.0.2/24 dev vxlan0
    ip link set vxlan0 up
    #Client2
    ip addr add 192.168.0.3/24 dev vxlan0
    ip link set vxlan0 up
    

    到这一步相当于两根网线的一头插在了两台虚拟机上了,接下来就需要把这两个网线的另一头都插到交换机上就可以了。可以使用ip r命令看看,在新建网卡的时候,路由也自动加上了。

    Route
    Test服务器上新建两个vxlan网卡,IDremote address分别和两台Client对应。
    #vxlan0 对应Client1
    ip link add vxlan0 type vxlan id 4200 remote 10.122.0.22 local 10.122.1.103 dstport 4789 dev eth0
    #vxlan1 对应Client2
    ip link add vxlan1 type vxlan id 4300 remote 10.122.3.152 local 10.122.1.103 dstport 4789 dev eth0
    

    这个时候先给Test服务器上的vxlan0网卡配上IP并启动就可以了。

    ip addr add 192.168.0.4/24 dev vxlan0
    ip link set vxlan0 up 
    

    这个时候相当于把一根网线一头插在Test的网口上,另一头插在Client1的网卡上。看一看Test也自动生成了路由,可以进行ping命令检测点到点Vxlan是否建立成功。

    Ping
    这个时候把Test服务器上的vxlan1按照相同的命令也配上ip,并启动,ping检测,发现不能ping通。这个时候我们看一下Test服务器上的路由。
    Route
    可以看到,因为配的ip都是192.168.0.0/24段的,明显最后一条走vxlan1的路由不会生效,因为会优先匹配他前面走vxlan0的路由,这个时候可以选择配不同段的ip或者自己改一改路由策略。
    IP
    我这里给Client2vxlan0网卡上多配一个ip,然后也给Test服务器上的Vxlan1网卡多配一个ip,即可ping通。
    ping
    到这里,基本已经利用Linux的ip link把三个机器通过点到点Vxlan连接起来了,因为我的实验的场景特殊,需要进行二层流量镜像,所以下面加入OVS以便进行底层流量镜像。

    OVS

    这里大致思路就是在Test服务器上利用OVS搭建一个网桥,然后把两个vxlan网卡加到这个网桥就可以啦。

    #构建一个br0的网桥
    ovs-vsctl add-br br0
    # 把两个vxlan网卡加到br0中
    ovs-vsctl add-port br0 vxlan0
    ovs-vsctl add-port br0 vxlan1
    # 给br0配上一个ip,并启动
    ifconfig br0 192.168.0.1/24 up
    

    这里不要忘记手动更改路由,删除之前vxlan0和vxlan1的路由,把所有192.168.0.0/24的指向br0网桥就可以了。

    #删除两个路由
    ip route del 192.168.0.0/24 dev vxlan0 proto kernel scope link src 192.168.0.4
    ip route del 192.168.0.0/24 dev vxlan1 proto kernel scope link src 192.168.0.5
    #添加br0的路由,这个会自动添加,没有就手动添加一下
    ip route add 192.168.0.0/24 dev br0 proto kernel scope link src 192.168.0.1
    

    到这里就可以进行ping测试了。后面的实验就是对网桥上port的操作,就不多说了。
    [参考]https://juejin.im/post/6844904126539628557
    [参考]https://cizixs.com/2017/09/28/linux-vxlan/

    相关文章

      网友评论

        本文标题:OVS+Linux Vxlan组网

        本文链接:https://www.haomeiwen.com/subject/vdewrktx.html