背景
因?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 address為Test機(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)加上了。

在
Test服務(wù)器上新建兩個(gè)vxlan網(wǎng)卡,ID和remote 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是否建立成功。

這個(gè)時(shí)候把
Test服務(wù)器上的vxlan1按照相同的命令也配上ip,并啟動(dòng),ping檢測(cè),發(fā)現(xiàn)不能ping通。這個(gè)時(shí)候我們看一下Test服務(wù)器上的路由。
可以看到,因?yàn)榕涞?code>ip都是
192.168.0.0/24段的,明顯最后一條走vxlan1的路由不會(huì)生效,因?yàn)闀?huì)優(yōu)先匹配他前面走vxlan0的路由,這個(gè)時(shí)候可以選擇配不同段的ip或者自己改一改路由策略。
我這里給
Client2的vxlan0網(wǎng)卡上多配一個(gè)ip,然后也給Test服務(wù)器上的Vxlan1網(wǎng)卡多配一個(gè)ip,即可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/