共计 1728 个字符,预计需要花费 5 分钟才能阅读完成。
导读 | docker 是非常火的容器技术,虚拟网络、SDN 等网络也在不断的发展,VxLAN 是新型的虚拟扩展网络,作者在整理文档时候发现网上实验:使用 OpenvSwith 在 Docker 上搭建 VxLAN 环境,拿来分享。 |
1. 环境:2 台 linux 机器 (host1 和 host2),发行版是 kali2.0,内核版本是 4.3。每台机器都安装 Docker、OpenvSwitch (ovs)。
2.host1 和 host2 分别启动 1 个 ubuntu 的 docker 容器。
3. 网络结构:
3.1:host1 的 eth0:192.168.2.1,host1 里面的 docker 容器 ip 地址是 10.1.2.3
3.2:host2 的 eth0:192.168.2.2,host2 里面的 docker 容器 ip 地址是 10.1.2.4
3.3:host1 和 host2 的 eth0 可以 ping 通。
4. 目标是在 2 个不同宿主机的 docker 容器之间建立 VxLAN 隧道,让它们可以通信!
1. 安装 docker 并获取 ubuntu 镜像
sudo apt-get install docket.io
sudo docker pull ubuntu
2. 安装 openvswitch 和 ovs 的 docker 辅助脚本
sudo apt-get install openvswitch-switc
//OpenvSwitch 项目提供的支持 Docker 容器的辅助脚本 ovs-docker
wget https://github.com/openvswitch/ovs/raw/master/utilities/ovs-docker
chmod a+x ovs-docker
1. 在 host1 上面用 ovs 创建一个虚拟网桥,并给网桥一个 ip
sudo ovs-vsctl add-br vxbr
sudo ifconfig vxbr 10.1.2.1/24
2. 给网桥添加一个 vxlan 类型的端口,remote_ip 就是 host2 的 eth0 地址!!!
sudo ovs-vsctl add-port vxbr vxlan -- set interface vxlan type=vxlan options:remote_ip=192.168.2.2
3. 启动一个没有以太网卡的 docker 容器
sudo docker run --net=none --privileged=true -it ubuntu
并记下这个容器的 ID,我这里是:b062406bc6b6。此时在这个容器里面 ifconfig 只能看到一个 lo 的设备。
4. 给容器机指定一个 eth0 并绑定到宿主机的 vxbr 网桥
sudo ./ovs-docker add-port vxbr eth0 b062406bc6b6
此时回到容器里面,ifconfig 会看到出现了一个 eht0。给它一个 ip:
ifconfig eth0 10.1.2.3/24
5. 查看 ovs 配置
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 转发。