无法从同一台机器上的 eth0 地址访问 Ubuntu 服务器

无法从同一台机器上的 eth0 地址访问 Ubuntu 服务器

我有一台 Ubuntu 16.04 VM,当我运行curl http://192.168.254.42(eth0 IP 地址)时,它很快回复“连接被拒绝”。但是,服务器肯定正在监听0.0.0.0,网络上的其他计算机可以使用浏览器中的相同地址访问它。curl http://192.168.254.1返回我的路由器管理页面的 html。

当然,这通常不会成为阻碍因素,但这也意味着连接到服务器的 VPN 客户端无法使用 eth0 IP 地址(网络上的客户端使用该地址)访问服务器本身。我以前从未遇到过这个问题,Google 会显示明显的“在本地主机上监听”,但这里不是这种情况。

我可以从终端 ping eth0 ip 地址(即 ping 自身),并且它响应正常。来自 VPN 客户端的跟踪路由看起来也正确。但访问http://192.168.254.42立即响应拒绝连接。

这是netstat -tulpn输出。

$ netstat -tulpn | grep :80
tcp6       0      0 :::80                   :::*                    LISTEN      5724/index-lib
$ netstat -tulpn | grep :85
tcp6       0      0 :::85                   :::*                    LISTEN      1212/server.js
$ netstat -tulpn | grep :81
tcp6       0      0 :::81                   :::*                    LISTEN      1515/apache2

将其设置为端口 86 即可。另一个 NodeJS 服务器也在端口 85 上运行,可以正常访问。所以这不是 NodeJS 方面的问题。


旧信息

该 Web 服务器是一个监听的单个 NodeJS v10.16.3 HTTP 服务器实例0.0.0.0

继续听192.168.254.42也不起作用。

更重要的是,监听端口 81 的 Apache webservice 可以正常访问。

Chrome 说ERR_CONNECTION_FAILED,但它几乎立即完成。

没有设置 iptables 规则。

NodeJS 进程正在监听端口 85,可以以相同的方式访问。

这是netstat -tulpn输出。

$ netstat -tulpn | grep :80
tcp6       0      0 :::80                   :::*                    LISTEN      5724/index-lib
$ netstat -tulpn | grep :85
tcp6       0      0 :::85                   :::*                    LISTEN      1212/server.js
$ netstat -tulpn | grep :81
tcp6       0      0 :::81                   :::*                    LISTEN      1515/apache2

我用来检查的命令是

$ curl http://192.168.254.42
curl: (7) Failed to connect to 192.168.254.42 port 80: Connection refused

端口 81 和 85 返回预期的 HTML。

将其设置为监听端口 86 即可访问!所以我认为它不在 NodeJS 端。

答案1

我没有发布评论来寻求澄清的权限,所以我只能猜测答案。你正在谈论你的节点应用程序正在监听的 IP 地址,但我从未在任何节点应用程序中配置过这一点。我猜你的代码看起来像这样:

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.write('Hello World!');
  res.end();
}).listen(8080, 0.0.0.0);

这里的端口和 IP 都是可选的,因此如果您想监听端口 80,那么只需放弃它们即可。如果您正在监听其他端口,请放弃 IP 并让 Node 自行解决。

您提到了 81 上的 Apache 服务器,我假设您正尝试直接连接到 Node,而不是通过 Apache 来访问 Node。

如果以上内容无法帮助您发布来自节点应用程序的相关代码,cat /etc/hostssudo netstat -tulpn。如果您通过 Apache 进行操作,那么也请发布相关的 Apache 配置(即中的虚拟主机条目/etc/apache2/sites-enabled/)。

答案2

我在 中找到了这一行/etc/rc.local

iptables -t nat -A OUTPUT -o lo -p tcp --dport 80 -j REDIRECT --to-port 8080

发现问题!

这个答案说明了为什么该规则没有出现在iptables -Lhttps://serverfault.com/a/685948/32875

有 5 个表 (filter、nat、mangle、raw、security)。您可以调用iptables -L -t table每个表。

相关内容