「linux」frp内网穿透配置
版本:frp_0.32.0_linux_amd64.tar
下载链接:https://pan.baidu.com/s/1y77sso0fvAX2tvsm3ac7Ew
提取码:jhce
文件存放路径: /usr/local/program //路径无所谓
1、准备工作
上传文件至 /usr/local/program
解压文件
重命名文件夹
删除客户端使用配置文件
1 |
|
2、修改服务端配置文件
官方说明地址: https://github.com/fatedier/frp/blob/master/README_zh.md
frps.ini内容:
1 |
|
3、启动服务端配置
1 |
|
4、客户端配置 //映射的内网主机
客户端和服务端一样准备工作,
修改 frpc.ini 文件,假设 frps 所在服务器的公网 IP 为 x.x.x.x:
注意,
local_port
(客户端侦听)和remote_port
(服务器端暴露)是用来出入 frp 系统的两端,server_port
则是服务器用来与客户端通讯的。
1 |
|
5、启动客户端配置
1 |
|
6、其他可选配置
6.1 服务端网页监控启用
需要在 frps.ini 中指定 dashboard 服务使用的端口,即可开启此功能:
1 |
|
打开浏览器通过
http://[server_addr]:7500
访问 dashboard 界面,用户名密码默认为admin
。
6.2 客户端网页监控启动
需要在 frpc.ini 中指定 admin 服务使用的端口,即可开启此功能:
1 |
|
打开浏览器通过 http://127.0.0.1:7400
访问 Admin UI,用户名密码默认为 admin
。
如果想要在外网环境访问 Admin UI,将 7400 端口映射出去即可,但需要重视安全风险。
6.3 客户端身份验证
目前 frpc 和 frps 之间支持两种身份验证方式,token
和 oidc
。
以下使用token验证方式:
配置token验证方式:
frps.ini
中 [common]
section 的 authentication_method
参数配置需要使用的验证方法。
1 |
|
frpc.ini启用 token
1 |
|
6.4 端口白名单- 端口安全
需要在 frps.ini 中添加客户端允许使用端口或端口组:这里的端口为服务器的端口
1 |
|
allow_ports
可以配置允许使用的某个指定端口或者是一个范围内的所有端口,以,
分隔,指定的范围以-
分隔。
6.5 范围端口映射
在 frpc 的配置文件中可以指定映射多个端口,目前只支持 tcp 和 udp 的类型。
这一功能通过 range:
段落标记来实现,客户端会解析这个标记中的配置,将其拆分成多个 proxy,每一个 proxy 以数字为后缀命名。
例如要映射本地 6000-6005, 6007 这6个端口,主要配置如下:
1 |
|
实际连接成功后会创建 8 个 proxy,命名为 test_tcp_0, test_tcp_1 ... test_tcp_7
。
6.6 日志记录
可在服务端及客户端配置:
1 |
|
6.7 开机自启动
后台应用
服务端
1 |
|
客户端:
1 |
|
服务端复制frp目录下systemd/frps.service
至系统目录/etc/systemd/system/
1 |
|
内容:
1 |
|
启动&开机启动
1 |
|
客户端复制frp目录下systemd/frpc.service
至系统目录/etc/systemd/system/
1 |
|
内容:
1 |
|
启动&开机启动
1 |
|
6.8 底层通信可选 kcp 协议
服务器带宽允许的情况下可开启kcp协议, 可以以10%-20%的带宽的代价,换取平均延迟降低 30%-40%
底层通信协议支持选择 kcp 协议,在弱网环境下传输效率提升明显,但是会有一些额外的流量消耗。
开启 kcp 协议支持:
- 在 frps.ini 中启用 kcp 协议支持,指定一个 udp 端口用于接收客户端请求:
1 |
|
- 在 frpc.ini 指定需要使用的协议类型,目前只支持 tcp 和 kcp。其他代理配置不需要变更:
1 |
|
- 像之前一样使用 frp,需要注意开放相关机器上的 udp 的端口的访问权限。
拓展知识:
KCP介绍
1 简介
KCP是一个快速可靠协议,能以比 TCP浪费10%-20%的带宽的代价,换取平均延迟降低 30%-40%,且最大延迟降低三倍的传输效果。纯算法实现,并不负责底层协议(如UDP)的收发,需要使用者自己定义下层数据包的发送方式,以 callback的方式提供给 KCP。 连时钟都需要外部传递进来,内部不会有任何一次系统调用。
2 技术特性
TCP是为流量设计的(每秒内可以传输多少KB的数据),讲究的是充分利用带宽。而 KCP是为流速设计的(单个数据包从一端发送到一端需要多少时间),以10%-20%带宽浪费的代价换取了比 TCP快30%-40%的传输速度。TCP信道是一条流速很慢,但每秒流量很大的大运河,而KCP是水流湍急的小激流。KCP有正常模式和快速模式两种,通过以下策略达到提高流速的结果:
RTO翻倍vs不翻倍:
TCP超时计算是RTOx2,这样连续丢三次包就变成RTOx8了,十分恐怖,而KCP启动快速模式后不x2,只是x1.5(实验证明1.5这个值相对比较好),提高了传输速度。
选择性重传 vs 全部重传:
TCP丢包时会全部重传从丢的那个包开始以后的数据,KCP是选择性重传,只重传真正丢失的数据包。
快速重传:
发送端发送了1,2,3,4,5几个包,然后收到远端的ACK: 1, 3, 4, 5,当收到ACK3时,KCP知道2被跳过1次,收到ACK4时,知道2被跳过了2次,此时可以认为2号丢失,不用等超时,直接重传2号包,大大改善了丢包时的传输速度。
延迟ACK vs 非延迟ACK:
TCP为了充分利用带宽,延迟发送ACK(NODELAY都没用),这样超时计算会算出较大 RTT时间,延长了丢包时的判断过程。KCP的ACK是否延迟发送可以调节。
UNA vs ACK+UNA:
ARQ模型响应有两种,UNA(此编号前所有包已收到,如TCP)和ACK(该编号包已收到),光用UNA将导致全部重传,光用ACK则丢失成本太高,以往协议都是二选其一,而 KCP协议中,除去单独的 ACK包外,所有包都有UNA信息。
非退让流控:
KCP正常模式同TCP一样使用公平退让法则,即发送窗口大小由:发送缓存大小、接收端剩余接收缓存大小、丢包退让及慢启动这四要素决定。但传送及时性要求很高的小数据时,可选择通过配置跳过后两步,仅用前两项来控制发送频率。以牺牲部分公平性及带宽利用率之代价,换取了开着BT都能流畅传输的效果。
作者:hexg1016
链接:https://www.jianshu.com/p/28d4b02e7eb4
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
7、管理页面
服务器管理页面: http://remote主机:7500
客户端管理页面(只能在内网服务端使用): http://localhostIP:7400
二、其他配置
1、安全地暴露内网服务 //暂时不使用, 若存在数据安全或其他重要信息访问可使用
对于某些服务来说如果直接暴露于公网上将会存在安全隐患。
使用 stcp(secret tcp) 类型的代理可以避免让任何人都能访问到要穿透的服务,但是访问者也需要运行另外一个 frpc。
以下示例将会创建一个只有自己能访问到的 ssh 服务代理。
frps 的部署步骤同上。
- 启动 frpc,转发内网的 ssh 服务,配置如下,不需要指定远程端口:
1 |
|
- 在要访问这个服务的机器上启动另外一个 frpc,配置如下:
1 |
|
- 通过 ssh 访问内网机器,假设用户名为 test:
1 |
|
2、加密与压缩 //防火墙对流量对SSH流量启用了过滤, 可以使用这种方式
这两个功能默认是不开启的,需要在 frpc.ini 中通过配置来为指定的代理启用加密与压缩的功能,压缩算法使用 snappy:
1 |
|
如果公司内网防火墙对外网访问进行了流量识别与屏蔽,例如禁止了 ssh 协议等,通过设置 use_encryption = true
,将 frpc 与 frps 之间的通信内容加密传输,将会有效防止流量被拦截。
如果传输的报文长度较长,通过设置 use_compression = true
对传输内容进行压缩,可以有效减小 frpc 与 frps 之间的网络流量,加快流量转发速度,但是会额外消耗一些 cpu 资源。
3、代理限速
目前支持在客户端的代理配置中设置代理级别的限速,限制单个 proxy 可以占用的带宽。
1 |
|
在代理配置中增加 bandwidth_limit
字段启用此功能,目前仅支持 MB
和 KB
单位。
4、负载均衡 //为远程端口启用开启备用服务, 使用group 1个远端端口绑定多个客户端口
可以将多个相同类型的 proxy 加入到同一个 group 中,从而实现负载均衡的功能。
目前只支持 TCP 和 HTTP 类型的 proxy。
1 |
|
用户连接 frps 服务器的 80 端口,frps 会将接收到的用户连接随机分发给其中一个存活的 proxy。这样可以在一台 frpc 机器挂掉后仍然有其他节点能够提供服务。
TCP 类型代理要求 group_key
相同,做权限验证,且 remote_port
相同。
HTTP 类型代理要求 group_key, custom_domains 或 subdomain 和 locations
相同。
5、健康检查 //配合负载均衡使用, 频次检查端口是否在线
5、健康检查
通过给 proxy 加上健康检查的功能,可以在要反向代理的服务出现故障时,将这个服务从 frps 中摘除,搭配负载均衡的功能,可以用来实现高可用的架构,避免服务单点故障。
在每一个 proxy 的配置下加上 health_check_type = {type}
来启用健康检查功能。
type 目前可选 tcp 和 http。
tcp 只要能够建立连接则认为服务正常,http 会发送一个 http 请求,服务需要返回 2xx 的状态码才会被认为正常。
tcp 示例配置如下:
1 |
|
http 示例配置如下:
1 |
|