前言
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/tcp
和 6000/tcp
端口。
实现 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 #查看应用状态