内网穿透总结
外网&内网
什么是内网?(私网地址)
可以理解为学校的局域网,或者宿舍内的WIFI,同一局域网内主机IP互不相同,但不同局域网内的主机IP可以相同(这也就是为什么要做内网穿透,因为不知道该去哪里找目标IP),而且内网IP是动态的,不是固定的。
如何辨别内网IP?
IPv4 将IP划分成了A,B,C,D,E 五类地址 参考IP地址划分
A,B,C类地址中的一部分被拿出来作为了内网地址,具体如下
A类地址:10.0.0.0~10.255.255.255
B类地址:172.16.0.0 ~172.31.255.255
C类地址:192.168.0.0~192.168.255.255
什么是外网?(公网地址)
外网的设备的IP是唯一的,不可能找到两台外网设备具有同一IP,比如一台公网服务器。
内网是如何上网的?
私网地址是不能直接上网的,我们的手机流量或者宿舍的路由器,其实是通过运营商提供的公网地址间接上网的(可以理解为一个公网地址让其下面的私网地址具备了上网能力),具体原理可参考内网和外网之间的通信,一句话概括的话就是公网IP将其下的端口映射给他下面的内网地址。
私网地址这么麻烦为什么要用?
最重要的原因是IPV4地址不够用了,IPV4标准下,IP地址有四段,每段8位,也就是共有32位。可以算出可以提供2^32个不同的地址(4294967296个)看起来很多,实际上远远不够用,而且被美国等占据了大多数,因此提出了私网地址,以缓解IP地址不够用的困境。
另一方面进行内网划分也可以增强安全性。
IPV6的提出及困境
为了增大IP地址范围,1994年便提出了IPV6标准,使用128位来表示IP,也就是IP数量达到了2^128,据说能给地球上的所有沙子都分配一个地址。可见IPV6是足够人类使用的,但是缺迟迟得不到推广。原因在于NAT技术的发展暂时解决了IP的数量限制,而且从IPV4转换到V6也比较困难。详见IPV6取代IPV4之路 为何道阻且长?
内网穿透
也叫NAT穿透,是指计算机在内网(局域网)内使用私有IP地址,在连接外网(互联网)时使用全局IP地址的技术。
内网穿透应用场景
举个例子,如果我的电脑放在了宿舍(假设处于开机状态,且连接WIFi),而我在其他地方突然需要使用电脑上的资料,但是由于电脑在宿舍的局域网内,不具有公网IP,我是无法连接到电脑的。然而,如果我在上面做了内网穿透,就可以通过一个绑定的域名访问到内网的设备。
实践
能够实现内网穿透的工具有很多,比如frp,natapp,花生壳,SuiDao等等这里根据两个使用场景选用了两个还不错的进行介绍。(均对HTTP服务进行穿透,TCP,UDP等类似)
具备公网服务器–frp
适合场景:
服务器端
- 首先下载适合服务器端系统的压缩包,将其解压到合适的路径。
- 修改frps.ini 文件选择的端口可自定义(但也不要选择已经被占用的端口啊啊啊),但记得对端口进行放行(如果你配置完发现不能用,很有可能是没有放行相关端口)
bind_port = 2345
vhost_http_port = 8001 - 启动服务 :在安装目录下输入命令
./frps -c ./frps.ini
内网电脑
- 下载适合自己电脑的压缩包(一般都是windows叭)
- 修改frpc.ini文件
server_addr = 服务器IP
server_port = 2345(与上面的bind_port相对应)
[web]
type = http
local_ip = 192.168.3.43(本机的话就是127.0.0.1就好了,我这里是穿透到了同一局域网内的esp8266)
local_port = 80 (对应HTTP服务)
custom_domains = 自己的域名 - 将域名解析到服务器IP(域名购买商会提供服务,比如我的是在阿里云买的,就可以在阿里云进行解析)
- 启动服务
./frpc -c ./frpc.ini
注意这里时frpc代表客户端,俄日frps代表服务端 - 成功启动后命令行会提示连接成功
- 通过 绑定的域名+端口(vhost_http_port)即可访问内网服务,如xxx.com:8001
配置成服务
由于现在是在命令行启动,一旦关闭命令行服务也会停止,可以注册成服务,比如linux可以使用Spuervisor进行进程守护,windows可以使用NSSM注册成服务。(其实就是写一段启动命令,注意注册服务时要写绝对路径,比如我的服务器上安装目录在home/frp/下就要写:home/frp/frps -c home/frp/frps.ini
windows同理,但可能需要将frpc的扩展名补充上去(.exe))
问题自查:
- 端口是否放行
- 域名是否解析
- 服务是否启动
- 端口是否冲突
- IP是否填写正确
不具备公网服务器–SuiDao
是一个基于开源FastTunnel免费内网穿透服务,会免费提供给你域名及服务器
适用场景:
- 不具备外网服务器
- 需求访问量较小
注册及登录
创建隧道
填写服务器所在地,隧道类型,子域名,内网IP,端口(http是80端口)
去个人中心复制AccessKey
下载客户端
根据系统条件选择合适的客户端
启动客户端
启动后会提示你输入AccessKey,将刚刚复制的粘贴进去就好了。
测试
使用刚刚设定的域名进行访问
配置自己的域名
如果有自己的域名,可以将域名解析到上面分配的域名上去,具体方法:
- 通过ping 刚刚获得的域名得到改域名指向的IP地址
- 将自己的域名解析到此IP地址。