一、在 Host1 和 Host2 服务器上的 VM 上验证互联互通
1.在 Host1 上,使用 ip netns exec 命令进入 VM 中,ping 命令和 tcpdump 验证是否通信, 以及验证路由表。
验证路由:route -n
①验证hos1t上VM1 与 VM3 之间是否通信,验证是正常通信
命令参考:
ip netns exec VM1 ping 172.17.1.13
这里我的虚拟机host1用的是NAT模式,并且连上了网
也许桥接模式也可以,但我依旧困惑于NAT模式与桥接模式在内部通讯和外部通信方面的区别,或许你可以参考一下:虚拟机NAT模式和桥接模式分析-优快云博客虚拟机NAT模式和桥接模式分析-优快云博客)同时你也得关闭防火墙:sudo ufw disable
这下估计就能够成功了,如果依旧不行那就需要检查一下关于的路由配置了,当然也欢迎你的留言
②验证与 Host2 服务器上的 VM2 之间是否通信
命令参考:
ip netns exec VM1 ping 10.0.0.22
在这里的验证可能你需要明白VXLAN通道通信的原理
这里我两台服务器均使用了NAT模式
在IP方面我在host1上使用了手动配置,而不是采用自动(DHCP)方式:
host2也同理(依旧需要关闭防火墙):
那么关于VXLAN通道配置的命令呢:
在host1上:
ovs-vsctl add-port s1-vxlan vxlan0 -- set interface vxlan0 type=vxlan
options:remote_ip=192.168.12.21
在host2上:
ovs-vsctl add-port s1-vxlan vxlan0 -- set interface vxlan0 type=vxlan
options:remote_ip=192.168.12.12
综上②就能够完成验证了
③在 Host2 服务器 VM2 上 tcpdump 抓包结果,正常收发数据
命令参考:(1)host1上发送ICMP:
ip netns exec VM1 ping 10.0.0.22
(2)host上抓包:
ip netns exec VM2 tcpdump -l
这一步没什么需要阐述的
2.在 Host2 上,使用 ip netns exec 命令进入 VM 中,ping 命令和 tcpdump 验证是否通信, 以及验证路由表。
验证路由:route -n
①Host2上VM1 与 Host2 上的 VM3
这一步实际上是在考察OVS交换机之间的通信
参考:OVS使用笔记(四十三)_ovs intport-优快云博客
命令参考:
ip netns exec VM1 ping 10.0.0.23
②与 Host1 上的 VM3 和 VM1 通信验证
依旧是VXLAN通道问题
与VM1通信:
ip netns exec VM1 ping 10.0.0.11
与VM3通信:
ip netns exec VM1 ping 172.17.1.13
二、 在 Host1 服务器上配置云网络主机能与公网 Internet 通信
①验证 Linux 宿主机上的 Netfilter 的 NAT 表
②增加配置 nat,完成 VM 10.0.0.0/24 网段与外网通信
命令参考:
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
注意这里的eth0需要换成你自己的设备名称:ifconfig可以查看
这里我的设备名称为:ens33
或许你已经添加了规则:
可以使用-D选项删除已配置的规则
iptables -t nat -D POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
验证命令:
ip netns exec VM1 ping 8.8.8.8
或许你可能会出现ping 8.8.8.8不通的情况,例如:
这是因为我们在IPV4设置的是手动IP,这是不能接入互联网,所以不能到达谷歌的内部公共DNS8.8.8.8,解决办法就是将IPV4设置为自动(DHCP):
③使用 curl 模拟浏览器段验证访问公网 web
参考命令:
ip netns exec VM1 curl http://www.126.com
如果你的没有成功:
首先禁止掉IPV6,接着添加更加强大的DNS服务器(使用命令:vim /etc/resolv.conf进入文件编写,内容如下图所示)
应该就能成功了
到此本次实验一就结束了
三、内容总结
其实本次实验最重要的是理解下面那张图:
四、温馨提示
以上内容仅是个人观点和做法,理解不一定正确,仅供参考