内网穿透与异地组网:frp、NPS、rathole、SSH 隧道、Cloudflare Tunnel、Tailscale

把家里 / 内网的服务暴露出去的几种做法:frp、NPS、rathole、SSH 反向隧道、Cloudflare Tunnel,以及 Tailscale、WireGuard、EasyTier 这类异地组网。

这篇原本是《开源工具&高效解决方案收藏》里的「十、网络 / 代理 / 内网穿透 → 内网穿透、异地组网」。那篇收藏越写越长,已经三千多行,而这部分把几种方案逐个讲配置、调试和掉线处理,是一篇对比教程,所以单独拆出来。

内网穿透(frp/nps/rathole/SSH隧道/Cloudflare Tunnel)

frp

https://github.com/fatedier/frp

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议,且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

官网:https://gofrp.org/zh-cn/

其他工具:

https://github.com/mvscode/frps-onekey Frp服务端一键配置脚本,脚本默認获取Frp最新版本

https://github.com/Zo3i/frpMgr FRP快捷配置面板

https://github.com/luckjiawei/frpc-desktop 🎉 FRP跨平台桌面客户端,可视化配置,轻松实现内网穿透! 支持所有frp版本 / 开机自启 / 可视化配置 / 免费开源

https://github.com/koho/frpmgr

一款适用于 Windows 系统的、用户友好的桌面 GUI 客户端,用于 FRP。

NPS

项目地址:https://github.com/ehang-io/nps

语言:Go(跨平台)

支持 TCP/UDP/HTTP/HTTPS/SOCKS5

Web 管理界面(支持用户管理)

支持多用户(SaaS 模式)

NPS 比 frp 更企业化,功能丰富,且依旧开源。很多人从 frp 迁移过来。

rathole

项目地址:https://github.com/rapiz1/rathole

语言:Rust(超小内存、性能强)

适合替代 frp、极度轻量、安全性高,非常适合自建使用。

使用 SSH 的反向隧道

[内网机器] --(ssh 连接)--> [公网VPS]
     |                              |
     |<== 可通过 VPS 访问此 TCP 服务 |
ssh -N -R 12345:localhost:8080 root@1.2.3.4
部分含义
-N不打开 shell,只转发
-R创建反向隧道
12345:localhost:8080把 VPS 的 12345 端口映射到本地的 8080
vpsuser@1.2.3.4VPS 用户和地址

你必须在 VPS 的 /etc/ssh/sshd_config 中控制哪些用户允许反向隧道:

# 确保以下配置开启
GatewayPorts yes
AllowTcpForwarding yes

重新启动 SSH 服务:

sudo systemctl restart sshd

调试

检查端口+kill进程

image-20250808003218685

SSH 长时间空闲被踢

ssh -N -R 8868:localhost:8868 -o ServerAliveInterval=60 root@relay.example.com

如果本机没有开ipv6会出现问题,因为Windows主机优先把localhost解析为ipv6地址

Windows 上 localhost 默认优先解析为 IPv6(::1), 而你的 Nginx 只监听了 IPv4(127.0.0.1), SSH 反向隧道实际连到了 ::1:443,结果直接被系统关闭。

C:\Users\maluyao>ssh -N -T -R 0.0.0.0:8867:localhost:443 root@relay.example.com
失败!!!

C:\Users\maluyao>ssh -N -T -R 8867:127.0.0.1:443 root@relay.example.com
成功!!!

这里的 localhost 在 Windows 上经常会优先解析到 IPv6 的 ::1(而不是 127.0.0.1)。 你的本机 Nginx 虽然能用 https://127.0.0.1:443 访问,但很可能 没有在 ::1:443 上监听(没开 IPv6 listen)。

真正的问题是:Windows 上用 localhost 做转发目标时,实际走到 IPv6 ::1,而本机服务只在 IPv4 上可用

ARGO (Cloudflare Tunnel)

Cloudflare Tunnel(2021更名) 是由 Argo Tunnel(2018 年) 转变而来的

客户端统一叫:cloudflared

定位从“企业特性” → 开发者 / 个人也能免费用,成为 Cloudflare Zero Trust 体系的一部分

Cloudflare 官方文档下载页

https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/installation/

直接下载 .exe:

https://github.com/cloudflare/cloudflared/releases

Cloudflare Tunnel 可以算是“免费的内网穿透”,而且是目前最稳定、最安全的免费方案之一。

限制:

限制点说明
协议限制主要只适合 HTTP / HTTPS
UDP 不支持游戏、实时语音不可用
TCP 原始转发受限非 Web 服务不推荐
流量限制有 合理使用原则(无明确数值)
大流量不适合视频、下载站风险高
域名要求长期使用需 Cloudflare 域名
trycloudflare 限制仅测试用,不稳定、不固定

使用这种方式搭建网站不需要自己维护SSL

异地组网(Tailscale/WireGuard/EasyTier)

在线检测NAT类型:https://natchecker.com tailscale:https://tailscale.com/

Headscale(tailscale的开源自建):https://github.com/juanfont/headscale

easytier:https://easytier.cn/

https://github.com/EasyTier/EasyTier

image-20251216150133083

image-20251216143658309

https://github.com/vnt-dev/vnt

高效的 VPN。 高效的异地组网、内网工具。支持WireGuard接入VNT网络,适用于iOS端

https://www.wireguard.com/

WireGuard可以异地组网

WireGuard:

本质是一个 工作在内核层的加密隧道(虚拟网卡)

它不是“代理”,而是 把你的设备接进 VPS 的网络栈

WireGuard 不区分“客户端 / 服务端”,任何节点都可以互相直连

https://tailscale.com/

Tailscale 是一个“把设备安全地连在一起”的工具,可以把你分散在各地的电脑、服务器、手机,组成一个像在同一个局域网里的私有网络。

简单说,它解决的问题是:不用折腾端口映射、固定 IP、复杂 VPN,就能让设备彼此直接访问。

它的核心原理是基于 WireGuard 加密,每台设备都会获得一个虚拟内网 IP。设备之间优先尝试点对点直连,如果直连不行才走中继,全程加密,性能和安全性都不错。

VPN 自建

VPN可以实现内网访问,可以在内网机器上搭建VPN,通过SSH反向隧道暴露到公网,实现内网VPN

评论

评论加载中……

登录后再评论

注册要用邮箱收个验证码,只为确认邮箱能收信,不会拿去做别的。账号设置