本节主要介绍通过云主机自带的iptables(防火墙)功能来做代理服务的转发,因为MySQL的用户比较多可以看到很多网友对这里也有一些需求所以这里以它为例,但通过本方式除MySQL外还可以实现很多服务(RedisMongoDBSQLServer)内外网的互通。 以MySQL为例本机介绍三个话题:
- 什么情况下使用公网代理连接
- 公网代理配置注意事项
- 如何配置公网代理
什么情况下使用公网代理连接
腾讯云的MySQL自带公网功能,在MySQL的实例基本信息中如以下截图,可以开启公网功能。官方建议这种情况只适用于临时测试和导入导出数据等场景下使用,切记不要用于生产环境使用。
在腾讯云的海外IDC部分机房比较小,没有足够的资源搭建代理转发是不提供外放访问方式的,这种情况在很多小IDC都会出现。所以如果用户强烈希望通过公网来方位自己的MySQL实例,这时通常官方会推荐您搭建公网代理的方式,就是在当地购买一台云主机,这云主机可以与MySQL实例进行内网通信,并通过云主机的公网IP进行端口映射转发到内网的MySQL实例。
公网代理配置注意事项
以下为用户访问流程,用户在配置好云主机(cvm)转发功能后,就可以从公网直接访问内网的云MySQL。因为是公网访问所以这里一定注意安全。
- 首先,安全组只开放固定IP来源转发到内网的MySQL端口上
- 其次,在iptables规则时需要应用最简原则,即转发特定IP、特定端口、特定协议到指定的IP上
- 最后,测试完切记清理iptables转发规则或关闭安全组
如何配置公网代理
这里使用了云主机的iptables命令的来实现nat转发功能。iptables功能非常强大,netfilter的开源项目其地址见(http://www.netfilter.org/projects/iptables/index.html)以下为iptables的数据访问流程图。
具体转发规则如下。(术语snat源地址转换,dnat目的地址转换)
代码语言:javascript复制# 临时打开nat转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
# 172.16.16.18 为主机公网对应的内网IP, 172.16.32.10 为内网MySQL的IP
iptables -t nat -A PREROUTING -d 172.16.16.18 -p tcp --dport 7788 -j DNAT --to-destination 172.16.32.10:3306
# 反过来写
iptables -t nat -A POSTROUTING -d 172.16.32.10 -p tcp --dport 3306 -j SNAT --to-source 172.16.16.18
注意,这里在通过其他IP访问代理服务器的MySQL时,输入的是7788映射端口,而非MySQL3306端口
# MASQUERADE,如果不想写snat这么长的规则,可以直接输入以下规则。
代码语言:javascript复制iptables -t nat -A POSTROUTING -j MASQUERADE
参考资料
http://www.zsythink.net/archives/1199
https://wangchujiang.com/linux-command/c/iptables.html