【ODL-Openstack学习系列-02】-vxlan隧道ovs手动构建及私网互通分析

ovs vxlan隧道手动搭建及私网互通测试

1 前言

​ 学习了openstack一段时间,本人对于linux强大的网络功能充满兴趣,因为对于linux的网络功能包括nat、vxlan隧道配置等有了一定基础,希望通过测试配置两个私有网络,通过vxlan隧道配置实现私有网络在跨路由器实现二三层互通。另外也可以借助这个过程,通过抓包分析,对于网路的互通、vxlan、arp、icmp有一个更加清晰的认识。

2 环境描述

​ 网络环境描述如下所示,其中host1和host2分别有一个wlp3s0和ens161接口,双方借助外部网络路由器实现互通(这里不限定个数,可以实现互通即可)。

  • host1外部网络环境
    在这里插入图片描述

  • host2外部网络环境
    在这里插入图片描述

  • 互通示意图

    如下图示意,host1和host2为两个不同网络内的虚机或者电脑,通过多个路由器和交换机组网实现互通,目前期望将host1上的br0和 host2上的br0配置到两个私有网段,通过vxlan隧道实现两台主机的私有网段能实现互通。此处要点有二:

    • 在两个host的br0上配置vxlan隧道,使host1 br0和host2 br0构建成一个基于三层的underlay构建的overlay大二层网络。
    • 由于正常情况下vxlan隧道的网络需要构建在一个网段内,但是两个br0网桥此次希望尝试两个不同网段,因此需要借助linux内核路由转发,为两个网络添加直连路由实现互通。
       host1                                                 host2
 ----------------                                        -------------
 |     host1    |                                        |   host2   |
 ----------------                                        -------------
    |        |                                            |      |
    |        |----------------routers---------------------|      |
    br0   wlp3s0(10.42.4.71)          (10.190.49.211) ens160    br0
    |                                                             |
接入内部网络1(192.168.11.10/24)                           接入内部网络2 (192.168.22.1/24)                            

3 host1配置

host1上的配置可总结下所示:

#### 1-添加br0网桥
sudo ovs-vsctl add-br br0

#### 2-为br0网桥添加ip地址,并使能;
ifconfig br0 192.168.11.10/24 up

#### 3-配置vxlan接口;
##注意:此处remote_ip为host2公网ip
ovs-vsctl add-port br0 vx1 -- set interface vx1 type=vxlan options:remote_ip=10.190.49.126
##或者带上本端ip和key
ovs-vsctl add-port br0 vx1 -- set interface vx1 type=vxlan options:{local_ip=10.42.4.71,remote_ip=10.190.49.211,key=1}

#### 4-添加host2上私有网段的直连路由
 sudo route add -net 192.168.2.0/24 dev br0
 
 ############
 #所有配置完成#
 ############

配置完成后,host1上ovs查看如下所示:
在这里插入图片描述

配置完成后,host1上ifconfig查看如下所示:

  • br0
    在这里插入图片描述

  • vxlan
    在这里插入图片描述

host1静态路由配置:
在这里插入图片描述

4 host2配置

host2上的配置可总结下所示:

#### 1-添加br0网桥
sudo ovs-vsctl add-br br0

#### 2-为br0网桥添加ip地址,并使能;
ifconfig br0 192.168.11.10/24 up

#### 3-配置vxlan接口;
##注意:此处remote_ip为host2公网ip
ovs-vsctl add-port br0 vx1 -- set interface vx1 type=vxlan options:remote_ip=10.190.49.126
##或者带上本端ip和key
ovs-vsctl add-port br0 vx1 -- set interface vx1 type=vxlan options:{local_ip=10.190.49.211,remote_ip=10.42.4.71 ,key=1}

#### 4-添加host2上私有网段的直连路由
sudo route add -net 192.168.2.0/24 dev br0

############
#所有配置完成#
############

配置完成后,host2上ovs查看如下所示:
在这里插入图片描述

配置完成后,host1上ifconfig查看如下所示:

  • br0

在这里插入图片描述

  • vxlan
    在这里插入图片描述

host2静态路由配置:
在这里插入图片描述

5 抓包分析

经过3、4两张配置成功后,就可以实现跨网络的两个内部网络访问,如下所示为通过wireshark抓包后的一些分析:

  • 图1为host1 br0的抓包,我们可见两个内部网络可以实现包的互相ping,但是报文中没有vxlan隧道报文的底层细节,证明到达此处的icmp报文是已经剥离vxlan隧道的报文;

在这里插入图片描述

  • 图2为host1 wlp3s0网口的抓包,此处也能抓到相关icmp报文,并且此时icmp报文承载udp报文内部,清晰课件vxlan隧道的踪影;
    在这里插入图片描述

6 实验问题

实验中出现了vxlan隧道无法建立的问题,检查ovs配置文件和日志,发现了一些错误,但是无法解决。后来通过互相ping抓包发现,是两个host其中一测host1的ovs存在问题;具体现象是:

  • 从host2 ping host1可以在host1上抓到host1传过来的vxlan报文,但是wireshark提示无法找到对应端口;
  • 从host1 ping host2无法抓到任何出方向包;
  • 命令行查看udp端口监听情况可以发现vxlan隧道端口4789在host1上未监听,而在host2上是正常的,具体命令如下所示:
    在这里插入图片描述

原因分析:

通过现象分析,初步认为是host1的相关进程存在问题,因此停止了host1的ovs服务,清除其数据库,重新启动相关服务,重新按照步骤3操作,问题得到解决,具体命令行如下:

sudo -s
systemctl stop openvswitch-switch.service
rm -rf /var/log/openvswitch/*
rm -rf /etc/openvswitch/conf.db
systemctl start openvswitch

7 总结及备忘

  • 通过vxlan隧道配置验证了相关vxlan功能原理,同时通过抓包大致明晰了vxlan报文的原理;
  • 实验过程中刻意尝试使用ping 命令ping了一个未分配ip的192.168.22.8ping 包,刻意通过抓包看到相关arp报文查询此ip,也能见到arp报文通过vxlan隧道传至对端。
  • 此处的实验尝试是出于一个私心,部分网段的权限更高,实现隧道网络的私有网段传播只是其中第一步,后续可尝试配置nat,实现通过私有网段实验外网访问,待后续验证;
  • vxlan隧道的udp端口号为4789,当出现问题需要关注相关端口的监听状态,可辅助定位部分问题;
  • 后续尝试gre隧道配置,进一步尝试分析;

猜你喜欢

转载自blog.csdn.net/xinquanv1/article/details/82909873