前言

frp 是一个可用于内网穿透的高性能反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。frp 分为服务端(frps)和客户端(frpc),在有公网 IP 的服务器(简称公网服务器)上运行 frps,在内网中的服务器(简称内网服务器)上运行 frpc。

本文记录在 CentOS7 上配置 frp,实现 ssh、web 服务的穿透的过程。

操作环境:
Server OS:CentOS Linux release 7.7 具有公网 IP
Client OS:CentOS Linux release 7.7 只有内网IP


frp 安装

分别在公网服务器和内网服务器执行以下操作
根据服务器系统类型下载最新版本 frp,本文创建时frp最新版本是0.32.0。
CentOS7 是 Linux 操作系统,下载frp_0.32.0_linux_amd64.tar.gz

wget https://github.com/fatedier/frp/releases/download/v0.32.0/frp_0.32.0_linux_amd64.tar.gz #利用wget下载
tar -zxvf frp_0.32.0_linux_amd64.tar.gz   #解压下载的压缩包
cd frp_0.32.0_linux_amd64                 #进入解压文件夹

实现 ssh 穿透

编辑公网服务器上的frps.ini

[common]
bind_port = 7000
authenticate_new_work_conns = true #在每次建立新的工作连接时附加上鉴权信息
authenticate_heartbeats = true     #在每一个心跳包中附加上鉴权信息
authentication_method = token      #启用基于 token 的验证方式
token = 123                        #令牌的值,只有 frps 令牌和 frpc 令牌一致时,才能成功建立连接

运行 frps

./frps -c ./frps.ini

编辑内网服务器上的frpc.ini

[common]
server_addr = x.x.x.x               #x.x.x.x为公网服务器的公网IP
server_port = 7000                  #必须与 frps.ini 中 bind_port 一致
authenticate_new_work_conns = true  #必须与 frps.ini 中配置一致
authenticate_heartbeats = true      #必须与 frps.ini 中配置一致
authentication_method = token       #必须与 frps.ini 中配置一致
token = 123                         #必须与 frps.ini 中配置一致

[ssh]                               #代理名称 如果有多个代理,代理名称不能相同
type = tcp                          #协议类型
local_port = 22                     #内网的SSH端口
remote_port = 6000                  #通过此端口访问内网SSH服务

运行 frpc

./frpc -c ./frpc.ini

成功运行 frpc 后,会出现链接成功的提示,此时 frp 把内网服务器的22端口暴露成公网服务器的6000端口,任何到公网服务器6000端口的链接都会通过 frp 转发到内网服务器22端口

此时,通过外网 IP x.x.x.x 和端口 6000 即可访问内网 ssh

外网服务器需要放行 7000/tcp6000/tcp 端口。

以上运行为前台运行,按 ctrl+c 终止运行,后面介绍添加后台运行

实现 web 服务穿透

在上述基础上
编辑公网服务器上的frps.ini

[common]
bind_port = 7000
vhost_http_port = 8080             #虚拟主机端口,通过此端口访问穿透的 web 服务
authenticate_new_work_conns = true 
authenticate_heartbeats = true 
authentication_method = token
token = 123

在内网服务器上编辑frpc.ini

[common]
server_addr = x.x.x.x
server_port = 7000
authenticate_new_work_conns = true
authenticate_heartbeats = true
authentication_method = token
token = 123

[ssh]
type = tcp
local_port = 22
remote_port = 6000

[web]
type = http                        #web服务使用的协议
local_port = 80                    #web服务使用的端口(https为443)
custom_domains = www.youdomain.com #填写自己的域名(支持二级域名),需要设置DNS解析,域名A记录指向公网服务器
use_compression = true             #可选项 启用数据压缩

运行 frpc

./frpc -c ./frpc.ini

此时,通过外网www.youdomain.com:8080即可访问内网 web 服务

内网服务器需要放行80/tcp端口,外网服务器需要放行8080/tcp端口。

设置 frp 后台运行,开机自启动

frps 后台运行

新建文件

vim /lib/systemd/system/frps.service

添加以下内容

[Unit]
Description=frps service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
ExecStart=/path/frps -c /path/frps.ini #填写frps的实际目录

[Install]
WantedBy=multi-user.target

启动 frps 并添加开机自启动

sudo systemctl start frps   #启动frps
sudo systemctl enable frps  #设置开机自启动

frpc 后台运行

新建文件

vim /lib/systemd/system/frpc.service

添加以下内容

[Unit]
Description=frpc service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
ExecStart=/path/frpc -c /path/frpc.ini #填写frpc的实际目录

[Install]
WantedBy=multi-user.target

启动 frpc 并添加开机自启动

sudo systemctl start frpc   #启动frpc
sudo systemctl enable frpc  #设置开机自启动

frp 服务控制命令

sudo systemctl start frps   #启动frps,同理可控制frpc
sudo systemctl enable frps  #设置开机自启动
sudo systemctl restart frps #重启应用
sudo systemctl stop frps    #停止应用
sudo systemctl status frps  #查看应用状态

Last modification:November 20th, 2020 at 12:20 pm