手把手教你用反向代理远程连接嵌入式开发板(实测方案+完整配置)(内网穿透)
本文详细介绍了FRP反向代理的配置过程,分为服务器端(FRPS)和客户端(FRPC)两部分。服务器端配置包括:在阿里云ECS服务器上安装FRP、配置frps.toml文件参数、设置systemd服务实现开机自启。客户端配置包括:开发板网络连接设置、下载对应架构的FRP程序、配置frpc.toml文件实现SSH穿透、阿里云安全组规则配置。最后通过编写智能启动脚本实现开发板开机自动联网和启动FRPC服
1,配置FRPS,反向代理服务器端
1.1配置frps首先需要购买一台阿里云服务器。
打开阿里云控制台,控制台中搜索ECS云服务器,99块钱一年你就可以得到一个2核2GIB的云端服务器,并且续费也是99一年,至少我写这篇文章的时候(2025年11月16日)是这样的政策。
根据阿里云的系统Alibaba Cloud Linux 3.2104 LTS 64位,在github上下载对应操作系统的frp压缩包。https://github.com/fatedier/frp/releases
1.2配置阿里云frps
使用mobaxterm的SSH功能登录阿里云服务器,创建一个专用的目录:
mkdir -p /usr/local/frp
cd /usr/local/frp
下载frp,在mobaxterm窗口中输入命令:
wget https://github.com/fatedier/frp/releases/download/v0.65.0/frp_0.65.0_linux_amd64.tar.gz
# 解压
tar -zxvf frp_0.65.0_linux_amd64.tar.gz
# 进入解压后的目录
cd frp_0.65.0_linux_amd64
# 查看文件列表
ls -l
可以看到这样的文件:
frps* frps.toml frpc* frpc.toml
我们打开frps:vi frps.toml,然后配置如下参数(密码和端口都可以自行修改webServer.addr设置为全0指的是可以从任何地方访问frp管理界面,这里可以不改):
bindPort = 7023
auth.token = "1234567890"
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "qwer"
webServer.password = "qwer123"
transport.tcpMux = true
log.level = "info"
log.maxDays = 3
bindPort和auth.token和后面要配置的frps中要一致,而webServer相关的信息配置是为了可以在网页上看到FRP在干啥,如下图,该网页的登录方法为:http://阿里云公网IP:webServer.port
公网IP在这里找:
1.3启动frps
直接在当前目录下运行命令
./frps -c frps.toml
然后可以看到以下输出信息,显示启动成功了
frps uses config file: frps.toml
frps tcp listen on 0.0.0.0:7000
frps started successfully
dashboard listen on 0.0.0.0:7500
如果能在浏览器直接根据公网IP和webServer.port打开frp管理后台就代表成功了。
下面还得配置一个开启自启动,刚刚./frps -c frps.toml启动 frps 的。这种方式下,服务运行在前台,并且与当前终端窗口绑定。一旦关闭 SSH 连接或终端窗口,frps 进程就会随之终止,内网穿透服务就中断了!
在服务器上执行:sudo vi /etc/systemd/system/frps.service
粘贴如下内容:
[Unit]
Description=Frp Server Service
After=network.target
[Service]
Type=simple
User=root
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/frp/frp_0.65.0_linux_amd64/frps -c /usr/local/frp/frp_0.65.0_linux_amd64/frps.toml
[Install]
WantedBy=multi-user.target
保存并退出,依次执行如下命令:
# 重新加载 systemd 配置,使其识别新的 frps 服务
sudo systemctl daemon-reload
# 设置 frps 开机自启
sudo systemctl enable frps
# 启动 frps 服务
sudo systemctl start frps
# 检查 frps 服务状态,查看是否正常运行
sudo systemctl status frps
而后在阿里云服务器管理界面重启服务器
重启登录服务器之后,可以使用以下命令来管理 frps:
-
启动服务:
sudo systemctl start frps -
停止服务:
sudo systemctl stop frps -
重启服务:
sudo systemctl restart frps -
查看状态:
sudo systemctl status frps -
查看日志:
sudo journalctl -u frps -f
可以看到frps正在运行之中,至此frps配置完毕!

2、配置FRPC,反向代理客户端。
2.1开发板网络配置
首先要让开发板能够连接互联网,我的开发板是百问网开发板100ASK_IMX6ULL_PRO,使用网线直接连接eht1,而后执行命令udhcpc -i eht1,再ping www.baidu.com可以看到网络连接成功了。
[root@100ask:~]# udhcpc -i eth1
udhcpc: started, v1.31.1
udhcpc: sending discover
udhcpc: sending select for 192.168.1.8
udhcpc: lease of 192.168.1.8 obtained, lease time 86400
deleting routers
adding dns 192.168.1.1
[root@100ask:~]# ping www.baidu.com
PING www.baidu.com (183.2.172.177): 56 data bytes
64 bytes from 183.2.172.177: seq=0 ttl=53 time=10.520 ms
64 bytes from 183.2.172.177: seq=1 ttl=53 time=10.584 ms
64 bytes from 183.2.172.177: seq=2 ttl=53 time=10.749 ms
64 bytes from 183.2.172.177: seq=3 ttl=53 time=32.890 ms
64 bytes from 183.2.172.177: seq=4 ttl=53 time=10.557 ms
^C
--- www.baidu.com ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 10.520/15.060/32.890 ms
[root@100ask:~]#
2.2开发板下载frp并配置frpc.toml
[root@100ask:~]# uname -m
armv7l
开发板的版本是arm32位的,我们执行命令:
wget https://github.com/fatedier/frp/releases/download/v0.65.0/frp_0.65.0_linux_arm.tar.gz
然后,访问失败了!
[root@100ask:~]# wget https://github.com/fatedier/frp/releases/download/v0.65.0/frp_0.65.0_linux_arm.tar.gz
--2025-11-24 15:38:18-- https://github.com/fatedier/frp/releases/download/v0.65.0/frp_0.65.0_linux_arm.tar.gz
Resolving github.com (github.com)... 20.205.243.166
Connecting to github.com (github.com)|20.205.243.166|:443... connected.
ERROR: The certificate of 'github.com' is not trusted.
ERROR: The certificate of 'github.com' doesn't have a known issuer.
可能github是外网的缘故,具体原因我也懒得去找了,直接在windows上进入github下载!
https://github.com/fatedier/frp/releases
下载好以后,我们直接把压缩包拖到ubuntu中去,然后通过adb push发送给开发板。
进入开发板/root 目录下,解压得到开发板系统所需的frp压缩包以后,打开frpc.toml
vi frpc.toml,粘贴如下内容,并修改:
serverAddr = "47.113.123.123"#这里要填公网IP
serverPort = 7023#这里和frps.toml的bindPort一致
auth.token = "1234567890"#与frps中一致
# SSH服务穿透
[[proxies]]
name = "imx6ull-ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 2222#这里是通过这个端口暴露在公网上,后面从远程登录开发板要使用
2.3配置阿里云入口规则
阿里云的云服务器ECS安全组中配置入口规则,点击管理规则
自定义TCP,选择任意来源,端口填frpc.toml的remotePort:
2.4启动frpc
开发板上执行命令来启动frpc,
chmod +x frpc
./frpc -c frpc.toml
如果开发板没有密码那么还需要在开发板上使用passwd命令来设置一个登录密码,提高安全性。
2.5远程登录开发板
使用mobaxterm,打开一个SSH窗口,输入公网IP,暴露的端口就可以直接进入开发板系统了!到这里就已经实现远程开发板登录了!!!后面还需要配置,开启自启动frpc和自动联网,。

2.6配置IMX6ULL开发板启动时自联网
在中 /etc/network/interfaces添加配置如下命令开机自联网
# 配置eth1(网线接口)自动获取IP
auto eth1
iface eth1 inet dhcp
pre-up /sbin/ifconfig eth1 up
reboot开发板。重启以后,ping www.baidu.com查看是否自动连接了互联网。
2.7配置开机自运行frpc
frpc运行的前提是要连接frps服务器,所以在运行frpc之前要确保开发板是已经能够联通网络了才行!列出启动脚本,可以看到network为S40
[root@100ask:~]# ls /etc/init.d/
S01syslogd S02sysctl S100lvgl S10udev S30dbus S44modem-manager S49ntp S50pulseaudio S50telnet S98swupdate bluetooth rcS
S02klogd S09modload S101frpc S20urandom S40network S45network-manager S50mosquitto S50sshd S80dnsmasq S99adbd rcK
所以我新建一个启动脚本:vi /etc/init.d/S101frpc,S101在S40之后启动,但是
问题不是启动顺序,而是网络就绪检测。即使S101在网络服务之后启动,但:
-
S40network启动 ≠ 网络立即就绪 -
网络服务启动后还需要时间获取IP、建立路由
-
frpc在S101启动时,网络可能还未完全就绪
所以我们需要在启动脚本中注意对网络的监测,网络成功后再启动fprc,S101frpc内容(智能守护进程)如下:
#!/bin/sh
# FRP客户端启动脚本
DAEMON="/root/frp_0.65.0_linux_arm/frpc"
CONFIG="/root/frp_0.65.0_linux_arm/frpc.toml"
LOG_FILE="/var/log/frpc.log"
PID_FILE="/var/run/frpc.pid"
# 启动函数
start_frpc() {
echo "启动FRP客户端..."
# 检查是否已运行
if [ -f $PID_FILE ] && kill -0 $(cat $PID_FILE) 2>/dev/null; then
echo "FRP客户端已在运行"
return 0
fi
# 清理旧PID文件
rm -f $PID_FILE
# 后台启动网络检测和FRP
{
# 等待网络就绪(最多30秒)
counter=0
while [ $counter -lt 30 ]; do
# 检查网络连通性
if ping -c 1 -W 1 8.8.8.8 >/dev/null 2>&1; then
echo "网络就绪,启动FRPC"
break
fi
sleep 1
counter=$((counter + 1))
done
# 启动FRPC
cd /root/frp_0.65.0_linux_arm
./frpc -c frpc.toml >> $LOG_FILE 2>&1 &
echo $! > $PID_FILE
echo "FRPC启动完成 (PID: $"
} &
echo "FRP启动进程已提交到后台"
}
# 停止函数
stop_frpc() {
echo "停止FRP客户端..."
if [ -f $PID_FILE ]; then
kill $(cat $PID_FILE) 2>/dev/null
rm -f $PID_FILE
fi
pkill -f "frpc.*toml"
echo "FRP客户端已停止"
}
# 状态检查
status_frpc() {
if [ -f $PID_FILE ] && kill -0 $(cat $PID_FILE) 2>/dev/null; then
echo "FRP客户端正在运行 (PID: $(cat $PID_FILE))"
# 检查连接状态
if tail -n 5 $LOG_FILE 2>/dev/null | grep -q "login to server success"; then
echo "连接状态: 已连接到服务器"
else
echo "连接状态: 连接中或连接失败"
fi
else
echo "FRP客户端未运行"
rm -f $PID_FILE
fi
}
case "$1" in
start)
start_frpc
;;
stop)
stop_frpc
;;
restart)
stop_frpc
sleep 2
start_frpc
;;
status)
status_frpc
;;
log)
tail -f $LOG_FILE
;;
*)
echo "用法: $0 {start|stop|restart|status|log}"
exit 1
;;
esac
配置好后再次reboot,打印提示创建成功frpc,ps看看frpc是否在运行,然后就可以再次使用mobaxterm远程登录开发板了!

为了防止暴露的fprc被暴力破解密码,需要加固安全配置,包括不要使用root或admin作为用户名,SSH密码至少12位,包含大小写字母+数字+符号,建议用ssh-keygen生成密钥对登录。
更多推荐


所有评论(0)