在部署了1panel的阿里云服务器上开启frp实现RDP内网穿透

frp 介绍:

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议,且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

目的:实现内网穿透,以通过公网IP,远程使用Windows自带远程桌面连接


配置设备:

  • 带公网IP的阿里云服务器,并在其上部署1Panel - 作为frp服务器
  • Windows终端设备(笔记本)

参考文章:


一、前置准备

服务器端:

1. 下载 frp 服务端

1Panel - 应用商店 - frp 服务端 - 安装

当时使用的版本号:v0.65.0

2. 服务器开放对应端口

(1) 进入阿里云对应的服务器实例 - 网络与安全组

添加入方向规则 - 端口 7000、7500、8484

  • 7000 - frp 服务端 与 frp 客户端连接端口(serverPort)
  • 7500 - frp 面板端口
  • 自定义一个端口,如:8484 - frp 服务对外开放端口(remotePort)

(2) 检查端口开放状态

1Panel - 打开终端

1
2
3
4
# 查看防火墙端口开放状态
sudo ufw status
# 查看防火墙指定端口开放状态,若无任何输出,则该端口未开放
sudo ufw status | grep "具体端口号/tcp"

如果端口在 阿里云 - 网络与安全组 放行后仍未开放,说明服务器操作系统本身端口未开放

1
2
3
4
5
6
7
8
# 开放 7000(frp 通信)、7500(管理后台)、6000(SSH 穿透)端口(TCP 协议)
sudo ufw allow 7000/tcp
sudo ufw allow 7500/tcp
sudo ufw allow 6000/tcp
# (如果要关闭端口)
sudo ufw delete allow xxxx/tcp
# 重启 ufw 使规则生效(若已启用)
sudo ufw reload
1
2
# 再次验证开放状态
sudo ufw status | grep -E "7000|7500|6000"

客户端:

1.下载 frp 并解压

GIthub上的下载地址:Releases · fatedier/frp

比如 X86 - Windows 设备下载 windows_amd64 版本即可。

注:确保客户端所下载版本与服务端版本保持一致

2. 分析 frp 本体文件结构

解压完文件结构如下:

文件结构:

  • frpc.exe:FRP 客户端执行程序。
  • frpc.toml:FRP 客户端的配置文件。
  • frps.exe:FRP 服务端执行程序(如果你只使用客户端,可以忽略)。
  • frps.toml:FRP 服务端的配置文件。

打开 frpc.toml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 全局连接配置
serverAddr = "服务端设备的公网IP地址"
# frp 服务端的监听端口
serverPort = 7000

# 新建一个代理穿透规则
[[proxies]]
# 这个代理规则的名称
name = "test-tcp"
# 代理的类型:tcp/udp/http/https
type = "tcp"
# 本地被穿透IP地址(要把哪个本地服务暴露出去)
localIP = "127.0.0.1"
# 本地服务的端口号,由于目的是实现windows远程桌面连接,这里使用RDP对应的3389端口
localPort = 3389
# frp 服务端对外暴露的端口
remotePort = 6000
1
2
3
4
5
6
7
8
9
10
flowchart LR
A[外部设备] -->|连接 服务端公网IP:6000| B[frp服务端]
B -->|监听7000端口 与客户端建立连接| C[frp客户端]
C -->|转发请求到本地服务| D[客户端RDP服务]
D -->|监听127.0.0.1:3389端口| E[本地设备]

style A fill:#f9f,stroke:#333,stroke-width:2px
style B fill:#9ff,stroke:#333,stroke-width:2px
style C fill:#ff9,stroke:#333,stroke-width:2px
style D fill:#9f9,stroke:#333,stroke-width:2px

二、具体操作

更多、更详细的具体操作 请查看官方示例:示例 | frp

通过 RDP 访问内网机器

通过简单配置 TCP 类型的代理,使用户能够访问内网服务器。

1. 服务端配置

在具有公网IP的服务端上配置 frps.toml

针对 1Panel 上的 frp 为例,找到 文件 - /opt/1panel/apps/frps/frps/data/frps.toml,打开frps.toml

1
2
# frp 服务端用于提供客户连接的端口
bindPort = 7000
2. 客户端配置

在客户端上配置 frpc.toml

3. 启动 frp 客户端

客户端 - 在 frpc 所在文件夹位置打开 cmd 终端:

1
2
# 启动 frp 客户端
frpc.exe -c frpc.toml

PS:可以编写脚本一键启动:

(新建frpc_start.bat:)

1
2
3
4
@echo off
:home
frpc.exe -c frpc.toml
goto home

如上图所示,frp 客户端启用成功

4. 使用 Windows 远程连接 (RDP)

计算机:服务端公网IP:开放端口

用户名:客户端用户名

密码:客户端密码


三、FRP 开机启动

参考文章:

1. 下载 NSSM,解压到自定义文件夹

NSSM(Non-Sucking Service Manager)是一款 Windows 平台的服务管理工具,可将程序注册为系统服务并监控运行状态,程序崩溃时自动重启,确保服务真实可用;支持图形化安装 / 卸载服务,运行日志记录至系统事件日志,解决了传统服务工具无法处理程序故障的问题。

NSSM 是一个类似于 srvany 和 cygrunsrv 的服务辅助程序。它能够将任何应用程序以 NT 服务的形式启动,并且如果该服务因任何原因出现故障,它会自动重新启动该服务。

NSSM下载地址:NSSM

2. 在 nssm.exe 所在目录打开 cmd
3. 创建 nssm 服务

双击 nssm.exe,可以查看命令

配置项说明:

Path:运行应用程序的程序
Startup directory:应用程序所在的目录
Arguments:应用运行的参数
Service name:生成服务的名称
最后点击install service 完成windows服务安装,在windows服务列表就能看到创建的服务了。

常用命令

1
2
3
4
5
6
7
8
nssm install servername //创建servername服务,弹出配置界面
nssm start servername //启动服务
nssm stop servername //暂停服务
nssm restart servername //重新启动服务
nssm remove servername //删除创建的servername服务
nssm edit servername//更改servername服务,弹出修改界面
nssm set servername 参数名 参数值 //设置服务参数值
sc delete servername//windows删除服务命令
1
2
# 创建服务(命名为frpc),弹出配置界面
nssm install frpc
1
2
3
4
# 图形化界面(NSSM service installer)中填写
Path: frpc.exe的绝对路径
Startup directory: frpc.exe的安装文件夹
Arguments: -c frpc.toml的绝对路径

在 nssm.exe 所在文件夹以管理员模式打开 powershell,

1
2
3
4
# 查看服务状态
.\nssm status frpc
# 启动服务
.\nssm start frpc

打开任务管理器,搜索 nssm,你能看到创建的任务。