我在 Debian Linux 终端中输入了以下命令:
sysctl net.ipv4.ip_forward=1
iptables -t nat -A PREROUTING -p tcp --dport Port2 -j DNAT --to-destination yyy.yyy.yyy.yyy:Port1
iptables -t nat -A POSTROUTING -j MASQUERADE
不久之后,mySQL 出现故障,无法连接任何服务器。其中一个错误是
“主机 xxx-xxx-xxx-xxx.static.xyzxyzxyz.xyz' 不允许连接到此 MYSQL 服务器”
xxx-xxx-xxx-xxx 是我上面输入 Iptables 命令的 IP。
答案1
在没有全面了解的情况下回答这个问题确实不太容易,但我可以猜测,由于您正在使用 NAT,并且根据您提供的错误,客户端主机在服务器上的出现方式与以前不同。
例如,服务器允许来自 10.10.10.10 的连接。现在您有 NAT 并且客户端似乎是 20.20.20.20,因此服务器不允许连接。
我会这样做:
1)检查 MySQL 配置并查看它允许连接哪些主机。
2)打开 MySQL 日志并查看尝试连接的客户端的 IP 地址。
3)MySQL 配置是否允许该 IP 地址?
答案2
对于 NAT 规则,您需要指定输入接口之类的东西。否则,所有类型的流量都将应用 NAT 规则。特别是,指定没有任何过滤器的伪装目标可能会导致奇怪的行为。
我假设您已设置规则以仅允许某些指定主机连接到 mysql。最有可能的情况是,您的无针对性伪装规则导致允许连接的 IP 地址被替换为另一个地址,这种情况只能令人困惑地描述,从而破坏了基于 IP 的访问控制。