一、前言
最近在使用OCI AMD 小鸡时,遇到了一个经典问题:
SSH 可以连接
Docker 服务已经运行
本地 curl 正常
但公网无法访问服务
最后发现:
问题并不是 Docker,也不是 Linux 防火墙。
而是:OCI Security List(云防火墙)没有开放端口。
由于 OCI 控制台在国内网络环境下经常卡顿、加载失败,因此尝试完全使用:
SSH(一台vps)
OCI CLI(一台vps下载官方脚本安装配置api使用)
OCI API(前置条件:进入控制台导出的一份)
来管理云服务器。
本文记录完整操作流程。
二、OCI 网络结构基础理解
OCI 的公网访问分为两层:
1. Linux 系统自身监听端口
例如:
ss -tulnp如果看到:
0.0.0.0:25774说明:
程序已经监听公网网卡。
2. OCI Security List(云防火墙)
即:
云平台自己的网络规则。
即使 Linux 已经监听:
如果 Security List 没开放:
公网依旧无法访问。
三、常见端口含义
四、安装 OCI CLI
OCI CLI 本质:
是官方提供的:
命令行 API 管理工具
安装:
bash -c "$(curl -L https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh)"安装完成后验证:
/root/bin/oci --version例如:
3.82.0说明安装成功。
这一步全局环境变量后续问AI去……
五、配置 OCI API
执行:
/root/bin/oci setup config需要准备:(api的全都有),一步一步的输入
User OCID
Tenancy OCID
Region
API 私钥 pem 文件
例如:
region=ap-tokyo-1配置完成后:
测试:
/root/bin/oci iam region list如果返回 JSON:
说明:
OCI API 已成功连接。
六、查看 Security List
执行:
/root/bin/oci network security-list list --compartment-id [你的tenancy_ocid]返回:
{
"data": [
{
"display-name": "Default Security List for default-vcn",
"id": "ocid1.securitylist.oc1.xxx"
}
]
}重点记录:
security-list-id七、导出当前防火墙规则(非常重要)
OCI Security List:
不是追加模式
而是:
全量覆盖模式
因此:
必须先备份旧规则。
导出:
/root/bin/oci network security-list get --security-list-id 你的security-list-id --query 'data."ingress-security-rules"' --output json > rules.json查看:
cat rules.json八、修改 rules.json 开放端口
编辑:
nano rules.json在原规则基础上:
新增:
80
443
25774
例如:
{
"description": "HTTP",
"icmp-options": null,
"is-stateless": false,
"protocol": "6",
"source": "0.0.0.0/0",
"source-type": "CIDR_BLOCK",
"tcp-options": {
"destination-port-range": {
"max": 80,
"min": 80
},
"source-port-range": null
},
"udp-options": null
}443 与 25774 同理。
九、非常重要:绝对不要删除22端口
SSH 依赖:
22如果误删:
会导致:
SSH失联
因此:
修改 rules.json 时:
必须保留:
{
"protocol": "6",
"source": "0.0.0.0/0",
"tcp-options": {
"destination-port-range": {
"max": 22,
"min": 22
}
}
}十、更新 Security List
执行:
/root/bin/oci network security-list update --security-list-id 你的security-list-id --ingress-security-rules file://rules.json出现:
Are you sure you want to continue? [y/N]:输入:
y确认更新。
十一、验证是否成功
1. Linux 本地验证
curl http://127.0.0.1:25774如果返回 HTML:
说明程序正常。
2. 检查监听端口
ss -tulnp确认:
0.0.0.0:25774存在。
3. 公网测试
浏览器访问:
http://公网IP:25774如果可以打开:
说明:
OCI Security List 已成功放行。
十二、Linux 权限注意事项
OCI API 私钥建议:
chmod 600 xxx.pem否则:
OCI CLI 会提示:
Permissions are too open十三、一些运维经验总结
1. 修改安全组前先备份
例如:
cp rules.json rules.json.bak2. SSH 永远不要只保留一个窗口
推荐:
当前 SSH 不关闭
新开一个 SSH 测试22是否正常
确认没问题再关闭旧窗口。
3. 少开放无用端口
原则:
最小暴露面
不用的端口:
建议关闭。
4. OCI CLI 比控制台稳定很多
尤其国内网络环境:
OCI 控制台容易:
卡顿
超时
加载失败
CLI + API:
往往更加稳定。
十四、总结
通过:
SSH
OCI CLI
OCI API
即使不进入 OCI 控制台:
也可以:
查询 Security List
修改云防火墙
开放公网端口
管理 OCI 网络
本文为个人学习记录,转载请注明出处:[万俟季先生的个人博客](https://miloaether.loc.cc)