一、關於VXLAN
VXLAN 是 Virtual eXtensible LANs 的縮寫,它是對 VLAN 的一個擴展,是非常新的一個 tunnel 技術,在Open vSwitch中應用也非常多。Linux 內核的 upstream 中也剛剛加入 VXLAN 的實現。相比 GRE tunnel 它有着很好的擴展性,同時解決了很多其它問題。
二、實驗背景
Linux內核模塊在支持Open vSwitch之后又加入了支持隧道的功能,但是某些內核版本的的Linux可能只支持Open vSwitch而不支持隧道技術。支持隧道技術的對應最低Linux內核版本如下:
本實驗操作系統是在兩台虛擬機中安裝的基於4.20Linux內核版本的centos 7.2,滿足VXLAN正常運行的條件。同時需要安裝好Open vSwitch,本實驗安裝的是Open vSwitch 2.3.0版本。
centos7.2內核默認為3.10,需要升級:https://www.cnblogs.com/jinyuanliu/p/10368780.html
| 服務器 | 操作系統版本 | 內核版本 | ovs版本 | |
| 10.1.80.110 | centos7.2 | 4.20.8 | 2.5.0 | |
| 10.1.80.111 | centos7.2 | 4.20.8 | 2.5.0 |
注:因為實驗本身就是在虛擬環境下操作,所以實驗中br1橋上實際上並沒有再下掛任何主機,
實驗中我們是分別給兩台虛擬機的br1指定兩個不同網段的ip,然后通過搭建VXLAN隧道讓這兩個不同網段的網橋能夠實現通信
三、基礎環境配置
1、關閉防火牆、selinux、networkmanager
hostnamectl set-hostname node1 #修改hosts文件 #關閉firewalld [root@node1 ~]# systemctl stop firewalld.service [root@node1 ~]# systemctl disable firewalld.service #關閉NetworkManager [root@node1 ~]# systemctl stop NetworkManager.service [root@node1 ~]# systemctl disable NetworkManager.service
#關閉selinux #重啟網卡 service network restart
2、安裝OVS
參考文檔,在兩個節點安裝ovs軟件:
https://www.cnblogs.com/jinyuanliu/p/10369415.html
四、VXLAN隧道搭建
4.1配置node1
在node1上添加名為br0和br1的兩個網橋:
ovs-vsctl add-br br0 ovs-vsctl add-br br1 #列出所有網橋 ovs-vsctl list-br
在br0上添加一個端口,將ens160掛載到br0上。
這樣做的目的是方便我們在虛擬網橋上添加多個端口供我們使用,這樣不必受限於ens160的有限端口。
注意:執行后會導致失去連接
ovs-vsctl add-port br0 ens160
此時我們將原先ens160分配的ip清除並指定給br0,並且根據實際情況配置一下br0的網關。讓虛擬機網絡能通過br0繼續工作。
ifconfig ens160 0 up ifconfig br0 10.1.80.119/24 up route add default gw 10.1.80.254 br0
給br1網橋分配一個ip。
ifconfig br1 11.0.0.1/24 up
4.2 配置node2
按照node1同樣的方式來配置node2
ovs-vsctl add-br br0 ovs-vsctl add-br br1 ovs-vsctl add-port br0 ens160 ifconfig ens160 0 up && ifconfig br0 10.1.80.111/24 up route add default gw 10.1.80.254 br0
給node2的br1網橋分配一個和Host1中br1不同網段的ip。
ifconfig br1 11.0.1.1/24 up

4.3 搭建VXLAN隧道
在搭建隧道之前我們先測試一下兩台虛擬機Host1和Host2上的br0和br1兩兩之間是否能相互通信。
#node1 ping node2的br0,通 [root@node1 ~]# ping 10.1.80.111 PING 10.1.80.111 (10.1.80.111) 56(84) bytes of data. 64 bytes from 10.1.80.111: icmp_seq=1 ttl=64 time=0.355 ms 64 bytes from 10.1.80.111: icmp_seq=2 ttl=64 time=0.482 ms 64 bytes from 10.1.80.111: icmp_seq=3 ttl=64 time=0.463 ms
#node1 ping node2的br1,不通 [root@node1 ~]# ping 11.0.1.1 PING 11.0.1.1 (11.0.1.1) 56(84) bytes of data.
我們搭建隧道的目的就是讓兩台機器的br1(數據層面)能夠實現通信。
1)在node1上設置VXLAN,遠端ip設置為node2能對外通信的br0的ip。
ovs-vsctl add-port br1 vxlan1 -- set interface vxlan1 type=vxlan options:remote_ip=10.1.80.111 ovs-vsctl show ip addr add 11.0.1.1/24 dev br1

2) 在node2上設置VXLAN,遠端ip設置為node1能對外通信的br0的ip。
ovs-vsctl add-port br1 vxlan1 -- set interface vxlan1 type=vxlan options:remote_ip=10.1.80.110 ovs-vsctl show ip addr add 11.0.0.1/24 dev br1

4.4 驗證VXLAN隧道的可用性
兩台機器的br1互ping可以實現正常通信:
基於Open vSwitch的VXLAN隧道,實現了不同網段內網機器的通信。



