frp(v0.59.0)使用

西木Qi 2024-08-25 13:37:01 阅读 60

frp(v0.59.0)使用

1 frp版本使用差别2 frp_v0.59.0下载安装使用(压缩包方式)2.1 下载地址2.2 安装包内容2.3 frp各端配置2.3.1 frp服务端配置2.3.2 frp客户端配置

3 启动运行(压缩包方式)3.1 自启动3.1.1 linux下frps自启动3.1.2 linux下frpc自启动

4 frp_v0.35.1下载安装使用(压缩包方式)5 docker或docker-compose部署frp5.1 注意事项5.2 frp各端配置5.3 docker-compose文件

参考文档: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(许可证,略)

使用中碰到过的错误:

<code>#错误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服务端配置

<code>#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

#启动frps

sudo systemctl start frps

#关闭frps

sudo systemctl stop frps

#重启frps

sudo 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

#启动frps

sudo systemctl start frpc

#关闭frps

sudo systemctl stop frpc

#重启frps

sudo 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 --network host -d -v /etc/frp/frps.toml:/etc/frp/frps.toml --name frps snowdreamtech/frps

docker run --restart=always --network host -d -v /etc/frp/frpc.toml:/etc/frp/frpc.toml --name frpc snowdreamtech/frpc

来自docker镜像官网:

在这里插入图片描述

2. <code>snowdreamtech/frps镜像实际情况。

在这里插入图片描述

综上:在使用docker或者docker-compose部署frp时,使用的语法规则还是旧版本的,也就是基于.ini后缀的。

5.2 frp各端配置

docker-compose部署frp时,默认的frps、frpc的配置文件还是旧版的,也就是以.ini结尾的,这里可以参考:frp(v0.35.1)使用

frps.ini:

<code>[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 # 将日志目录挂载到容器中



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。