分享

UOS多网络支持下的路由问题

问题导读
1、一台云主机最多可以同时加入多少个网络?
2、如何排查网络错误呢?
3、如何在 UOS 上建立其一个相对应的集群?





排查网络错误是一件让人颇为头疼的事情,不过得益于 UnitedStack 方便易用的虚拟数据中心,管理网络和排查问题将不再复杂。

为了让用户的云主机自由的切换在不同网络,我们做了大量工作,使云主机支持“虚拟网卡”这一概念,一台云主机最多可以用同时加入三个网络,而且无需管理员去配置交换机或是插拔网卡,无论是移动、切换虚拟机所在的网络,还是为虚拟网卡绑定公网 IP,抑或让子网连接到公网,都只要在虚拟数据中心的“网络拓扑”图里点击即可完成操作(为了展示安全组和虚拟网卡,下图为模拟示意图,非 Dashboard中看到的“网络拓扑”)。

1.png


为了减少用户的使用成本,我们提前就对常见的误操作做了提示和警告,例如用户将一个路由器连到两个相同 CIDR 的网络将会提示用户无法完成,如果在尝试在一个网络内添加两个相同 CIDR 地址的子网将提示用户地址重叠等等,为了避免发生故障,我们已经做了很多。

但是我们可以给云主机添加虚拟网卡,却无权干预用户主机的系统配置,因为操作系统并不能自动判断哪些网络是连接外网的,所以在多网卡的状态下,云主机将有可能发生无法连接外网的现象。

这个问题需要从路由谈起,我们知道连接到外部网络需要让主机将数据包发给网关,再有网关发到目标地址,但是操作系统在配有多网卡时,无法自动判断这 个网卡是否能连接到外网,所以本来数据包应该发到 eth0,再发到配有网关的路由器 RouterA,由路由器发到外网却可能被操作系统错误的发到了 eth1,而 eth1 连接的路由器可能并没有配置网关,这就导致了云主机无法正常连接到外网。

例如参照前面的拓扑图,我们可以在 UOS 上建立其一个相对应的集群,其中 SharedWinS 同时连接到了 SubnetA1 和 SubnetA2,但只有 SubnetA2 连接到了开启网关的路由器,能够连接到外网,这时如果我们想让 SharedWinS 连接到外网,必须保证其路由正确填写为 SubnetA2 上路由器的地址。

1.jpg

如何排查呢?用户如果遇到无法连接外网,应该先在虚拟数据中心检查拓扑是否正确,是否已连接到外部网络,如果连接有多网卡,可以先试试将未连接公网 的虚拟网卡先从云主机卸载,如果卸载后即恢复正常说明很可能是路由表错误引起的,可以通过命令“router -n”(Linux)或“route print”(Windows)检查路由表,可以看到有一行 Gateway 不是 0.0.0.0,如果这个 Gateway 不是正确的路由器的地址,对于 Linux,可以通过“route del gw 192.168.0.1”(比如不正确的 Gateway 是 192.168.0.1)删除原网关,再用“route add default gw 10.10.1.1”(比如正确的 Gateway 是 10.10.1.1)添加正确的网关即可。关于 Linux 路由及路由表的更多知识,可以参考 CentOS 和 Ubuntu 官网上相关文章:route – show / manipulate the IP routing table、Configuring Static Routes。
1.png

对于 Windows,可以通过“route delete 0.0.0.0 mask 0.0.0.0 10.10.1.1”(假设10.10.1.1为我们不需要的网关)即可删除,如果需要另外加入路由,则通过“route -p add 0.0.0.0 mask 0.0.0.0 192.168.0.1”添加或恢复路由。关于 Windows 的路由表的更多知识,可以参考微软知识库相关文章:Windows NT 的 TCP/IP 路由基础、配置网络上的多个网关。

1.png



没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条