所讨论的两个盒子都是 RHEL5。
我有一个在本地主机端口 8000 上运行的 Python RPC 服务器。当在同一台机器上运行的客户端尝试连接时,一切都很顺利。当远程客户端尝试连接时,我们没有得到任何响应。
netstat 显示在 127.0.0.1:8000 上运行的进程,如果我想允许远程连接器,这似乎是问题所在。
我已经转发了路由器上的端口,并且使用 tcpdump 我可以看到 RPC 调用进入端口 8000,但是它们都失败了,并且 RPC 服务器从未收到消息。
服务器配置允许我输入主机名:server = SimpleXMLRPCServer(("localhost", 8000))
尝试用我们的域名代替 localhost 仍然会导致 127.0.0.1,因为我们的 /etc/hosts 文件如下所示:
127.0.0.1 localhost.localdomain localhost
127.0.0.1 staging.<ourdomain>.com
然后我将 /etc/hosts 更改为:
127.0.0.1 localhost.localdomain localhost
192.168.1.140 staging.<ourdomain>.com testserver
我已将本地 IP 更改为服务器 IP,但仍然没有任何反应。netstat 将在 staging..com 行中显示 hosts 文件中的 IP。
如何让进程在 :::8000 或 0.0.0.0:8000 或任何允许远程客户端连接的排列上运行?
答案1
默认监听所有端口(ipv6+ipv4)
0.0.0.0 = bind all ipv4
答案2
您是否尝试过将其更改为监听“0.0.0.0”?
server = SimpleXMLRPCServer(("0.0.0.0", 8000))
答案3
防火墙?
服务 iptables 停止
显然,不要永远这样运行,但是,只是为了测试......假设没有其他安全问题。
此后,只需打开端口即可。
答案4
快速检查表:netstat -ln 的输出是否显示 ::8000 上的监听服务?最好是 lsof,如果没有,请更改代码以监听所有接口或有问题的特定接口。
iptables 是否已禁用?
您能从同一子网中的另一台主机连接到该端口和 IP 吗?这样可以排除中间防火墙或您的 NAT 入站连接的其他问题。
由于这是一个 tcp 连接,因此您的连接也有可能无法建立,如果服务器没有返回路由或类似的东西,则可能会发生这种情况,尽管如果您已经通过 ssh 建立入站连接,则这种情况不太可能发生。