一般来说,出现这样的问题,有一个系统 RHEL 6.4 Server,它有一对网络接口通过绑定合并成一个。该系统 IP 地址:10.7.7.1
。接下来在系统上运行一个应用程序,需要连接到10.7.7.2
端口 3306 上的 MySQL 服务器。实际上,MySQL 运行在 上10.7.7.3
。应用程序中的连接设置是硬编码的,因此无法更改。可以通过iptables做地址转换。如何让应用程序尝试10.7.7.2:3306
iptables被拦截并发送请求至10.7.7.3:3306
,并得到响应,并将其提供给应用程序?
答案1
这可以通过 iptables 中的 NAT 规则来完成。
如果 MySQL 服务器位于同一主机上,请使用 REDIRECT 规则。将所有到端口 3306 的连接重定向到所需地址(而不是 10.7.7.3)。
如果 MySQL 服务器不在同一主机上,请使用 DNAT 规则。
答案2
假如说
- .1、.2 和 .3 是不同的机器
- 您不能交换 .2 和 .3 的 IP 地址
- .2 运行的是 Linux
以下是您需要在.2 上添加的内容:
-t nat -A PREROUTING -d 10.7.7.2 -p tcp --dport 3306 -j DNAT --to-destination 10.7.7.3
-t nat -A POSTROUTING -d 10.7.7.3 -p tcp --dport 3306 -j SNAT --to-source 10.7.7.2
然而...
如果由于某些原因您无法在 .2 上创建 iptables 规则和/或您想要拦截 .1 上的流量,那么您需要在 .1 上执行的操作如下:
-t nat -A POSTROUTING -d 10.7.7.2 -p tcp --dport 3306 -j DNAT --to-destination 10.7.7.3