如何通过公网地址访问云数据库?

疑难杂症   公网访问云数据库  
介绍
  • 云数据库受云服务商限制做了内网隔离仅供内访问,不提供公网的访问地址,一般仅提供一个phpmyadmin用于Web操作
需求
  • 收到需求希望从公司直接连接被隔离在内网云数据库
  • 两种解决方式 MySQL Proxy 和 iptables nat

[1]MySQL Proxy

  • 下载mysql-proxy安装包到云服务器
    wget http://cdn.mysql.com/Downloads/MySQL-Proxy/mysql-proxy-0.8.4-linux-glibc2.3-x86-64bit.tar.gz
  • 解压上述安装包
    tar -xzf mysql-proxy-0.8.4-linux-glibc2.3-x86-64bit.tar.gz
  • 进入mysql proxy所在目录并运行
    cd mysql-proxy-0.8.4-linux-glibc2.3-x86-64bit/bin
    ./mysql-proxy --proxy-backend-addresses=10.10.10.88:3306 --proxy-address=10.10.10.66:3308
    运行命令后,会显示如下信息,提示代理搭建成功:
    2015-06-12 16:56:38: (critical) plugin proxy 0.8.4 started
  • 测试从外网访问云服务器上的mysql proxy
    mysql -h 120.*.*.240 -P 4040 -u root -p
参数介绍:
--proxy-backend-addresses=10.10.10.88:3306      云数据库的ip和端口 
--proxy-address=10.10.10.66:3308                代理的监听地址和端口。  
--daemon                                        让代理处于后台运行
--keepalive                                     代理崩溃后尝试重启代理

[2]iptables nat

  • 配置iptables
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 3308 -j ACCEPT  
iptables -t nat -A PREROUTING  -d 10.10.10.66 -p tcp -m tcp --dport 3308 -j DNAT --to-destination 10.10.10.88:3306  
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE  
10.10.10.88                   --云主机内网地址  
3308                          --公网访问mysql的端口  
10.10.10.66:3306              --云数据库地址和端口  
  • 开启转发 sysctl.conf
    net.ipv4.ip_forward = 1
  • 使修改生效
    sysctl -p

  • 测试访问