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 localhost
returns我的主页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 上面写着:
- 实例必须在 public 子网中。 (检查)
- 实例必须有一个 public IP 地址。 (同时检查)
- 实例的 VCN 必须有一个 Internet 网关。(什么?我不知道如何检查或执行此操作。即使阅读了更多内容。)
- public 子网必须相应配置路由表和安全列表。 (我想我试过了??)
一个 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
我正在尝试使用 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 localhost
returns我的主页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 上面写着:
- 实例必须在 public 子网中。 (检查)
- 实例必须有一个 public IP 地址。 (同时检查)
- 实例的 VCN 必须有一个 Internet 网关。(什么?我不知道如何检查或执行此操作。即使阅读了更多内容。)
- public 子网必须相应配置路由表和安全列表。 (我想我试过了??)
一个 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