前言

电信运营商因为IP地址短缺常常不会给用户分配公网IP地址,而我们的台式机、NAS等设备却有远程访问的需求,此时选择使用frp进行内网穿透再合适不过了。
frp(Fast Reverse Proxy)作为一个用于网络通信的开源工具,常用于在内网和外网之间建立反向代理通道,实现内网服务的外部访问。该技术可以应用于内网服务器、摄像头、传感器等设备的远程访问或监控上。

工作原理:服务端运行,监听一个主端口,等待客户端的连接 → 客户端连接到服务端的主端口,同时告诉服务端要监听的端口和转发类型 → 服务端fork新的进程监听客户端指定的端口 → 外网用户连接到客户端指定的端口,服务端通过和客户端的连接将数据转发到客户端 → 客户端进程再将数据转发到本地服务,从而实现内网对外暴露服务的能力。

项目地址:https://github.com/fatedier/frp

服务器配置

1.运行如下命令,选择相应版本下载

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

2.解压frp压缩包

1
tar -zxvf frp_0.52.0_linux_amd64.tar.gz

3.将文件复制到frps/usr/bin

1
cp frp_0.52.0_linux_arm64/frps/usr/bin/

4.打开配置文件

1
vi frps.toml

5.配置文件修改:/etc/frp/frps.toml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 服务端与客户端通信端口,默认是7000
bindPort = 7000
# 服务端将只接受TLS链接
transport.tls.force = true
# 身份验证令牌可以设置复杂点,frpc要与frps一致
auth.method = "token"
auth.token = "设置复杂点的token" # 如"PuBlicOde"

# 后台管理地址
webServer.addr = "0.0.0.0"
# 后台管理端口
webServer.port = 7500
# 设置后台登录的用户名和密码
webServer.user = "admin"
webServer.password = "自行设置登录密码"

6.配置文件修改:/etc/systemd/system/frps.service

1
2
3
4
5
6
7
8
9
10
11
[Unit]
Description = frp server
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
ExecStart = /usr/bin/frps -c /etc/frp/frps.toml

[Install]
WantedBy = multi-user.target

7.输入以下命令,启动frp服务

1
2
3
systemctl daemon-reload
systemctl enable frps
systemctl start frps

8.Ubuntu服务器,使用ufw工具放行端口

1
2
3
4
# 监听端口
ufw allow 7000/tcp
# 对外开发的端口
ufw allow 443

客户端配置

1.运行如下命令,选择相应版本下载

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

2.解压frp压缩包

1
tar -zxvf frp_0.52.0_linux_amd64.tar.gz

3.将文件复制到frps/usr/bin

1
cp frp_0.52.0_linux_arm64/frps/usr/bin/

4.打开配置文件

1
vi frps.toml

5.配置文件修改:/etc/frp/frps.toml

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
26
27
# 设置为服务器的IP地址
serverAddr = "x.x.x.x"
# 服务器的通信端口
serverPort = 7000
auth.method = "token"
# 身份验证令牌,与服务器保持一致
auth.token = "之前设置的token"

# 配置http服务,可以自行配置多个代理
[[proxies]]
name = "test-http"
type = "tcp"
# 设置为需要开放服务的主机IP
localIP = "127.0.0.1"
localPort = 目标主机的端口
# 自定义的远程服务器端口
remotePort = 服务器开放端口

# 配置ssh服务
[[proxies]]
name = "ssh"
type = "tcp"
# 设置为需要开放服务的主机IP
localIP = "127.0.0.1"
localPort = 目标主机的端口
# 自定义的远程服务器端口
remotePort = 服务器开放端口

6.配置文件修改:/etc/systemd/system/frpc.service

1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=Frp Client Service
After=network.target
[Service]
Type=simple
DynamicUser=yes
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frpc -c /etc/frp/frpc.toml
ExecReload=/usr/bin/frpc reload -c /etc/frp/frpc.toml
LimitNOFILE=1048576
[Install]
WantedBy=multi-user.target

7.输入以下命令,启动服务

1
2
3
systemctl daemon-reload
systemctl enable frpc
systemctl start frpc