WeBand
119.15M · 2026-04-13
很多折腾 NAS 和 Mac mini 的朋友都绕不开一个痛点:人在外面,怎么优雅地连回家里的设备?
之前我一直用 Tailscale,虽然小白友好,但缺点也很要命——每台设备都得装客户端。而且SSH反向代理动不动就掉线,这让人很很不方便。
最近被我摸索出了一套更完美的终极方案:FRP 内网穿透。只需一台带公网IP的云服务器,就能在各个设备间建立稳定的私有隧道。SSH、VNC远程桌面、Samba文件共享、甚至OpenClaw控制台,全部一网打尽。今天这篇保姆级实操教程,手把手教你搭建,建议先收藏再看,以防找不到!”
这是一个手把手的教程,涉及的内容比较多,我先给你列一个纲,让你有个大概。
它的的底层实现还是基于 SSH 反向代理, 只是做了一些封装,运行更稳定,配置也更简单。用通俗的话说:你的云服务器(带公网IP)就是个“中转站”(frps),你家里的 Mac mini 是“寄件人”(frpc)。寄件人主动和中转站建立了一条秘密通道。你在外面拿笔记本访问中转站的某个端口,中转站就会把数据顺着通道送回你家里的 Mac。对了, FRP 也是一个开源项目,在 github 上已经有接近11W 的星标。今天应用这种方式来试一下。不废话,开干!
你需要一台公有云的服务器,并且还需要一个公网地址,FRPS就绑定在这台服务器上。需要需要穿透的服务就运行 FRPC。本文演示的是公有去服务器是一台阿里云ECS服务器,为了文章理解,公有云地址我写一个 mock 地址。
wget
解压并安装到系统
tar -zxvf frp_0.61.0_linux_amd64.tar.gz
cd frp_0.61.0_linux_amd64
cp frps /usr/local/bin/
mkdir -p /etc/frp
cp frps.toml /etc/frp/
编辑配置文件:vim /etc/frp/frps.toml
将内容修改为最简配置(建议设置一个 token 增加安全性):
bindPort = 7000 # 服务端端口,Mac 上的 frpc 会连这个
# 强烈建议添加安全密钥,防止别人蹭你的服务器
auth.token = "设置一个你自己的复杂密码"
为了让 frps 在服务器重启后自动运行,我们需要创建一个服务文件:
vim /etc/systemd/system/frps.service[Unit]
Description=Frp Server Service
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/frps -c /etc/frp/frps.toml
Restart=on-failure
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable frps
systemctl start frps
systemctl status frps看到 active (running) 说明服务器端已就绪。
图:image
brew install frpc
几兆的东西,很快就下载完。
frpc -v
能正常打印版本就安装成功了。
在M芯片里面,Homebrew 安装的 frp 配置文件通常位于:/opt/homebrew/etc/frp/frpc.toml。
vim /opt/homebrew/etc/frp/frpc.toml# 基础连接配置
serverAddr = "你的阿里云服务器IP"
serverPort = 7000 # 需与阿里云 frps.toml 中的 bindPort 一致
auth.token = "你的连接密钥" # 如果服务端设置了 token,这里必须填
[[proxies]]
name = "mac-mini-ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000 # 远程服务器映射出的端口,记得在阿里云安全组开放此端口`
brew services。启动并设置为开机自启**:**brew services start frpc
检查运行状态:brew services list
如果看到 frpc 状态为 started(绿色),则表示大功告成。
图:image
我还有一台本地的 ubuntu 开发服务器,主要用于 Android开发,也需要把里面的服务 ssh 和 samba 服务开放给外网,这样我能在任何时间和地址,只要有网就能访问。设置与 Macmini 设置类似,我简单过一下
wget
tar -zxvf frp_0.61.0_linux_amd64.tar.gz
cd frp_0.61.0_linux_amd64
sudo cp frpc /usr/local/bin/
sudo mkdir -p /etc/frp
创建并编辑配置文件:sudo vim /etc/frp/frpc.toml
粘贴以下配置(注意修改 name 以免和 Mac mini 冲突):
serverAddr = "111.111.111.111"
serverPort = 7000
auth.token = "你之前在阿里云设置的那个密码"
[[proxies]]
name = "ubtu-smb"
type = "tcp"
localIP = "127.0.0.1"
localPort = 445
remotePort = 4450
这是在 Linux 上实现“开机启动”的标准做法:
sudo nano /etc/systemd/system/frpc.service[Unit]
Description=Frp Client Service
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/frpc -c /etc/frp/frpc.toml
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
启动并启用服务:
sudo systemctl daemon-reload sudo systemctl enable frpc sudo systemctl start frpc
检查是否成功:
sudo systemctl status frpc
图:image
在前面的示例中,我们把 macmini 的 ssh 服务在公网暴露出来了,现在来测试一下你 macmini 的 ssh 服务,在任何一台可以上网的电脑上,使用以下命令即可穿透到你的 Mac Mini:ssh -p 6000 [Mac用户名]@阿里云的地址
如果你要访问 Ubuntu 服务器的 ssh 服务,或者 samba 服务,也通过公网地址加对应的端口,同样也非常方便的访问。
我们在 macmini 上已经把 ssh 服务开放出去,我这边台 macmini 上还跑了 openclaw,同时我也需要把远程桌面服务暴露到公网,这样方便远程桌面连接,现在我们把openclaw的服务和vnc服务添加进去。 vim /opt/homebrew/etc/frp/frpc.toml
大致如下:
# ---- VNC 远程桌面配置 ----
[[proxies]]
name = "macmini-vnc"
type = "tcp"
localIP = "127.0.0.1"
localPort = 5900 # macOS VNC 默认端口
remotePort = 5900 # 映射到阿里云的端口(建议设为相同,方便记忆)
# ---- OpenClaw / Web 控制台配置 ----
[[proxies]]
name = "macmini-openclaw"
type = "tcp"
localIP = "127.0.0.1"
localPort = 18789 # 请确认你 OpenClash 控制面板的本地端口,通常是 9090 或 7892
remotePort = 18789 # 映射到阿里云的端口,你可以自定义
然后重启服务:
在 Mac 终端执行:brew services restart frpc ,在 Ubuntu 上就执行sudo systemctl restart frpc
这样我远程都访问成功了。后面需要添加其他服务,就直接添加各个平台的 frpc.toml文件即可,非常方便。
我在之前的《 Untitled 》文章中也提到,就是我的macmini与阿里云服务器建立一条ssh的通道,我其他电脑如macbook远程访问阿里云的这个公网IP对应的端口,就可以把相应的流量转到macmini上,实现远程方式。
至此,你的跨平台无缝远程工作流就彻底打通了!无论是 Mac 还是 Ubuntu,只要有网,随时待命。很多人觉得内网穿透难,其实理顺了服务端(frps)和客户端(frpc)的端口映射关系,就像搭积木一样简单。
你是用什么方式实现内网打通,欢迎交流。