在绝大多数场景下, 我们提到VPN, 实际上是代指访问外网. 其实, VPN和我们平时使用的访问外网的软件有着本质的区别.


(资料图)

能够实现外网访问功能的软件总共有两种类型 : VPN, 代理.

代理软件其实还可以细分为 TUN/TAP代理和系统代理 两种. 接下来的内容中, 我们会一一详细介绍.

一. 什么是VPN

VPN的全称是Virtual Private Network, 中文名称是 虚拟私域网络. VPN出现的主要原因是为了将不同局域网连接起来,组成新的局域网.

初次接触这个概念可能会有点懵, 我们来仔细说说.

1. 案例

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

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

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. 解释

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

具体实施步骤是 :

我们先在电脑中创建了一张虚拟网卡, 设定路由, 将电脑的流量都指向虚拟网卡. 虚拟网卡再指向物理网卡.

然后启动软件, 对虚拟网卡接收到的数据进行封装, 重新设定目的地为代理服务器. 之后将封装过的数据还给虚拟网卡. 虚拟网卡会继续将数据交给物理网卡. 这时, 物理网卡就会将数据发送到代理服务器上.

代理服务器在收到数据之后进行解封, 获取到原始的数据, 从原始数据中我们能够获取到真实的目标服务器地址, 最后将数据发送过去即可.

2. 总结

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

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

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

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

四. 系统代理

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

1. 执行流程

当我们开启了操作系统的代理功能之后, 一旦操作系统发现有请求发出, 就会先阻拦住请求.

操作系统跟代理服务器进行沟通, 先将本次请求的目的地址发送给代理服务器, 然后再将数据发送给代理服务器.

代理服务器在收到目的地信息之后, 和目标服务器建立连接. 在收到通信数据之后, 转发给目标服务器即可.

2. 总结

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

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

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

无法收集所有的请求. 只有那些使用系统语言开发的软件, 或者使用第三方语言开发的软件进行了特殊设置, 支持系统代理功能的软件. 才能被系统代理转发

比如说在Window平台上,  我们可以使用Java, Go 等其他第三方语言开发桌面应用. 但这些语言开发的软件如果没有特殊设置, 就不支持系统代理. 从这些软件中发出的网络请求就无法被系统代理拦截转发.

部分操作系统支持的代理协议版本较低, 无法代理udp协议的请求

比如说Window11就只支持socks4代理协议, 这种协议是不支持UDP协议的

对移动端的支持极差.

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

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

五. 区别

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

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

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

我在B站上一堂专门讲解http/socks代理的课程, 同时讲解如何将第三方语言开发的软件封装成桌面应用, 感谢大家的支持. /cheese/play/ss3815


关键词: