什么是 TUN/TAP 以及 VPN 为什么使用它们?

TUN/TAP 设备是 VPN 客户端用来建立物理网络连接的虚拟实例的虚拟接口。

尽管彼此略有不同(因为它们工作在不同的网络层),TUN 和 TAP 设备的功能都是将数据从一台主机传递到另一台主机。

与系统中的常规网络设备(通过以太网电缆路由数据包的物理设备)不同,TUN/TAP 是一个完全虚拟的接口,它模拟操作系统内核(操作系统的一部分,在设备内存中始终处于活动状态,并完全控制系统中的所有内容)内的物理连接。

TUN/TAP 的优点是用户空间应用程序(例如 VPN 客户端)可以与这些设备进行交互,就像它们是真实的一样。这允许操作系统根据需要将数据包注入到常规网络堆栈中,从而使数据来回传递,就像正在使用物理网络设备一样。

尽管非常相似,Tun 和 Tap 设备的设计目的是在内核中实现不同的功能。提供 OpenVPN 的 VPN 客户端主要使用 TUN 设备 – 这就是为什么在安装阶段OpenVPN 客户端通常包括 TUN/TAP 驱动程序的安装。

下面,我们将仔细研究这两个虚拟接口,以解释每个设备的功能以及它如何允许 VPN 连接发生。

TUN接口

TUN 设备是在网络堆栈的第三层(IP 层)工作的虚拟点对点连接。 VPN 客户端通常使用它们在客户端和操作系统网络堆栈之间建立连接。这允许VPN 加密您的数据然后通过隧道将其转发到 VPN 服务器。

由于 TUN 工作在网络堆栈的第三层,因此它专门处理网络协议数据包(IPv4 和 IPv6 数据包)。更重要的是,由于TUN设备位于第三层,因此它们只能用于路由(不能用于桥接)。

分路接口

TAP 接口工作在网络堆栈的第二层(数据链路层),如果您想要传输基于非 IP 的流量以及想要进行桥接,那么 TAP 接口是必需的。

TAP 设备的优点在于,尽管是虚拟的,但它们的操作和行为就像真实的网络适配器一样,并且可以传输任何网络协议(IPv4、IPv6、Netalk、IPX 等)和以太网帧。

TUN/TAP 驱动程序如何提供 VPN 连接?

VPN 客户端使用 TUN 和 TAP 设备来建立隧道。如果没有这些虚拟设备的驱动程序,VPN 客户端加密的数据将无法从客户端移动到网络堆栈。对于 VPN,TAP 用于承载以太网帧并进行桥接,TUN 用于承载 IP 数据包(路由)。

值得注意的是,TUN/TAP 设备仅由某些 VPN 协议使用(例如 OpenVPN 和线卫)而不是其他(例如 IKEv2)。

在实践中,TAP 设备用于创建用户空间网桥,并充当交换机。另一方面,TUN 设备用于通过 VPN 隧道路由数据包。这使得 TUN 设备成为两者中最常用的设备,因为 VPN 客户端使用它来将加密数据传递到VPN隧道

为了使 TAP 和 TUN 设备正常工作,它们需要您的系统上存在驱动程序/适配器。好消息是,当您安装 VPN 客户端时,VPN 客户端会为您安装 TUN/TAP 驱动程序。因此,您很少需要了解这些设备,或者担心它们。

也就是说,随着时间的推移,安装了各种 VPN 客户端的用户可能会开始遇到由于存在多个 TAP 适配器而导致的错误。在这种情况下,最好卸载系统中已有的所有旧 VPN 客户端和 TUN/TAP 驱动程序。之后,只需再次安装新的 VPN 客户端,并且必要的驱动程序应该以完全正常运行的方式安装。

当 VPN 安装程序提示时,我应该安装 TUN/TAP 驱动程序吗?

是的。 TUN/TAP 驱动程序为 VPN 客户端提供数据包接收和传输,对于数据隧道传输是必需的。这些重要的驱动程序允许虚拟 TUN 和 TAP 设备充当简单的点对点或以太网设备,它们不是从物理主机接收数据包,而是从用户空间程序(VPN 客户端)接收数据包。这对于客户端的功能至关重要,您需要为您的设备安装这些驱动程序VPN软件去工作。