linux服务-frp内网穿透工具
frp内网穿透工具
参考:Frp原理分析
请求原理
-  
请求流程图

 -  
Frp请求流程
- 首先,frpc 启动之后,连接 frps,并且发送一个请求 login(),之后保持住这个长连接,如果断开了,就重试frps 收到请求之后,会建立一个 listener 监听来自公网的请求
 - 当 frps 接受到请求之后,会在本地看是否有可用的连接( frp 可以设置连接池),如果没有,就下发一个 msg.StartWorkConn 并且 等待来自 frpc 的请求
 - frpc 收到之后,对 frps 发起请求,请求的最开始会指名这个连接是去向哪个 proxy 的
 - frps 收到来自 frpc 的连接之后,就把新建立的连接与来自公网的连接进行流量互转
 - 如果请求断开了,那么就把另一端的请求也断开
 
 
安装示例
-  
下载地址:https://github.com/fatedier/frp/releases
 -  
解压并使用
~]# tar xf frp_0.21.0_linux_amd64.tar.gz ~]# cd frp_0.21.0_linux_amd64 frp_0.21.0_linux_amd64]# lsfrpc frpc_full.ini frpc.ini frps frps_full.ini frps.ini LICENSE -  
配置 frps.ini
[common] # 绑定的外网端口 bind_port = 6666 # 注意这个端口需要做NAT映射,服务端的端口 # 虚拟web主机端口,可不用配置 vhost_http_port = 6081 # 客户端认证密码 auto_token = 123456 # 服务器看板的访问端口 dashboard_port = 7500 # 通过这个端口可以看到服务的连接状态 # 服务器看板账户 dashboard_user = admin dashboard_pwd = admin
 -  
启动
]# cat /usr/local/frp/startfrp.sh #!/bin/bash # # 自启frp服务 /usr/local/frp/frps -c /usr/local/frp/frps.ini > /usr/local/frp/frps.log & echo $! > /usr/local/frp/frps.pid]# cat /usr/local/frp/stopfrp.sh #!/bin/bash # # 停止frp服务 PID=$(cat /usr/local/frp/frps.pid) kill -9 $PID rm -rf /usr/local/frp/frps.pid -  
配置frpc.ini
]# cat /usr/local/frp/frpc.ini [common] server_addr = 这里写服务端的外网地址 server_port = 666666 log_file = ./frpc.log auto_token = 服务端的密码[ssh_50000] type = tcp local_ip = 127.0.0.1 local_port = 22 # 服务端要监听的本地端口 remote_port = 50000 # 通过frp穿透服务的端口 -  
连接
]# ./frpc -c ./frpc.ini 2020/06/22 20:55:41 [I] [control.go:220] [63f674aa3fcb4587] control writer is closing 2020/06/22 20:55:41 [I] [proxy.go:73] [63f674aa3fcb4587] [ssh_50000] proxy closing 2020/06/22 20:55:41 [I] [proxy.go:119] [63f674aa3fcb4587] [ssh_50000] listener is closed 2020/06/22 20:55:41 [I] [control.go:292] [63f674aa3fcb4587] client exit success 2020/06/22 20:59:16 [I] [service.go:319] client login info: ip [1.1.1.1:1779] version [0.21.0] hostname [] os [linux] arch [amd64]]# ssh 外网地址 50000 # 也可以是其它端口或者协议 
