最近甲骨文云的免费VPS依旧是人手必备的“神机”,性价比无敌。不过很多刚入手的朋友在部署环境时,往往会遇到一个让人抓狂的现象:明明在网页后台把端口全部放行了,防火墙规则也写了,但外部就是访问不通,甚至连SSH都连不上,只能无奈删机重建。

其实,这并不是你的机器坏了,而是Oracle的网络架构比普通VPS多了一层“保险”,甚至在系统内部还藏着一把机关锁。今天我们就来通过实际案例,把这三道关卡彻底拆解清楚,让你的VPS不再“隐身”。

一、 认清“两道门”:OCI的双重网络策略

甲骨文云控制台界面,展示VPC网络或安全组配置

图:Oracle Cloud 控制台网络配置概览,示意网络层级。

Oracle Cloud的安全策略非常严谨,它不像某些廉价VPS只有一个防火墙面板。对于同一个实例,通常存在两种并行的网络安全规则,任何一道门没开,流量都会被拦截。很多时候你觉得自己配置了防火墙,其实只开了一扇门。

1. Security List(安全列表):子网级别的守门员 这是作用于整个子网的规则。如果你的实例都在同一个默认子网里,这个规则默认就生效了。它的特点是“一刀切”,只要在这个子网下的所有机器,都会受它管控。

2. NSG(网络安全组):私人保镖 这是绑定在具体实例网卡(VNIC)上的规则。相比于大包大揽的Security List,NSG更像是给这台服务器配备了专属的安保,粒度更细。

最佳实践: 为了避免混淆,建议初学者在两个地方都配置相同的入站规则,或者至少确认你使用的到底是哪一种。最稳的方案是:两边都加上。

二、 攻克第一关:控制台入站规则配置

无论你选择Security List还是NSG,配置逻辑是通用的。我们需要配置的是Ingress Rules(入站规则)——因为这是允许外部流量进来的路。出站规则通常默认全开,不需要动。

配置入站规则的界面截图

图:配置入站规则(Ingress Rules)截图,确保开放必要端口。

以下是必须要打通的“生命通道”:

端口 协议 作用 安全建议
22 TCP SSH远程管理 非常关键:源IP建议填你自己的公网IP(如 1.2.3.4/32),尽量不要对全世界开放,防止被暴力破解。临时调试可用 0.0.0.0/0
80 TCP HTTP服务/SSL证书验证 必须对 0.0.0.0/0 开放。这是申请Let's Encrypt证书的必经之路。
443 TCP HTTPS/代理服务 必须对 0.0.0.0/0 开放,用于网页访问或VLESS等协议。
30070 (示例) TCP 3x-ui管理面板 强烈建议限制为自己的公网IP。管理后台一旦暴露在公网,极易成为攻击目标。

配置路径参考:

  • Security List: Networking > Virtual Cloud Networks > 选择你的VCN > Subnets > 选择子网 > Security Lists > Add Ingress Rules
  • NSG: Networking > Virtual Cloud Networks > 选择你的VCN > Network Security Groups > 选择NSG > Add Rules

⚠️ 易错点提示: 配置NSG后,必须检查它是否真的绑定到了你的实例网卡上(Compute > Instances > 实例详情 > Attached VNICs)。很多朋友配了半天不生效,最后发现是NSG根本没挂上去。

三、 攻克第二关:系统内部的隐形“大坑”

这是Oracle Cloud最著名、也是劝退最多新人的一个坑。

即便你在控制台(OCI Console)里把Security List和NSG都配置得完美无缺,你会发现:80端口不通,443不通,SSH能连是因为它是系统默认特例。为什么?因为Oracle官方提供的Ubuntu镜像,默认在系统内部开启了一层 iptables 规则,无情地拦截了所有非22端口的入站流量。

而且,这个系统里通常没有预装UFW,你查防火墙状态显示“ inactive”,以为万事大吉,其实底层的iptables正在默默使坏。

解决方案(三行命令必执行):

你需要强行把端口放行规则插入到iptables链的最前面,并保存下来防止重启失效。

# 1. 放行必要端口(HTTP、HTTPS、面板端口等)
sudo iptables -I INPUT -p tcp -m multiport --dports 80,443,30070 -j ACCEPT

# 2. 允许已建立的连接(防止正常通信突然中断,非常重要!)
sudo iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# 3. 永久保存规则,否则重启后前功尽弃
sudo netfilter-persistent save
``

执行完这三步,系统内部的路才算真正疏通。

### 四、 终极排查:端口还是不通怎么办?

如果你已经完成了上述所有步骤,但 Let's Encrypt 申请证书时还是报错,或者浏览器访问 IP 没反应,可以使用以下“外科手术”级方法定位问题。

**1. 检查服务是否在监听**
别怀疑防火墙,先看看你的服务有没有真正跑起来。

```bash
# 查看 80、443 等端口是否有程序在听
sudo ss -tulpn | grep -E ':80|:443|:30070'

如果这一步没有任何输出,说明你的服务(如Nginx、x-ui)没启动或者挂掉了,跟防火墙没关系。

2. Python快速测试端口连通性 如果确认在监听,但外网访问不了,可以用Python在服务器上临时起一个极简的HTTP服务来进行“回环测试”。

在VPS里执行:

sudo python3 -m http.server 80 --bind 0.0.0.0

然后,直接在你本地电脑的浏览器里输入:http://你的VPS公网IP

  • 如果能看到文件列表目录: 恭喜,你的网络是通的,问题出在你原本部署的那个服务软件配置上(比如Nginx配置错了)。
  • 如果显示连接超时: 说明流量没进来。问题大概率出在 Security List/NSG 规则没生效,或者 子网路由表没指向 Internet Gateway,或者是 iptables 还没清干净

五、 总结

Oracle Cloud的免费虽然香,但网络门槛确实比其他云厂商高一点。记住核心逻辑:外部ACL(安全列表/NSG)是大门,系统iptables是内门,两扇门都要开,服务监听是最后的灯泡。

遇到问题不要慌,按照从外到内的顺序——控制台规则 -> NSG绑定 -> 系统iptables -> 服务监听状态,一步步排查,一定能找到原因。希望这篇避坑指南能帮你省下几个小时的折腾时间!

标签: none

AI Skills Smart Station on Nick Launches

评论已关闭