典型的应用场景如下:
- 在家庭宽带环境内搭建的网络服务想暴露到公网,供他人访问。
- 一个服务器没有公网,但是有一个跳板机同时可以访问公网和该服务器,则可借助跳板机,将内网服务暴露到公网。
FRP-Server,服务端,负责接收客户端的请求,并对数据进行转发,通常运行在公网上。Tunnel,服务端所拉起的一个通道,该通道包含两个端口,open-port是服务代理后可供用户直接访问的端口,agetn-port是供agent端链接的端口。 一个FRP-Server可以配置多个Tunnel。FRP-Agent,代理客户端,通常运行在私网内,用来扮演请求真实服务即Upstream Server和数据转发的角色。所以要在其中配置frp-tunnel信息以及真实上游服务的proxy信息。
典型配置文件(application.yml):
frp-server:
management:
port: 8089
tunnels:
- name: 测试
type: tcp
open-port: 8082
agent-port: 8083
quarkus:
http:
port: ${frp-server.management.port}路径存放:
./your-server-folder/
├── muyun-frp-server-x.x.x-runner.jar # MuYun FRP Server JAR
└── config/ # 配置文件夹
└── application.yml # 配置文件
启动命令:
java -jar muyun-frp-server-x.x.x-runner.jar典型配置文件(application.yml):
frp-agent:
type: tcp
frp-tunnel:
host: 127.0.0.1
port: 8083
proxy:
host: 192.168.6.203
port: 22路径存放:
./your-agent-folder/
├── muyun-frp-agent-x.x.x-runner.jar # MuYun FRP Agent JAR
└── config/ # 配置文件夹
└── application.yml # 配置文件
启动命令:
java -jar muyun-frp-agent-x.x.x-runner.jar其他补充:
-
如果需要把
jar当做服务持续启动的话,可以参考下面的命令:nohup java -jar muyun-frp-agent-x.x.x-runner.jar > /dev/null 2>&1 &
-
如果想定制更负责的日志输出,可以参考
./frp-server/src/main/resources/application-demo.yml文件内容。 -
如果遇到启动失败,请检查端口占用情况。典型的报错信息为:
java.net.BindException: Address already in use
运行单元测试
./gradlew :frp-test:test项目打包
./gradlew :frp-server:build -Dquarkus.package.jar.type=uber-jar
./gradlew :frp-agent:build -Dquarkus.package.jar.type=uber-jar因为是Quarkus项目,所以支持打包本地二进制文件,感兴趣的可以尝试下面的命令
./gradlew :frp-server:build -Dquarkus.native.enabled=true -Dquarkus.native.container-build=true
./gradlew :frp-agent:build -Dquarkus.native.enabled=true -Dquarkus.native.container-build=true