我远离我的家庭服务器 (OpenSuse 15.1),其中包含我需要访问的数据库。出于我不想在这里详述的原因,我想在同一台机器上运行一个 Node.js 应用程序。我有一个 OpenWRT 路由器,具有以下端口转发规则:
config redirect
option target 'DNAT'
option src 'wan'
option dest 'lan'
option proto 'tcp'
option src_dport '3000'
option dest_ip '192.168.7.7'
option name 'NodeTranq-0'
option dest_port '3000'
我使用 重新启动防火墙,/etc/init.d/firewall reload
通过 ssh 编辑应用程序并保存编辑。然后我运行该应用程序,它宣布它在端口 3000 上运行 Web 服务器。然后我从我的远程计算机(在 Firefox 68.1.0esr(64 位)上)尝试我的静态 WAN 地址和端口 3000,我希望我的 Node 应用程序能够获取该 URL。我的 Node 应用程序是 app.js,包含:
const http = require('http');
const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World\n');
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
我还没有检查过其他防火墙,但我会检查的(我认为没有)。连接被拒绝
Unable to connect
Firefox can't establish a connection to the server at <server ip>:3000.
关于要尝试什么,还有其他想法吗?
答案1
虽然我不太了解 node.js 配置,但根据您的设置,您的应用程序只监听仅用于127.0.0.1
环回访问的端口:仅从服务器到其自身。因此您的应用程序无法从远程访问,包括从 LAN。
您应该更改您的 node.js 配置并输入:
const hostname = '0.0.0.0';
这是INADDR_ANY地址意味着应用程序现在将监听所有接口并接受到它拥有的任何地址的连接,包括 DNAT 流量,192.168.7.7
并且仍然包括127.0.0.1
像以前一样配置为在本地访问它的任何本地应用程序。