一.概述 1.環境:我這裡是2台linux機器(host1和host2),發行版是kali2.0,內核版本是4.3。每台機器都安裝Docker、OpenvSwitch(ovs)。 2.host1和host2分別啟動1個ubuntu的docker容器。 3.網路結構: 2.1:host1的eth0:1
一.概述
1.環境:我這裡是2台linux機器(host1和host2),發行版是kali2.0,內核版本是4.3。每台機器都安裝Docker、OpenvSwitch(ovs)。
2.host1和host2分別啟動1個ubuntu的docker容器。
3.網路結構:
2.1:host1的eth0:192.168.2.1,host1裡面的docker容器ip地址是10.1.2.3
2.2:host2的eth0:192.168.2.2,host2裡面的docker容器ip地址是10.1.2.4
2.3:host1和host2的eth0可以ping通。
4.目標是在2個不同宿主機的docker容器之間建立VxLAN隧道,讓它們可以通信!
二.安裝基本軟體
1.安裝docker並獲取ubuntu鏡像
1 sudo apt-get install docket.io 2 sudo docker pull ubuntu
2.安裝openvswitch和ovs的docker輔助腳本
1 sudo apt-get install openvswitch-switc 2 //OpenvSwitch 項目提供的支持 Docker 容器的輔助腳本 ovs-docker 3 wget https://github.com/openvswitch/ovs/raw/master/utilities/ovs-docker 4 chmod a+x ovs-docker
三.配置
1.在host1上面用ovs創建一個虛擬網橋,並給網橋一個ip
1 sudo ovs-vsctl add-br vxbr 2 sudo ifconfig vxbr 10.1.2.1/24
2.給網橋添加一個vxlan類型的埠,remote_ip就是host2的eth0地址!!!
1 sudo ovs-vsctl add-port vxbr vxlan -- set interface vxlan type=vxlan options:remote_ip=192.168.2.2
3.啟動一個沒有乙太網卡的docker容器
1 sudo docker run --net=none --privileged=true -it ubuntu
並記下這個容器的ID,我這裡是:b062406bc6b6。此時在這個容器裡面ifconfig只能看到一個lo的設備。
4.給容器機指定一個eth0並綁定到宿主機的vxbr網橋
1 sudo ./ovs-docker add-port vxbr eth0 b062406bc6b6
此時回到容器裡面,ifconfig會看到出現了一個eht0。給它一個ip:
1 ifconfig eth0 10.1.2.3/24
5.查看ovs配置
1 sudo ovs-vsctl show
我們可以看到vxbr網橋上面有3個埠,一個是自己跟本機通信(這裡是本機的eth0)的埠,一個是vxlan的埠,最後一個是docker容器機的eth0。
host2配置跟上面差不多,把host2的虛擬網橋vxbr改為10.1.2.2/24,vxlan的remote_ip改成host1的192.168.2.1,host2的docker容器機ip改為10.1.2.4/24
四.驗證
此時的網路結構:
host1的eth0:192.168.2.1,虛擬網橋vxbr:10.1.2.1,docker容器機的eth0:10.1.2.3。docker容器的eth0插在宿主機host1的虛擬網橋vxbr上面。
host2的eth0:192.168.2.2,虛擬網橋vxbr:10.1.2.2,docker容器機的eth0:10.1.2.4。docker容器的eth0插在宿主機host2的虛擬網橋vxbr上面。
在host1的docker容器機裡面ping host2的docker容器機,wireshark抓包:
可以看到容器機之間的通信被封裝在一個UDP報文裡面,這個UDP的通信是通過host1和host2的eth0轉發。