frp进行内网穿透/反向代理及原理解析
一、前言
写这篇文章是想直接访问处在局域网环境,不具备公网ip的NAS系统。正巧手里头有一个阿里云的云服务器,在配置了frp内网穿透成功后,将配置教程作以记录。
在实现内网穿透之前,先确保手上有两样东西:
- 1台有公网ip的服务器
- 1台在内网的服务器(可以是虚拟机)
二、原理解析
注:有讲解错误的地方欢迎指正
1、问题
外网主机没办法直接访问到内网资源,由于NAT机制的原因
那如何能够成功访问内网?这里需要用到一个反向代理,将内网某端口转发到公网vps上,然后你对公网vps监听端口的访问就等同于对内网服务器转发出来的端口的访问
2、frp流程图
3、Frp请求原理
1)frpc启动后向frps请求建立长连接并保持,若连接失败,则重新尝试建立连接
2)frps收到请求后,建立一个listener监听公网的请求
3)客户端向frps发送请求,frps接受到请求后,发送给frpc
4)frpc收到之后向frps发送请求,并且在请求开头指明连接去向
5)frps接收到frpc的连接请求把新建立的连接和来自公网的连接进行流量相互转发
三、服务端配置
1、下载并解压
wget https://github.com/fatedier/frp/releases/download/v0.33.0/frp_0.33.0_linux_amd64.tar.gz
解包后将frps和frps.ini上传到公网VPS,frpc和frpc.ini上传到内网服务器(虚拟机)
2、配置frps.ini
[common]
#bind_port是用于和client端通信的
bind_port = 5443
kcp_bind_port = 5443
dashboard_port = 6443
#认证超时时间
authentication_timeout = 900
token = frp990103
#服务端面板登录用户名和密码
dashboard_user = admin
dashboard_pwd = frp990103
#http端口 vhost_http_port = 10080
#https端口 vhost_https_port = 10443
#最大连接数
max_pool_count = 1000
tcp_mux = true
#绑定一级域名 #subdomain_host = snut.flblog.top
3、启动
./frps -c frps.ini
4、验证是否启动成功
访问:http://服务器IP:后台管理端口” ,输入用户名和密码可以查看连接状态
四、客户端配置
1、配置frpc.ini
#客户端配置
[common]
server_addr = 服务器ip
server_port = 5443 # 与frps.ini的bind_port一致
token = frp990103 # 与frps.ini的token一致
# 配置ssh服务
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
# 这个自定义,之后再ssh连接的时候要用
# 配置http服务,可用于小程序开发、远程调试等,如果没有可以不写下面的
[web]
type = http
local_ip = 127.0.0.1
local_port = 8080
subdomain = test.hijk.pw # web域名
remote_port = 自定义的远程服务器端口,例如8080
2、启动客户端
/frpc -c frpc.ini
3、测试连接
现在就可以通过外网连接到内网的ssh了
ssh -p 6000 user@外网机器host
通过外网连接web服务:http://你的ip:端口号(8080)
还可以配置反向代理,使用域名访问内网的web服务,有需要自行百度