一、内网穿透
穿透原理
NAT211.133.和NAT211.134.之间需要进行通信,但开始不能直接就发数据包,我们需要一个中间人,这个就是外部索引服务器(我们假设是211.135.:7000),当NAT211.133.向211.135.:7000发送数据包,211.135.:7000是可以正常接收到数据,因为它是属于对外型开放的服务端口。当211.135.*:7000收到数据包后可以获知NAT211.133.*对外通信的临时SESSION信息(这个临时的端口,假设是6000会过期,具体的时间不同,但我个人的测试是每30秒发送一个心跳包keep住连接以保证端口维持住通信连接不断开),索引服务器此时应将此信息保存起来。而同时,NAT211.134.*也在时刻向索引服务器发送心跳包,索引服务器就向NAT211.134.发送一个通知,让它向NAT211.133.:6000发送探测包(这个数据包最好多发几个),NAT211.134.在收到通知包之后再向索引服务器发送反馈包,说明自己已经向NAT211.133.:6000发送了探测包,索引服务器在接收到反馈包之后再向NAT211.133.*转发反馈包,NAT211.133.*在接收到数据包之后再向原本要请求的NAT211.134.*发送数据包,此时连接已经打通,实现穿透,NAT211.134.*会将信息转发给192.168.1.88的9000端口
二、流程图
三、搭建流程
1、linux(vps,其他服务的)做中转,搭建frpc服务端
下载地址:https://github.com/fatedier/frp/releases
2、下载安装包,解压 0.3版本的
wget https://github.com/fatedier/frp/releases/download/v0.30.0/frp_0.30.0_linux_amd64.tar.gz
tar -zxvf frp_0.30.0_linux_amd64.tar.gz
3、服务端配置文件
vi frps.ini //s代表服务端
#frps.ini内容
[common]
bind_port=7000 #frp占用端口
vhost_http_port=80 #对外开放的http端口,外网从这里进入http服务
[web]
type=http
custom_domains=你的域名或者ip
#启动服务
./frps -c ./frps.ini
#服务启动成功
2019/12/11 13:25:14 [I] [service.go:141] frps tcp listen on 0.0.0.0:7000
2019/12/11 13:25:14 [I] [service.go:183] http service listen on 0.0.0.0:80
2019/12/11 13:25:14 [I] [root.go:205] start frps success
2019/12/11 13:25:28 [I] [service.go:372] [3c9cd533f7bab9e9] client login info: ip [171.84.5.2:50916] version [0.30.0] hostname [] os [windows] arch [amd64]
3、客户端配置(我用的是windows)
windows地址,直接下载解压就好:https://github.com/fatedier/frp/releases/download/v0.30.0/frp_0.30.0_windows_amd64.zip
#frpc.ini c-->客户端
[common]
server_addr = 中转服务的ip公网地址 或者 绑定好的域名
server_port = 7000
[web]
type = http
local_ip = 127.0.0.1
local_port =8080 //本地待访问服务的端口
custom_domains = gojw.xyz //中转服务的ip公网地址 或者 绑定好的域名
回车运行
四、测试
访问公网ip或者绑定ip的域名
直接出现本地资源的内容