DNAT 和安全组怎么配合
经 DNAT 转发的流量到达实例时,目的地址已经变成实例的私网 IP:所以安全组要放行的是「私网侧端口」,而不是公网映射端口,同时实例内的应用也必须真的监听这个端口。放行公网端口、监听私网端口是最常见的配置错位,出现「映射看着没问题但就是不通」时,先按这条链条逐段核对,比反复改规则有效得多。
放行规则示例
放行规则示例
映射:公网 443 → 10.10.1.20:8443
安全组入方向:允许 TCP 8443,来源按需限制
实例内确认监听:
ss -lntp | grep 8443
验证链路:公网端口 → DNAT 命中 → 安全组放行 → 应用监听基本信息
| 放行对象 | 映射后的私网端口,不是公网端口 |
|---|---|
| 来源范围 | 公网映射通常来源较宽,能收窄就收窄 |
| 验证链条 | 公网端口、DNAT 命中、安全组放行、应用监听 |
| 端口冲突 | 同一 EIP 的同一端口不能被两条映射共用 |
典型使用场景
- 把公网端口映射到内网服务的非标准端口,避免直接暴露应用默认端口
- 多台内网实例共用少量公网端口,按端口区分不同服务
- 测试环境对外开放临时端口,验证完成后及时删除映射
- 把公网访问集中到 NAT 网关,避免给每台实例都配公网地址
不通时的排查顺序
| 环节 | 检查内容 | 常见问题 |
|---|---|---|
| 公网入口 | EIP 与端口是否正确映射 | 端口写错或映射未生效 |
| NAT 网关 | 是否为增强型并已配置 DNAT | 普通型不支持端口映射 |
| 安全组 | 是否放行私网端口 | 放行了公网端口 |
| 实例内部 | 应用监听地址与端口 | 只监听 127.0.0.1 |
放行公网端口、监听私网端口是常见的配置错位,改规则时对照映射表核对。
映射的变更与回收
DNAT 映射是很容易堆积的配置:临时开放的端口、测试用的映射、已经下线的服务,如果不回收就会长期留在公网入口上。建议把每条映射当成资产登记——谁申请的、映射到哪个私网端口、什么时候到期,并定期对照业务清单清理。删除映射前先在实例上确认没有活跃连接,删除后观察一段时间日志再确认无调用方依赖;顺序反过来会造成正在使用的连接静默失败,排查时又很难联想到是刚删掉的一条映射。