游客发表

内网穿透linux

发帖时间:2026-10-17 04:47:00

家里那台树莓派跑了三年,内网上面挂着博客、穿透Git 仓库和几个自用 API。内网麻烦的穿透是,宽带运营商不给公网 IPv4,内网光猫背后的穿透设备只能出不能进。想在外面改个配置文件,内网得先 TeamViewer 连回家里 Windows,穿透再 SSH 跳过去——绕得离谱。内网内网穿透就是穿透解决这个的:把内网端口映射到一台有公网 IP 的服务器上,外面访问服务器等于访问你家设备。内网

最省事的穿透方案是 frp。Go 写的内网,单二进制,穿透服务端客户端各一个文件,内网扔上去就能跑。公网服务器上跑 frps,家里树莓派跑 frpc。配置文件也简单,服务端 frps.ini 指定监听端口和 dashboard:

[common] bind_port = 7000 dashboard_port = 7500 dashboard_user = admin dashboard_pwd = yourpassword 

客户端这边把本地的 SSH、HTTP 都映射出去:

[common] server_addr = your_server_ip server_port = 7000 [ssh] type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 6000 [web] type = tcp local_ip = 127.0.0.1 local_port = 8080 remote_port = 8081 

启动后,ssh -p 6000 user@your_server_ip 就直接落到树莓派上了。web 同理,访问 your_server_ip:8081 就是家里那个 8080 服务。整个过程五分钟搞定,比配路由器端口转发靠谱得多——毕竟你连公网 IP 都没有。

frp 有个坑:默认配置下所有流量裸奔。TCP 映射不加密,HTTP 也不带 TLS。我一开始没在意,直到某天看 frps 日志发现有人在扫 6000 端口。后来给 SSH 映射加了 use_encryption = true 和 use_compression = true,前者用 TLS 包一层,后者省点带宽。HTTP 那边更直接——套个 Nginx 反代,Let's Encrypt 证书一挂,完事。

另一个方案是 ngrok。早期开源版很好用,一条命令 ngrok tcp 22 就给你个公网地址。后来 v2 闭源,免费版限制越来越多,自定义域名要付费,国内访问还慢。现在 ngrok 更像给开发调试临时用的,长期跑服务不合适。我试过用 ngrok 映射树莓派上的 Gitea,延迟忽高忽低,push 大仓库经常断。换回 frp 之后稳定多了。

如果不想自己买服务器,Cloudflare Tunnel 是个选项。装个 cloudflared,cloudflared tunnel create 建隧道,再把本地服务绑上去。好处是免费、自带 HTTPS、不用管公网 IP。坏处是所有流量过 Cloudflare 的节点,国内访问速度看运气。我拿它映射过 NAS 的 WebDAV,白天还行,晚上高峰期传文件能掉到几百 KB/s。而且它只支持 HTTP/HTTPS 和少量 TCP 端口,想映射任意端口得用 cloudflared access tcp,客户端还得装 cloudflared,麻烦。

ZeroTier 和 Tailscale 走的是另一条路——组虚拟局域网。装完客户端,所有设备像在同一个交换机下面,直接内网 IP 互访,根本不需要“穿透”这个概念。Tailscale 基于 WireGuard,速度比 frp 中转快不少,P2P 打洞成功的话延迟跟局域网差不多。我现在的方案就是 Tailscale 为主,frp 做备用。Tailscale 的问题是依赖它的协调服务器,虽然自建 DERP 也能解决,但配置成本上来了。而且 iOS 上 Tailscale 偶尔抽风,得手动重连。

说回 frp。实际用下来最舒服的一点是 dashboard,哪个隧道在线、流量多少、连接数多少,一目了然。有次树莓派挂了,dashboard 上 ssh 那栏直接变灰,不用登服务器查日志就知道问题在哪。另外 frpc 支持热加载,改完配置文件 frpc reload 就行,不用重启进程,SSH 连接不会断。

安全方面别偷懒。frps 的 bind_port 别用默认 7000,dashboard 密码设复杂点,最好再配个 token。客户端这边,remote_port 尽量选高位随机端口,别用 6000 这种一看就是 SSH 的。真要暴露 HTTP 服务,前面挂 Nginx 做反代和限流,别让 frp 直接对外。

最后提一嘴性能。frp 中转流量走公网服务器,带宽和延迟取决于那台机器的线路。我用的阿里云轻量,峰值 5Mbps,传大文件能跑满。如果对速度要求高,可以考虑用 KCP 协议——frp 支持 kcp_bind_port,弱网环境下比 TCP 快不少,代价是吃 CPU。树莓派 4B 跑 KCP 大概占 20% 单核,还能接受。

内网穿透这事没有银弹。frp 适合有公网服务器、想精细控制的人;Cloudflare Tunnel 适合不想管服务器、能接受速度波动的;Tailscale 适合设备多、追求即插即用的。我三个都用过,最后留在树莓派上的还是 frp——配置文件在手,心里踏实。

    热门排行

    友情链接