前言
最近电脑一直放在图书馆使用,电脑不在身边时想着可以通过ipad远程控制电脑,正好之前Soarli大佬使用frp帮我解决了一个难题,所以打算使用frp搭建远程桌面连接,现将过程进行记录,以供参考。
FRP (Fast Reverse Proxy) 是一个可用于内网穿透的高性能的反向代理应用,支持 TCP , UDP , HTTP , HTTPS 协议。下载地址https://github.com/fatedier/frp/releases
目前(2023年11月22日)最新版本为v0.52.3
,在最新版本中,取消了原有 ini
配置文件,改为 toml
新格式,在配置语法上与ini
文件有区别。
- Ubuntu 22.04
- Windows 11
- 具有公网IP的服务器
过程
注意:使用frp进行远程桌面连接之前请先确保Windows远程连接已打开,且在局域网下可正常通过IP进行连接
一、服务器开放安全组
在服务器中开放将会用到的端口,如7000、7500等,如果图省事,也可以直接开放端口范围
二、准备frp文件
1、在frp下载地址中选择对应的服务端与客户端版本
注意:frp每个版本解压后都会有frps与frpc两种文件,frps用于服务端,frpc用于客户端,我们下载解压后只需要取我们对应的一种文件即可。即:
在windows中保留frpc.exe和frpc.toml文件
在linux中保留frps和frps.toml文件
三、服务端配置frps
在linux任意路径下新建frp文件夹,在frp文件夹中进行frps.exe和frps.toml的配置
可以把frp文件下载到本地再手动上传需要的文件到linux,也可以在linux中下载解压
1、配置frps
进入frp目录,修改frps.toml文件
sudo vim frps.toml
以下为基础可配置项,还有更多配置项可以参考官方文档或示例文件
[common]
bindPort = 7000
vhostHTTPPort = 7001
dashboard_port = 7500
dashboard_user = "admin"
dashboard_pwd = "123456"
auth.method = "token"
auth.token = "123456"
[common]
: 这是一个配置部分的标题,表示下面的参数是全局通用的配置。bindPort
: 这是frp服务器监听的端口号,用于与客户端建立连接。vhostHTTPPort
: 这是虚拟主机HTTP访问的端口号,用于通过HTTP协议访问frp服务器上的虚拟主机。dashboard_port
: 这是frp仪表盘(Dashboard)的端口号,用于通过Web界面管理和监控frp服务器。dashboard_user
: 这是frp仪表盘的用户名,用于登录仪表盘进行管理操作。dashboard_pwd
: 这是frp仪表盘的密码,用于与用户名一起进行身份验证。auth.method
: 这是用于认证的方法,可以设置为 "token",表示使用令牌进行认证。auth.token
: 这是用于认证的令牌,客户端需要提供正确的令牌才能与服务器建立连接。
配置完毕后保存退出
2、启动frps
./frps -c frps.toml
启动无报错后,访问frp面板端口IP:7500
,输入用户名及密码,出现以下即成功
3、使用 systemd 管理 frps 服务
在 Linux 系统下使用 systemd 来管理 frps 服务,包括启动、停止、配置后台运行和设置开机自启动。
安装 systemd
# 使用 yum 安装 systemd(CentOS/RHEL)
yum install systemd
# 使用 apt 安装 systemd(Debian/Ubuntu)
apt install systemdapt install systemd
创建 frps.service 文件
使用文本编辑器 (如 vim) 在 /etc/systemd/system
目录下创建一个 frps.service
文件,用于配置 frps 服务。
sudo vim /etc/systemd/system/frps.service
在frps.service写入内容
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /path/to/frps -c /path/to/frps.toml
[Install]
WantedBy = multi-user.target
systemd命令
# 启动frp
sudo systemctl start frps
# 停止frp
sudo systemctl stop frps
# 重启frp
sudo systemctl restart frps
# 查看frp状态
sudo systemctl status frps
设置 frps开机自启动
sudo systemctl enable frps
取消frps开机自启动
systemctl disable frps
四、Windows配置frpc
1、配置frpc.poml文件
在任意文件夹解压缩文件包,保留frpc.exe
及frpc.toml
文件
使用记事本打开frpc.toml
基础配置如下
serverAddr = "你的公网IP"
serverPort = 7000
log.to = "./frpc.log"
log.level = "info"
log.maxDays = 3
[[proxies]]
name = "control"
type = "tcp"
localIP = "127.0.0.1"
localPort = 3389
remotePort = 7001
auth.method = "token"
auth.token = "123456"
serverAddr
: 这是你的公网IP地址,它是frp服务器的地址,用于与客户端建立连接。serverPort
: 这是frp服务器监听的端口号,客户端需要使用相同的端口号与服务器通信。log.to
: 这是frp日志文件的路径和名称。log.level
: 这是frp日志的级别,可以设置为 "info"、"warn"、"error" 或 "debug",用于控制日志的详细程度。log.maxDays
: 这是frp日志文件保留的天数,超过指定天数的日志文件将被删除。
下面是一个frp配置文件中的[[proxies]]
部分的解释,这是用于定义代理的配置块:
name
: 这是代理的名称,可以根据需要进行命名。type
: 这是代理的类型,对于TCP代理,可以设置为 "tcp"。localIP
: 这是frp客户端监听的本地IP地址,通常设置为 "127.0.0.1",表示本地回环地址。localPort
: 这是frp客户端监听的本地端口号,例如3389表示RDP(远程桌面协议)的默认端口。remotePort
: 这是frp服务器上用于转发流量的远程端口号,客户端的流量将被转发到该端口。auth.method
: 这是用于认证的方法,可以设置为 "token",表示使用令牌进行认证。auth.token
: 这是用于认证的令牌,客户端需要提供正确的令牌才能与服务器建立连接。
使用CMD命令启动:
frpc -c frpc.toml
2、设置开机自启动
创建bat文件
在frpc目录下新建start_frp.bat
文件,文件内容为:
@echo off
cd /d E:\frpc # 此处修改为你的frp目录
start frpc.exe -c frpc.toml
@echo off
:关闭命令回显,以使输出更清晰。cd /d E:\frpc
:切换到 frpc.exe 所在的目录。start frpc.exe -c frpc.toml
:启动 frpc.exe 并指定配置文件。
设置自动任务
- 使用快捷键 Win + X 打开“高级用户命令提示符”或“PowerShell”。
- 在命令提示符或 PowerShell 窗口中,输入
taskschd.msc
并按 Enter 打开任务计划程序。 - 在任务计划程序窗口的右侧,点击“创建任务…”。
- 在“常规”选项卡中,输入任务的名称,例如“Frp Autostart”,确保选择了“为此任务使用最高权限”,勾选“允许运行任务不管用户是否登录”。
- 切换到“触发器”选项卡,点击“新建…”。在“开始任务”下拉菜单中选择“开机时”或“登陆时”。
- 切换到“操作”选项卡,点击“新建…”,将操作设置为运行
start_frp.bat
文件。 - 确认保存
测试启动
接下来就可以测试开机启动或者登录启动,在我的测试中开机启动无法正确启动frp服务,虽然在启动记录中是启动成功的记录,而登录启动则是可以成功启动。
经过第二天的详细测试,搞清楚了:原因是在开机启动时并没有及时联网,frp服务启动了但是由于网络断开,这次的启动并没有成功连接,导致失败。
改进方法:设置开机后1min启动,之后15min内每5min启动一次。
2023年12月14日更新完美自启动解决方案
由于网络是否连接会影响到frp的正常启动,我们需要确保在网络连通时启动该.bat
脚本,因此我们可以在原先的脚本中增加网络连通性判别,当能ping通www.bing.com
时启动该脚本,否则将每5s重试一次,这样就可以在系统启动触发器下进行执行完美自启动方案,测试有效🎉🎉
@echo off
:CHECK_INTERNET
ping www.bing.com -n 1 > nul
if %errorlevel% equ 0 (
echo Internet connection detected.
cd /d E:\frpc
start frpc.exe -c frpc.toml
) else (
echo Waiting for internet connection...
timeout /t 5 > nul
goto CHECK_INTERNET
)
另:在frpc.toml
文件中,若token配置项填写在[[proxies]]
之前则会出现无法验证token错误,这与官方参考示例相悖,在本篇文章中我将token配置项移到[[proxies]]
之后则可以正常验证token。
五、通过ipad进行远控
ipad下载安装 RD Client ,通过访问 IP:端口 即可将远程控制转发到本机3389端口进行远程控制
方法参考:
从任何地方远程桌面连接到家里的电脑
2 条评论
[...]前言frp 是一个可用于内网穿透的高性能的反向代理应用,分为服务端frps和客户端frpc,支持 tcp, udp, http, https 协议。详情可浏览该项目的Github主页一面名心镜大佬说frp内网穿透这个很好用,让我试试,跟着他的教程弄,排查了好久的问题,还是有点出入,所以还是记录一下吧工作原理1.服务端运行,监听一个主端口,等待客户端的连接;2.客户端连接到服务端的主端口,同时告诉服[...]
[...]前言frp 是一个可用于内网穿透的高性能的反向代理应用,分为服务端frps和客户端frpc,支持 tcp, udp, http, https 协议。详情可浏览该项目的Github主页一面名心镜大佬说frp内网穿透这个很好用,让我试试,跟着他的教程弄,排查了好久的问题,还是有点出入,所以还是记录一下吧工作原理1.服务端运行,监听一个主端口,等待客户端的连接;2.客户端连接到服务端的主端口,同时告诉服[...]