我有一台 mac mini m2,本来是放在办公室用的,但发现还是带笔记本更方便,所以就闲置了。
家里已经有了群晖 nas,所以暂时也没有用途了。

这两年 AI 很火,就琢磨着可以搞个相关的小服务放在 mac mini 上跑,然后对外提供接口,这就需要打通网络。

调研了一番,还是选择了以前用过的 frp

环境准备

客户端是我的 mac mini,系统是最新版的 macOS 15.4。

服务端是我的阿里云 ECS,系统是 ubuntu 22.04。

下载好 frp,目前最新的版本是 v0.62.0

服务端下载 frp_0.62.0_linux_amd64.tar.gz,解压后放到 /opt/frp 目录。

客户端下载 frp_0.62.0_darwin_arm64.tar.gz,解压后放到 /Users/tony/apps/frp 目录。


配置文件

发现这个版本的配置文件已经改用 toml 格式了,这是要准备拥抱 Rust 吗?

需要注意的是,如果 frp 版本差异比较大,可能配置文件的参数会略有不同。

服务端配置文件 frps.toml 内容如下:

bindPort = 7000

auth.method = "token"
auth.token = "xxxxxxxx"

webServer.addr = "127.0.0.1"
webServer.port = 7500
webServer.user = "dashuser"
webServer.password = "xxxxxxx"

端口默认 7000,可以随便改。主要是加了 auth 相关的两个参数,token 用于客户端连接时的交验,否则谁都能随便用了。

webServer 是提供了一个 web 端的界面,用于服务的可视化管理。

客户端配置文件 frpc.toml 内容如下:

serverAddr = "服务器IP"
serverPort = 7000

auth.token = "xxxxxxxx"

[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 2022

服务器地址端口根据你的情况改一下,下面的 [[proxies]] 是代理服务,我这里先配置了一个 ssh,注意这的 remotePort 参数,是指映射到远程服务器的端口(我先随便搞了个 2022 端口)。

配置好后就可以启动了。

服务端启动:

./frps -c ./frps.toml

客户端启动:

./frpc -c ./frpc.toml

然后如果没问题,就可以使用 ssh username@服务器IP -p 2022 来登录 mac mini 了。

上面把 frp 的客户端服务器端模式跑通了,下面就要配置自动化的服务了。

如果服务器重启了,或者家里断电了,frp 就断了,所以我门需要将 frp 配置成系统服务,让其自动启动。


ubuntu 下的 frps 服务配置

创建一个配置文件 /etc/systemd/system/frps.service,内容如下:

[Unit]
Description=FRP Server Service
After=network.target

[Service]
Type=simple
ExecStart=/opt/frp/frps -c /opt/frp/frps.toml
Restart=always
RestartSec=5s
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target

注意这里的 /opt/frp/frps -c /opt/frp/frps.toml 需要根据你的路径修改一下。

保存后,执行:

sudo systemctl daemon-reexec      # 重载 systemd 主进程(保险起见)
sudo systemctl daemon-reload      # 重载服务配置
sudo systemctl enable frps        # 开机自启
sudo systemctl start frps         # 启动服务

这样就可以查看 frps 的服务状态了:

sudo systemctl status frps

查看日志:

journalctl -u frps -f

mac mini(macOS)的开启自启配置

创建文件 ~/Library/LaunchAgents/com.frpc.client.plist,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
   "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.frpc.client</string>

    <key>ProgramArguments</key>
    <array>
        <string>/Users/tony/apps/frp_0.62.0_darwin_arm64/frpc</string>
        <string>-c</string>
        <string>/Users/tony/apps/frp_0.62.0_darwin_arm64/frpc.toml</string>
    </array>

    <key>RunAtLoad</key>
    <true/>
    
    <key>KeepAlive</key>
    <true/>
    
    <key>StandardOutPath</key>
    <string>/tmp/frpc.log</string>
    
    <key>StandardErrorPath</key>
    <string>/tmp/frpc.err</string>
</dict>
</plist>

注意这里面的路径同样需要根据你具体的情况修改。

保存后加载服务并启动:

launchctl load ~/Library/LaunchAgents/com.frpc.client.plist

之后你每次登录系统,frpc 会自动启动,如果它崩溃了,也会被自动重启。

如果你修改了这个配置,需要重新加载:

launchctl unload ~/Library/LaunchAgents/com.frpc.client.plist
launchctl load ~/Library/LaunchAgents/com.frpc.client.plist

查看当前状态:

launchctl list | grep frpc

查看日志:

tail -f /tmp/frpc.log
tail -f /tmp/frpc.err

好了,你可以使用 pkill frpc 命令杀掉 frpc 的进程测试是否 work 了。

标签: frp, 内网穿透

添加新评论