发布内网服务的两种选择
把内网服务开放到公网,有两种思路:一种是在网关上做端口映射(NAT Server,也叫静态 NAT 或端口转发),公网连接直接穿透到内网服务器,工作在网络层与传输层;另一种是在前面放一台反向代理(如 Nginx),公网连接先到代理,再由代理转发给内网服务,工作在应用层。选型的核心问题是:你需不需要按域名或路径分流、需不需要统一的证书与访问日志、需不需要在入口做限速与防护。
基本信息
| 适用平台 | 网关设备(华为 VRP、思科 IOS、H3C Comware)配合服务器侧反向代理 |
|---|---|
| 端口映射命令 | 华为/H3C nat server,思科 ip nat inside source static |
| 反向代理方案 | Nginx 的 proxy_pass 与 server_name 分流 |
| 层次差异 | 端口映射为三层与四层直达,反向代理为七层转发 |
| 权限要求 | 网关需全局配置模式,代理需服务器上的配置文件权限 |
典型使用场景
- 只发布一个端口直达内网服务:用端口映射最简单
- 多域名共用 443:由反向代理按域名分流到不同后端
- 统一证书与访问日志:日志、限速、WAF 都收敛在代理层管理
- 需要真实源地址:反向代理可通过请求头把客户端地址传给后端
- 临时排障:先做端口映射验证链路,再换成正式的反向代理入口
华为 VRP
华为 VRP
[Huawei] interface GigabitEthernet0/0/1
[Huawei-GigabitEthernet0/0/1] nat server protocol tcp global current-interface 443 inside 192.168.1.10 443
! current-interface 表示使用该接口地址作为公网映射地址
<Huawei> display nat server # 查看映射条目与命中情况思科 IOS
思科 IOS
SW-CORE-01(config)# interface GigabitEthernet0/1
SW-CORE-01(config-if)# ip address 202.1.1.1 255.255.255.0
SW-CORE-01(config-if)# ip nat outside
SW-CORE-01(config)# interface GigabitEthernet0/2
SW-CORE-01(config-if)# ip nat inside
SW-CORE-01(config)# ip nat inside source static tcp 192.168.1.10 443 202.1.1.1 443
SW-CORE-01# show ip nat translationsH3C Comware
H3C Comware
[H3C] interface GigabitEthernet1/0/1
[H3C-GigabitEthernet1/0/1] nat server protocol tcp global 202.1.1.1 443 inside 192.168.1.10 443
<H3C> display nat serverNginx 反向代理对照
Nginx 反向代理对照
server {
listen 443 ssl; # 代理层终止 TLS
server_name app.example.com;
location / {
proxy_pass http://192.168.1.10:8080; # 转发到内网后端
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; # 传递真实源地址
}
}两种方案对比
| 对比项 | NAT Server 端口映射 | 反向代理 |
|---|---|---|
| 工作层次 | 三层与四层直达 | 七层应用转发 |
| 域名与路径分流 | 不支持 | 支持,按 server_name 与 location 分流 |
| 证书管理 | 证书放在后端服务器 | 证书集中在代理层统一管理 |
| 真实源地址 | 后端看到的是网关地址 | 可通过请求头传递客户端地址 |
| 限速与防护 | 依赖网关能力 | 可在代理层做限速、访问控制与日志 |
| 延迟与复杂度 | 低延迟、配置简单 | 多一跳,配置与运维复杂度上升 |
同一个服务不要同时用端口映射和反向代理发布:会出现两条入口,域名解析、证书与访问日志各管一摊,出问题时很难判断流量走的哪条路径。先定一种入口方式,再考虑是否需要灰度并行。