VPS 无法在 public IP Oracle 计算云上访问 NodeJS 服务器

VPS NodeJS server not accessible on public IP Oracle Compute Cloud

我正在尝试使用 Ubuntu 18.04 在 Oracle Cloud Compute VPS(永远免费)上建立我的 nodejs 网站。 (在这种情况下,它是一个 Oracle 服务器似乎非常重要)。我可以 curl 本地主机(然后它 returns HTML),但我无法通过我的电脑的 public ip 访问它。

为了绕过端口 80 的 sudo,我应用了:

sudo apt-get install libcap2-bin
sudo setcap 'cap_net_bind_service=+ep' `which node`

它在内部 运行:

pm2 start bin/www

│ id │ name               │ mode     │ ↺    │ status    │ cpu      │ memory   │
├────┼────────────────────┼──────────┼──────┼───────────┼──────────┼──────────┤
│ 0  │ www                │ fork     │ 496  │ online    │ 0%       │ 15.5mb   |

pm2 log returns 没有错误。

sudo netstat -tulpn | grep 80 returns:

tcp6       0      0 :::80                   :::*                    LISTEN      26444/node /opt/por

如果你在想“哦不,它在 ipv6 上 运行s,你应该在 nodejs 中添加 listen(port, "0.0.0.0")”,我试过了,然后它 returns 下面这个,还是有同样的问题:

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      26487/node /opt/por

curl localhostreturns我的主页html。 在我的电脑浏览器中通过 public ip 访问它是问题所在,所以问题出在 Oracle 制作的防火墙中。

我发现Oracle 设置了一些iptables 规则。有些人只是说:禁用所有这些,但我发现这对安全性来说有点冒险。 因此,我只想打开我需要的端口(端口 80)。 所以我尝试了几乎所有我能找到的命令(下面的命令和更多我不记得的命令)。

sudo iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT
sudo iptables -A OUTPUT -p tcp  --sport 80 -j ACCEPT
iptables -I INPUT 5 -i ens3 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

sudo netfilter-persistent save

我当前的 iptables 可见于: sudo iptables -L -n -v https://pastebin.com/ibqWUqjA

NAT iptables 可见于: sudo iptables -t nat -L -n -v https://pastebin.com/QGxdTsJ1

我必须说,我不是网络方面的专家。我只知道如何在非 Oracle 云服务器(我家里的树莓派,调制解调器中有配置)上设置基本的 NodeJs 服务器。所以我还没有把 iptables 和高级云环境处理到这种程度。 我试图通过观看视频和 oracle 环境来阅读 iptables 主题: https://docs.oracle.com/en-us/iaas/Content/Network/Tasks/managingpublicIPs.htm 但是,我必须说这是一个相当大的信息过载。在 link 上面写着:

一个 Whosebug post 我发现有完全相同的问题说:“我正在使用 oracle 云。我将查看服务器外部的防火墙设置。...谢谢。问题是oracle 服务器本身的防火墙设置。问题已解决”(Nodejs on linux not accessible outside Server) 但他没有说在哪里:(。我搜索了很多,但找不到选项。

有人能给我指出正确的方向吗?

确实还有一个地方需要在终端外打开防火墙。

  • 转到计算 > 实例
  • 单击您的实例名称。你会看到一个详细的页面,描述了很多属性。
  • 点击子网。
  • 单击 vcn-...的默认安全列表
  • 添加入口规则

添加以下规则:

在您的网站处于 运行 时再次尝试访问您的 public IP,它成功了!

要阅读更多相关信息,并查看我在哪里找到它,请参阅:

https://docs.oracle.com/en-us/iaas/Content/Network/Concepts/securitylists.htm#Default

https://docs.oracle.com/en-us/iaas/Content/Network/Concepts/securityrules.htm#stateful