项目简介
https://github.com/fatedier/frp
frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。
准备工作
- 公网ip服务器(阿里云、腾讯云等) - 服务端
- 内网服务器 - 客户端
- frp
服务端安装
从 v0.52.0 版本开始,frp 开始支持 TOML、YAML 和 JSON 作为配置文件格式。
请注意,INI 已被弃用,并将在未来的发布中移除。新功能只能在TOML、YAML 或 JSON 中使用。希望使用这些新功能的用户应相应地切换其配置格式。
下载
您可以从 GitHub 的 Release 页面中下载最新版本的客户端和服务器二进制文件。所有文件都打包在一个压缩包中,还包含了一份完整的配置参数说明。
部署
- 解压下载的压缩包。
- 将
frpc
复制到内网服务所在的机器上。 - 将
frps
复制到拥有公网 IP 地址的机器上,并将它们放在任意目录。
开始使用!
- 编写配置文件,目前支持的文件格式包括 TOML/YAML/JSON,旧的 INI 格式仍然支持,但已经不再推荐。
- 使用以下命令启动服务器:
./frps -c ./frps.toml
。 - 使用以下命令启动客户端:
./frpc -c ./frpc.toml
。 - 如果需要在后台长期运行,建议结合其他工具,如 systemd 和
supervisor
。
如果您是 Windows 用户,需要在命令提示符中执行相同的命令。
当然你也可以使用docker来部署,我做了一个frp及vlmcsd的镜像。
git clone https://github.com/jalena/toolkit.git
cd toolkit
# Use docker-compose service
docker-compose up -d
使用Docker容器部署客户端
本镜像使用Alpine构建,只包含了 Frpc 客户端,如果你需要自己构建镜像,可以参考 Frpc 客户端 自行修改。
暴露服务
这里继承了docker容器内的自定义网络,从安全角度来讲它并没有将docker母机的网络给暴露出去。
services:
frp:
image: jalena/frpc:latest
container_name: frp
restart: always
volumes:
- ./frpc.toml:/etc/frpc.toml
networks:
- frp_network
deploy:
resources:
limits:
cpus: '0.20'
memory: 100M
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "10"
networks:
frp_network:
external: true
name: CustomNetWork
frpc参考配置
serverAddr = "frp.baidu.com"
serverPort = 7000
loginFailExit = true
# console or real logFile path like ./frpc.log
log.to = "./frpc.log"
# trace, debug, info, warn, error
log.level = "info"
log.maxDays = 3
# disable log colors when log.to is console, default is false
log.disablePrintColor = false
auth.method = "token"
# auth.additionalScopes specifies additional scopes to include authentication information.
# Optional values are HeartBeats, NewWorkConns.
# auth.additionalScopes = ["HeartBeats", "NewWorkConns"]
# auth token
auth.token = "123456789"
# connections will be established in advance, default value is zero
transport.poolCount = 5
[[proxies]]
name = "test1"
type = "stcp"
secretKey = "11111111111111111111"
localIP = "172.16.0.1"
localPort = 8081
[[proxies]]
name = "test_mysql"
type = "stcp"
secretKey = "222222222222222222"
localIP = "10.100.0.10"
localPort = 3306
本地网络代理
这里因为本地可能同时处理多个代理,所以在网络模式采用了host
,因此就不需要为每个代理服务单独暴露端口了
services:
frp:
image: jalena/frpc:latest
container_name: frp
restart: always
network_mode: host
volumes:
- ./frpc.toml:/etc/frpc.toml
deploy:
resources:
limits:
cpus: '0.20'
memory: 100M
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "10"
frpc配置
通过docker容器暴露代理服务,bindAddr
参数需要将其绑定在0.0.0.0
,否则可能无法使用。
serverAddr = "frp.baidu.com"
serverPort = 7000
loginFailExit = true
# console or real logFile path like ./frpc.log
log.to = "./frpc.log"
# trace, debug, info, warn, error
log.level = "info"
log.maxDays = 3
# disable log colors when log.to is console, default is false
log.disablePrintColor = false
auth.method = "token"
# auth.additionalScopes specifies additional scopes to include authentication information.
# Optional values are HeartBeats, NewWorkConns.
# auth.additionalScopes = ["HeartBeats", "NewWorkConns"]
# auth token
auth.token = "123456789"
# connections will be established in advance, default value is zero
transport.poolCount = 5
[[visitors]]
name = "test_api"
type = "stcp"
serverName = "test1"
secretKey = "11111111111111111111"
bindAddr = "0.0.0.0"
bindPort = 8081
[[visitors]]
name = "test_mysql"
type = "stcp"
serverName = "test_mysql"
secretKey = "222222222222222222"
bindAddr = "0.0.0.0"
bindPort = 13306
文章评论