利用空闲服务器搭建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服务端-实现穿透代理_第1张图片

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

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服务端-实现穿透代理_第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:[email protected]: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服务程序,实现公网访问。

你可能感兴趣的:(服务器,网络,java)