让进程监听 0.0.0.0(或者不是 127.0.0.1)

让进程监听 0.0.0.0(或者不是 127.0.0.1)

所讨论的两个盒子都是 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 建立入站连接,则这种情况不太可能发生。

相关内容