frp(v0.59.0)使用
参考文档:frp
1 frp版本使用差别
从2023-10-10的frp_0.52.0版本开始,frp与前面的版本在配置上有较大区别,而且有较多的语法校验。因此,如果非必要不建议使用最新版本。
以frp_0.52.0_windows_amd64.zip解压后为例(Windows版本):
共有5个文件:
- frpc.exe:frp客户端程序。
- frpc.toml:frp客户端配置文件。
- frps.exe:frp服务端程序。
- frps.toml:frp服务端配置文件。
- LICENSE(许可证,略)
使用中碰到过的错误:
#错误1:error unmarshaling JSON: while decoding JSON: json: cannot unmarshal string into Go value of type v1.ClientConfig
原因:每个被代理的服务之间需要加入[[proxies]],还有非整型字段的值都需要加""。
#错误2:unmarshal ProxyConfig error: json: unknown field "customDomains"
原因:customDomains是type:http、https、tcpmux里的配置,如果放到其他类型里则会报错。且需要加[],比如:customDomains =["test2"]#错误3:[web2] start error: router config conflict
原因:两个type为http服务的customDomains指定的是同一域名或ip导致。
2 frp_v0.59.0下载安装使用(压缩包方式)
注意:服务器需要开放相关端口。
2.1 下载地址
frp也是托管在Github上的开源项目,直接到Release页面下载即可,链接如下:https://github.com/fatedier/frp/releases
在写本文时(2024-07-13),frp的版本是
v0.59.0
。
2.2 安装包内容
以frp_0.59.0_windows_amd64.zip解压后为例(Windows版本):
共有5个文件:
- frpc.exe:frp客户端程序。
- frpc.toml:frp客户端配置文件。
- frps.exe:frp服务端程序。
- frps.toml:frp服务端配置文件。
- LICENSE(许可证,略)
2.3 frp各端配置
更多配置可参考:github上frp的README中的Demo
2.3.1 frp服务端配置
#bindPort是服务端与客户端之间通信使用的端口号
bindPort =7000# 配置验证方式
auth.method ="token"# 选择token方式验证
auth.token ="123456"# 必须与客户端的token一致,token用于验证连接,只有服务端和客户端token相同的时候才能正常访问。如果不使用token,那么所有人都可以直接连接上。#转发web服务
vhostHTTPPort =6555#服务端开启仪表板
webServer.addr ="0.0.0.0"
webServer.port =7600# dashboard's username and password are both optional
webServer.user ="用户名"
webServer.password ="密码"# https证书配置# webServer.tls.certFile = "server.crt"# webServer.tls.keyFile = "server.key"# 多路复用
transport.tcpMux =true# 最大连接池数量
transport.maxPoolCount =10
2.3.2 frp客户端配置
注意:
customDomains
在使用域名时,指定的二级子域名不能重复!
#服务器ip
serverAddr ="11.22.33.44"#服务端与客户端之间通信使用的端口号
serverPort =7000# 配置验证方式
auth.method ="token"# 选择token方式验证
auth.token ="123456"# 必须与客户端的token一致,token用于验证连接,只有服务端和客户端token相同的时候才能正常访问。如果不使用token,那么所有人都可以直接连接上。[[proxies]]
name ="ssh"type="tcp"
localIP ="127.0.0.1"
localPort =22
remotePort =6000#MySQL数据库[[proxies]]
name ="MySQL"type="tcp"
localIP ="127.0.0.1"
localPort =3357
remotePort =3357#Redis数据库[[proxies]]
name ="Redis"type="tcp"
localIP ="127.0.0.1"
localPort =6379
remotePort =6379#本地服务1[[proxies]]
name ="web1"type="http"
localPort =80
customDomains =["web1.example.com"]#你的frp的server的ip或域名#本地服务2[[proxies]]
name ="web2"type="http"
localPort =8080
customDomains =["web2.example.com"]#你的frp的server的ip或域名#本地服务3 Gitlab的传输类型是tcp而非http[[proxies]]
name ="Gitlab"type="tcp"
localIP ="192.168.1.1"
localPort =9980
remotePort =9980
这里特别说明下frp下web服务的配置,以web1为例:假设frp服务器所在的ip为11.22.33.44,绑定的域名为 web1.example.com,使用Nginx代理转发到11.22.33.44:6555上,则frpc在配置web1时customDomains必须设置成 web1.example.com【要和访问的域名完全一致,不含端口】,否则在输入aa.bb.cn访问时,会报frp给出的404错误。
3 启动运行(压缩包方式)
Linux下启动frps服务端,在frp目录下执行:
nohup ./frps -c ./frps.toml > frps.log 2>&1&
启动后会将日志记录到frps.log文件中。
windows下启动frpc客户端:
start /b frpc.exe -c D:\Software\frp\frp_0.59.0_windows_amd64\frpc.toml
服务端和客户端都启动成功后即可正常使用frp服务了。
附:
Linux下查看正在使用的端口情况:
netstat-tunlp
3.1 自启动
参考:frp安装与配置
3.1.1 linux下frps自启动
- 创建
/usr/bin/frps/
目录。 - 将
/opt/soft/frp/frp_0.59.0_linux_amd64/
中的frps、frps.toml
文件移动到/usr/bin/frps
。 - 服务端自启动,先创建一个
frps.service
文件。
vim /usr/lib/systemd/system/frps.service
- 添加以下内容,编辑完记得保存。
[Unit]Description=Frp Server Service
After=network.target
[Service]Type=simple
Restart=always
RestartSec=1min
ExecStart=/usr/bin/frps/frps -c /usr/bin/frps/frps.toml
#其他都不用改,仅上一行两处目录改为frps文件和frps.toml文件存放的目录,不能放root目录中[Install]WantedBy=multi-user.target
- 将frps加入系统服务
#添加开机自启动sudo systemctl enable frps
#启动frpssudo systemctl start frps
#关闭frpssudo systemctl stop frps
#重启frpssudo systemctl restart frps
#查看frps状态sudo systemctl status frps
3.1.2 linux下frpc自启动
- 创建
/usr/bin/frpc/
目录。 - 将
/opt/soft/frp/frp_0.59.0_linux_amd64/
中的frpc、frpc.toml
文件移动到/usr/bin/frpc
。 - 服务端自启动,先创建一个
frpc.service
文件。
vim /usr/lib/systemd/system/frpc.service
- 添加以下内容,编辑完记得保存。
[Unit]Description=Frp Client Service
After=network.target
[Service]Type=simple
Restart=always
RestartSec=1min
ExecStart=/usr/bin/frpc/frpc -c /usr/bin/frpc/frpc.toml
#其他都不用改,仅上一行两处目录改为frpc文件和frpc.toml文件存放的目录,不能放root目录中[Install]WantedBy=multi-user.target
- 将frpc加入系统服务
#添加开机自启动sudo systemctl enable frpc
#启动frpssudo systemctl start frpc
#关闭frpssudo systemctl stop frpc
#重启frpssudo systemctl restart frpc
#查看frps状态sudo systemctl status frpc
4 frp_v0.35.1下载安装使用(压缩包方式)
可参考:frp(v0.35.1)使用
5 docker或docker-compose部署frp
5.1 注意事项
- 当前时间最新tag以及最高(0.59)版本的frp(frps、frpc)镜像,部署文档虽然都说使用
.toml
配置文件,但实际上用的还是.ini
配置文件。
docker run --restart=always --networkhost-d-v /etc/frp/frps.toml:/etc/frp/frps.toml --name frps snowdreamtech/frps
docker run --restart=always --networkhost-d-v /etc/frp/frpc.toml:/etc/frp/frpc.toml --name frpc snowdreamtech/frpc
来自docker镜像官网:
2.
snowdreamtech/frps
镜像实际情况。
综上:在使用docker或者docker-compose部署frp时,使用的语法规则还是旧版本的,也就是基于.ini后缀的。
5.2 frp各端配置
docker-compose部署frp时,默认的frps、frpc的配置文件还是旧版的,也就是以.ini结尾的,这里可以参考:frp(v0.35.1)使用
frps.ini:
[common]#bind_port是服务端与客户端之间通信使用的端口号
bind_port =7000#与客户端的token必须设置成一致,token用于验证连接,只有服务端和客户端token相同的时候才能正常访问。如果不使用token,那么所有人都可以直接连接上
token = 待配置,建议设置复杂些,需与客户端保持一致
#转发web服务
vhost_http_port =6555#开启仪表板
dashboard_port =7600
dashboard_user = 待配置
dashboard_pwd = 待配置
tcp_mux =true
max_pool_count =10# log_file如果是挂载到容器中,则必须将路径改成/var/log/frp
log_file = /var/log/frp/frps.log
log_level = info
frpc.ini:
注意:
custom_domains
在使用域名时,指定的二级子域名不能重复!
[common]#服务器ip
server_addr =11.22.33.44
#服务端与客户端之间通信使用的端口号
server_port =7000#与服务端的token必须设置成一致
token = 待配置,建议设置复杂些,需与客户端保持一致
# log_file如果是挂载到容器中,则必须将路径改成/var/log/frp
log_file = /var/log/frp/frpc.log
log_level = info
[ssh]type= tcp
local_ip =127.0.0.1
local_port =22
remote_port =6000#MySQL数据库[mysql]type= tcp
local_ip =192.168.1.1
local_port =3306
remote_port =3306
custom_domains =11.22.33.44 #你的frp的server的ip#Redis数据库[redis]type= tcp
local_ip =192.168.1.1
local_port =6379
remote_port =6379
custom_domains =11.22.33.44 #你的frp的server的ip或域名#本地服务1[web1]type= http
#本地端口 1
local_port =9090
custom_domains = aa.bb.cn
#本地服务2[web2]type= http
#本地端口 1
local_port =9090
custom_domains = web2.xx.xx
#本地服务3 gitlab的传输类型是tcp而非http[gitlab]type= tcp
local_ip =192.168.3.220
local_port =9980
remote_port =9980#custom_domains = 11.22.33.44
custom_domains = gitlab.xxx.xxx
5.3 docker-compose文件
version: '3'
services:
frps:
image: snowdreamtech/frps
container_name: frps
restart: always
ports:
- "7000:7000"
- "7600:7600"
- "6555:6555"
network_mode: host
volumes:
- /etc/localtime:/etc/localtime:ro
- ./frps.ini:/etc/frp/frps.ini
- ./logs:/var/log/frp # 将日志目录挂载到容器中
frpc:
image: snowdreamtech/frpc
container_name: frpc
restart: always
network_mode: host
volumes:
- /etc/localtime:/etc/localtime:ro
- ./frpc.ini:/etc/frp/frpc.ini
- ./logs:/var/log/frp # 将日志目录挂载到容器中
版权归原作者 西木Qi 所有, 如有侵权,请联系我们删除。