家宽拿到动态公网 IPv4 后:判定生效与同步更新云服务器安全组白名单
背景
我在上海区域有一台 Flexus 应用服务器 L 实例,安全组里的 SSH 22 和 ICMP 只放行家里宽带的出口地址(/32)。家宽原来走运营商级 NAT(CGNAT),出口地址是多户共用的,而且随重拨变化。最近运营商给开通了动态公网 IPv4,光猫重拨后出口地址变了,SSH 随即连不上。本文记录两件事:怎么确认公网 IPv4 真的生效了,以及怎么安全地更新安全组白名单并做验收。
文中地址用文档保留段代替:光猫 WAN 地址和出口地址写作 203.0.113.10,旧出口写作 198.51.100.20。
一、判断公网 IPv4 是否生效
只看测速网站显示的“你的 IP”不够,因为 CGNAT 下它显示的也是一个公网地址,只不过是运营商 NAT 设备的地址。可靠的判断是对比两个值:
- 拨号设备拿到的 WAN 地址:谁做 PPPoE 拨号就看谁。光猫路由模式下,光猫后台的“WAN 连接 / 宽带信息”会写,也可以用 UPnP 的
GetExternalIPAddress查询。 - 外部看到的出口地址:从局域网直连(不要走代理)访问一个返回客户端 IP 的接口。
| WAN 地址 | 与出口比较 | 结论 |
|---|---|---|
| 100.64.0.0/10 内(如 100.119.x.x) | 不相等 | 运营商级 NAT,没有公网 |
| 10/172.16/192.168 私网段 | 不相等 | 上游还有一层 NAT(例如二级路由),先看上游设备 |
| 公网地址 | 相等 | 公网 IPv4 已生效 |
| 公网地址 | 不相等 | 流量没从这条线出去(代理、多线路或策略路由),先排查路由 |
我这次的情况:开通后第一次重启光猫,WAN 仍是 100.119.x.x,说明工单还没在拨号侧生效;几天后光猫再次重拨,WAN 地址变为 203.0.113.10,与直连查到的出口一致,这才算真正拿到公网。所以开通后要以对比结果为准,不要只听“已开通”就去改配置。
如果想长期观察,可以写个定时脚本每 5 分钟取一次 WAN 地址和出口地址,记录三类事件:WAN 地址类型变化(CGNAT ↔ 公网)、出口地址变化、拨号在线时长归零(重拨)。动态公网的地址会随重拨变,这份记录能告诉你本地实际的重拨周期,也能在公网被收回时第一时间发现。
二、更新安全组白名单
出口变化后,原来按 /32 放行的规则全部失效。在控制台修改的步骤:
- 网络控制台 → 访问控制 → 安全组,找到实例绑定的安全组(Flexus L 实例默认是
sg-default-smb这类名字,可以在“关联实例”里确认)。 - “配置规则” → 入方向规则,找到源地址为旧出口
198.51.100.20/32的规则。建议规则描述里写清用途(如“SSH 管理”“ICMP 延迟探测”),找的时候一眼就能认出来。 - 点“修改”进入行内编辑,删掉源地址里的旧标签,输入
203.0.113.10/32后回车,确认生成了新标签再点“确认”。直接在输入框里改文字不会生效,要先删旧标签再加新标签。 - 账号开了操作保护时会要求短信验证码,验证一次后短时间内的连续修改通常不再重复要求。
注意别图省事把源地址改成 0.0.0.0/0。控制台也会提示:22、3389 这类高危端口对全网开放,很快就会被扫描和爆破。
三、验收
改完不能只看控制台显示“修改成功”,要从家里实际连一次:
ping -c 3 <服务器公网IP> ssh -o BatchMode=yes -o ConnectTimeout=8 -i ~/.ssh/<私钥> root@<服务器公网IP> 'hostname; uptime'
两条都通过才算完成。如果 ping 通了但 SSH 不通,先检查服务器内部防火墙(ufw / firewalld)有没有同样按旧地址放行;如果都不通,确认测试流量是不是被本机代理接管、从别的出口出去了,用 curl --noproxy '*' 再查一次出口地址。
四、长期方案
动态公网的地址迟早还会变,每次手改安全组不是长久之计。可选的做法:
- 监控脚本发现出口变化时提醒自己,或者用 VPC API 自动更新规则(API 凭据要用最小权限的 IAM 用户,只授予该安全组的规则修改权限)。
- 管理端口只对组网工具(如 WireGuard / Tailscale 一类的私有网络)开放,公网安全组里不再放行 22,彻底摆脱对家宽地址的依赖。
另外,有了公网 IPv4 以后,WebRTC / STUN 泄露的就是家里的精确地址,浏览器里相关策略也值得一并检查。
- 点赞
- 收藏
- 关注作者
评论(0)