2026年5月23日 Technical Release

NAT VPS 常见问题与解决方案

"整理 NAT 型 VPS 使用过程中最常见的问题,包括 SSH 连接、端口转发配置、服务暴露、内核模块限制等,附带详细解决步骤。"

NAT 型 VPS 与独立 IP 的 KVM 有本质区别:多台机器共享同一个公网 IP,通过端口转发对外提供服务。这带来了极低的价格,但也引入了一些独特的使用门槛。本文整理了使用 NAT VPS 时最常遇到的问题及对应解决方法。


1. SSH 无法连接 / 不知道如何连接

症状: 拿到 VPS 后,直接 ssh root@<IP> 连不上,或者提示 Connection refused

原因: NAT VPS 没有独立的公网 IP,对外暴露的地址是宿主机的入口地址(Entry Host),SSH 端口也不是默认的 22,而是通过端口转发映射出来的。

解决方法:

在控制面板的实例详情页,找到 SSH 连接信息栏,系统会自动生成完整的连接命令,格式如下:

ssh root@<entry_host> -p <host_port>

例如,如果宿主机入口为 node1.example.com,SSH 对应的外部端口为 23456

ssh root@node1.example.com -p 23456

如果没有看到 SSH 命令,说明还没有为内部 22 端口添加端口转发规则,前往 端口转发 卡片,添加一条 TCP 规则:

内部端口 (VM)外部端口 (对外)
22任意一个可用端口

添加后刷新页面,SSH 命令会自动出现。


2. 端口转发配置后,外部访问不通

症状: 在面板里添加了端口转发,但从外部 curl 或浏览器访问始终超时。

最常见原因:服务只监听了 127.0.0.1,而不是 0.0.0.0

NAT 端口转发的流量从宿主机到达 VM 内部时,是通过 VM 的内网接口进来的,不是从 lo 回环接口。如果你的服务绑定在 127.0.0.1,宿主机转发过来的流量就无法到达它。

检查服务监听地址:

ss -tlnp
# 或
netstat -tlnp

确认目标端口的 Local Address0.0.0.0:<port>:::port(IPv6),而不是 127.0.0.1:<port>

常见服务的修改方法:

Nginx:

# 修改前(错误)
listen 127.0.0.1:8080;

# 修改后(正确)
listen 0.0.0.0:8080;
# 或直接写
listen 8080;

Node.js / Python 等:

// Node.js 修改前
app.listen(3000, '127.0.0.1')

// 修改后
app.listen(3000, '0.0.0.0')
# Python Flask 修改前
app.run(port=5000)

# 修改后
app.run(host='0.0.0.0', port=5000)

3. 外部端口必须大于 1024

症状: 尝试将 VM 内部的 80 或 443 端口直接映射到外部的 80/443,面板报错或无法保存。

原因: 宿主机上 1024 以下的端口通常被系统或其他服务占用,平台统一限制外部端口(Host Port)必须 ≥ 1024。

解决方法:

内部端口没有限制,可以是任意值(包括 22、80、443)。外部端口选一个 1024 以上的即可:

内部端口外部端口(示例)
8018080
44314443
330613306

如果你希望用标准端口对外提供 HTTP/HTTPS 服务,推荐使用 Cloudflare 回源端口(见第 6 节)方案。


4. 无法运行 WireGuard / OpenVPN(缺少内核模块)

症状: 安装 WireGuard 后执行 wg-quick up wg0 报错:Cannot find device "wg0"RTNETLINK answers: Operation not permitted

原因: NAT VPS 通常是容器环境,不提供 /dev/net/tun 设备或 WireGuard 内核模块权限。

解决方法:使用用户空间(Userspace)模式。

Tailscale(推荐): 使用 --tun=userspace-networking 参数,无需任何内核支持。详见本站 Tailscale 用户模式安装指南

WARP(Cloudflare 出口 IP): 通过 WireProxy 在用户空间运行,详见本站 用户模式下的 WARP 安装与配置

手动检查是否支持 tun:

ls /dev/net/tun 2>/dev/null && echo "tun 可用" || echo "tun 不可用"

5. UDP 端口转发不生效

症状: 添加了端口转发后,TCP 服务可以访问,但基于 UDP 的服务(如游戏、DNS、某些 VPN)无响应。

原因: 端口转发规则中 TCP 和 UDP 是独立的,添加 TCP 规则不会自动覆盖 UDP。

解决方法: 在面板的端口转发卡片里,为同一个内外端口组合再单独添加一条 UDP 协议的规则。

例如,Minecraft(默认 25565 UDP):

协议内部端口外部端口
TCP2556525565+
UDP2556525565+(同一个外部端口)

6. 想用域名建站(Cloudflare 修改回源端口)

NAT VPS 的外部端口只能是 1024 以上的非标准端口,但 Cloudflare 作为反代层后,用户访问的仍然是 80/443,Cloudflare 回源时连接你实际开放的那个端口。整个流程不需要安装任何额外软件。

原理: 用户 → Cloudflare(443) → 你的 entry host:非标准端口 → VM 内部服务

操作步骤:

第一步:在面板添加端口转发

把 VM 内部 Web 服务的端口,映射到一个外部端口。HTTP 服务推荐选 Cloudflare 原生支持的端口,可以省去 Origin Rules 配置:

用途推荐外部端口VM 内部端口
HTTP8080 / 2052 / 2082 / 2086 / 209580(或你服务实际监听的端口)
HTTPS8443 / 2053 / 2083 / 2087 / 2096443

Cloudflare 代理模式下,这些端口无需额外配置即可回源,完整列表见 Cloudflare 文档

第二步:在 Cloudflare DNS 添加 A 记录

类型名称内容代理状态
A@ 或子域名NAT VPS 的 entry host IP已代理(橙色云朵)

第三步(可选):用 Origin Rules 指定任意回源端口

如果你的外部端口不在上表支持列表内(例如 18080),需要在 Cloudflare 控制台手动配置回源端口:

  1. 进入域名 → RulesOrigin Rules
  2. 新建规则,匹配条件选 All incoming requests(或指定 hostname)
  3. Destination Port 填入你的外部端口号(如 18080
  4. 保存并部署

配置完成后,Cloudflare 会将所有流量回源到 entry_host:18080,对用户仍然表现为标准的 80/443 访问。

验证是否生效:

# 检查 Cloudflare 是否正确代理(响应头会有 cf-ray 字段)
curl -I https://yourdomain.com

7. IPv6 直连:绕过 NAT 限制

症状: 某些服务想要独立 IP,或需要不通过端口转发的直接连接。

部分 NAT VPS 提供完整的 IPv6 地址,可以直接对外通信,不受 NAT 限制。购买前可以查看机器说明确认是否支持。

查看 VM 的 IPv6 地址:

在控制面板实例详情页,Entry Host 旁边如果有 IPv6 地址显示,则可以直接使用。也可以在 VM 内部查看:

ip -6 addr show

直接通过 IPv6 SSH 连接(无需端口转发):

ssh root@<ipv6地>
# IPv6 地址用方括号包裹
ssh root@[2001:db8::1]

让服务同时监听 IPv4 和 IPv6:

大多数服务监听 0.0.0.0 只覆盖 IPv4,要同时支持 IPv6 需要监听 [::]

# Nginx
listen [::]:80;
listen 80;

注意:IPv6 直连不经过端口转发,外部可以直接访问 VM 内的任意端口,需要自行用防火墙(iptables / ufw)控制访问权限。


8. 忘记 SSH 密码

在控制面板实例详情页,找到 凭据 区域,密码默认隐藏,点击眼睛图标可以查看。

如果密码已经修改过(在 VM 内部改过),面板显示的是初始密码,此时需要使用 重置密码 功能:

  1. 进入实例详情页
  2. 点击 设置重置密码
  3. 可以输入自定义密码,或留空让系统随机生成
  4. 等待 VM 重启后用新密码登录

重置密码会重启 VM,正在运行的服务会中断,操作前注意保存工作。


9. 流量什么时候重置

每月 1 号零点(UTC+8) 流量自动重置为套餐额度,无需手动操作。

控制面板实例详情页的流量进度条显示的是当月已用量,可以随时查看剩余情况。若流量在月底前耗尽,VM 网络会被暂停,等到下月 1 号自动恢复。


10. VM 无响应 / 无法 SSH 进去

如果 SSH 连不上、服务全部不响应,可以通过控制台(Console)直接操作 VM:

  1. 进入实例详情页
  2. 点击 控制台 按钮,打开浏览器内嵌终端
  3. 不依赖网络和端口转发,直接与 VM 交互

常见处理步骤:

# 查看系统日志,找到问题根因
journalctl -xe --no-pager | tail -50

# 检查磁盘是否写满
df -h

# 检查内存
free -h

# 重启有问题的服务
systemctl restart <service-name>

如果控制台也进不去,可以在面板使用 强制重启 功能,相当于硬重启,一般可以恢复响应。


NAT VPS 价格优势明显,但使用门槛比独立 IP VPS 高一些。掌握上面这些技巧后,绝大多数场景都可以正常使用。如果遇到本文未覆盖的问题,欢迎通过工单或社区反馈。