MySQL远程访问,telnet和ping无法在具有相同顶级域的服务器之间工作

时间:2013-09-23 09:45:30

标签: php mysql database linux telnet

我已经构建了一个应用程序(在PHP中)来遍历我已配置的数据库列表并单独连接到那些远程数据库(端口3306上的标准MySQL)并从这些数据库中获取我的应用程序的相关数据。

然而,其中一些连接只是“冻结”,最终导致无法连接到远程'x.x.x.x'上的MySQL等。

经过进一步调查,我可以看到iptables接受端口3306的输入和输出,我可以从其他服务器以相同的方式连接,而我的应用服务器则不能。我已经检查了mysql的配置,以便从所有主机等远程访问.-skip-netwokring被注释掉所以应该能够远程连接, - skip-name-resolve也在那里,以避免尝试解决ip进入DNS名称,实际上我可以从其他几个服务器连接,但不能连接到应用服务器(正如我刚才所说)

所以,这是我的理论和我需要帮助的东西。让我们说,以下内容:

应用服务器 :( centOs)连接到所有远程数据库并为app提取数据。 RDNS x1.somedomain.com

数据库1 :( centOs)保存数据。 RDNS x2.somedomain.com

数据库2 :( Debian)保存数据。 RDNS someotherdomain.com

app服务器连接到数据库1时出现问题。作为调试方法,我尝试telnet 3306并从应用服务器ping到db 1而没有响应。如果我从db 2到db 1执行相同操作,则可以正常工作。如果我执行反向和telnet并从db 1 ping到应用服务器它仍然不起作用,但如果我从db 1 telnet并ping到db 2然后它工作正常(反之亦然)。

我还尝试从虚拟盒中的其他Linux Os执行相同的调试方法,并且工作正常。因此,这表明只剩下一件事,即app服务器甚至不发送请求,因为它以某种方式查看tld并“认为”它不是远程连接并且会产生某种环回错误或接收服务器检查请求服务器的IP并拒绝它,因为它意识到它是一个远程请求,但是tld与localhost相同,所以拒绝。

我整个周末一直都在苦苦挣扎,无法在系统日志中找到答案,所以我希望有人能给我一些解决方法,并指出我需要做些什么才能解决它并将数据库1送到回应应用服务器的数据。

非常感谢。

修改

  • 除了iptables之外,服务器不使用任何安全性,因此不太确定如何发生锁定。

App server iptables:

# Generated by iptables-save v1.4.7
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -i lo -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -j ACCEPT 
-A INPUT -s x.x.x.x/x -p udp -m udp --dport 161 -m state --state NEW -j ACCEPT 
-A INPUT -s x.x.x.x/x -p udp -m udp --dport 161 -m state --state NEW -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 443 -m state --state NEW -j ACCEPT 
-A INPUT -p udp -m udp --dport 53 -m state --state NEW -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 53 -m state --state NEW -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 25 -m state --state NEW -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 110 -m state --state NEW -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 143 -m state --state NEW -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 20 -m state --state NEW -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 21 -m state --state NEW -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 3306 -m state --state NEW -j ACCEPT 
-A INPUT -p udp -m udp --dport 3306 -m state --state NEW -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 10000 -j ACCEPT 
-A INPUT -j REJECT --reject-with icmp-port-unreachable 
-A OUTPUT -o lo -j ACCEPT 
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A OUTPUT -m state --state NEW -j ACCEPT 
COMMIT
*mangle
:FORWARD ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed
*nat
:OUTPUT ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed

DB1 iptables:

# Generated by iptables-save v1.3.5
*nat
:PREROUTING ACCEPT [57850:6391695]
:POSTROUTING ACCEPT [4275:348954]
:OUTPUT ACCEPT [4275:348954]
COMMIT
# Completed on Fri Sep 20 12:56:40 2013
# Generated by iptables-save v1.3.5
*mangle
:PREROUTING ACCEPT [299933:34182855]
:INPUT ACCEPT [299486:34132134]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [326963:298292395]
:POSTROUTING ACCEPT [326963:298292395]
COMMIT
# Completed on Fri Sep 20 12:56:40 2013
# Generated by iptables-save v1.3.5
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [65322:6355987]
-A INPUT -i lo -j ACCEPT 
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -j ACCEPT 
-A INPUT -s x.x.x.x -p udp -m udp --dport 161 -m state --state NEW -j ACCEPT 
-A INPUT -s x.x.x.x -p udp -m udp --dport 161 -m state --state NEW -j ACCEPT 
-A INPUT -s x.x.x.x -p udp -m udp --dport 161 -m state --state NEW -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 443 -m state --state NEW -j ACCEPT 
-A INPUT -p udp -m udp --dport 53 -m state --state NEW -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 53 -m state --state NEW -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 25 -m state --state NEW -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 110 -m state --state NEW -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 143 -m state --state NEW -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 20 -m state --state NEW -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 21 -m state --state NEW -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 3306 -m state --state NEW -j ACCEPT 
-A INPUT -p udp -m udp --dport 3306 -m state --state NEW -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 10000 -j ACCEPT 
-A INPUT -j REJECT --reject-with icmp-port-unreachable 
-A OUTPUT -o lo -j ACCEPT 
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A OUTPUT -m state --state NEW -j ACCEPT 
COMMIT
# Completed on Fri Sep 20 12:56:40 2013

编辑2

找到解决方案。现在已经解决见接受的答案。

1 个答案:

答案 0 :(得分:0)

感谢您的帮助。事实证明,一切都是从一开始就正确设置的,而我得到的是非常奇怪的行为,因为它看起来应该工作因此,为什么我需要你所有的帮助。

然而,我现在终于明白了。事实证明,托管服务提供商实际上确实将某些端口置于防火墙之后并且没有以任何方式向我明确,因为此防火墙仅在同一主机提供商下的本地服务器之间特别活跃。因此,(因为db1和应用服务器)具有相同的托管提供商,他们无法相互连接,但db2可能(包括ping和telnet),因为该服务器位于不同的托管提供商下。显然,主机提供商希望每个服务器每月额外支付10英镑来打开app server和db1服务器之间的私有LAN:/

溶液;我正在将应用服务器移动到另一台主机(并且总是仔细检查局域网上是否没有防火墙,因为我的困惑是广域网上没有防火墙,但局域网上没有防火墙)。

感谢所有帮助。