在绝大多数场景下, 我们提到VPN, 实际上是代指访问外网. 其实, VPN和我们平时使用的软件有着本质的区别.
能够实现外网访问功能的软件总共有两种类型 : VPN, 代理.
代理软件其实还可以细分为 TUN/TAP代理和系统代理 两种. 接下来的内容中, 我们会一一详细介绍.

一 什么是VPN

VPN的全称是Virtual Private Network, 中文名称是 虚拟私域网络. VPN出现的主要原因是为了将不同局域网连接起来,组成新的局域网.
初次接触这个概念可能会有点懵, 我们来仔细说说.

1 案例

我们举个例子, 公司有一台服务器, 在局域网中的IP地址是192.168.1.10. 我们连接上公司的网络之后, 通过这个IP地址就能访问到这台服务器.

但是一旦我们回到家中, 就没有办法访问这台服务器了. 原因就是电信运营商根本不知道192.168.1.10这个地址在哪.

2 解决方案

想要解决这个问题, 有两种方案.

方案一 : 配置公网IP

给服务器购买一个公网IP, 这样, 公司的这台服务器就能在被公司外部的网络访问到了.

这种方式是非常不靠谱的. 公司那么多服务器, 不可能每台都购买一个公网IP, 有钱也不能这么花. 而且, 将公司的设备直接暴露在公网中, 会增加被攻击的风险.

方案二 : VPN组网

简单来说, VPN组网的原理是用一台拥有公网IP的服务器作为中间人, 多个局域网都和中间人进行互通. 当一个局域网中的设备访问另外一个局域网中的设备时, 会先将请求转发给中间人, 中间人在分析路由之后, 再将请求转发到真实的目的地.

通过一系列的复杂操作, 我们实现了多个局域网之间的互通. 将广域网中的多个局域网组成了一个更大的局域网. 这个新的局域网内部是互通的, 但是对外屏蔽.

因为VPN中的多个局域网之间通信是利用了广域网的线路, 所有, 局域网之间的通信是严格加密的.

这就是所谓的虚拟私域网络. VPN主要用于大型公司多个子公司之间的保密通信.

3 总结

当我们拥有一台处于墙外的服务器作为中间人, 将自身所在的局域网和墙外的广域网进行组网之后, 就能够实现访问外网的需求. 但是, 我们也能明显看出来, VPN并不是为了访问外网而生的. 这只是其衍生功能而已.

VPN的技术难度非常高, 对于大部分人, 根本不具备这个条件. 而且通信速度较慢.

二 什么是代理

使用一台新的设备, 帮助当前设备完成所有的网络通信, 这种技术我们称之为代理

1 解释

正常的生活中, 我们想要购买商品, 就需要自己跑到商店, 提出要求, 然后商店老板会将商品交给我们.

这个过程中, 我们跟商店老板之间是信息公开的, 他是知道是谁买的商品.

如果我们要买的商品比较隐私, 害怕别人知道, 那该怎么办呢?

很简单, 我们可以找一个人, 帮我们去买. 这样商店老板就不知道其实是我们购买的商品. 帮我们跑腿的这个人, 就称之为代理人.

网络访问中也是一样, 个人电脑想要跟目标服务器通信, 就需要先跟目标服务器建立连接, 然后相互传输数据. 这时,目标服务器清楚的知道是个人电脑在跟他通信.

如果我们在中间加了一台服务器作为代理服务器, 当个人电脑想跟目标服务器通信的时候, 先将目标服务器的地址告诉代理服务器, 让他跟目标服务器建立连接. 然后个人电脑再将通信的数据交给代理服务器, 让他转交给目标服务器.

这样也能实现跟目标服务器的沟通. 而且目标服务器并不知道, 其实是个人电脑在跟他通信.

说了这么多, 其实就是想告诉大家, 代理技术就是利用代理人跟外部沟通, 从而隐藏自身信息. 降低暴露的风险.

2 总结

代理技术的重点在于请求的转发 : 从个人电脑转发到代理服务器, 从代理服务器转发到目标服务器.

其主要目的是为了隐私保护. 整个通信流程其实可以不用加密, 整体的通信效率相较于VPN要高很多.

当然, 如果我们有一台位于墙外的服务器作为代理服务器, 也能够实现访问外网的需求. 但为了避开监管, 就必须要对数据进行加密.

市面上的所有VPN软件, 虽然名字叫VPN, 但是使用的都是代理技术.

这里还有一个重要问题, 如何将个人电脑的请求交个代理代理服务器处理呢 ?

主要有两种方案 : TUN/TAP代理, 系统代理.

我们接下来继续为大家介绍.

三 TUN/TAP代理

TUN : tunnel 隧道
TAP : network tap 桥接

1 解释

这种技术的重点在于在个人电脑中建立一张虚拟网卡. 我们都知道, 电脑中的数据想要发送出去, 肯定需要依赖网卡, 所有的数据都必须要经过网卡才行. 利用这一点, 就能完成流量的收集转发.

具体实施步骤是 :

  1. 们先在电脑中创建了一张虚拟网卡, 设定路由, 将电脑的流量都指向虚拟网卡. 虚拟网卡再指向物理网卡.
  2. 然后启动软件, 对虚拟网卡接收到的数据进行封装, 重新设定目的地为代理服务器. 之后将封装过的数据还给虚拟网卡. 虚拟网卡会继续将数据交给物理网卡. 这时, 物理网卡就会将数据发送到代理服务器上.
  3. 代理服务器在收到数据之后进行解封, 获取到原始的数据, 从原始数据中我们能够获取到真实的目标服务器地址, 最后将数据发送过去即可.

2 总结

TUN和TAP的区别在于收集数据的层级不一样, TUN是在网络层收集数据, TAP是在数据链路层收集数据. 在实际使用中区别不大. 而且都是依赖虚拟网卡工作. 所以被归为一类.

TUN/TAP代理几乎可以收集个人电脑中的所有网络请求. 在移动端也能完美支持. 市面上的大部分加速器就是使用的这种技术.

想要读取虚拟网卡的数据, 就必须要调用平台自身的API, 也就是说, 想要开发一款TUN/TAP代理软件, 就必须要使用平台自身的语言. 比如说MacOS的 Swift 语言, Windows的 .Net 语言, 安卓的 Kotlin 语言, 第三方语言无法使用.

所以软件的开发难度较大, 尤其是在跨平台的情况下, 需要程序员会多门语言.

四 系统代理

每个操作系统有预先设定了代理功能. 一般我们只需要填写上代理服务器的ip地址和端口号, 操作系统就能帮我们将个人电脑的请求转发到代理服务器. 省去了创建虚拟网卡, 封装数据的过程.

1 执行流程

  1. 当我们开启了操作系统的代理功能之后, 一旦操作系统发现有请求发出, 就会先阻拦住请求.
  2. 操作系统跟代理服务器进行沟通, 先将本次请求的目的地址发送给代理服务器, 然后再将数据发送给代理服务器.
  3. 代理服务器在收到目的地信息之后, 和目标服务器建立连接. 在收到通信数据之后, 转发给目标服务器即可.

2 总结

系统代理的操作和开发难度极低. 开发者只需要将注意力放在代理服务器上. 在代理服务器上实现接收数据, 转发数据的功能即可.

而且, 如果想要开发自己的软件, 只需要会一门语言即可. 像Java, Go, JS这种第三方语言都能轻松开发自己的代理软件.

当然, 有利就有弊, 这种方案的弊端也很大.

  1. 无法收集所有的请求. 只有那些使用系统语言开发的软件, 或者使用第三方语言开发的软件进行了特殊设置, 支持系统代理功能. 才能被系统代理转发.
    比如说在Window平台上, 我们可以使用Java, Go 等其他第三方语言开发桌面应用. 但这些语言开发的软件如果没有特殊设置, 就不支持系统代理. 从这些软件中发出的网络请求就无法被系统代理拦截转发.
  2. 部分操作系统支持的代理协议版本较低, 无法代理udp协议的请求
    比如说Window11就只支持socks4代理协议, 这种协议是不支持UDP协议的
  3. 对移动端的支持极差.

这种方案只适用于那些平时访问外网时以浏览器为主(浏览器完美支持系统代理), 或者使用少部分系统自带的软件的用户.

当然, 平台不同, 对系统代理的支持也不同, 比如说MacOS系统中, 绝大部分软件都是使用平台语言开发的, 都能使用系统代理. 但是Windows中的情况就是反过来的.

五 区别

我们从开发难度, 网络通信速度, 数据收集率 , 是否可以自定义加密对以上几种方案进行总结.

(这里, 如果软件可以自定义加密方式, 就能极大的提升通信速度)

名称 开发难度 网络通信速度 数据收集率 是否能自定义加密
VPN 完全
TUN/TAP代理 完全
系统代理 部分