0%

内网穿透

内网穿透总结

外网&内网

什么是内网?(私网地址)

可以理解为学校的局域网,或者宿舍内的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

适合场景:

  • 具有一台公网服务器(阿里云,腾讯云等等)
  • 有自己的域名
  • 会使用基本的linux命令
  • 能够看懂文档,出现问题能通过文档自行解决。

    github地址
    官方文档
    下载地址

服务器端

  1. 首先下载适合服务器端系统的压缩包,将其解压到合适的路径。
  2. 修改frps.ini 文件
    bind_port = 2345
    vhost_http_port = 8001
    选择的端口可自定义(但也不要选择已经被占用的端口啊啊啊),但记得对端口进行放行(如果你配置完发现不能用,很有可能是没有放行相关端口)
  3. 启动服务 :在安装目录下输入命令 ./frps -c ./frps.ini

内网电脑

  1. 下载适合自己电脑的压缩包(一般都是windows叭)
  2. 修改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 = 自己的域名
  3. 将域名解析到服务器IP(域名购买商会提供服务,比如我的是在阿里云买的,就可以在阿里云进行解析)
  4. 启动服务 ./frpc -c ./frpc.ini 注意这里时frpc代表客户端,俄日frps代表服务端
  5. 成功启动后命令行会提示连接成功
  6. 通过 绑定的域名+端口(vhost_http_port)即可访问内网服务,如xxx.com:8001

配置成服务

由于现在是在命令行启动,一旦关闭命令行服务也会停止,可以注册成服务,比如linux可以使用Spuervisor进行进程守护,windows可以使用NSSM注册成服务。(其实就是写一段启动命令,注意注册服务时要写绝对路径,比如我的服务器上安装目录在home/frp/下就要写:home/frp/frps -c home/frp/frps.ini windows同理,但可能需要将frpc的扩展名补充上去(.exe))

问题自查:

  1. 端口是否放行
  2. 域名是否解析
  3. 服务是否启动
  4. 端口是否冲突
  5. IP是否填写正确

不具备公网服务器–SuiDao

是一个基于开源FastTunnel免费内网穿透服务,会免费提供给你域名及服务器
适用场景:

  1. 不具备外网服务器
  2. 需求访问量较小

注册及登录

注册称为https://suidao.io/的用户

创建隧道

img

填写服务器所在地,隧道类型,子域名,内网IP,端口(http是80端口)

去个人中心复制AccessKey

下载客户端

根据系统条件选择合适的客户端

启动客户端

启动后会提示你输入AccessKey,将刚刚复制的粘贴进去就好了。

测试

使用刚刚设定的域名进行访问

配置自己的域名

如果有自己的域名,可以将域名解析到上面分配的域名上去,具体方法:

  1. 通过ping 刚刚获得的域名得到改域名指向的IP地址
  2. 将自己的域名解析到此IP地址。