遇到甲骨文云实例无法访问,优先检查控制台安全列表(Security List)入站规则是否放行对应端口,其次排查实例内部操作系统防火墙。
先说结论:大部分无法访问问题源于云端安全规则与系统防火墙双重拦截,需按顺序排查。
- 先确认:登录 OCI 控制台查看实例所属子网的安全列表入站规则。
- 先处理:若云端规则无误,再登录实例检查内部防火墙(如 firewalld、ufw)状态。
- 再验证:修改后使用 telnet 或 curl 从外网测试端口连通性。
命令速用版
若还能通过 SSH 或其他途径登录实例,可用以下命令快速检查本地监听与防火墙状态:
# 检查端口是否监听
netstat -tlnp | grep 端口号
# CentOS/RHEL 查看防火墙状态
systemctl status firewalld
firewall-cmd `--list-all`
# Ubuntu 查看防火墙状态
ufw status verbose为什么会这样
甲骨文云的网络访问控制分为两层。第一层是虚拟云网络(VCN)层面的安全列表(Security Lists)或网络安全组(NSG),它相当于云厂商提供的虚拟硬件防火墙。第二层是实例操作系统内部的防火墙软件,如 Linux 的 iptables、firewalld 或 ufw。
即使控制台放行了端口,如果操作系统内部防火墙默认拒绝,外部请求依然会被丢弃。此外,OCI 的安全规则默认是有状态的(Stateful),即允许入站后,对应的出站响应流量会自动放行,无需额外配置出站规则,但很多用户会误以为需要双向配置。
分步处理
1. 检查控制台安全规则
登录甲骨文云控制台,进入“网络”->“虚拟云网络”,找到实例所在的子网。点击子网下的“安全列表”,检查“入站规则”。
确认是否存在允许对应协议(TCP/UDP)和端口(如 22、80、443)的规则,源 CIDR 通常需设置为 0.0.0.0/0 或你的特定 IP。若没有,点击“添加入站规则”并保存。
2. 检查操作系统防火墙
若能通过 VNC 或现有 SSH 连接登录实例,检查系统防火墙。对于 CentOS 7/8:
# 临时关闭防火墙测试(生产环境谨慎)
systemctl stop firewalld
# 或永久放行端口
firewall-cmd `--permanent` `--add-port`=80/tcp
firewall-cmd `--reload`对于 Ubuntu:
# 查看状态
ufw status
# 允许端口
ufw allow 80/tcp3. 检查服务是否运行
确认目标服务(如 Nginx、SSH)本身正在运行且监听正确接口。
systemctl status nginx
netstat -tlnp | grep :80怎么验证是否生效
在本地电脑或另一台外网服务器上执行测试命令。不要仅在实例内部 curl 自己,那只能证明服务正常,不能证明网络通达。
# 测试 TCP 端口连通性
telnet 实例公网 IP 端口号
# 或使用 nc
nc -zv 实例公网 IP 端口号
# 测试 HTTP 服务
curl -I http://实例公网 IP若 telnet 显示 Connected 或 curl 返回 HTTP 头信息,说明规则已生效。若一直显示 Trying 后超时,说明仍有拦截。
常见坑
- 源地址限制过严:测试时若规则只写了特定 IP,但本地出口 IP 变动,会导致无法访问。测试阶段建议暂时开放 0.0.0.0/0,连通后再收紧。
- ICMP 与 TCP 混淆:能 ping 通不代表端口能访问。Ping 使用的是 ICMP 协议,网页使用的是 TCP 协议,需在安全列表分别放行。
- 默认安全列表干扰:新建 VCN 时若勾选了“创建默认安全列表”,其中可能包含拒绝所有入站的隐含规则,建议新建自定义安全列表并关联子网。
- 状态误解:OCI 安全列表默认有状态,无需手动添加出站响应规则。若误删了所有出站规则,可能会影响实例主动访问外网(如 yum 更新),但不影响外部访问实例的响应流量。
参考来源
- Oracle Help Center, "Security Lists", https://docs.oracle.com/en-us/iaas/Content/Network/Concepts/securitylists.htm
- Oracle Help Center, "Network Security Groups", https://docs.oracle.com/en-us/iaas/Content/Network/Concepts/networksecuritygroups.htm