Linux-通过端口转发访问数据库
Linux-通过端口转发访问数据库
工作中有时在网络限制比较多的情况下,比如本地服务需要访问远程数据库,但是本地又不允许申请访问数据库,这时怎么办,所以就需要有个代理,本地连接代理,代理再去连接数据库,就跟生活中的中介似的。

需要达到的效果如下:
客户端 → 跳板机:3306 → DNAT转换 → 远端MySQL服务器:3306
这里选择比较简单的方案吧
1. 使用iptables
a. 跳板机 - 开启IP转发
#echo 1 > /proc/sys/net/ipv4/ip_forward
b. 跳板机 - DNAT目标地址转换
将本机的3306 端口dnat转发到远程mysql
#iptables -t nat -A PREROUTING -p tcp --dport 3306 -j DNAT --to-destination mysql_server_ip:3306
c. 源地址转换
因为需要将请求mysql的源地址改成跳板机的
#iptables -t nat -A POSTROUTING -p tcp -d mysql_server_ip --dport 3306 -j MASQUERADE
如果出现不通的清空,请排查forward是否打开,以及iptables INPUT以及forward链是否放行端口。
PREROUTING链 (nat表) → 路由判断 → FORWARD链 (filter表) → POSTROUTING链 (nat表)
#iptables -A FORWARD -p tcp -d mysql_server_ip --dport 3306 -j ACCEPT
#iptables -A FORWARD -p tcp -s mysql_server_ip --sport 3306 -j ACCEPT
2. 使用nginx tcp代理
(略)
感觉使用iptables以及nginx相对来说还是比较简单并稳定可靠的。
