游客发表

ubuntu内网穿透

发帖时间:2026-10-17 05:05:32

家里那台装了 Ubuntu 的内网旧笔记本,想从公司连回去拿个文件,穿透结果发现宽带运营商给的内网是 NAT 后的内网 IP,路由器上根本做不了端口映射。穿透这事挺常见,内网尤其现在 IPv4 地址紧张,穿透很多家宽早就不给公网 IP 了。内网内网穿透就是穿透绕开这个限制,让外网能访问到你内网里的内网服务。

最省事的穿透办法是拿一台有公网 IP 的服务器做中转。我手头正好有个腾讯云的内网最低配实例,1 核 1G,穿透跑个 frp 服务端绰绰有余。内网frp 用 Go 写的穿透,单个二进制文件,内网扔上去就能跑。先在服务器上建个目录,下载对应架构的压缩包,解压后编辑 frps.toml:

bindPort = 7000 auth.token = "你随便设个复杂点的字符串" 

然后写个 systemd 服务让它开机自启,省得每次重启服务器都要手动拉起来。Ubuntu 22.04 上 systemd 的写法很直接,/etc/systemd/system/frps.service 里指定 ExecStart 指向 frps 的绝对路径就行。启动之后 systemctl status frps 看一眼,active (running) 就对了。

内网这台 Ubuntu 机器上跑 frpc 客户端。配置文件里填上服务器公网 IP、bindPort 和同样的 token,然后定义要穿透的服务。比如我 SSH 是 22 端口,想映射到服务器的 6000 端口:

serverAddr = "你的公网IP" serverPort = 7000 auth.token = "跟服务端一致" [[proxies]] name = "ssh" type = "tcp" localIP = "127.0.0.1" localPort = 22 remotePort = 6000 

跑起来之后,在公司直接 ssh -p 6000 用户名@公网IP 就能连回家里那台机器。延迟取决于你家里上传带宽和服务器中转的质量,我这边电信 100M 上行,实际 SSH 操作基本感觉不到卡顿。传大文件会慢一些,毕竟流量要绕一圈服务器。

有个细节容易踩坑:云服务器的安全组规则得放行 7000 和 6000 端口,否则 frpc 连得上但外部访问不进来。另外 frps 的 bindPort 和 remotePort 不要跟服务器上已有服务冲突,比如 80、443 这些。我一开始把 remotePort 设成 8080,结果服务器上 nginx 已经占用了,frpc 日志里报 bind error,排查了几分钟才反应过来。

如果不想自己搭服务器,也可以用现成的 frp 公共服务,但稳定性没保证,而且流量经过别人机器,传敏感数据不太放心。tailscale 这类基于 WireGuard 的组网工具更现代,配置更简单,但它是点对点打洞,双方都在 NAT 后面时还是得靠中继,本质上跟 frp 思路一致。zerotier 也类似。选哪个看具体需求:临时用一下,tailscale 五分钟搞定;长期稳定穿透多个服务,自己搭 frp 更可控。

还有个土办法是 ssh 反向隧道,ssh -R 6000:localhost:22 公网服务器,不用装额外软件。缺点是连接容易断,得配合 autossh 保活,而且每加一个服务就要多开一条隧道,管理起来麻烦。frp 一个客户端配置文件就能搞定所有端口,省心得多。

穿透成功之后,建议把 frpc 也做成 systemd 服务,跟 frps 一样。不然每次重启 Ubuntu 都要手动跑一遍,时间长了肯定忘。配置文件的权限设成 600,因为里面有 token。公网服务器上的 frps 日志定期清理一下,不然磁盘满了服务会挂。

这套方案跑了大半年,除了有一次云服务器机房网络抖动断了十几分钟,其他时间都挺稳。成本就是那台最低配云服务器,一年不到一百块。比起买带公网 IP 的宽带套餐,或者折腾 IPv6(很多公司网络还没普及),frp 算是目前最平衡的选择。

    热门排行

    友情链接