frp
更新历史
| 日期 | 版本 | 作者 | 更新内容 |
|---|---|---|---|
| 2026-07-14 | v0.2 | Liang Ziyue |
|
配置 frp 远程访问
frp 是一款内网穿透工具,可以将局域网内的 NanoKVM Go 服务转发到具有公网 IP 的服务器。配置完成后,即使 NanoKVM Go 所在网络没有公网 IP,也可以通过公网服务器远程访问它。
frp 由两个组件组成:
frps:服务端,运行在具有公网 IP 的服务器上;frpc:客户端,运行在 NanoKVM Go 上。
远程电脑或手机
|
| 访问 https://公网 IP:8080
v
公网服务器(frps) <----- frpc 主动连接 ----- NanoKVM Go
NanoKVM Go 网页端目前没有 FRP 配置入口,需要先在网页端开启 SSH,再通过 SSH 手动安装和配置
frpc。
将 NanoKVM Go 暴露到公网会增加被扫描、撞库和攻击的风险。请先为 NanoKVM Go 设置强密码。本文的基础 TCP 示例会转发 NanoKVM Go 本机的 HTTPS 服务,但设备证书通常是自签名证书,浏览器可能提示证书不受信任。有域名时可以配置可信域名证书;如果不希望暴露公网端口,也可以改用 Tailscale 等虚拟组网方案。
准备工作
开始配置前,请准备:
- 一台具有公网 IPv4 地址的 Linux 服务器;
- 已连接互联网的 NanoKVM Go;
- NanoKVM Go 和公网服务器的管理员权限;
- 公网服务器云安全组和系统防火墙的修改权限;
- 一个不容易被猜到的 frp 身份验证 Token。
本文使用以下示例参数:
| 项目 | 示例值 | 用途 |
|---|---|---|
| 公网服务器 IP | 203.0.113.10 |
运行 frps |
| frps 通信端口 | 7000 |
frpc 连接 frps |
| NanoKVM Go 公网访问端口 | 8080 |
浏览器访问 NanoKVM Go |
| NanoKVM Go Web 地址 | 127.0.0.1:443 |
frpc 转发的本地 HTTPS 服务 |
| Token | replace_with_a_strong_token |
验证 frpc 身份 |
203.0.113.10 是文档示例地址,不能直接使用。请将本文中的公网 IP、端口和 Token 替换为自己的实际参数。
在公网服务器上安装 frps
下载 frp
先查看服务器的 CPU 架构:
uname -m
打开 frp Releases,选择与服务器架构匹配的 Linux 安装包。常见架构对应关系如下:
uname -m 输出 |
frp 安装包架构 |
|---|---|
x86_64 |
linux_amd64 |
aarch64、arm64 |
linux_arm64 |
armv7l |
linux_arm_hf |
| ARMv5 等较旧 ARM 设备 | linux_arm |
riscv64 |
linux_riscv64 |
本文以 frp 0.70.0 为例,可以在发布页面中直接下载:
大多数云服务器的架构为 x86_64。如果 uname -m 输出为 x86_64,执行以下命令下载并安装:
wget https://github.com/fatedier/frp/releases/download/v0.70.0/frp_0.70.0_linux_amd64.tar.gz
tar -xzf frp_0.70.0_linux_amd64.tar.gz
cd frp_0.70.0_linux_amd64
sudo install -m 755 frps /usr/local/bin/frps
sudo install -m 755 frps /usr/local/bin/frps 的作用是将当前目录下的 frps 程序复制到 /usr/local/bin/frps,并把权限设置为 755,也就是所有用户都可以执行,只有文件所有者可以修改。
如果服务器是其他架构,请下载表格中对应的安装包,并将命令中的压缩包名称和解压目录替换为实际名称。公网服务器与 NanoKVM Go 应使用同一个 frp 版本。
确认 frps 可以运行:
/usr/local/bin/frps --version
建议在公网服务器和 NanoKVM Go 上安装同一版本的 frp,避免因版本差异造成配置不兼容。
创建 frps 配置
创建配置目录:
sudo mkdir -p /etc/frp
创建 /etc/frp/frps.toml:
bindPort = 7000
auth.method = "token"
auth.token = "replace_with_a_strong_token"
请将 auth.token 替换为随机生成的强 Token。可以在公网服务器上使用以下命令生成:
openssl rand -hex 32
frps 和 frpc 配置中的 Token 必须完全一致。Token 只用于验证 frpc,不能代替 NanoKVM Go 自身的登录密码,也不能代替浏览器访问时使用的 HTTPS 证书。
启动 frps
先在前台启动,以便直接观察日志:
sudo /usr/local/bin/frps -c /etc/frp/frps.toml
没有报错时,按 Ctrl+C 停止测试。前台运行方式适用于所有 Linux 系统,但关闭终端后 frps 也会停止,因此长期使用时还需要将其注册为系统服务。
确认 init 系统
执行以下命令查看 PID 1 对应的程序:
ps -p 1 -o comm=
根据输出选择启动方式:
| 输出示例 | 启动方式 |
|---|---|
systemd |
使用 systemd |
init、sysvinit,并且存在 /etc/init.d/ |
使用 SysV init |
openrc-init |
使用 OpenRC |
是否可以使用 systemd,应以 PID 1 是否为
systemd为准。系统中存在systemctl命令,并不表示当前系统已经通过 systemd 启动。
使用 systemd 启动
仅当 ps -p 1 -o comm= 输出为 systemd 时,才使用本节命令。
创建 /etc/systemd/system/frps.service:
[Unit]
Description=frp server
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/usr/local/bin/frps -c /etc/frp/frps.toml
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
加载服务并设置开机自启:
sudo systemctl daemon-reload
sudo systemctl enable --now frps
sudo systemctl status frps
如果状态为 active (running),表示 frps 已经启动。使用以下命令查看实时日志:
sudo journalctl -u frps -f
使用 SysV init 启动
如果系统使用 SysV init,并且存在 start-stop-daemon 命令,可以创建 /etc/init.d/frps:
#!/bin/sh
DAEMON=/usr/local/bin/frps
CONFIG=/etc/frp/frps.toml
PIDFILE=/var/run/frps.pid
case "$1" in
start)
if [ -f "$PIDFILE" ] && kill -0 "$(cat "$PIDFILE")" 2>/dev/null; then
echo "frps is already running"
exit 0
fi
echo "Starting frps"
start-stop-daemon --start --background --make-pidfile \
--pidfile "$PIDFILE" --exec "$DAEMON" -- -c "$CONFIG"
;;
stop)
echo "Stopping frps"
start-stop-daemon --stop --pidfile "$PIDFILE" --retry TERM/5/KILL/5
rm -f "$PIDFILE"
;;
restart)
"$0" stop
"$0" start
;;
status)
if [ -f "$PIDFILE" ] && kill -0 "$(cat "$PIDFILE")" 2>/dev/null; then
echo "frps is running"
else
echo "frps is not running"
exit 1
fi
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
;;
esac
为脚本添加执行权限:
sudo chmod +x /etc/init.d/frps
在 Debian、Ubuntu 等使用 update-rc.d 的 SysV init 系统中,设置开机自启并启动服务:
sudo update-rc.d frps defaults
sudo service frps start
sudo service frps status
如果系统没有 update-rc.d,请使用当前发行版提供的 SysV init 服务管理命令。
没有 systemd 的环境
如果出现以下错误:
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
说明当前环境不是通过 systemd 启动的,不能继续使用 systemctl。可以先使用前台命令测试 frps:
sudo /usr/local/bin/frps -c /etc/frp/frps.toml
如果需要长期运行,请根据当前发行版实际使用的 init 系统添加服务配置。
放行公网服务器端口
在云服务器安全组和系统防火墙中放行:
7000/tcp:NanoKVM Go 上的 frpc 连接 frps;8080/tcp:远程浏览器访问 NanoKVM Go。
不同 Linux 发行版使用的防火墙工具可能不同。先执行:
command -v ufw
command -v firewall-cmd
根据命令输出选择对应的小节。不要在没有安装相关工具的系统中直接执行命令。
使用 UFW
如果 command -v ufw 输出了 UFW 的路径,执行:
sudo ufw allow 7000/tcp
sudo ufw allow 8080/tcp
sudo ufw status
如果终端提示 ufw: command not found,说明当前系统没有安装 UFW。UFW 不是运行 frps 的必要组件,请继续检查系统是否使用 firewalld、其他防火墙,或者只使用云服务器安全组。
使用 firewalld
如果 command -v firewall-cmd 输出了 firewalld 的命令路径,执行:
sudo firewall-cmd --permanent --add-port=7000/tcp
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-ports
使用云服务器安全组
阿里云、华为云、腾讯云、AWS 等云服务器通常还有独立于 Linux 系统的安全组。即使服务器内部没有安装 UFW 或 firewalld,也必须在云服务器管理页面中添加入站规则:
| 协议 | 端口 | 来源 |
|---|---|---|
| TCP | 7000 |
NanoKVM Go 所在网络的公网 IP;无法固定时可临时使用任意来源进行测试 |
| TCP | 8080 |
需要访问 NanoKVM Go 的公网 IP;无法固定时可临时使用任意来源进行测试 |
测试完成后,建议将来源范围缩小到实际需要的 IP,不要长期允许所有公网地址访问。
确认 frps 正在监听 7000 端口:
sudo ss -lntp | grep ':7000'
还可以确认远程访问端口是否已由 frps 监听:
sudo ss -lntp | grep ':8080'
8080端口需要在 NanoKVM Go 上的 frpc 成功连接并注册代理后才会出现。
在 NanoKVM Go 网页端开启 SSH
NanoKVM Go 网页端没有 FRP 入口,因此需要先开启 SSH,再通过命令行安装 frpc。
登录 NanoKVM Go
- 在浏览器中打开 NanoKVM Go 的局域网地址;
- 输入账号和密码,登录网页控制端;
- 确认 NanoKVM Go 当前的局域网 IP 地址。
打开 SSH 设置
- 打开 NanoKVM Go 的设置页面;

- 进入包含 SSH 开关的设置项;开启 SSH 服务;

通过 SSH 登录
在与 NanoKVM Go 位于同一局域网的电脑上打开终端,通过 SSH 登录:
ssh <SSH用户名>@<NanoKVM-Go局域网IP>
例如: ssh root@192.168.0.225
首次连接时,终端会询问是否信任设备指纹。确认 IP 地址无误后输入
yes,再输入 SSH 密码。用户名是root,密码是sipeed
在 NanoKVM Go 上安装 frpc
后续命令均在 NanoKVM Go 的 SSH 终端中执行。
确认系统架构
执行:
uname -m
NanoKVM Go 实机执行 uname -m 的输出为:
armv7l
因此应使用 frp 的 linux_arm_hf 安装包。该安装包针对 ARMv7 硬浮点环境构建,不要下载 linux_arm64。
下载并安装 frpc
NanoKVM Go 的 /tmp 通常挂载在内存中的 tmpfs 上,空间较小。建议将安装包下载到根分区中的 /root 目录。
执行以下命令下载并安装 frpc:
cd /root
wget https://github.com/fatedier/frp/releases/download/v0.70.0/frp_0.70.0_linux_arm_hf.tar.gz
tar -xzf frp_0.70.0_linux_arm_hf.tar.gz
cd frp_0.70.0_linux_arm_hf
mkdir -p /usr/local/bin
cp frpc /usr/local/bin/frpc
chmod +x /usr/local/bin/frpc
下载或解压失败时,请先确认 NanoKVM Go 可以访问 GitHub,并检查命令中的版本号和文件名是否与 Releases 页面一致。
确认安装结果:
/usr/local/bin/frpc --version
如果 NanoKVM Go 无法直接访问 GitHub,也可以先在电脑上下载安装包,再使用 scp 上传到设备的 /root 目录:
scp frp_0.70.0_linux_arm_hf.tar.gz <SSH用户名>@<NanoKVM-Go局域网IP>:/root/
创建 frpc 配置
创建配置目录:
mkdir -p /etc/frp
创建 /etc/frp/frpc.toml:
serverAddr = "203.0.113.10"
serverPort = 7000
auth.method = "token"
auth.token = "replace_with_a_strong_token"
[[proxies]]
name = "nanokvm-go-web"
type = "tcp"
localIP = "127.0.0.1"
localPort = 443
remotePort = 8080
需要修改的参数如下:
| 参数 | 修改内容 |
|---|---|
serverAddr |
公网服务器的实际 IP 或域名 |
serverPort |
frps 的 bindPort,本文为 7000 |
auth.token |
与 frps.toml 完全相同的 Token |
localPort |
NanoKVM Go Web 服务的实际监听端口,本文使用 HTTPS 端口 443 |
remotePort |
公网访问端口,本文为 8080 |
先检查本地 Web 服务是否可以访问:
wget --no-check-certificate -S -O /dev/null https://127.0.0.1:443
NanoKVM Go 的 HTTP 端口可能会重定向到 HTTPS。若直接访问 http://127.0.0.1:80 后看到 307 Temporary Redirect,并跳转到 https://127.0.0.1/,属于正常现象。由于设备使用的证书通常不是公网可信证书,使用 wget 测试时需要加上 --no-check-certificate。
如果连接被拒绝,请先确认 NanoKVM Go Web 服务的实际端口,再修改 localPort。
测试 frpc 连接
在前台启动 frpc:
/usr/local/bin/frpc -c /etc/frp/frpc.toml
日志中出现 login to server success 和 start proxy success 等成功信息时,表示 frpc 已连接到 frps,并已注册代理。
保持该终端运行,在外部网络的浏览器中访问:
https://203.0.113.10:8080
将示例 IP 替换为公网服务器的实际 IP。首次访问时,浏览器可能提示证书不受信任;确认访问的是自己的服务器后,可以继续访问测试。如果可以打开 NanoKVM Go 登录页面,说明 TCP 转发配置正确。完成测试后,返回 SSH 终端并按 Ctrl+C 停止 frpc。

设置 frpc 开机自启
NanoKVM Go 使用 systemd 管理系统服务。创建 /etc/systemd/system/frpc.service:
[Unit]
Description=frp client for NanoKVM Go
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/usr/local/bin/frpc -c /etc/frp/frpc.toml
Restart=always
RestartSec=5s
[Install]
WantedBy=multi-user.target
加载服务并设置开机自启:
systemctl daemon-reload
systemctl enable --now frpc
systemctl status frpc
查看实时日志:
journalctl -u frpc -f
重启 NanoKVM Go 后,再次执行 systemctl status frpc,确认服务可以自动启动并重新连接 frps。
从外网访问 NanoKVM Go
为了确认访问流量确实经过公网,请将电脑或手机切换到其他网络,例如手机热点或移动数据网络,然后:
- 在浏览器中访问
https://<公网服务器IP>:8080; - 使用 NanoKVM Go 的账号和密码登录;
- 测试远程画面、键盘、鼠标和电源控制;
- 刷新页面,确认视频和控制功能仍能正常工作。
TCP 代理会原样转发 HTTPS 和 WebSocket 连接,通常不需要单独配置 WebSocket。如果页面能打开但画面或控制功能异常,请查看浏览器开发者工具、frpc 日志和 frps 日志。
配置域名和 HTTPS(可选)
基础示例中的 https://<公网IP>:8080 使用的是 NanoKVM Go 自身证书,浏览器可能提示证书不受信任。如果有可用域名,可以将域名解析到 frps 服务器,并使用 Nginx 或 Caddy 提供可信 HTTPS 反向代理。
以 Nginx 为例,可以让 Nginx 监听 443,再将请求转发到 frp 暴露在服务器本机的 8080 端口:
server {
listen 443 ssl;
server_name kvm.example.com;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
location / {
proxy_pass https://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_ssl_verify off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 3600s;
}
}
配置步骤概括如下:
- 将域名的 A 记录指向 frps 服务器公网 IP;
- 在服务器上安装 Nginx 或 Caddy;
- 为域名申请 TLS 证书;
- 将 HTTPS 请求反向代理到
https://127.0.0.1:8080; - 在安全组和防火墙中放行
443/tcp; - 确认
https://kvm.example.com可以访问后,关闭公网入站的8080/tcp。
配置 HTTPS 后,应通过云安全组和服务器防火墙拒绝 8080/tcp 的公网入站流量,仅允许服务器本机的 Nginx 访问该端口。不要在 HTTPS 配置完成后继续将 HTTP 端口公开在互联网中。
常见问题
frpc 无法连接 frps
依次检查:
serverAddr和serverPort是否正确;- frps 是否为
active (running); 7000/tcp是否已在云安全组和系统防火墙中放行;- frps 和 frpc 的 Token 是否完全一致;
- 公网服务器和 NanoKVM Go 的 frp 版本是否兼容;
- NanoKVM Go 是否可以访问互联网和公网服务器。
可以在 NanoKVM Go 上测试端口连通性:
nc -vz <公网服务器IP> 7000
如果系统没有 nc,也可以直接观察 frpc 的连接日志。
frpc 已连接,但公网端口无法访问
检查:
remotePort是否被其他程序或其他 frp 代理占用;8080/tcp是否已在云安全组和系统防火墙中放行;- frpc 日志中是否显示代理启动成功;
- frps 日志中是否出现
nanokvm-go-web; - 浏览器使用的是
https://,而不是http://。
在公网服务器上确认端口是否正在监听:
sudo ss -lntp | grep ':8080'
页面无法打开或返回连接拒绝
在 NanoKVM Go 上执行:
wget --no-check-certificate -S -O /dev/null https://127.0.0.1:443
如果本地访问也失败,说明 localIP 或 localPort 不正确,或者 NanoKVM Go Web 服务没有运行。
本地测试提示证书不受信任
如果执行 wget -S -O /dev/null http://127.0.0.1:80 后看到 307 Temporary Redirect,并跳转到 https://127.0.0.1/,说明 NanoKVM Go 会自动使用 HTTPS。随后出现以下证书错误通常是正常的:
ERROR: The certificate of '127.0.0.1' is not trusted.
ERROR: The certificate's owner does not match hostname '127.0.0.1'
这是因为 NanoKVM Go 使用的证书不是为 127.0.0.1 签发的公网可信证书。测试本机 HTTPS 服务时,使用:
wget --no-check-certificate -S -O /dev/null https://127.0.0.1:443
frpc 配置中也应转发 localPort = 443。
页面能打开,但视频或控制功能异常
检查:
- 浏览器开发者工具中是否存在 WebSocket 连接错误;
- frpc 和 frps 是否频繁断线或重连;
- Nginx/Caddy 是否正确转发 WebSocket Upgrade 请求;
- HTTPS 页面是否加载了 HTTP 资源;
- 公网服务器带宽和 NanoKVM Go 所在网络的上行带宽是否足够。
重启后 frpc 没有自动运行
在 NanoKVM Go 上执行:
systemctl status frpc
journalctl -u frpc -b
检查服务是否已启用、配置文件路径是否正确,以及网络就绪后 frpc 能否连接 frps。
停用 frp
临时停用
如果只是暂时不使用 frp,并希望以后继续使用,可以停止服务并取消开机自启,同时保留程序和配置文件。
在 NanoKVM Go 上停止并禁用 frpc:
systemctl disable --now frpc
如果公网服务器使用 systemd,停止并禁用 frps:
sudo systemctl disable --now frps
如果公网服务器使用 SysV init,停止 frps 并取消开机自启:
sudo service frps stop
sudo update-rc.d -f frps remove
需要恢复 NanoKVM Go 上的 systemd 服务时,执行:
systemctl enable --now frpc
需要恢复公网服务器上的 systemd 服务时,执行:
sudo systemctl enable --now frps
需要恢复公网服务器上的 SysV init 服务时,执行:
sudo update-rc.d frps defaults
sudo service frps start
只执行与当前 init 系统对应的命令。如果公网服务器使用其他服务管理器,请使用对应的停止和禁用命令。
彻底卸载
frp 是通过手动复制二进制文件安装的,不受 apt、dnf 等软件包管理器管理。彻底卸载时,需要手动删除服务、程序和配置文件。
在 NanoKVM Go 上先停止 frpc,并删除 systemd 服务文件:
systemctl disable --now frpc
rm -f /etc/systemd/system/frpc.service
systemctl daemon-reload
然后在 NanoKVM Go 上删除 frpc 程序和配置:
rm -f /usr/local/bin/frpc
rm -f /etc/frp/frpc.toml
rmdir /etc/frp 2>/dev/null || true
删除 NanoKVM Go 中下载和解压产生的临时文件:
rm -f /root/frp_0.70.0_linux_arm_hf.tar.gz
rm -rf /root/frp_0.70.0_linux_arm_hf
如果实际下载的是其他版本或架构,请将文件名替换为实际名称。
如果公网服务器使用 systemd,先删除 frps 服务:
sudo systemctl disable --now frps
sudo rm -f /etc/systemd/system/frps.service
sudo systemctl daemon-reload
如果公网服务器使用 SysV init,先删除 frps 服务:
sudo service frps stop
sudo update-rc.d -f frps remove
sudo rm -f /etc/init.d/frps
完成对应的服务清理后,删除 frps 程序和配置:
sudo rm -f /usr/local/bin/frps
sudo rm -f /etc/frp/frps.toml
sudo rmdir /etc/frp 2>/dev/null || true
公网服务器上的 frp 压缩包和解压目录位于此前执行下载命令的目录中。确认目录和文件名无误后,可以将其删除。
清理防火墙和其他配置
如果安装并使用了 UFW,删除本文添加的放行规则:
sudo ufw delete allow 7000/tcp
sudo ufw delete allow 8080/tcp
如果安装并使用了 firewalld,执行:
sudo firewall-cmd --permanent --remove-port=7000/tcp
sudo firewall-cmd --permanent --remove-port=8080/tcp
sudo firewall-cmd --reload
最后还需要检查并清理:
- 云服务器安全组中的
7000/tcp、8080/tcp等 frp 端口; - 专门为 NanoKVM Go 创建的 Nginx 或 Caddy 配置;
- 不再使用的 TLS 证书;
- 不再使用的域名 DNS 记录。
如果相应防火墙命令不存在,可以跳过该组命令。如果端口、反向代理或证书还被其他服务使用,请不要直接删除对应配置。
安全建议
- 为 NanoKVM Go 设置独立的强密码;
- 使用随机生成的强 Token,不要使用本文示例值;
- 不要对公网开放 frps Dashboard;
- 仅开放实际需要的端口,并尽可能通过防火墙限制来源 IP;
- 有域名时,可以配置可信 HTTPS 反向代理;
- 定期更新 NanoKVM Go、frp 和公网服务器系统;
- 定期检查 frpc、frps 和反向代理日志;
- 不再使用时立即停止服务并关闭公网端口。