很多折腾 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 地址。
在阿里云服务器上安装与设置 frps
第一步,下载并安装frps
shell
wget https://github.com/fatedier/frp/releases/download/v0.61.0/frp_0.61.0_linux_amd64.tar.gz

解压并安装到系统
shell
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 增加安全性):
shell
bindPort = 7000 # 服务端监听端口,Mac 上的 frpc 会连这个
# 强烈建议添加安全密钥,防止别人蹭你的服务器
auth.token = "设置一个你自己的复杂密码"
第三步:设置 Ubuntu 开机自启 (Systemd)
为了让 frps 在服务器重启后自动运行,我们需要创建一个服务文件:
- 创建服务文件:
vim /etc/systemd/system/frps.service - 粘贴以下内容:
shell
[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
- 启动并设置自启:
shell
systemctl daemon-reload
systemctl enable frps
systemctl start frps
- **检查状态:**Bash
systemctl status frps
看到 active (running) 说明服务器端已就绪。
在Macmini上安装与设置frpc
第一步,安装
shell
brew install frpc

几兆的东西,很快就下载完。
shell
frpc -v
能正常打印版本就安装成功了。
第二步,配置
在M芯片里面,Homebrew 安装的 frp 配置文件通常位于:/opt/homebrew/etc/frp/frpc.toml。
- 使用终端打开配置文件:
vim /opt/homebrew/etc/frp/frpc.toml - 参考以下模板进行修改(请根据你的阿里云服务器信息替换内容):
shell
# 基础连接配置
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 # 远程服务器映射出的端口,记得在阿里云安全组开放此端口`
注意 :阿里云服务器的防火墙(安全组)必须手动开启
7000(连接端口)和6000(映射后的访问端口)。
- 设置 macOS 开机启动 Homebrew 提供了非常简便的服务管理工具
brew services。
启动并设置为开机自启**:**brew services start frpc
检查运行状态: brew services list
如果看到 frpc 状态为 started(绿色),则表示大功告成。
在Ubuntu 服务器上安装与设置 frpc
我还有一台本地的 ubuntu 开发服务器,主要用于 Android开发,也需要把里面的服务 ssh 和 samba 服务开放给外网,这样我能在任何时间和地址,只要有网就能访问。设置与 Macmini 设置类似,我简单过一下
第一步:下载并安装 frpc
- 登录你的这台 Ubuntu 客户端:
- **下载软件包(与服务端相同,包含 frpc 和 frps):**Bash
shell
wget https://github.com/fatedier/frp/releases/download/v0.61.0/frp_0.61.0_linux_amd64.tar.gz
tar -zxvf frp_0.61.0_linux_amd64.tar.gz
cd frp_0.61.0_linux_amd64
- **安装二进制文件:**Bash
shell
sudo cp frpc /usr/local/bin/
sudo mkdir -p /etc/frp
第二步:配置 frpc.toml
创建并编辑配置文件:sudo vim /etc/frp/frpc.toml
粘贴以下配置(注意修改 name 以免和 Mac mini 冲突):
shell
serverAddr = "111.111.111.111"
serverPort = 7000
auth.token = "你之前在阿里云设置的那个密码"
[[proxies]]
name = "ubtu-smb"
type = "tcp"
localIP = "127.0.0.1"
localPort = 445
remotePort = 4450
第三步:设置开机自启 (Systemd)
这是在 Linux 上实现"开机启动"的标准做法:
- 创建服务文件:
sudo nano /etc/systemd/system/frpc.service - 粘贴以下内容:
shell
[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
测试
在前面的示例中,我们把 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
大致如下:
shell
# ---- 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)的端口映射关系,就像搭积木一样简单。
你是用什么方式实现内网打通,欢迎交流。