利用空闲服务器搭建frps服务端-实现穿透代理

利用frps代理Tcp或者udp或其它类型的连接

1、什么是frps/frpc

frps是代理的服务端、frpc是代理的客户端,使用方数据传输到服务端,服务端再将数据传输到提供方,从而达到相互访问的目的。

2、什么是穿透

穿透就是客户端A和客户端B都没有公网ip,但是客户端A需要和客户端B正常通信。中间需要一个有公网ip的服务器,为两个客户端转发数据,就是客户端A绑定端口发送数据,然后坚挺改端口,然后由公网服务器告诉客户端B,客户端A的公网ip和端口,客户端B链接A的公网ip和公网端口实现客户端A和客户端B相互访问。

公网服务器是负责中转数据的,相当于翻译官的角色。客户端A和客户端B之间通信都由这个翻译官传达。

3、下载

下载地址Releases · fatedier/frp · GitHub

选择对应电脑架构和系统匹配的版本下载使用,服务端和客户端程序都在一个压缩包里面

利用空闲服务器搭建frps服务端-实现穿透代理插图

利用空闲服务器搭建frps服务端-实现穿透代理插图1

4、配置

1)服务端配置

[common] bind_port = 7000 # 中转服务器中frp服务的端口号,内网客户端通过访问这个端口连接上 dashboard_port = 7500 # frp的web界面的端口号 dashboard_user = admin # web界面的登陆账户 dashboard_pwd = admin # web界面的登陆密码 authentication_method = token token = pass123456 # frp客户端连接时的密码, 内网客户端使用这个密码验证自己的身份

在linux中执行frps,在windows中执行frps.exe

linux中 ./frps -c frps.ini windows中 ./frps.exe -c frps.ini

如果出现下列提示信息,证明服务端已经启动

利用空闲服务器搭建frps服务端-实现穿透代理插图2

利用空闲服务器搭建frps服务端-实现穿透代理插图3

2)客户端配置

[common] server_addr = 中转服务器的公网ip authentication_method = token token = pass123456 #客户端的密码 server_port = 7000 #中转服务器的密码 [windows_hong] type = tcp local_ip = 127.0.0.1 local_port = 3389 remote_port = 33389

利用空闲服务器搭建frps服务端-实现穿透代理插图4

利用空闲服务器搭建frps服务端-实现穿透代理插图5

3)以远程连接为例

利用空闲服务器搭建frps服务端-实现穿透代理插图6 ​​​​​​​利用空闲服务器搭建frps服务端-实现穿透代理插图7

利用空闲服务器搭建frps服务端-实现穿透代理插图8

同理 ,windows可以穿透3389tcp端口,实现远程控制,而linux或者mac也可以可以支持穿透22tcp端口实现远程控制。同时也可以穿透http服务

4)服务端配置表

基础配置

参数

类型

说明

默认值

可选值

备注

bind_addr

string

服务端监听地址

0.0.0.0

bind_port

int

服务端监听端口

7000

接收 frpc 的连接

bind_udp_port

int

服务端监听 UDP 端口

0

用于辅助创建 P2P 连接

kcp_bind_port

int

服务端监听 KCP 协议端口

0

用于接收采用 KCP 连接的 frpc

proxy_bind_addr

string

代理监听地址

同 bind_addr

可以使代理监听在不同的网卡地址

log_file

string

日志文件地址

./frps.log

如果设置为 console,会将日志打印在标准输出中

log_level

string

日志等级

info

trace, debug, info, warn, error

log_max_days

int

日志文件保留天数

3

disable_log_color

bool

禁用标准输出中的日志颜色

false

detailed_errors_to_client

bool

服务端返回详细错误信息给客户端

true

tcp_mux_keepalive_interval

int

tcp_mux 的心跳检查间隔时间

60

单位:秒

tcp_keepalive

int

和客户端底层 TCP 连接的 keepalive 间隔时间,单位秒

7200

负数不启用

heartbeat_timeout

int

服务端和客户端心跳连接的超时时间

90

单位:秒

user_conn_timeout

int

用户建立连接后等待客户端响应的超时时间

10

单位:秒

udp_packet_size

int

代理 UDP 服务时支持的最大包长度

1500

服务端和客户端的值需要一致

tls_cert_file

string

TLS 服务端证书文件路径

tls_key_file

string

TLS 服务端密钥文件路径

tls_trusted_ca_file

string

TLS CA 证书路径

权限验证

参数

类型

说明

默认值

可选值

备注

authentication_method

string

鉴权方式

token

token, oidc

authenticate_heartbeats

bool

开启心跳消息鉴权

false

authenticate_new_work_conns

bool

开启建立工作连接的鉴权

false

token

string

鉴权使用的 token 值

客户端需要设置一样的值才能鉴权通过

oidc_issuer

string

oidc_issuer

oidc_audience

string

oidc_audience

oidc_skip_expiry_check

bool

oidc_skip_expiry_check

oidc_skip_issuer_check

bool

oidc_skip_issuer_check

管理配置

参数

类型

说明

默认值

可选值

备注

allow_ports

string

允许代理绑定的服务端端口

格式为 1000-2000,2001,3000-4000

max_pool_count

int

最大连接池大小

5

max_ports_per_client

int

限制单个客户端最大同时存在的代理数

0

0 表示没有限制

tls_only

bool

只接受启用了 TLS 的客户端连接

false

Dashboard, 监控

参数

类型

说明

默认值

可选值

备注

dashboard_addr

string

启用 Dashboard 监听的本地地址

0.0.0.0

dashboard_port

int

启用 Dashboard 监听的本地端口

0

dashboard_user

string

HTTP BasicAuth 用户名

dashboard_pwd

string

HTTP BasicAuth 密码

dashboard_tls_mode

bool

是否启用 TLS 模式

false

dashboard_tls_cert_file

string

TLS 证书文件路径

dashboard_tls_key_file

string

TLS 密钥文件路径

enable_prometheus

bool

是否提供 Prometheus 监控接口

false

需要同时启用了 Dashboard 才会生效

asserts_dir

string

静态资源目录

Dashboard 使用的资源默认打包在二进制文件中,通过指定此参数使用自定义的静态资源

pprof_enable

bool

启动 Go HTTP pprof

false

用于应用调试

HTTP & HTTPS

参数

类型

说明

默认值

可选值

备注

vhost_http_port

int

为 HTTP 类型代理监听的端口

0

启用后才支持 HTTP 类型的代理,默认不启用

vhost_https_port

int

为 HTTPS 类型代理监听的端口

0

启用后才支持 HTTPS 类型的代理,默认不启用

vhost_http_timeout

int

HTTP 类型代理在服务端的 ResponseHeader 超时时间

60

subdomain_host

string

二级域名后缀

custom_404_page

string

自定义 404 错误页面地址

TCPMUX

参数

类型

说明

默认值

可选值

备注

tcpmux_httpconnect_port

int

为 TCPMUX 类型代理监听的端口

0

启用后才支持 TCPMUX 类型的代理,默认不启用

tcpmux_passthrough

bool

是否透传 CONNECT 请求

false

通常在本地服务是 HTTP Proxy 时使用

客户端配置表

基础配置

参数

类型

说明

默认值

可选值

备注

server_addr

string

连接服务端的地址

0.0.0.0

server_port

int

连接服务端的端口

7000

connect_server_local_ip

string

连接服务端时所绑定的本地 IP

dial_server_timeout

int

连接服务端的超时时间

10

dial_server_keepalive

int

和服务端底层 TCP 连接的 keepalive 间隔时间,单位秒

7200

负数不启用

http_proxy

string

连接服务端使用的代理地址

格式为 {protocol}://user:passwd@192.168.1.128:8080 protocol 目前支持 http、socks5、ntlm

log_file

string

日志文件地址

./frpc.log

如果设置为 console,会将日志打印在标准输出中

log_level

string

日志等级

info

trace, debug, info, warn, error

log_max_days

int

日志文件保留天数

3

disable_log_color

bool

禁用标准输出中的日志颜色

false

pool_count

int

连接池大小

0

user

string

用户名

设置此参数后,代理名称会被修改为 {user}.{proxyName},避免代理名称和其他用户冲突

dns_server

string

使用 DNS 服务器地址

默认使用系统配置的 DNS 服务器,指定此参数可以强制替换为自定义的 DNS 服务器地址

login_fail_exit

bool

第一次登陆失败后是否退出

true

protocol

string

连接服务端的通信协议

tcp

tcp, kcp, websocket

tls_enable

bool

启用 TLS 协议加密连接

false

tls_cert_file

string

TLS 客户端证书文件路径

tls_key_file

string

TLS 客户端密钥文件路径

tls_trusted_ca_file

string

TLS CA 证书路径

tls_server_name

string

TLS Server 名称

为空则使用 server_addr

disable_custom_tls_first_byte

bool

TLS 不发送 0x17

false

当为 true 时,不能端口复用

tcp_mux_keepalive_interval

int

tcp_mux 的心跳检查间隔时间

60

单位:秒

heartbeat_interval

int

向服务端发送心跳包的间隔时间

30

建议启用 tcp_mux_keepalive_interval,将此值设置为 -1

heartbeat_timeout

int

和服务端心跳的超时时间

90

udp_packet_size

int

代理 UDP 服务时支持的最大包长度

1500

服务端和客户端的值需要一致

start

string

指定启用部分代理

当配置了较多代理,但是只希望启用其中部分时可以通过此参数指定,默认为全部启用

meta_xxx

map

附加元数据

会传递给服务端插件,提供附加能力

权限验证

参数

类型

说明

默认值

可选值

备注

authentication_method

string

鉴权方式

token

token, oidc

需要和服务端一致

authenticate_heartbeats

bool

开启心跳消息鉴权

false

需要和服务端一致

authenticate_new_work_conns

bool

开启建立工作连接的鉴权

false

需要和服务端一致

token

string

鉴权使用的 token 值

需要和服务端设置一样的值才能鉴权通过

oidc_client_id

string

oidc_client_id

oidc_client_secret

string

oidc_client_secret

oidc_audience

string

oidc_audience

oidc_token_endpoint_url

string

oidc_token_endpoint_url

oidc_additional_xxx

map

OIDC 附加参数

map 结构,key 需要以

oidc_additional_

开头

UI

参数

类型

说明

默认值

可选值

备注

admin_addr

string

启用 AdminUI 监听的本地地址

0.0.0.0

admin_port

int

启用 AdminUI 监听的本地端口

0

admin_user

string

HTTP BasicAuth 用户名

admin_pwd

string

HTTP BasicAuth 密码

asserts_dir

string

静态资源目录

AdminUI 使用的资源默认打包在二进制文件中,通过指定此参数使用自定义的静态资源

pprof_enable

bool

启动 Go HTTP pprof

false

用于应用调试

代理部分配置表,可配置(tcp, udp, http, https, stcp, sudp, xtcp, tcpmux)

通用配置

通用配置是指不同类型的代理共同使用的一些配置参数。

基础配置

参数

类型

说明

是否必须

默认值

可选值

备注

type

string

代理类型

是

tcp

tcp, udp, http, https, stcp, sudp, xtcp, tcpmux

use_encryption

bool

是否启用加密功能

否

false

启用后该代理和服务端之间的通信内容都会被加密传输

use_compression

bool

是否启用压缩功能

否

false

启用后该代理和服务端之间的通信内容都会被压缩传输

proxy_protocol_version

string

启用 proxy protocol 协议的版本

否

v1, v2

如果启用,则 frpc 和本地服务建立连接后会发送 proxy protocol 的协议,包含了原请求的 IP 地址和端口等内容

bandwidth_limit

string

设置单个 proxy 的带宽限流

否

单位为 MB 或 KB,0 表示不限制,如果启用,会作用于对应的 frpc

本地服务配置

local_ip 和 plugin 的配置必须配置一个,且只能生效一个,如果配置了 plugin,则 local_ip 配置无效。

参数

类型

说明

是否必须

默认值

可选值

备注

local_ip

string

本地服务 IP

是

127.0.0.1

需要被代理的本地服务的 IP 地址,可以为所在 frpc 能访问到的任意 IP 地址

local_port

int

本地服务端口

是

配合 local_ip

plugin

string

客户端插件名称

否

见客户端插件的功能说明

用于扩展 frpc 的能力,能够提供一些简单的本地服务,如果配置了 plugin,则 local_ip 和 local_port 无效,两者只能配置一个

plugin_params

map

客户端插件参数

否

map 结构,key 需要都以 “plugin_” 开头,每一个 plugin 需要的参数也不一样,具体见客户端插件参数中的内容

负载均衡和健康检查

参数

类型

说明

是否必须

默认值

可选值

备注

group

string

负载均衡分组名称

否

用户请求会以轮询的方式发送给同一个 group 中的代理

group_key

string

负载均衡分组密钥

否

用于对负载均衡分组进行鉴权,group_key 相同的代理才会被加入到同一个分组中

health_check_type

string

健康检查类型

否

tcp,http

配置后启用健康检查功能,tcp 是连接成功则认为服务健康,http 要求接口返回 2xx 的状态码则认为服务健康

health_check_timeout_s

int

健康检查超时时间(秒)

否

3

执行检查任务的超时时间

health_check_max_failed

int

健康检查连续错误次数

否

1

连续检查错误多少次认为服务不健康

health_check_interval_s

int

健康检查周期(秒)

否

10

每隔多长时间进行一次健康检查

health_check_url

string

健康检查的 HTTP 接口

否

如果 health_check_type 类型是 http,则需要配置此参数,指定发送 http 请求的 url,例如 “/health”

TCP

参数

类型

说明

是否必须

默认值

可选值

备注

remote_port

int

服务端绑定的端口

是

用户访问此端口的请求会被转发到 local_ip:local_port

UDP

参数

类型

说明

是否必须

默认值

可选值

备注

remote_port

int

服务端绑定的端口

是

用户访问此端口的请求会被转发到 local_ip:local_port

HTTP

custom_domains 和 subdomain 必须要配置其中一个,两者可以同时生效。

参数

类型

说明

是否必须

默认值

可选值

备注

custom_domains

[]string

服务器绑定自定义域名

是(和 subdomain 两者必须配置一个)

用户通过 vhost_http_port 访问的 HTTP 请求如果 Host 在 custom_domains 配置的域名中,则会被路由到此代理配置的本地服务

subdomain

string

自定义子域名

是(和 custom_domains 两者必须配置一个)

和 custom_domains 作用相同,但是只需要指定子域名前缀,会结合服务端的 subdomain_host 生成最终绑定的域名

locations

[]string

URL 路由配置

否

采用最大前缀匹配的规则,用户请求匹配响应的 location 配置,则会被路由到此代理

route_by_http_user

string

根据 HTTP Basic Auth user 路由

否

http_user

string

用户名

否

如果配置此参数,暴露出去的 HTTP 服务需要采用 Basic Auth 的鉴权才能访问

http_pwd

string

密码

否

结合 http_user 使用

host_header_rewrite

string

替换 Host header

否

替换发送到本地服务 HTTP 请求中的 Host 字段

headers

map

替换 header

否

map 中的 key 是要替换的 header 的 key,value 是替换后的内容

HTTPS

custom_domains 和 subdomain 必须要配置其中一个,两者可以同时生效。

参数

类型

说明

是否必须

默认值

可选值

备注

custom_domains

[]string

服务器绑定自定义域名

是(和 subdomain 两者必须配置一个)

用户通过 vhost_http_port 访问的 HTTP 请求如果 Host 在 custom_domains 配置的域名中,则会被路由到此代理配置的本地服务

subdomain

string

自定义子域名

是(和 custom_domains 两者必须配置一个)

和 custom_domains 作用相同,但是只需要指定子域名前缀,会结合服务端的 subdomain_host 生成最终绑定的域名

STCP

参数

类型

说明

是否必须

默认值

可选值

备注

role

string

角色

是

server

server,visitor

server 表示服务端,visitor 表示访问端

sk

string

密钥

是

服务端和访问端的密钥需要一致,访问端才能访问到服务端

SUDP

参数

类型

说明

是否必须

默认值

可选值

备注

role

string

角色

是

server

server,visitor

server 表示服务端,visitor 表示访问端

sk

string

密钥

是

服务端和访问端的密钥需要一致,访问端才能访问到服务端

XTCP

参数

类型

说明

是否必须

默认值

可选值

备注

role

string

角色

是

server

server,visitor

server 表示服务端,visitor 表示访问端

sk

string

密钥

是

服务端和访问端的密钥需要一致,访问端才能访问到服务端

TCPMUX

custom_domains 和 subdomain 必须要配置其中一个,两者可以同时生效。

参数

类型

说明

是否必须

默认值

可选值

备注

multiplexer

string

复用器类型

是

httpconnect

custom_domains

[]string

服务器绑定自定义域名

是(和 subdomain 两者必须配置一个)

用户通过 tcpmux_httpconnect_port 访问的 CONNECT 请求如果 Host 在 custom_domains 配置的域名中,则会被路由到此代理配置的本地服务

subdomain

string

自定义子域名

是(和 custom_domains 两者必须配置一个)

和 custom_domains 作用相同,但是只需要指定子域名前缀,会结合服务端的 subdomain_host 生成最终绑定的域名

route_by_http_user

string

根据 HTTP Basic Auth user 路由

否

5、服务端监控面板

利用空闲服务器搭建frps服务端-实现穿透代理插图9

利用空闲服务器搭建frps服务端-实现穿透代理插图10

利用空闲服务器搭建frps服务端-实现穿透代理插图11

利用空闲服务器搭建frps服务端-实现穿透代理插图12

6、总结

以上就是本期分享内容,以windows的3389远程服务端口为例,映射了3389端口到公网ip的33389实现访问公网ip访问到本地服务,当然也可以映射tcp, udp, http, https, stcp, sudp, xtcp, tcpmux服务程序,实现公网访问。

原文链接:https://blog.csdn.net/weixin_36723038/article/details/127609345

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享