前言

frp 采用 Golang 编写,支持跨平台,仅需下载对应平台的二进制文件即可执行,没有额外依赖。frp 主要由 客户端(frpc)服务端(frps) 组成,服务端通常部署在具有公网 IP 的机器上,客户端通常部署在需要穿透的内网服务所在的机器上。

内网服务由于没有公网 IP,不能被非局域网内的其他用户访问。用户通过访问服务端的 frps,由 frp 负责根据请求的端口或其他信息将请求路由到对应的内网机器,从而实现通信。

00-状态-20230108-090

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

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

实验环境

  • 服务器:Ubuntu 20.04

  • 服务器内核版本:5.4.0-126-generic

  • frp服务端版本frp_0.46.0_linux_amd64.tar.gz

  • 客户端:win10 21H2

  • frp客户端版本:frp_0.44.0_windows_amd64

需求

家里有台电脑,我想在外面玩的时候,想时不时使用手机远程一下我的电脑,或者在网吧远程我的电脑。

家里的宽带没有公网IP,所以就只能借助内网穿透了,恰好我有台服务器,可以使用利用FRP内网穿透。

程序结构介绍

无论是客户端还是服务端,我们都只是需要这个三个文件即可,准确来说,我们只需要frp.exe和frp.ini两个文件,另一个frp_full.ini文件是配置备份,可有可无。

1
2
3
frp.exe  # 启动程序
frp.ini # 配置文件
frp_full.ini # 配置文件备份

配置服务端

FRP仓库地址:https://github.com/fatedier/frp/releases

下载frps程序

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

解压程序包

将压缩包解压到/usr/local/下,并且将解压后的文件夹改名为frps_0.46

1
tar -zxvf frp_0.46.0_linux_amd64.tar.gz -C /usr/local/ && mv ./frp_0.46.0_linux_amd64  frps_0.46

删除无用的文件

进入文件夹

1
cd frps_0.46

删除frpc文件开头的文件,带有c的表示是客户端的文件,我们需要的是服务端的文件。

1
rm -rf ./frpc* && rm -rf ./LICENSE && ls

配置frps.ini

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[common]
#服务器IP,0.0.0.0为服务器全局所有IP可用
bind_addr = 0.0.0.0
#通讯端口,用于和客户端内网穿透传输数据的端口,可自定义
bind_port = 8413
#通讯密钥,可自定义
token = fhfgsg424

# 设置日志显示级别{debug info warn error}
log_level = info

# 设置日志最大天数
log_max_days = 999

# 自启动的文件在/lib/systemd/system/frps.service

# 服务器一共需要开两个端口,两个端口都可以自定义 8413 6143
# 8413 用于数据之间的传输
# 6143 用于远程桌面的时候用,比如远程地址为: 93.613.174.122:6143
# 服务器需要再开一个端口6143 与本地的frp中的remote_port端口6143一致

开放端口

此操作需要管理员权限,你可以加sudo或者进入root用户操作

1
2
3
ufw allow 8413 comments "frps数据传输"
ufw allow 6143 comments "window远程桌面端口"
ufw reload

另外,你还需要去服务商的安全组开放以上两个端口。

配置系统服务

此时你需要使用sudo或者进入超级管理员才能进行以下操作

1
vim /lib/systemd/system/frps.servic

如果你的frp安装目录没有更改,按照我的方法走,下面的不需要改,如果你有更改过目录,则你需要将ExecStart的目录改为你的目录

将以下内容下入`frps.service`
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[Unit]
Description=Frp Server Service
After=network.target

[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
#你的frps安装目录
ExecStart=/usr/local/frps_0.46/frps -c /usr/local/frps_0.46/frps.ini

[Install]
WantedBy=multi-user.target

启动服务

重新加载系统服务

1
systemctl daemon-reload

启动frps服务

1
systemctl start frps.service

查看frps服务状况

1
systemctl status frps

01-启动frps-20230108-492

配置客户端

我们只需要这三个文件,其他文件可以删掉

1
2
3
frpc.exe
frpc.ini
frpc_full.ini

配置frpc.ini

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[common]
#服务端IP或者域名
server_addr = 93.613.174.122
#服务端连接端口,需要和服务端的bind_port一致
server_port = 8413
#服务端token,需要和服务端的token一致
token = fhfgsg424

#服务别名,必须唯一,不能重复
[web123]
#使用的协议
type = tcp
#本地要开放服务的IP
local_ip = 127.0.0.1
#本地要开放服务的端口
local_port = 3389
#服务端的端口,这里用的免费的服务端端口开放:5000-6000,选择其中一个,必须唯一,改端口用于远程时使用,比如在远程桌面时,输入 93.613.174.122:6143
remote_port = 6143

启动frpc

在当前目录下打开cmd,启动frp程序,输入.\frpc.exe -c .\frpc.inic是小写。

1
2
3
4
PS E:\Systemtool\frp_0.44.0_windows_amd64> .\frpc.exe -c .\frpc.ini
2023/01/08 02:02:36 [I] [service.go:349] [1b80a7abee33d468] login to server success, get run id [1b80a7abee33d468], server udp port [0]
2023/01/08 02:02:36 [I] [proxy_manager.go:144] [1b80a7abee33d468] proxy added: [web123]
2023/01/08 02:02:36 [I] [control.go:181] [1b80a7abee33d468] [web123] start proxy success

window远程连接

使用其他电脑远程连接即可,端口使用6143,如果连不上,请检查服务器是否开放6143端口,还要安全组是否放行了6143端口,如果还是不行,请检查被远程的电脑是否放行6143端口入站。

02-远程桌面连接20230108-634