OVS+Linux Vxlan組網(wǎng)

背景

因?yàn)榭蒲行枰鲂┬?shí)驗(yàn),涉及到交換機(jī)的網(wǎng)口數(shù)據(jù)的鏡像轉(zhuǎn)發(fā)。之前疫情在家使用一臺(tái)本地虛擬機(jī)搭建OVS并作為KVM宿主機(jī),OVS搭建網(wǎng)橋,OVS新建虛擬機(jī)并使用指定網(wǎng)橋。因?yàn)镵VM中的虛擬機(jī)需要更改內(nèi)核并重新編譯,所以過(guò)程確實(shí)很繁瑣。這次學(xué)校內(nèi)的“私有云”搭建好了,所以準(zhǔn)備用OVS+Linux Vxlan組網(wǎng)的形式把實(shí)驗(yàn)重新做一遍。
我的實(shí)驗(yàn)需要將兩臺(tái)實(shí)驗(yàn)機(jī)和一臺(tái)測(cè)試機(jī),三個(gè)服務(wù)器進(jìn)行組網(wǎng)。這里使用了三臺(tái)2核4G的Centos 7.6的虛擬機(jī)

實(shí)驗(yàn)過(guò)程

在前面查資料的時(shí)候發(fā)現(xiàn),網(wǎng)上很多教程或者案例要不是兩頭都是Linux ip link來(lái)組網(wǎng),要不就是兩邊都是OVS,使用OVS來(lái)組網(wǎng)。在我的場(chǎng)景里,兩邊都使用Linux ip link的話,不能很好地進(jìn)行流量鏡像轉(zhuǎn)發(fā),兩頭都是OVS的話雖然也可以,但是過(guò)于繁重了,所以我們的實(shí)驗(yàn)是一邊是OVS,另一邊是Linux ip link進(jìn)行點(diǎn)對(duì)點(diǎn)的Vxlan組網(wǎng)。測(cè)試機(jī)作為虛擬交換設(shè)備承載OVS,兩臺(tái)實(shí)驗(yàn)機(jī)分別和測(cè)試機(jī)進(jìn)行點(diǎn)對(duì)點(diǎn)的Vxlan組網(wǎng)。

三臺(tái)機(jī)器基礎(chǔ)信息

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
三臺(tái)機(jī)器的eth0網(wǎng)卡互通

基礎(chǔ)命令

管理 VXLAN 接口
Linux VXLAN 接口的基本管理如下:
創(chuàng)建點(diǎn)對(duì)點(diǎn)的 VXLAN 接口:

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

上面這條命令創(chuàng)建一個(gè)名字為 vxlan0,類型為 vxlan 的網(wǎng)絡(luò) interface,后面是 vxlan interface 需要的參數(shù):
id 4100:指定 VNI 的值,這個(gè)值可以在 1 到 2^24 之間,互聯(lián)的兩端的ID必須保持一致,相當(dāng)于一根網(wǎng)線的兩頭
dstport:vtep 通信的端口,linux 默認(rèn)使用 8472(為了保持兼容,默認(rèn)值一直沒(méi)有更改),而 IANA 分配的端口是 4789,且OVS默認(rèn)的Vxlan通信端口也是4789,所以我們這里指定了它的值為4789
remote 10.122.1.103:對(duì)方 vtep 的地址,類似于點(diǎn)對(duì)點(diǎn)協(xié)議
local 10.122.0.22:當(dāng)前節(jié)點(diǎn) vtep 要使用的 IP 地址
dev eth0:當(dāng)節(jié)點(diǎn)用于 vtep 通信的網(wǎng)卡設(shè)備,用來(lái)讀取 IP 地址。注意這個(gè)參數(shù)和 local 參數(shù)含義是相同的,在這里寫(xiě)出來(lái)是為了告訴大家有兩個(gè)參數(shù)存在
創(chuàng)建多播模式的 VXLAN 接口:

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

多播組主要通過(guò) ARP 泛洪來(lái)學(xué)習(xí) MAC 地址,即在 Vxlan 子網(wǎng)內(nèi)廣播 ARP 請(qǐng)求,然后對(duì)應(yīng)節(jié)點(diǎn)進(jìn)行響應(yīng)。group 指定多播組的地址。
查看 VXLAN 接口詳細(xì)信息:

ip -d link show vxlan0

啟動(dòng)/關(guān)閉網(wǎng)卡

ip link set vxlan0 up/down

給指定網(wǎng)卡分配ip

ip addr add 192.168.0.2/24 dev vxlan0

實(shí)驗(yàn)開(kāi)始

Client1和Client2分別建立一個(gè)Vxlan0的網(wǎng)卡,remote addressTest機(jī)器eth0網(wǎng)卡的地址10.122.1.103,local adress為本地服務(wù)器的eth0網(wǎng)卡的地址。

#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

這個(gè)時(shí)候使用ip a命令就可以看到兩個(gè)新的vxlan0的網(wǎng)卡了。
給兩個(gè)網(wǎng)卡配上IP并啟動(dòng)

#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

到這一步相當(dāng)于兩根網(wǎng)線的一頭插在了兩臺(tái)虛擬機(jī)上了,接下來(lái)就需要把這兩個(gè)網(wǎng)線的另一頭都插到交換機(jī)上就可以了。可以使用ip r命令看看,在新建網(wǎng)卡的時(shí)候,路由也自動(dòng)加上了。

Route

Test服務(wù)器上新建兩個(gè)vxlan網(wǎng)卡,IDremote address分別和兩臺(tái)Client對(duì)應(yīng)。

#vxlan0 對(duì)應(yīng)Client1
ip link add vxlan0 type vxlan id 4200 remote 10.122.0.22 local 10.122.1.103 dstport 4789 dev eth0
#vxlan1 對(duì)應(yīng)Client2
ip link add vxlan1 type vxlan id 4300 remote 10.122.3.152 local 10.122.1.103 dstport 4789 dev eth0

這個(gè)時(shí)候先給Test服務(wù)器上的vxlan0網(wǎng)卡配上IP并啟動(dòng)就可以了。

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

這個(gè)時(shí)候相當(dāng)于把一根網(wǎng)線一頭插在Test的網(wǎng)口上,另一頭插在Client1的網(wǎng)卡上??匆豢?code>Test也自動(dòng)生成了路由,可以進(jìn)行ping命令檢測(cè)點(diǎn)到點(diǎn)Vxlan是否建立成功。

Ping

這個(gè)時(shí)候把Test服務(wù)器上的vxlan1按照相同的命令也配上ip,并啟動(dòng),ping檢測(cè),發(fā)現(xiàn)不能ping通。這個(gè)時(shí)候我們看一下Test服務(wù)器上的路由。
Route

可以看到,因?yàn)榕涞?code>ip都是192.168.0.0/24段的,明顯最后一條走vxlan1的路由不會(huì)生效,因?yàn)闀?huì)優(yōu)先匹配他前面走vxlan0的路由,這個(gè)時(shí)候可以選擇配不同段的ip或者自己改一改路由策略。
IP

我這里給Client2vxlan0網(wǎng)卡上多配一個(gè)ip,然后也給Test服務(wù)器上的Vxlan1網(wǎng)卡多配一個(gè)ip,即可ping通。
ping

到這里,基本已經(jīng)利用Linux的ip link把三個(gè)機(jī)器通過(guò)點(diǎn)到點(diǎn)Vxlan連接起來(lái)了,因?yàn)槲业膶?shí)驗(yàn)的場(chǎng)景特殊,需要進(jìn)行二層流量鏡像,所以下面加入OVS以便進(jìn)行底層流量鏡像。

OVS

這里大致思路就是在Test服務(wù)器上利用OVS搭建一個(gè)網(wǎng)橋,然后把兩個(gè)vxlan網(wǎng)卡加到這個(gè)網(wǎng)橋就可以啦。

#構(gòu)建一個(gè)br0的網(wǎng)橋
ovs-vsctl add-br br0
# 把兩個(gè)vxlan網(wǎng)卡加到br0中
ovs-vsctl add-port br0 vxlan0
ovs-vsctl add-port br0 vxlan1
# 給br0配上一個(gè)ip,并啟動(dòng)
ifconfig br0 192.168.0.1/24 up

這里不要忘記手動(dòng)更改路由,刪除之前vxlan0和vxlan1的路由,把所有192.168.0.0/24的指向br0網(wǎng)橋就可以了。

#刪除兩個(gè)路由
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的路由,這個(gè)會(huì)自動(dòng)添加,沒(méi)有就手動(dòng)添加一下
ip route add 192.168.0.0/24 dev br0 proto kernel scope link src 192.168.0.1

到這里就可以進(jìn)行ping測(cè)試了。后面的實(shí)驗(yàn)就是對(duì)網(wǎng)橋上port的操作,就不多說(shuō)了。
[參考]https://juejin.im/post/6844904126539628557
[參考]https://cizixs.com/2017/09/28/linux-vxlan/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容