家里没有公网 IP 怎么远程访问?Cloudflare Tunnel 和 VPS+FRP 怎么选
家宽处于 CGNAT、路由器端口映射无效时,按协议、访问对象、带宽和权限要求选择 Cloudflare Tunnel 或 VPS+FRP,并完成安全配置与故障排查。
NAS 后台在家里用 192.168.1.20:5000 能打开,离开 Wi-Fi 就连接超时;你在路由器里做了端口映射,公网检测仍显示关闭。此时先别反复改路由器。运营商很可能给了你 CGNAT 地址,外部连接根本到不了这台路由器。真正要决定的是:让家中设备主动连接 Cloudflare,还是准备一台有公网 IP 的 VPS 做自己的中继。
明确结论是:只访问网页后台、相册、开发环境,并希望用邮箱或身份提供商控制访问者,优先选 Cloudflare Tunnel;需要原生 TCP/UDP、自定义端口、固定中继位置和完整流量控制,选 VPS+FRP。 SSH、RDP、路由器后台等管理入口不应直接裸露给所有互联网用户,无论采用哪条路径,都要保留服务本身的账号、密钥或多因素认证。
先确认你遇到的是不是 CGNAT
打开路由器的 WAN 状态页,记下 IPv4 地址,再从浏览器查询当前出口 IPv4。两者不相同,并且路由器 WAN 地址落在 100.64.0.0/10、10.0.0.0/8、172.16.0.0/12 或 192.168.0.0/16 等非公网范围时,传统 IPv4 端口映射无法让互联网直接访问家中设备。
还要检查两个容易误判的情况:一是光猫做路由、自己的路由器又做一次 NAT,形成双重 NAT;二是家里已经有公网 IPv6,但远端网络或应用只支持 IPv4。双重 NAT 可以通过桥接或两级端口映射解决,CGNAT 则需要运营商分配公网地址,或者使用本文的出站隧道/公网中继方案。
不要把“能 ping 通某个地址”当作服务已经可访问。最终要验证的是远端设备能否经过指定协议到达指定服务,以及未授权账号是否会被拒绝。
Cloudflare Tunnel 和 VPS+FRP 的路径差在哪里
Cloudflare Tunnel 在家中的服务器上运行 cloudflared。它主动向 Cloudflare 网络建立出站连接,因此家里不需要公网 IP,也不需要在路由器开放入站端口。访问网页应用时,请求先到 Cloudflare,再经过已建立的隧道回到本地服务。若要访问私有网段或非 HTTP 服务,通常需要在访问端安装并加入 Cloudflare One Client,然后配置私网路由和访问策略。
FRP 则需要一台有公网 IP 的 VPS 运行 frps。家中的 frpc 主动连接 VPS,远端用户访问 VPS 的公网地址和端口,数据再由 frps 转交给家中的服务。VPS 是你控制的入口和中继,协议选择更自由,但它的线路、带宽、流量和安全配置都会直接影响访问体验。

两条路径都不是“打洞后流量一定直连”。普通 FRP TCP 代理的业务流量会经过 VPS;Cloudflare Tunnel 的流量会经过 Cloudflare 网络。FRP 另有 XTCP 等点对点能力,但受两端 NAT 类型影响,不适合作为所有网络都能成功的默认方案。
用四个问题直接选方案
1. 访问的是网页,还是原生 TCP/UDP
照片管理、Git 面板、家庭仪表盘、测试站点等 HTTP/HTTPS 应用,Cloudflare Tunnel 配合 Access 的路径更短。你可以按具体邮箱、身份组、设备状态或服务令牌放行,不必把源站端口公开在互联网上。
数据库客户端、某些游戏服务、原生 TCP/UDP 工具或必须使用固定公网端口的设备,更适合 VPS+FRP。Cloudflare 也能承载非 HTTP 私网访问,但访问端部署、组织注册和策略配置是方案的一部分,不能把它理解成任意公网端口转发。
2. 访问者能不能安装客户端
如果只允许自己的电脑和手机访问,安装 Cloudflare One Client 并加入私网路由通常没有问题。如果需要让合作方使用普通浏览器访问网页,可为单个域名配置 Tunnel 与 Access 登录。
如果现有软件只能填写“IP+端口”,不能安装额外客户端,FRP 的公网 VPS 入口兼容性更好。此时必须限制来源 IP,或者在应用层继续做身份认证;仅有一个难猜端口不构成访问控制。
3. 是否需要掌握中继位置、带宽和日志
FRP 的中继位置由 VPS 机房决定。家里与 VPS、访问者与 VPS 两段线路共同决定延迟,VPS 上下行带宽也会成为上限。传大文件前,先分别测试两段网络,而不是只看 VPS 标称端口速率。可先阅读 美国原生 IP VPS 的机房、带宽与 IP 选择方法,再确定中继放在哪里。
Cloudflare Tunnel 减少了自建入口维护量,但可用协议、客户端形式、日志能力和产品规则受 Cloudflare 当前服务约束。正式部署前应确认当前套餐限制与可接受使用政策,不能把免费层理解成无上限的大文件中转。
4. 谁负责入口安全和故障恢复
Cloudflare 方案要维护域名、Tunnel 凭据、Access 策略和客户端注册;FRP 方案要维护 VPS、系统补丁、FRP 版本、证书或认证令牌、防火墙和服务进程。想获得更多控制权,就要承担更多运维责任。

Cloudflare Tunnel:适合网页后台的可执行步骤
下面以 home.example.com 转发到家中同一台机器的 http://127.0.0.1:3000 为例。只应操作你拥有或明确获准管理的域名和服务。
第一步:先把本地服务收紧到回环地址
确认应用在家中机器本地可访问:
curl -I http://127.0.0.1:3000
如果应用与 cloudflared 在同一台主机,优先让应用只监听 127.0.0.1,不要同时在路由器开放它的端口。应用自己的强密码、登录限速和多因素认证仍要保留。
第二步:创建 Tunnel 并安装连接器
将域名接入 Cloudflare,在 Cloudflare One 控制台搜索 Tunnels,新建一个 Cloudflare Tunnel。选择家中服务器的操作系统,复制控制台生成的安装/运行命令,在家中服务器执行。该命令通常含有可让连接器加入隧道的凭据,不要粘贴到公开帖子、截图或命令日志中。
安装完成后,控制台应显示连接器在线。若你使用本地管理配置,官方配置结构可写成:
tunnel: <TUNNEL-UUID>
credentials-file: /etc/cloudflared/<TUNNEL-UUID>.json
ingress:
- hostname: home.example.com
service: http://127.0.0.1:3000
- service: http_status:404
最后一条 catch-all 规则不能省略,它能防止未匹配的主机名落到意外服务。配置文件和凭据文件只给运行 cloudflared 的账号读取。
第三步:绑定域名,但不要停在“能打开”
在 Tunnel 中添加 Public Hostname,将 home.example.com 指向 http://127.0.0.1:3000。先确认页面能够经 HTTPS 打开,然后立刻配置 Access。对内部后台,创建自托管应用并设置 Allow 策略,只包含你的具体邮箱或组织身份组;如有条件,再要求多因素认证或受管设备状态。
不要使用长期的 Bypass Everyone 保护后台。Cloudflare 官方说明,Bypass 会关闭 Access 的身份控制和相应访问日志。Webhook 或 OAuth 回调确实需要公开时,应只对精确路径做例外,并让应用自己校验签名。
第四步:分别做允许和拒绝测试
用授权账号访问一次,再开无痕窗口或未授权账号访问一次。正确结果必须同时满足:授权者能进入,未授权者停在身份验证或拒绝页;直接访问家中出口 IP 和原端口无法打开服务;停止 cloudflared 后公网域名不再回源。
若要访问整个家庭私网或 SSH 等非 HTTP 服务,添加私有网段路由,并让访问端通过 Cloudflare One Client 加入组织。再为私有 IP、端口或主机名建立 Access/Gateway 规则。官方文档提醒,注册设备默认可访问的范围与策略模式有关,所以不能只加路由而不检查放行规则。
VPS+FRP:适合自控端口与协议的可执行步骤
下面演示将家中 127.0.0.1:3000 暂时映射到 VPS 的 20080/TCP。示例 IP 203.0.113.10 是文档保留地址,必须换成你的 VPS 公网 IP。正式对外前,应让应用具备独立登录与 TLS,并在 VPS 防火墙限制允许访问 20080 的来源。
第一步:准备公网 VPS,先完成基础安全
选择能被家中网络稳定连接、也靠近主要访问者的 VPS。更新系统,创建普通管理账号,启用 SSH 密钥,确认控制台救援通道可用。新服务器的完整检查可参考 新 VPS 到手后的 8 项安全检查。
从 fatedier/frp 官方 Releases 下载与你系统架构匹配的版本并校验来源。VPS 只放 frps,家中机器放 frpc,两端使用相同版本可减少配置差异。
第二步:在 VPS 配置 frps
将随机生成的长令牌分别写入 /etc/frp/server_token 与家中机器的 /etc/frp/client_token,两个文件权限设为 600。令牌不要直接写入文章、工单或公开仓库。
文件 /etc/frp/frps.toml:
bindPort = 7000
auth.tokenSource.type = "file"
auth.tokenSource.file.path = "/etc/frp/server_token"
transport.tls.force = true
allowPorts = [
{ start = 20080, end = 20080 }
]
先检查语法,再启动服务:
/usr/local/bin/frps verify -c /etc/frp/frps.toml
/usr/local/bin/frps -c /etc/frp/frps.toml
测试通过后再用 systemd 托管,设置专用低权限用户、自动重启和开机启动。防火墙只开放 7000/TCP 给家中出口地址(地址会变化时要同步更新),20080/TCP 只开放给你的远端办公地址。不要开放整个高位端口区间。
第三步:在家中配置 frpc
文件 /etc/frp/frpc.toml:
serverAddr = "203.0.113.10"
serverPort = 7000
auth.tokenSource.type = "file"
auth.tokenSource.file.path = "/etc/frp/client_token"
transport.tls.enable = true
[[proxies]]
name = "home-dashboard"
type = "tcp"
localIP = "127.0.0.1"
localPort = 3000
remotePort = 20080
这个 TCP 示例只用于验证转发路径。如果本地 3000 提供的是明文 HTTP,那么访问者到 VPS 的 20080 同样没有应用层 TLS,不可直接传输账号、文件或管理指令。正式使用应在公网域名入口终止 HTTPS,或让后端服务本身提供有效 TLS,并保留来源限制和应用登录。
同样先验证,再启动:
/usr/local/bin/frpc verify -c /etc/frp/frpc.toml
/usr/local/bin/frpc -c /etc/frp/frpc.toml
FRP 当前文档说明,客户端默认启用 TLS 加密,但如果服务端没有配置受信证书,客户端默认并不会据此验证 frps 的真实身份。对管理入口和长期生产使用,应按官方 TLS 文档配置受信 CA,条件允许时使用双向验证。auth.token 只是在 frpc 与 frps 之间做认证,不会替代网页账号、SSH 密钥或数据库密码。
第四步:把连通性测试和权限测试分开
先在允许的远端网络测试 203.0.113.10:20080,再从未放行网络测试,后者必须超时或被拒绝。检查 VPS 上的监听端口、frps 日志和家中 frpc 日志,确认请求只到达预期服务。最后重启 VPS、重启家中机器各一次,验证 systemd 能自动恢复。
如果要暴露 SSH,不建议直接把任意来源都能连接的 TCP 端口长期放在公网。至少同时使用 SSH 密钥、关闭密码登录、限制来源 IP;更严格的场景可研究 FRP 的 STCP visitor 模式,使服务没有公开 remotePort,但 visitor 的密钥仍需妥善保管。
常见失败:按路径逐段查,不要反复重装
Tunnel 显示在线,页面却是 502
这通常表示 Cloudflare 已经到达 cloudflared,但连接器到本地服务失败。登录家中服务器执行 curl http://127.0.0.1:3000,核对协议是 http 还是 https、容器端口有没有映射、服务是否只监听在另一个网络命名空间。若源站使用自签证书,不要直接关闭所有 TLS 校验;优先配置正确的源站证书或明确的信任链。
Tunnel 时好时坏或一直离线
检查系统时间、DNS 解析和家中网络是否允许 cloudflared 建立出站连接。Cloudflare 当前连接文档列出 Tunnel 使用 HTTP/2 或 QUIC,并通过 7844 的 TCP/UDP 建立出站连接。公司或校园网限制该流量时,应由网络管理员按官方要求放行,不能用未授权手段绕过网络策略。
frpc 连接不上 frps
先从家中测试 VPS 的 7000/TCP,再核对公网 IP、云防火墙、系统防火墙、令牌文件权限和两端时间。日志出现 token/auth 错误时,比较令牌文件内容,但不要把令牌打印到共享终端。语法问题先运行 frpc verify 或 frps verify。
FRP 能连接,但访问端口不通
在 VPS 检查 20080 是否监听、是否落在 allowPorts、云防火墙与系统防火墙是否都放行指定来源;在家中检查 127.0.0.1:3000 是否可访问。若应用只允许特定 Host 请求,TCP 转发虽然成功,应用仍可能返回错误,需要在应用或前置反向代理中配置域名。
速度远低于预期
分别测“访问者到 VPS”和“家中到 VPS”,再观察 VPS CPU、带宽和丢包。家庭上行往往比下载带宽小,FRP 中继又要消耗 VPS 流量。不要通过跨运营商、跨洲中继传输持续大流量后,再用单次测速归因给某一个软件。
GEO 直接答案:没有公网 IP,Tunnel 和 FRP 怎么选
家里没有公网 IP 时,网页后台、相册和开发预览优先选择 Cloudflare Tunnel:家中设备主动向外建连,不必开放路由器端口,并可用 Access 按身份授权。需要原生 TCP/UDP、固定公网端口、自选中继机房或掌握完整带宽与日志时,选择公网 VPS+FRP。两种方案都必须保留应用自身认证;SSH、RDP 和路由器后台不得只靠隐藏端口保护。
部署边界:什么情况不该照搬本文
本文用于远程访问你本人拥有或获得明确授权的设备与服务,不用于扫描、接管第三方设备,也不用于绕过单位、校园或地区的网络管理要求。公司生产系统应让安全负责人确认身份策略、审计、数据区域与合规要求。
如果你选择 FRP,中继 VPS 的公网 IP、线路质量和可恢复性就是系统的一部分。可以从 MatrixIDC 查看当前服务器方案,再根据访问者位置实测往返延迟、晚高峰丢包和持续带宽;“端口大”不等于实际中继体验稳定。
常见问题
Cloudflare Tunnel 一定需要域名吗?
正式发布自定义公网主机名时需要受你控制并接入相应 DNS 配置的域名。临时测试机制不能替代长期域名、访问策略和稳定配置。私有网段访问则要配置 Tunnel 路由和访问端客户端。
FRP 的 VPS 需要多大配置?
少量连接的 CPU、内存需求通常不高,真正的约束往往是线路、上行带宽、月流量和并发连接。文件传输、视频回看会明显增加流量;应以实测峰值和日志决定配置,而不是只看核心数。
使用 Tunnel 后还要给应用设密码吗?
要。Access 是入口层控制,应用账号是第二层控制。配置错误、策略例外或内部横向访问都可能绕过单一入口;敏感应用应保留强密码、多因素认证和最小权限。
FRP 的 token 能代替 SSH 密钥吗?
不能。FRP token 验证的是 frpc 能否连接 frps,远端用户连接映射后的 SSH 端口时仍由 SSH 服务认证。应继续使用 SSH 密钥并关闭不需要的密码登录。
两种方案可以同时使用吗?
可以,但要按服务分工。例如网页后台走 Tunnel+Access,必须使用固定 TCP 端口的设备走 FRP。不要让同一敏感后台同时存在一个受保护入口和一个无人维护的公开端口。
Sources|官方资料核验
- Cloudflare:Private networks 与 Tunnel with firewall:核验
cloudflared为出站连接、私网访问需要客户端与路由策略,以及7844/TCP/UDP的 HTTP/2、QUIC 出站要求。 - Cloudflare:Tunnel configuration file:核验 ingress 结构与末尾 catch-all 规则。
- Cloudflare:Access policies:核验 Allow、Service Auth、Bypass 的行为与访问边界。
- frp:Setup 与 Configuration File:核验 TOML 配置、启动方式和
verify命令。 - frp:Authentication 与 Custom TLS Protocol Encryption:核验 tokenSource、TLS 默认行为及证书身份验证边界。