ovs實現VLAN隔離


基於:https://www.910216.com/archives/openvswitch_vlan.html

注意:不要使用mininet進行實驗,否則會無法實現我們的目的

一:安裝docker

https://blog.csdn.net/jinking01/article/details/82490688

如果下載速度太慢,請換成國內源。

https://blog.csdn.net/qq_30683329/article/details/88582435

查看/etc/apt/sources.list

注意:#注釋掉原來的外源

二:實驗拓撲

三:使用docker創建四個不帶網卡的容器

補充:命令

查看所有容器
docker ps -a
刪除容器
docker rm -f <containerID|containerName>

(一)拉取鏡像

docker pull busybox:latest

Busybox是一個集成了一百多個最常用Linux命令和工具的軟件工具箱,它在單一的可執行文件中提供了精簡的Unix工具集。BusyBox可運行於多款POSIX環境操作系統中,如Linux(包括Andoroid)、Hurd、FreeBSD等。
Busybox既包含了一些簡單實用的工具,如cat和echo,也包含了一些更大,更復雜的工具,如grep、find、mount以及telnet。可以說BusyBox是Linux系統的瑞士軍刀。

(二)使用docker創建四個不帶網卡的容器

創建幾個容器,設置網絡為none -it交互 -d后台 ubuntu表示系統類型(默認Ubuntu純凈系統,啥也沒有。使用busybox:latest會包含許多默認命令) /bin/bash這是表示載入容器后運行bash 因為docker中必須要保持一個進程的運行,要不然整個容器就會退出。 這個就表示啟動容器后啟動bash。
鏡像基於busybox,它沒有bash shell。但他在/bin/sh有一個shell
直接執行 docker exec -ti ceff85e1747d /bin/sh 就可以進入容器里面l

docker run -t -i -d --name vm01 --net=none --privileged -v /lib/modules:/lib/modules busybox
docker run -t -i -d --name vm02 --net=none --privileged -v /lib/modules:/lib/modules busybox
docker run -t -i -d --name vm03 --net=none --privileged -v /lib/modules:/lib/modules busybox
docker run -t -i -d --name vm04 --net=none --privileged -v /lib/modules:/lib/modules busybox

四:創建OVS網橋

sudo ovs-vsctl add-br vswitch0
sudo ovs-vsctl add-br vswitch1

五:使用ovs-docker工具給容器添加網卡到ovs網橋

添加網口的參數為:網橋名、容器內的新網口名、容器名、新網口的ip地址

sudo ovs-docker add-port vswitch0 eth0 vm01 --ipaddress=192.168.1.2/24
sudo ovs-docker add-port vswitch1 eth0 vm02 --ipaddress=192.168.1.3/24
sudo ovs-docker add-port vswitch0 eth0 vm03 --ipaddress=192.168.1.4/24
sudo ovs-docker add-port vswitch1 eth0 vm04 --ipaddress=192.168.1.5/24

六:連接vswitch0和vswitch1

網橋與網橋的連接需要依靠一對patch類型的端口

sudo ovs-vsctl add-port vswitch0 patch_to_vswitch1
sudo ovs-vsctl add-port vswitch1 patch_to_vswitch0
sudo ovs-vsctl set interface patch_to_vswitch1 type=patch
sudo ovs-vsctl set interface patch_to_vswitch0 type=patch
sudo ovs-vsctl set interface patch_to_vswitch0 options:peer=patch_to_vswitch1
sudo ovs-vsctl set interface patch_to_vswitch1 options:peer=patch_to_vswitch0

七:查看ovs網橋的所有端口

sudo ovs-vsctl show

八:測試容器的連通性

使用vm01 ping其他幾個容器

docker exec -it vm01 sh

九:設置Vlan隔離

設置Vlan的參數為:網橋名、容器內網口名、容器名、vlan號

sudo ovs-docker set-vlan vswitch0 eth0 vm01 100
sudo ovs-docker set-vlan vswitch0 eth0 vm02 100
sudo ovs-docker set-vlan vswitch0 eth0 vm03 200
sudo ovs-docker set-vlan vswitch0 eth0 vm04 200

或者使用 各個交換機端口配置標簽

ovs-vsctl set port 交換機對應端口號 tag=200

十:測試容器連通性

下面兩個是可以ping通的:

vm01-->vm02 下面
vm03-->vm04 自己試

可以看到測試其他的,是無法ping通的

十一:設置網橋之間的patch端口只trunk100

sudo ovs-vsctl set port patch_to_vswitch1 VLAN_mode=trunk
sudo ovs-vsctl set port patch_to_vswitch0 VLAN_mode=trunk

sudo ovs-vsctl set port patch_to_vswitch0 trunk=100
sudo ovs-vsctl set port patch_to_vswitch1 trunk=100

十二:測試容器連通性

可以看到原來下面兩個都可以ping通,但是隨着trunk以后,只有第一個可以ping通

vm01-->vm02 可以
vm03-->vm04 不可以

很遺憾,沒有抓到包,宿主機中使用wireshark沒有找到兩個交換機的信息:

原本打算結合mininet,進行抓包,但是設置patch后,無法通信。但是通過查看最后結果,我們還是發現是可以實現vlan分隔的。

全部操作:

查看所有容器
docker ps -a
刪除容器
docker rm -f <containerID|containerName>


docker pull busybox:latest

創建幾個容器,設置網絡為none -it交互 -d后台 ubuntu表示系統類型(默認Ubuntu純凈系統,啥也沒有。使用busybox:latest會包含許多默認命令)  /bin/bash這是表示載入容器后運行bash 因為docker中必須要保持一個進程的運行,要不然整個容器就會退出。 這個就表示啟動容器后啟動bash。
鏡像基於busybox,它沒有bash shell。但他在/bin/sh有一個shell
直接執行 docker exec -ti ceff85e1747d /bin/sh 就可以進入容器里面l
docker run -t -i -d --name vm01 --net=none --privileged -v /lib/modules:/lib/modules busybox
docker run -t -i -d --name vm02 --net=none --privileged -v /lib/modules:/lib/modules busybox
docker run -t -i -d --name vm03 --net=none --privileged -v /lib/modules:/lib/modules busybox
docker run -t -i -d --name vm04 --net=none --privileged -v /lib/modules:/lib/modules busybox

創建一個ovs網橋
sudo ovs-vsctl add-br vswitch0
sudo ovs-vsctl add-br vswitch1

用工具給容器添加網口
添加網口的參數為:網橋名、容器內的新網口名、容器名、新網口的ip地址
sudo ovs-docker add-port vswitch0 eth0 vm01 --ipaddress=192.168.1.2/24
sudo ovs-docker add-port vswitch1 eth0 vm02 --ipaddress=192.168.1.3/24
sudo ovs-docker add-port vswitch0 eth0 vm03 --ipaddress=192.168.1.4/24
sudo ovs-docker add-port vswitch1 eth0 vm04 --ipaddress=192.168.1.5/24

連接vswitch0和vswitch1
網橋與網橋的連接需要依靠一對patch類型的端口
sudo ovs-vsctl add-port vswitch0 patch_to_vswitch1
sudo ovs-vsctl add-port vswitch1 patch_to_vswitch0
sudo ovs-vsctl set interface patch_to_vswitch1 type=patch
sudo ovs-vsctl set interface patch_to_vswitch0 type=patch
sudo ovs-vsctl set interface patch_to_vswitch0 options:peer=patch_to_vswitch1
sudo ovs-vsctl set interface patch_to_vswitch1 options:peer=patch_to_vswitch0

查看ovs網橋的所有端口
sudo ovs-vsctl show

測試容器的連通性
使用vm01 ping其他幾個容器
docker exec -it vm01 sh

設置Vlan隔離
設置Vlan的參數為:網橋名、容器內網口名、容器名、vlan號
sudo ovs-docker set-vlan vswitch0 eth0 vm01 100
sudo ovs-docker set-vlan vswitch0 eth0 vm02 100
sudo ovs-docker set-vlan vswitch0 eth0 vm03 200
sudo ovs-docker set-vlan vswitch0 eth0 vm04 200
或者使用 各個交換機端口配置標簽
ovs-vsctl set port 6eef85c4718a4_l tag=200

測試容器連通性
vm01-->vm02
vm03-->vm04

設置網橋之間的patch端口只trunk100
sudo ovs-vsctl set port patch_to_vswitch1 VLAN_mode=trunk
sudo ovs-vsctl set port patch_to_vswitch0 VLAN_mode=trunk

sudo ovs-vsctl set port patch_to_vswitch0 trunk=100
sudo ovs-vsctl set port patch_to_vswitch1 trunk=100

測試容器連通性
vm01-->vm02
vm03-->vm04
View Code

補充:修改端口的OpenFlow id

sudo ovs-vsctl set interface patch_to_vswitch0 ofport_request=自定義id

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM