Frp(内网穿透)服务部署
1.需求场景
为使得内网环境下的服务能正常被公网访问。将内网端口通过映射到公网机器上实现正常访问。
2.环境准备
-
你需要有一台固定IP的公网服务器,建议使用固定带宽,因为内网穿透(非P2P模式)走的是公网流量,如果用按流量计费的服务器,内网服务器做网盘等应用会非常浪费流量。
-
一台本地服务器,可以是windows、linux、macOS。
-
公网服务器与本地服务器要打开相应的端口,才能使服务生效。
-
公网服务器 IP:xx.xx.xx.xx
-
内网服务器 IP:192.168.0.3
-
系统:CentOS 7.9
注意: 若使用虚拟机则推荐桥接模式固定IP,可以省去很多麻烦。具体本文不多做阐述。
3.环境部署
a.资源包下载
下载地址:https://link.zhihu.com/?target=https%3A//github.com/fatedier/frp/releases
在此链接下找到各自机型的资源包进行下载上传到服务器上。(推荐最新版)我这里使用的是最新的0.51.3版本。
b.资源包介绍
- 解压资源包为/usr/local/bin/frp
[root@frp ~]# tar -zxvf frp_0.51.3_linux_amd64.tar.gz -C /usr/local/bin/frp
- 查看资源包内容
[root@frp ~]# tree /usr/local/bin/frp/
/usr/local/bin/frp/
|-- frpc
|-- frpc_full.ini
|-- frpc.ini
|-- frps
|-- frps_full.ini
|-- frps.ini
`-- LICENSE
0 directories, 7 files
[root@frp ~]# ll /usr/local/bin/frp/
total 30784
-rwxr-xr-x 1 1001 docker 14290944 Aug 14 12:04 frpc
-rw-r--r-- 1 1001 docker 12669 Aug 14 12:09 frpc_full.ini
-rw-r--r-- 1 1001 docker 132 Sep 21 23:37 frpc.ini
-rwxr-xr-x 1 1001 docker 17186816 Aug 14 12:04 frps
-rw-r--r-- 1 1001 docker 5933 Aug 14 12:09 frps_full.ini
-rw-r--r-- 1 1001 docker 134 Sep 22 00:02 frps.ini
-rw-r--r-- 1 1001 docker 11358 Aug 14 12:09 LICENSE
frps: 服务端启动文件
- frps_full.ini:
frps_full.ini
是 frp 服务端的完整配置文件,其中包含了所有可用的配置选项和参数。这个文件通常用于整体配置 frp 服务器,包括绑定地址、端口、身份验证方式、通信加密等。使用frps_full.ini
,可以自定义 frp 服务器的行为以满足特定需求。 - frps.ini:
frps.ini
是简化版的 frp 服务端配置文件,它只包含了最常用的配置项和参数,适用于一些简单的使用场景。相比于frps_full.ini
,它省略了某些高级功能和复杂配置,并提供了更为简洁的配置方式。如果只需进行基本的 frp 服务器配置,frps.ini
可能更适合。
frpc: 客户端启动文件
- frpc_full.ini:
frpc_full.ini
是 frp 的完整配置文件,其中包含了所有可用的配置选项和参数。这个文件通常用于整体配置 frp 客户端,包括服务器地址、端口、身份验证方式、代理规则等。使用frpc_full.ini
,可以灵活地配置 frp 客户端以满足特定需求。 - frpc.ini:
frpc.ini
是简化版的 frp 配置文件,它只包含了最常用的配置选项和参数,适用于一些简单的使用场景。相比于frpc_full.ini
,它省略了某些高级功能和复杂配置,并提供了更为简洁的配置方式。如果只需进行基本的 frp 配置,frpc.ini
可能更适合。
c.服务端部署
- 下载解压资源包到公网服务器上解压步骤同上
- 生成唯一token,将以下命令生成的随机token复制到下一步
[root@frp ~]# openssl rand -hex 16
- 配置公网服务器的Frp文件
[root@frp ~]# vim /usr/local/bin/frp/frps.ini
[common]
bind_port = 7000
token = xxxxxxxxxxxxxxxxxxxxxx
dashboard_port = 7001
dashboard_user = admin
dashboard_pwd = admin
参数说明
bind_port:用于服务器用户接收客户端连接的端口
token:基于 Token 的身份验证方式比较简单,需要在 frpc 和 frps 的
[common]
段落中配置上相同的token
参数即可。dashboard_port:启用 Dashboard 监听的本地端口
dashboard_user:HTTP BasicAuth 用户名 (随意设置)
dashboard_pwd: HTTP BasicAuth 密码(随意设置)
dashboard 是用于监控FRP端口运行状态以及流量,设置好 dashboard 后可以通过 指定IP xx.xx.xx.xx:7001访问FRP的服务端仪表盘来查看运行状况。
- 启动服务端
配置文件编写好后,进入FRP所在目录通过 ./frps -c ./frps.ini 启动服务端
至此,服务端搭建完成。
c.客户端部署
- 下载解压资源包到内网服务器上解压步骤同上
- 配置内网服务器的Frp文件
[root@Client ~]# vim /usr/local/bin/frp/frpc.ini
[common]
server_addr = xx.xx.xx.xx
server_port = 7000
token = xxxxxxxxxxxxxxxxxxxxxx
admin_addr = 192.168.0.3
admin_port = 7002
admin_user = admin
admin_pwd = admin
[FRP-module]
type = tcp
local_ip = 192.168.0.3
local_port = 7002
remote_port = 7002
[HTTPD-module]
type = tcp
local_ip = 192.168.0.3
local_port = 80
remote_port = 8008
[SSH-Module]
type = tcp
local_ip = 192.168.0.3
local_port = 22
remote_port = 2022
参数说明
server_addr:连接服务端的地址
server_port:连接服务端的端口
token:鉴权使用的 token 值,需要和服务端设置一样的值才能鉴权通过
admin_addr:启用 AdminUI 监听的本地地址(本地服务器IP地址)
admin_port:启用 AdminUI 监听的本地端口
admin_user:HTTP BasicAuth 用户名
admin_pwd:HTTP BasicAuth 密码
以上的admin_*是开启本地服务器的管理web界面以及设置用户密码
[frp-admin]:仅在 frpc 中使用,用于配置单个代理的参数。代理名称必须唯一,不能重复(配置本地服务器管理 web界面 )
type = tcp:代理类型
local_ip = 192.168.0.3 :需要被代理的本地服务的 IP 地址,可以为所在 frpc 能访问到的任意 IP 地址
local_port = 7002 :本地服务端口,配合 local_ip
remote_port = 7002 :远程访问端口,用户访问此端口的请求会被转发到 local_ip:local_port
- 启动客户端
配置文件编写好后,进入FRP所在目录通过 ./frps -c ./frpc.ini 启动服务端
至此,客户端搭建完成。
4.服务测试
浏览器访问公网IP:xx.xx.xx.xx:7001
由于之前对内网服务器做了关机操作,所以这里的指标为offline
正常情况下(内网服务器开启状态),以下红框中的status
状态为绿色的online
5.扩展
systemd接管frp服务端配置步骤
# 配置服务端自动启动文件
[root@frp ~]# vim /etc/systemd/system/frp.service
[Unit]
Description=Frp Service
After=network.target
[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/bin/frp/frps -c /usr/local/bin/frp/frps.ini
LimitNOFILE=1048576
[Install]
WantedBy=multi-user.target
# 重新加载启动文件
[root@frp ~]# systemctl daemon-reload
# 启动frp服务
[root@frp ~]# systemctl start frp.service
# 设置开机自启动
[root@frp ~]# systemctl enable frp.service
systemd接管frp客户端配置步骤
# 配置服务端自动启动文件
[root@Client ~]# vim /etc/systemd/system/frp.service
[Unit]
Description=Frp Client Service
After=network.target
[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/bin/frp/frpc -c /usr/local/bin/frp/frpc.ini
ExecReload=/usr/local/bin/frp/frpc reload -c /usr/local/bin/frp/frpc.ini
LimitNOFILE=1048576
[Install]
WantedBy=multi-user.target
# 重新加载启动文件
[root@Client ~]# systemctl daemon-reload
# 启动frp服务
[root@Client ~]# systemctl start frp.service
# 设置开机自启动
[root@Client ~]# systemctl enable frp.service
6.注意事项
- 公网,内网服务器都需要做好防火墙配置,放行所需端口
- 内网服务器上端口是存在且必须能正常访问
- 内网服务器要能正常访问公网