我有一个带有 KVM 虚拟机的 Ubuntu 服务器。
我在防火墙中允许 SSH,这样我就可以访问主机。我还允许与状态相关的已建立的传入流量。
这是主机的完整 iptables 设置:
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- [MYIP] anywhere tcp dpt:ssh
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT all -- [MYIP] [VSERVER IP] to:192.168.122.122
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 192.168.122.0/24 !192.168.122.0/24
虚拟服务器与 Windows 一起运行并具有本地 IP,192.168.122.122
正如您在中所看到的PREROUTING
,它的设置使得只有我可以通过所有端口访问它。
远程桌面运行正常,我设法使用外部 IP([VSERVER IP])连接到服务器。连接到服务器后,我尝试打开 Internet Explorer 并输入 stackoverflow.com。成功了,页面显示出来。
但是,当我运行一个简单的 Mysql 程序(使用.NET MySql.Data.dll
)时,该程序应该对其他服务器进行查询,但它失败了,
MySql.Data.MySqlClient.MySqlException (0x800004005):
Unable to connect to any of the specified MySQL hosts.
这是为什么?对任何 Web 服务器的 Http 请求都没有问题,那么 Mysql 查询为什么有问题呢?
需要说明的是,外部 Mysql 服务器并未丢弃请求(防火墙暂时禁用)。肯定是 iptables 出了问题,但我不知道是什么。
我该如何修复此问题?
答案1
不幸的是,我的(外部)MySQL 主机的防火墙出现了一个我不知道的错误。毕竟,我的 vServer IP 的 MySQL 端口被阻止了,所以这就是请求没有返回而 HTTP 请求可以正常工作的原因。
该问题已解决。
务必仔细检查所有防火墙!吸取教训。