1.
什么是香港 CN2 NAT 主机及常见限制
- CN2 是中国电信的一种优质网络线路,针对大陆优化,延迟和丢包通常更好。
- “NAT 主机”通常指供应商没有给到独立公网 IPv4,而是通过运营端的共享公网 IP 和端口池做 NAT(即 Carrier-Grade NAT)。
- 常见限制:无法直接绑定任意公网端口、只能通过控制面板做有限的端口映射、UDP 不稳定或不被映射、无法做 1:1 公网 IP 映射、以及运营商可能限制高并发连接或某些协议(如 P2P、SIP)。
2.
租用前必须向供应商确认的项目
- 是否提供公网 IPv4(独立/共享)或仅 CGNAT(不可选公网 IP)。
- 控制面板是否支持端口映射(端口范围、TCP/UDP 支持、映射写入延迟)。
- 是否提供 IPv6(如果有 IPv6,很多 NAT 限制可通过 IPv6 规避)。
- 是否允许运行长期隧道(如 frp client、autossh),以及对 outbound 流量是否有限制。
3.
在控制面板做端口映射的标准操作步骤
- 登录供应商控制面板,找到“端口映射/端口转发/防火墙”菜单。
- 新增映射:选择公网端口(例如:12345)、内部主机 IP(通常是内网地址例如 10.x.x.x 或 192.168.x.x)和内部端口(例如:22 或 80),选择协议 TCP/UDP。
- 保存并等待生效(有的面板即时生效,有的需 1-10 分钟)。
- 测试:在外网用 curl、telnet 或 nmap 测试:curl http://<公网IP>:12345 或 telnet <公网IP> 12345。
4.
如果面板不支持映射:使用反向隧道(SSH)
- 场景说明:你的 HK CN2 主机没有公网端口,但你能从该主机 outbound 连接到另一个有公网 IP 的服务器(称为跳板或中转)。
- 步骤(在 CN2 主机上):ssh -R 0.0.0.0:REMOTE_PORT:localhost:LOCAL_PORT user@public_server -N -f
例如:ssh -R 0.0.0.0:2222:localhost:22 ubuntu@1.2.3.4 -N -f
- 在公网服务器上确保 /etc/ssh/sshd_config 中 GatewayPorts yes,重启 sshd:sudo systemctl restart sshd。
- 测试:从任意外网机器连接到公网服务器的 REMOTE_PORT(例如 ssh -p 2222 user@1.2.3.4),流量会被反向隧道转发到 HK 主机。
5.
使用 frp 做端口映射(适合 HTTP、TCP)
- 原理:frp 分为 frps(放在有公网 IP 的中转服务器)和 frpc(放在你的 HK 主机)。frpc 将本地端口注册到 frps,外网访问 frps 的端口即转到你的主机。
- frps 配置示例(在公网服务器 /etc/frp/frps.ini):[common] bind_port = 7000 dashboard_port = 7500 dashboard_user = admin dashboard_pwd = xxx
- frpc 配置示例(在 HK 主机 /etc/frp/frpc.ini):[common] server_addr = 1.2.3.4 server_port = 7000 [ssh] type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 6000
- 启动服务并设置为开机自启 systemd,测试:ssh -p 6000 user@1.2.3.4。
6.
保持隧道稳定:使用 autossh
- autossh 用于自动重连 SSH 隧道,安装:sudo apt-get install autossh。
- 示例命令(放到 systemd 或 crontab):autossh -M 0 -f -N -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -R 0.0.0.0:2222:localhost:22 ubuntu@1.2.3.4
- 建议生成并使用无密码的 SSH key(ssh-keygen; ssh-copy-id user@public_server),并在 systemd 服务中使用该命令以实现开机自启。
7.
在有公网 IP 时用 iptables 做 DNAT(仅当供应商给到公网时可行)
- 确认主机有公网 IP:curl ifconfig.me 或 ip addr。
- 开启 IP 转发:sudo sysctl -w net.ipv4.ip_forward=1,并编辑 /etc/sysctl.conf 永久生效。
- 添加 DNAT 规则(示例把 80 转到内网 192.168.0.10:80):sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.0.10:80;sudo iptables -A FORWARD -p tcp -d 192.168.0.10 --dport 80 -j ACCEPT。
- 保存规则:sudo iptables-save > /etc/iptables.rules,并配置网络重启加载。
8.
UDP 服务与 NAT 的注意点及替代方案
- UDP 很多 CGNAT 环境不稳定或不支持长期 NAT 表项,映射容易失效。
- 替代:使用 TURN/ICE(适用于 WebRTC)、使用 UDP 打洞结合公网中转、或将 UDP 封装到 TCP(如 udp2raw + kcptun)并走已建立的 TCP 隧道。
- 测试工具:使用 socat 或 netcat 测试 UDP 连通性:nc -u -l 12345(监听)和 echo "test" | nc -u 公网IP 12345(发送)。
9.
端口映射测试与排错步骤(逐项验证)
- 本地服务确认:在 HK 主机上用 ss -tulnp 或 netstat -tulnp 确认进程监听正确端口。
- 防火墙检查:sudo iptables -L -n 和 sudo iptables -t nat -L -n,确认没有拒绝规则。
- 面板映射生效检查:在外部机器用 nmap -p REMOTE_PORT 公网IP 或 curl 测试。
- 日志查看:查看服务日志、sshd 日志(/var/log/auth.log)与 frp 日志以找出连接被拒或超时的原因。
10.
安全建议:最小端口暴露与访问控制
- 只映射必须端口;管理面板或 frp 上限定允许访问的来源 IP(若支持)。
- 使用强密码/密钥,修改默认端口并启用 fail2ban,限制暴力破解。
- 对 Web 服务使用 HTTPS(Let's Encrypt)并定期更新系统补丁。
- 监控流量异常,防止被滥用(如被用来发动 DDoS),如发现异常应立即撤销映射并联系供应商。
11.
实际案例:用 frp 将本地 80 暴露到公网(完整步骤)
- 在有公网的中转服务器 A(IP 1.2.3.4)安装 frps,配置并 systemctl enable/start。
- 在 HK 主机 B 安装 frpc,编辑 /etc/frp/frpc.ini:[common] server_addr = 1.2.3.4 server_port = 7000 [web] type = tcp local_port = 80 remote_port = 8080
- 启动 frpc:sudo systemctl start frpc,确认连接:查看 frps dashboard 或 frps/frpc 日志。
- 测试:访问 http://1.2.3.4:8080,应能看到 HK 主机上的网站内容。若不可达,检查防火墙、frp 日志与是否有端口被占用。
12.
总结与决策建议:租前要权衡的关键点
- 若必须对外提供服务,优先选择可申请独立公网 IPv4 或支持控制面板端口映射的机房。
- 若预算有限但允许 outbound 连接,准备一个廉价的公网跳板(frp 或 SSH 反向隧道)。
- 对于高可用/高并发服务,CGNAT 环境通常不合适,应直接租用有公网 IP 的 VPS 或使用云负载均衡。
13.
常见问答:CGNAT 会有哪些具体影响?
问:CGNAT 会导致我的服务器不能提供外网服务吗?
答:CGNAT 会阻止外网主动连接到你的主机,除非供应商提供端口映射或你使用中转(如反向 SSH/ frp)。对于需要固定公网入口(例如公网域名直连、VoIP、部分游戏服务器),CGNAT 通常不合适。
14.
常见问答:没有公网 IP 时如何搭建远程 SSH 登录?
问:我只有 CN2 NAT 主机,没有公网 IP,如何从外网 SSH 登录?
答:最常见的做法是使用 SSH 反向隧道或 frp。流程是:准备一台有公网 IP 的跳板服务器,配置反向隧道(ssh -R)或在跳板部署 frps、在 HK 主机运行 frpc,然后从跳板的映射端口登录,建议用 autossh 保持连接稳定并在跳板上开启 GatewayPorts(用于 SSH)。
15.
常见问答:如果面板允许端口映射但 UDP 无效怎么办?
问:控制面板支持映射 TCP,但 UDP 映射无效,怎么解决?
答:首先确认供应商是否明确支持 UDP 映射(有些只做 TCP);如果不支持,考虑用 TURN(用于 WebRTC)、使用 UDP 封装到 TCP 的工具(如 udp2raw + frp over tcp),或者迁移到提供完整 NAT 映射或公网 IP 的方案;同时可尝试在面板请求特例支持或购买独立公网 IP。
来源:租用前须知 香港cn2 nat主机 NAT限制与端口映射实务指南