tags: 软件配置/frp 内网穿透 反向代理

1. 介绍

1.1 frp 是什么?

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

1.2 为什么使用 frp?

通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括:

  • 客户端服务端通信支持 TCP、KCP 以及 Websocket 等多种协议。
  • 采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间。
  • 代理组间的负载均衡。
  • 端口复用,多个服务通过同一个服务端端口暴露。
  • 多个原生支持的客户端插件(静态文件查看,HTTP、SOCK5 代理等),便于独立使用 frp 客户端完成某些工作。
  • 高度扩展性的服务端插件系统,方便结合自身需求进行功能扩展。
  • 服务端和客户端 UI 页面。

2. 安装

可以使用系统的包管理工具一键安装。如:scoopaptbrew 等工具,比较简单。由于手动安装实用性更强,因此以下以Ubuntu距离介绍手动安装的过程。

2.1 下载

访问 frp 的官方仓库。然后根据自己系统下载相应的软件包。

1
2
3
wget https://github.com/fatedier/frp/releases/download/v0.50.0/frp_0.50.0_linux_amd64.tar.gz

tar -zxvf ./frp_0.50.0_linux_amd64.tar.gz

解压后的文件夹中有如下文件:

1
2
3
4
5
6
7
8
9
10
11
12
$ tree ./frp_0.50.0_linux_amd64

./frp_0.50.0_linux_amd64
├── LICENSE
├── frpc
├── frpc.ini
├── frpc_full.ini
├── frps
├── frps.ini
└── frps_full.ini

1 directory, 7 files

此时可以试运行 frpc -c frpc.ini 或者 frps -c frps.ini来测试是否可以运行。

其中,frpc 文件是frp客户端可执行文件,frps 文件是frp服务端可执行文件。
.ini 文件为配置文件的示例。

2.2 将frps安装为服务

^41acc5

  1. 如Linux服务端上没有安装 systemd,可以使用 yum 或 apt 等命令安装 systemd
1
2
3
4
# yum
yum install systemd
# apt
apt install systemd
  1. 使用文本编辑器,如 vim 创建并编辑 frps.service 文件。
1
vim /etc/systemd/system/frps.service

写入内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
# 建议路径 ExecStart = /opt/frp/frps -c /etc/frp/frps.ini
ExecStart = /path/to/frps -c /path/to/frps.ini

[Install]
WantedBy = multi-user.target
  1. 此时就可以使用 systemd 命令来管理 frps了
1
2
3
4
5
6
7
8
# 启动frp
systemctl start frps
# 停止frp
systemctl stop frps
# 重启frp
systemctl restart frps
# 查看frp状态
systemctl status frps
  1. 配置 frps 开机自启
1
systemctl enable frps

2.3 将frpc安装为服务

与 [[#^41acc5 | 2.2]] 的操作非常类似,不再赘述。

3. 配置

以下示例为内网穿透远程桌面的配置。

3.1 frps 的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# frps.ini

[common]
# frp监听的端口,默认是7000
bind_port = 7000
# 自定义设置的http访问端口
vhost_http_port = 7001
# 授权码
token = xxxxxxxxx

# frp管理后台端口
dashboard_port = 6500
# frp管理后台用户名和密码
dashboard_user = xxxxxx
dashboard_pwd = xxxxxx
enable_prometheus = true

# frp日志配置
log_file = /var/log/frps.log
log_level = info
log_max_days = 3

# 域名访问配置
subdomain_host = rm.***.fun
privilege_mode = true

3.2 frpc 的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# frpc.ini

[common]
# 服务器IP地址
server_addr = xxx.xx.xxx.xx
# 与frps.ini的bind_port一致
server_port = 7000
# 与frps.ini的token一致
token = xxxxxxxxx

# 配置tcp服务,用于ip访问
[RDM]
type = tcp
use_encryption = false
use_compression = false
local_ip = 192.168.1.68
local_port = 3389
remote_port = 3389

# 配置http服务,用于域名访问
[web]
type = http
local_ip = 127.0.0.1
local_port = 10010
subdomain = test

4. 其他

其他需求可以参考官方给出的 示例 以及配置文件参考