我遇到了一个奇怪的问题。我可以从各种服务器顺利运行此命令:
wget --debug '--http-user=USER123' '--http-passwd=PASSWORD' http://GW-BOX:9091/weijhkdsvn/v9_odbc//CRONTAB.2014020
其中“GW-BOX”是我的网络网关,USER123 和 PASSWORD 代表 weijhkdsvn 的用户和密码,9091 指向内部 Linux 服务器。问题是这个命令超时和/或被拒绝。
wget --debug '--http-user=USER123' '--http-passwd=PASSWORD' http://GW-BOX:9093/weijhkdsvn/v9_odbc//CRONTAB.20140206
端口 9093 指向不同的内部服务器。请注意,唯一的区别就是端口。
因此我尝试直接从服务器执行 wget,以确保 http 配置正确:
wget --debug '--http-user=USER123' '--http-passwd=PASSWORD' http://9091-Server:80/weijhkdsvn/v9_odbc//CRONTAB.20140206
在这种情况下,9091-Server 是端口 9091 所指的内部服务器。它工作正常。然后我尝试了相同的命令,但模仿端口 9093:
wget --debug '--http-user=USER123' '--http-passwd=PASSWORD' http://9093-Server:80/weijhkdsvn/v9_odbc//CRONTAB.20140206
其中 9093-Server 指的是 9093 指向的内部服务器。
因此,据我所知,上述示例证明 9093-Server 已正确设置 http 以允许 wget。这表明问题可能出在 GW-BOX 上,因此我使用 telnet 测试了端口,发现端口 9091 工作正常。
[wmsodbc]> telnet GW-BOX 9091
Trying GW-BOX...
Connected to GW-BOX.
Escape character is '^]'.
^]
telnet> quit
Connection closed.
[wmsodbc]>
但是端口9093没有起作用:
[wmsodbc]> telnet GW-BOX 9093
Trying GW-BOX...
telnet: connect to address GW-BOX: Connection refused
[wmsodbc]>
然后我检查了 GW-BOX 上的 iptables:
[root@wmsgateway ~]# iptables-save | grep "909[13]"
-A INPUT -p tcp -m tcp --dport 9091 -j LOG
-A INPUT -p tcp -m tcp --dport 9093 -j LOG
-A PREROUTING -d GW-BOX-EXTERNAL-IP/32 -p tcp -m tcp --dport 9091 -j DNAT --to-destination 9091-ServerIp:80
-A PREROUTING -d GW-BOX-EXTERNAL-IP/32 -p tcp -m tcp --dport 9093 -j DNAT --to-destination 9093-ServerIp:80
-A POSTROUTING -d 9091-ServerIp/32 -p tcp -m tcp --dport 9091 -j SNAT --to-source GW-BOX-INTERNAL-IP
-A POSTROUTING -d 9093-ServerIp/32 -p tcp -m tcp --dport 9093 -j SNAT --to-source GW-BOX-INTERNAL-IP
[root@wmsgateway ~]#
那么我还可以检查什么来了解为什么端口 9091 接受 wget/telnet 请求,而 9093 不接受?
答案1
好的,我搞清楚了这个问题。显然,GW-BOX 是作为网关盒使用的。但正如我在另一个帖子中所说这里,我无法通过此盒子访问互联网。事实证明,一旦我解决了无法通过此 GW-BOX 访问互联网的问题,我就可以正常使用 wget。就我而言,按照我刚才提到的帖子,我必须将 iptables 从
iptables-save | grep eth
-A POSTROUTING -o eth1 -j SNAT --to-source 68.AAA.BBB.155
到
iptables-save | grep eth
-A POSTROUTING -o eth2 -j SNAT --to-source 68.AAA.BBB.155
现在一切正常。我还设置了全新的端口,但我不认为这是根本原因。
谢谢。希望这对其他人有帮助。
答案2
验证问题所在位置的一种方法是将端口与服务器交换。服务器 A 当前具有端口 9091 并且正常运行,服务器 B 具有端口 9093 并且出现故障。要确定问题出在 GW-Box 还是服务器本身,请在 GW-box 中翻转 SNAT 的 iptables 配置。将 9091 指向服务器 B,将 9093 指向服务器 A。如果 9091 继续工作,则您知道问题出在端口 9093 的规则中,因为服务器 A 和 B 都在 9091 上工作,这也可能表明服务器 B 上的防火墙规则也存在问题。如果 9091 出现故障,但 9093 工作正常,您可以放心地认为您的 GW-Box 运行正常,并且服务器 B 以某种方式不允许上层端口通过 WGET 访问,因为您之前已确认 WGET 可以直接访问。
答案3
首先,您直接在 wget 上对服务器进行的测试,这些测试是从哪里进行的?从原始主机,还是从 GW-box 或从某些“第三方”主机?
另外,在 GW-box 上您是否检查过其他服务是否使用 9093 端口?(在 gw-box 上运行类似以下命令:
netstat -lnptu | grep 9093