使用iptables的nat代理mysql

使用iptables的nat代理mysql

我找到了类似的线索,但是不起作用: https://stackoverflow.com/questions/10864854/forwarding-mysql-connection-with-iptables-and-differents-network-interfaces?rq=1

我的环境如下:

  • 计算机A有两个网络接口: eth0192.168.42.67和 eth1 192.168.110.2,安装了 MySQL 客户端,禁用了 selinux。
  • 计算机B只有一个网络接口: eth0 192.168.110.4,安装了 MySQL 服务器,停止了 iptables,禁用了 selinux。

在计算机 A 上,我使用命令mysql -h192.168.110.4 -uroot -p成功连接到计算机 B 上的 MySQL。

计算机A的/etc/sysconfig/iptables外观如下:

[root@net ~]# cat /etc/sysconfig/iptables  
# Generated by iptables-save v1.4.7 on Mon Jun  9 20:25:07 2014  
*filter  
:INPUT ACCEPT [0:0]  
:FORWARD ACCEPT [0:0]  
:OUTPUT ACCEPT [1:140]  
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT  
-A INPUT -i lo -j ACCEPT  
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT  
COMMIT  
# Completed on Mon Jun  9 20:25:07 2014  
# Generated by iptables-save v1.4.7 on Mon Jun  9 20:25:07 2014  
*nat  
:PREROUTING ACCEPT [0:0]  
:POSTROUTING ACCEPT [0:0]  
:OUTPUT ACCEPT [0:0]  
-A PREROUTING -p tcp -m tcp --dport 3306 -j LOG --log-prefix "REX_NAT_PRE2:"  
-A PREROUTING -p tcp -m tcp --dport 3306 -j DNAT --to-destination 192.168.110.4:3306  
-A POSTROUTING -s 192.168.110.4/32 -j MASQUERADE  
-A POSTROUTING -p tcp -j LOG --log-prefix "REX_NAT_POST:"  
COMMIT  

注意:我将每个链的默认策略设置为ACCEPT

我希望我可以mysql -h192.168.42.67 -uroot -p在计算机 A 上使用来操作计算机 B 的 MySQL

我还执行modprobe iptable_natecho 1 > /proc/sys/net/ipv4/ip_forward

答案1

更改此规则

-A POSTROUTING -s 192.168.110.4/32 -j MASQUERADE  

-A POSTROUTING -p tcp -m tcp -d 192.168.110.4/32 --dport 3306 -j MASQUERADE  

有了您指定的其他规则,这就足够了。

答案2

您的PREROUTING规则不适用于来自A,因为PREROUTING仅适用于转发的数据包,而不适用于本地生成的数据包。相反,您可以使用OUTPUT链,它适用于本地生成的数据包。

对于这两者PREROUTINGOUTPUT我建议您添加-d 192.168.42.67到规则中DNAT,以使其不匹配不打算匹配的数据包。

此外,我建议您在链中的规则中添加-o eth0或,以使其不匹配不打算匹配的数据包。-o eth1MASQUERADEPOSTROUTING

相关内容