前言

最近电脑一直放在图书馆使用,电脑不在身边时想着可以通过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.exefrpc.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 并指定配置文件。

设置自动任务

  1. 使用快捷键 Win + X 打开“高级用户命令提示符”或“PowerShell”。
  2. 在命令提示符或 PowerShell 窗口中,输入 taskschd.msc 并按 Enter 打开任务计划程序。
  3. 在任务计划程序窗口的右侧,点击“创建任务…”。
  4. 在“常规”选项卡中,输入任务的名称,例如“Frp Autostart”,确保选择了“为此任务使用最高权限”,勾选“允许运行任务不管用户是否登录”。
  5. 切换到“触发器”选项卡,点击“新建…”。在“开始任务”下拉菜单中选择“开机时”或“登陆时”。
  6. 切换到“操作”选项卡,点击“新建…”,将操作设置为运行 start_frp.bat 文件。
  7. 确认保存

测试启动

接下来就可以测试开机启动或者登录启动,在我的测试中开机启动无法正确启动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端口进行远程控制

方法参考:

从任何地方远程桌面连接到家里的电脑

参考资料

frp文档

frps_full_example.toml示例文件

Toml中文文档(龙腾道-译)

最后修改:2024 年 01 月 04 日
如果觉得我的文章对你有用,请随意赞赏