下载&安装

https://github.com/fatedier/frp/releases 中下载系统对应的版本(服务端和客户端都在一个压缩包中)

将对应的压缩包分别解压到服务端和客户端的任意文件夹中

配置&启动

服务端

编辑frps.toml

bindPort = 7000
#FRP服务所绑定的端口,可更改

./frps -c ./frps.toml

Windows系统下要去掉命令前面的./

客户端

编辑frpc.toml

serverAddr = "x.x.x.x"
#部署FRP服务的服务器地址
serverPort = 7000
#FRP服务所绑定的端口,必须与服务端配置中的"bindPort"一致,可更改

[[proxies]]
name = "tcp"
#FRP隧道名称,可更改
type = "tcp"
#连接类型
localIP = "127.0.0.1"
#本地服务的IP
localPort = 10000
#本地服务的端口(内网端口)可更改
remotePort = 6000
#本地服务映射到公网的端口(外网端口)可更改

./frpc -c ./frpc.toml

Windows系统下要去掉命令前面的./

注:

若您使用nat机,请在服务商提供的控制面板为以下配置中绑定的端口创建端口映射。建议内网端口与外网端口一致。

frps.toml 中的bindPort

frpc.toml 中的remotePort

启动服务后,可以通过x.x.x.x:6000访问部署FRP客户端的主机上以10000端口运行的服务

实践

基础

A作为服务端(具有公网IP1.2.3.4,FRP在7000端口上运行)

B作为客户端,运行本地端口为25565的Minecraft Java服务器

编辑服务端A中的frps.toml

bindPort = 7000
#FRP服务所绑定的端口

编辑客户端B中的frpc.toml

serverAddr = "1.2.3.4"
#部署FRP服务的服务器地址
serverPort = 7000
#FRP服务所绑定的端口,必须与服务端配置中的"bindPort"所绑定的端口一致

[[proxies]]
name = "minecraft"
#FRP隧道名称
type = "tcp"
#连接类型
localIP = "127.0.0.1"
#本地服务的IP
localPort = 25565
#本地服务的端口(内网端口)
remotePort = 6000
#本地服务映射到公网的端口(外网端口)

启动服务端和客户端后,可以通过1.2.3.4:6000来访问在B上以25565端口运行的服务器

进阶

A作为服务端(具有公网IP1.2.3.4,FRP在7000端口上运行)

B作为客户端,运行本地端口为25565的Minecraft Java服务器

通过ProxyProtocol显示真实IP

编辑服务端A中的frps.toml

bindPort = 7000
#FRP服务所绑定的端口

Minecraft服务端中需要启用proxy protocol,部分服务端不支持开启此功能

Fabric服务端中,可添加Fabric-Haproxy模组以支持 https://github.com/wallenjos01/fabric-haproxy

编辑客户端B中的frpc.toml 添加proxies.transport配置

serverAddr = "1.2.3.4"
#部署FRP服务的服务器地址
serverPort = 7000
#FRP服务所绑定的端口,必须与服务端配置中的"bindPort"所绑定的端口一致

[[proxies]]
name = "minecraft"
#FRP隧道名称,可更改
type = "tcp"
#连接类型
localIP = "127.0.0.1"
#本地服务的IP
localPort = 25565
#本地服务的端口(内网端口)
remotePort = 6000
#本地服务映射到公网的端口(外网端口)

[proxies.transport]
proxyProtocolVersion = "v2"
#推荐使用v2版本

启动服务后,通过1.2.3.4:6000 访问时,可以在后台看到玩家的真实IP而非127.0.0.1

域名绑定

例如:将1.2.3.4:6000绑定至mc.example.com

类型

名称

服务

协议

TTL

优先级

权重

端口

内容/目标

A

a

/

/

/

/

/

/

1.2.3.4

SRV

mc

_minecraft

tcp

AUTO

(自动)

5

0

6000

a.example.com