1. 程式人生 > >【ODL-Openstack學習系列-02】-vxlan隧道ovs手動構建及私網互通分析

【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隧道配置,進一步嘗試分析;