基於: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
補充:修改端口的OpenFlow id
sudo ovs-vsctl set interface patch_to_vswitch0 ofport_request=自定義id