目录

FRP使用指南

概述

FRP是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。FRP运行的统计数据是存储在内存上的,也就是说,当重启的时候,统计数据将丢失。

在frp中一个代理对应一个需要暴露的内网服务。一个客户端支持同时配置多个代理。frp支持多种代理类型来适配不同的使用场景:

类型 描述
TCP 单纯的TCP端口映射,服务端会根据不同的端口路由到不同的内网服务。
UDP 单纯的UDP端口映射,服务端会根据不同的端口路由到不同的内网服务。
http 针对HTTP应用定制了一些额外的功能,例如修改 Host Header,增加鉴权。
https 针对HTTPS应用定制了一些额外的功能。
stcp 安全的TCP内网代理,需要在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。
sudp 安全的UDP内网代理,需要在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。
xtcp 点对点内网穿透代理,功能同stcp,但是流量不需要经过服务器中转。
tcpmux 支持服务端TCP端口的多路复用,通过同一个端口访问不同的内网服务。

安装

从github release页面下载源码,并进行解压:

1
2
3
4
5
6
7
8
# downloads
curl -LO https://github.com/fatedier/frp/releases/download/v0.39.0/frp_0.39.0_linux_amd64.tar.gz
# untar
tar -xvf frp_0.39.0_linux_amd64.tar.gz
# (可选) 将frps添加到systemd
sudo ln -s $(pwd)/systemd/frps.service /etc/systemd/system # frps.service中User可能要改为root
sudo ln -s $(pwd)/frps.ini /etc/frp/
sudo ln -s $(pwd)/frps /usr/bin

使用示例

示例:TCP转发

对应的服务端的配置(/etc/frp/frps.ini)如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
[common]
bind_port = 7000 # 绑定端口
vhost_https_port = 443

# 设置dashboard
dashboard_port = 8081
dashboard_user = admin  # dashborad用户
dashboard_pwd = ******** # dashboard密码
# 设置Prometheus监控
enable_prometheus = true # 启动prometheus
# 允许的端口,防止端口被滥用
allow_ports = 7000,10000-50000

对应的客户端的设置如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
[common]
server_addr = 124.223.111.x  # frps address
server_port = 7000             # frps port

[clash]
type = tcp
local_ip = 127.0.0.1
local_port = 7890
remote_port = 17890            # 对应映射的端口号
use_encryption = true          # 使用加密
use_compression = true         # 使用压缩

上述的配置的意思就是,将127.0.0.1:17890转发到124.223.111.x:17890这个端口上。

示例:点对点内网穿透

参考文献

  1. FRP github repo
  2. FRP Official docs