无EIP云主机访问外网

在UCloud平台使用云主机的时候,如果需要访问外网,一种比较直接的方式就是绑定EIP,但是在某些情况下我们并不希望给没给云主机都绑定一个EIP,比如说安装需要从外网下载软件的时候。这个时候我们该如何实现这个需求呢,在这种情况下,我们要求最少需要有一个EIP,这样可以通过一定的设置方式让其他云主机使用这个EIP作为出口,这里介绍两种方法,一种是通过UCloud平台提供的路由器产品(免费),还有一个是使用绑定了EIP的云主机作为网关来实现。

一、使用具有EIP云主机做网关实现外网访问

测试环境介绍(两台主机都在北京二可用区C,系统均为centos6.5):
云主机A(做网关):内网IP: 10.10.229.85 外网IP: 123.59.150.107 BGP
云主机B:内网IP: 10.10.246.62

实现目标:
主机A可以访问外网,但是主机B没有EIP也没有做任何设置不可以访问外网。现在要通过修改主机B网关的方式实现主机B访问外网。

步骤概述:
1.网关机器打开内核里面的ip forward参数
2.网关机器做iptables,完成nat映射
3.后端机器修改网关地址

具体操作步骤:
1、打开具备外网IP的云主机A(作为转发路由)的转发功能,编辑/etc/sysctl.conf文件,打开配置 net.ipv4.ip_forward=1。

2、执行 sysctl -p 使配置生效

3、在路由机器云主机A(具备外网IP)设置iptables转发 iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

4、修改需要访问外网的内网机器云主机B, 编辑/etc/sysconfig/network-scripts/ifcfg-eth0文件,修改默认路由为路由机器云主机A(具备外网IP)内网IP,例如:gateway 10.10.229.85。

5、执行 service network restart 使配置生效

6、通过ping一个外网域名来验证,外网可达性,比如说,ping www.baidu.com

副作用及解决(使用某台云主机做外网网关后, 是否需要添加其他路由

会影响云主机和其他产品的内网通信,解决办法是添加静态路由。说明如下:云主机的流量可分为纵向流量: 外网流量以及ULB/UDB/UMem访问流量. 横向流量: 云主机间内网通讯. 默认路由修改到做网关的云主机后, 所有流量都会变为横向流量, 不仅影响纵向流量的效率, 也会导致无法和ULB/UDB/UMem通讯(因为内网IP伪造的安全规则会不通过). 解决方法是添加静态路由.

Linux添加路由示例
华东机房
ip ro add 10.255.0.0/16 via 10.4.0.1
ip ro add 10.4.0.0/16 via 10.4.0.1
echo “ip ro add 10.255.0.0/16 via 10.4.0.1” >> /etc/rc.local
echo “ip ro add 10.4.0.0/16 via 10.4.0.1” >> /etc/rc.local

北京BGP-A机房
ip ro add 10.255.0.0/16 via 10.6.0.1
ip ro add 10.6.0.0/16 via 10.6.0.1
echo “ip ro add 10.255.0.0/16 via 10.6.0.1” >> /etc/rc.local
echo “ip ro add 10.6.0.0/16 via 10.6.0.1” >> /etc/rc.local

Windows添加路由示例
华东机房
route add 10.255.0.0 mask 255.255.0.0 10.4.0.1 /p
route add 10.4.0.0 mask 255.255.0.0 10.4.0.1 /p

北京BGP-A机房
route add 10.255.0.0 mask 255.255.0.0 10.6.0.1 /p
route add 10.6.0.0 mask 255.255.0.0 10.6.0.1 /p

二、使用路由器实现外网访问

具体操作步骤:
1、登录控制台,选择网络Unet下的路由器选项,点击创建路由器;

2、在弹出的创建路由器页面中输入路由器名称,点击确认完成路由器创建;

3、申请弹性EIP,将EIP绑定已经创建好的路由器;

4、此时路由器列表页面中显示了与路由器关联的弹性外网IP和子网信息。如果子网机器需要访问外网,可以根据需要将创建的子网连接到路由器

5、点击进入路由器的端口转发,添加转发规则。

说明:采用第二种方法来实现外网访问可能有一点难以理解的地方,一般人可能会认为转发规则不应该是把外部的请求转发到内部主机吗,为什么这个可以实现由内到外的转发呢?其实是这样的,通过配置转发规则,相当于告诉SDN(UCloud的内网架构使用的就是SDN技术)这些流量是要通过路由出外网的,当流量发往默认网关的时候,SDN发现这些流量是要出外网的,于是通过SDN内部机制这些流量发往外网了。在借助路由器的情况下其实还有另外一种实现方式就是通过修改主机内部的网关,直接把流量引向路由,这样也可以实现我们的需求。

补充:一台uhost能否同时既绑EIP又通过vrouter访问外网?
不能,目前主动出外网的方式分为两种,一个是直接绑定eip,通过nat转发,一个是通过vrouter端口转发,走vrouter。由于下一跳是二选一的,所以二者不能兼容。我们的产品策略是直接绑定eip优先级高于端口转发,所以同时做了端口转发和绑定eip,那么端口转发是不生效的。

参考:解决Ucloud没有弹性IP的内网主机访问外网的问题
实现外网对大数据机型云主机&物理主机的访问

分享到 评论