基于TUN设备的P2PVPN设计
Exploration of P2PVPN Ideas Based on TUN/TAP Technology
DOI: 10.12677/CSA.2023.135103, PDF, HTML, XML, 下载: 361  浏览: 439  科研立项经费支持
作者: 张百川, 康晓凤, 蔡超萍, 王 可, 杨雪艳:徐州工程学院信息工程学院(大数据学院),江苏 徐州
关键词: 虚拟私人网络Tun/Tap设备网络安全Linux网络协议栈Virtual Private Network Tun/Tap Device Cyber Security Linux Network Protocol Stack
摘要: 在大数据时代背景下,隐私保护和网络安全问题受到广泛关注。为应对挑战,本文提出了基于TUN设备的点对点虚拟专用网络(P2PVPN)设计方案,利用TUN设备构建虚拟网络接口,并采用分布式路由表管理节点间通信。该方案采用了基于ed25519非对称加密的去中心化网络节点结构,提高数据传输安全性,具备跨平台运行能力,实现高通用性。实验验证表明,该设计在性能和安全性方面优异。与传统VPN相比,P2PVPN允许用户在无需第三方服务器情况下进行点对点通信,因此可以完全抵御DoS攻击,使数据传输更加安全稳定,为用户带来灵活、可靠、高效的P2PVPN服务体验。
Abstract: Privacy protection and network security concerns have received widespread attention in the context of the big data era. This paper proposes a design scheme for a point-to-point virtual private network (P2PVPN) based on TUN devices to address these challenges. The scheme employs TUN devices to create virtual network interfaces and utilizes distributed routing tables to manage communication between nodes. In addition, the proposed solution adopts a decentralized network node structure that is based on ed25519 asymmetric encryption to enhance data transmission security. The design offers cross-platform operability and boasts high versatility. Experimental verification indicates that the proposed P2PVPN design exhibits excellent performance and security. Furthermore, in contrast to traditional VPNs, P2PVPN enables peer-to-peer communication without the need for third-party servers, rendering it impervious to DoS attacks. As a result, data transmission becomes more secure and stable, providing users with a flexible, reliable, and efficient P2PVPN service experience.
文章引用:张百川, 康晓凤, 蔡超萍, 王可, 杨雪艳. 基于TUN设备的P2PVPN设计[J]. 计算机科学与应用, 2023, 13(5): 1055-1064. https://doi.org/10.12677/CSA.2023.135103

1. 引言

近年来,随着互联网技术的快速发展,网络安全和隐私保护逐渐成为了人们关注的焦点。虽然虚拟专用网络(VPN)作为一种常用的网络安全技术,能够加密用户数据并保护网络隐私,但传统的VPN [1] 在部署、性能和抗攻击能力方面仍存在一定局限性。点对点虚拟专用网络(P2PVPN)作为一种新型的VPN技术,虽然在某些方面取得了显著的优势 [2] ,但在实际应用中仍然面临着一些问题。

现有的P2PVPN技术如在性能、安全性和跨平台兼容性等方面存在一定的不足。首先,在性能方面,n2n方案的数据传输速度和网络稳定性尚待进一步提高 [3] 。其次,在安全性方面,Wireguard在加密算法和身份验证机制上仍存在可提升的空间 [4] 。最后,在跨平台兼容性方面,NordVPN在不同操作系统和设备上的运行效果不尽如人意 [5] 。

针对现有P2PVPN技术存在的问题,本文提出了一种基于TUN设备的P2PVPN设计方案,以探究并尝试解决上述问题。首先,本文将通过优化网络架构和通信协议,提高P2PVPN的性能表现,包括数据传输速度和网络稳定性 [6] 。其次,为了增强P2PVPN的安全性,将采用基于ed25519非对称加密算法的公私钥模型的身份验证机制 [7] ,从而确保用户数据的机密性和完整性。本设计方案的创新之处在于采用了ed25519非对称加密算法,提高了数据传输的安全性。同时,该方案具备跨多个平台运行的能力,实现了高度的通用性。

本文的结构安排如下:第一部分为引言,简要介绍了研究背景、现有P2PVPN技术存在的问题以及本文的主要研究内;第二部分将阐述基于TUN设备的P2PVPN设计方案的基本概念、架构以及与传统VPN的比较;第三部分将详细描述实验过程和结果,展示本设计方案在性能和安全性方面的表现优势;最后,第四部分总结全文,回顾本设计方案的主要贡献,并探讨后续工作的可能方向。

2. 点对点虚拟私人网络简介

P2PVPN是一种点对点(P2P)架构的VPN技术,它利用加密协议在两个设备之间建立安全、加密的通信隧道,以保护它们之间的通信,适用于多种应用场景,如远程办公、加密通信、绕过特定防火墙限制等。

下面从五个方面比较P2PVPN与传统VPN:

1) 连接方式:传统VPN通常采用中央服务器来协调连接,而P2PVPN则是直接在客户端之间建立点对点的连接,不需要依赖中央服务器。

2) 数据流量:传统VPN数据流量通常需要通过VPN服务器进行转发,而P2PVPN则是直接在客户端之间传输,因此在一些特殊情况下,P2PVPN可以更加快速和高效。

3) 安全性:传统VPN和P2PVPN都可以提供安全、加密的通信隧道,以保护通信数据的安全性。不过,P2PVPN在一些场景下拥有更强大的抗攻击能力,如流量攻击场景下P2PVPN的抗攻击能力更加强大。

4) 部署成本:传统VPN需要中央服务器来协调连接,因此在部署和维护方面可能需要更多的成本和资源。而P2PVPN则是直接在客户端之间建立连接,因此部署和维护成本相对较低。

5) 灵活性:传统VPN需要中央服务器来协调连接,因此可能会受到网络拓扑和配置限制。而P2PVPN则更加灵活自由,可以适应各种不同的网络环境和拓扑结构。

3. 点对点虚拟私人网络的设计

3.1. Linux下数据包的接收过程

Figure 1. Processofpacketreceiving

图1. 数据包接收过程

Linux下数据包的接收过程如图1所示。步骤① 进行网卡的初始化操作,步骤② 当一个数据包从网络上到达网络接口卡(NIC)时,步骤③ NIC会将数据包的信息(具体数据包格式由网卡规定)通过DMA (Direct Memory Access)机制直接写入接收环形缓冲区中,步骤④ 并向主机的处理器发送一个硬件中断请求(IRQ),以通知主机有数据包到达,步骤⑤ 硬件中断程序会屏蔽该CPU上其他的硬件中断,为了减小对其他中断事件的影响,处理少量信息后将调用软中断处理程序(ksoftirq)释放对于硬件中断的屏蔽,将数据包的处理推迟到软中断的上下文中,接下来的操作都在软中断内执行,步骤⑥ 软中断处理程序(ksoftirq)会将数据包从接收环形缓冲区中取出,构建一个sk_buff数据结构,并将其提交到协议栈中。在Linux内核协议栈中,数据包将依次经过各个层次的处理,如步骤⑦ 数据链路层、步骤⑧ 网络层(IPv4/IPv6)、步骤⑨ 传输层(TCP/UDP)等,每一层都会处理数据包的相关信息,并将其传递到下一层或者丢弃/转发数据包,直到到达应用层。步骤⑩ 当数据包到达应用层时,它将被传递给相应的套接字(Socket),以供应用程序使用。

由于虚拟私人网络与IP层的路由查询密切相关,因此接下来详细介绍图1中IP层的具体处理流程(步骤⑧)。

3.2. IP层的处理流程

1) IP层路由选择(IP Layer Routing Selection)

为了将数据包正确地转发到目标地址,IP包会通过路由表按照正确的方向进行跳转。要实现这一目标,数据包必须包含源地址和目的地址。IP协议支持数据分片功能。当数据过长时,IP会将其分成多个分片并逐个发送。到达目的地时,这些分片的顺序可能与发送顺序不同,因此IP需要将这些分片重新组装成原始数据段,IP数据报文格式如图2所示。

Figure 2. Format of IP packet

图2. IP数据包格式

IP层接收数据包的目的地有两种情况:

其一为目标IP为本机,可以顺利通过本层协议栈,并交由运输层协议栈进行处理。

其二为目标IP不是本机,如果本机转发选项关闭,则将丢弃数据包,否则进行路由选择和转发。

IP层发送数据包的目的地有两种情况:

其一为目标IP位于发送计算机所连接的本地网络之一。

其二为地理位置遥远、未连接到本地网络且只能通过网关访问的计算机。

以Linux 5.10内核为例,在讨论内核中数据包路由相关的IP层代码之前,首先需要了解一个内核网络相关的非常重要的数据结构:sk_buff。

2) sk_buff结构体(sk_buff structure)

sk_buff结构体用于封装网络数据包。每当一个网络数据包进入Linux内核协议栈时,都会被封装成一个sk_buff结构体,然后在协议栈内传递和处理。该结构体中与路由相关的成员为_skb_refdst。

这个成员存储一个指针,该指针指向一个称为目的入口(dst_entry)的结构体。该结构体可以决定sk_buff数据包的最终流向——对于已经接收的sk_buff数据包而言,可以决定数据包是否应该被转发,还是交由下一层进行处理,对于将要发送的sk_buff数据包而言,可以决定数据包应该从哪个设备发出。

dst_entry结构中有两个重要的成员,分别为input和output,这两个成员都是函数指针,它们分别处理传入和传出数据包的函数指针。当网络堆栈接收到数据包并需要进行处理时,调用input所指向的函数。当网络堆栈需要传输数据包时,调用output所指向的函数。在dst_entry结构中,input和output函数指针通常在创建新的目标缓存条目时初始化。input函数指针的初始化选项如表1所示,output函数指针的初始化如表2所示。

Table 1. Callback function of input function pointer table

表1. Input函数指针回调函数表

Table 2. Callback function of output function pointer table

表2. Output函数指针回调函数表

分配给这些指针的具体函数取决于正在创建的目标缓存条目的类型和所使用的网络协议。并且,如果sk_buff有相同的目的地址,则会共享相同的det_entry。

3) IP层数据接收(Receiving Data at the IP Layer)

IP层中数据流的接收和发送的具体函数调用流程是首先IP层利用ip_rcv函数接收数据,该函数所需参数为一个sk_buff结构体,该函数中间过程会对数据包进行筛选,并查询路由表来设置数据包(sk_buff)的_skb_refdst成员,图3中的skb_dst_set函数使其指向正确的目的入口(dst_entry),最终由dst_input函数将数据发送到网络内核栈的下一层。dst_input函数仅由一条语句构成:

return skb_dst(skb)->input(skb);

skb_dst函数将数据包(sk_buff)中的_skb_refdst成员取出,该成员为指向dst_entry结构体的指针,dst_entry结构体在被初始化的时候,其input成员根据目的地址被注册指定的接收数据函数。具体函数调用如图3所示。

Figure 3. The process of calling IP layer data reception functions

图3. IP层数据接收函数调用过程

Figure 4. The process of calling IP layer data transmission functions

图4. IP层数据发送函数调用过程

4) IP层数据发送(Sending Data at the IP layer)

在IP层中,数据的发送与接收类似,但是数据的发送需要从传输层的多个模块获取数据,具体如图4所示。在应用发送数据的过程中,数据包从传输层的不同模块传递到IP层,然后数据包(sk_buf)经过路由设置,最后通过dst_output函数来将数据包从网络设备中发送出去。dst_output函数由一句代码组成,如下:

return skb_dst(skb)->output(net, sk, skb);

skb_dst函数将数据包(sk_buff)中的_skb_refdst成员取出,该成员为指向dst_entry结构体的指针,dst_entry结构体在被初始化的时候,其output成员根据目的地址被注册为指定发送函数。

3.3. TUN设备

TUN设备是一个三层的虚拟网络设备 [6] ,它的一端连接着Linux内核网络协议栈,另一端连接着用户空间,用户可以通过读写该虚拟网络设备,直接获取该设备内原始的IP报文,或者向该设备写入指定格式的信息,该信息会进入内核网络协议栈。将图1简化,并添加TUN设备后如图5所示。

Figure 5. Adding TUN device to the kernel

图5. 内核添加TUN设备

要在Linux上使用TUN设备,程序必须打开/dev/net/tun并发出相应的ioctl()以向内核注册网络设备 [7] 。网络设备将显示为tunXX,具体取决于所选的选项。当程序关闭文件描述符时,网络设备和所有相应的路由将消失。

3.4. P2PVPN的实现流程

首先,建立一个公共索引节点 [4] ,它包含所有连接到虚拟网络的设备信息。该索引节点用于辅助设备在复杂网络环境下使用技术手段进行网络穿透 [8] ,从而建立P2P隧道。

然后,P2PVPN客户端通过open(/dev/net/tun, O_RDWR)创建一个TUN设备 [9] ,利用system函数调用ifconfig工具来设置TUN设备的虚拟IP及掩码,如图5所示。并在使用execvp函数调用IP工具在主机路由表内添加路由项,该路由项的目的网络为TUN设备的虚拟IP所在的网络10.0.3.0/24,接口为TUN设备。

最后,当应用程序向虚拟私人网络发送数据时,数据包会经过路由选择进入TUN设备,其具体流程如3.2所述。P2PVPN客户端通过读取进入TUN设备的数据包,对整个数据包进行自定义加密。加密后的数据将重新经过协议栈进行封装,并且新封装的数据包的目的地址变为P2P隧道的对端设备的真实IP,最终通过物理网卡向外发出,如图6所示。

Figure 6. P2PVPN receive packet

图6. P2PVPN数据包接收

在接收数据时,物理网卡接收到数据包后,数据包经过路由选择后,判断数据包的目的地址为本机之后,将数据包向传输层呈递,直至等待Socket队列。P2PVPN通过Socket接收到该数据包,数据包的应用数据实际为加被加密后的IP层数据。P2PVPN客户端使用解密算法解密数据后,将获得一个带有虚拟IP地址的数据包,将该数据包写入TUN设备后,带有虚拟私人网络IP的数据包将进入内核协议栈,并最终被应用程序获取,如图7所示。

3.5. P2PVPN的性能比较实验

在本章节中,我们将通过不同流量下对vpn服务器进行Dos攻击中的性能测试来评估所提出的基于TUN设备的P2PVPN方案,并将其与其他常见VPN方案进行比较。我们选择了OpenVPN,IPsec(AES-GCM)两种常见的VPN方案进行性能对比,测试设备为同一网络环境下的两台Intel Core i5-8400 CPU,8 GB RAM,1 Gbps本地网络连接,测试操作系统为Ubuntu 20.04 LTS,每种VPN方案分别进行10次测试,取平均值,结果如表3所示:

Figure 7. P2PVPN send packet

图7. P2PVPN数据包接收

Table 3. Table for VPN performance

表3. Dos攻击下VPN性能比较表格

综合不同DoS攻击情况下的延迟和吞吐量测试的结果,由于基于TUN设备的P2PVPN方案的去中心化特性,攻击流量无法到达分布式节点,所以在高DoS流量攻击的情况下均表现优于其他常见VPN方案。这表明该方案能够在保证数据安全的同时,提供更高效的传输和解密处理,从而为用户带来更好的网络连接体验。

4. 结论

本文针对现有VPN技术的不足,提出了一种基于TUN设备的P2P架构VPN设计方案,通过优化网络架构、通信协议和引入ed25519非对称加密算法以及公私钥身份验证机制,实现了更高的性能、安全性和跨平台兼容性。实验验证表明,本方案在网络安全和隐私保护领域具有显著的实用性和创新价值。特别是在抵御DoS攻击方面,本文提出的P2PVPN方案表现出强大的抵抗能力,为未来进一步研究和优化P2PVPN技术提供了新思路。

致谢

本文为徐州工程学院大学生创新创业训练计划项目(xcx2022190, xcx2022192)的阶段性成果之一。

参考文献

[1] 何国彪. 去中心化可信互联网基础设施关键技术研究[D]: [博士学位论文]. 北京: 北京交通大学, 2021.
[2] Kerravala, Z. (2022) What Is a VPN? A Secure Network over the Internet. Network World (Online), 12, 12-16.
[3] 马潇潇, 蒋诚智, 赵鑫, 等. 基于零信任理念的VPN访问控制技术[J]. 集成电路应用, 2022, 39(12): 114-115.
[4] 杨波. 内网穿透技术在远程访问中的研究与实现[J]. 长江信息通信, 2022, 35(7): 102-105.
[5] 谢小峰. VPN技术在局域网中的组网的应用探讨[J]. 自动化应用, 2022(5): 68-70.
[6] 黄嘉煜. P2P网络穿透策略与优化方法研究[D]: [硕士学位论文]. 哈尔滨: 哈尔滨工业大, 2019.
[7] 陈金莲. 依托tap/tun设备分析openstack中的网络虚拟化[J]. 黄冈职业技术学院学报, 2019, 21(4): 146-147.
[8] 欧炜滨. 基于NAT穿越的P2P系统的研究和实现[D]: [硕士学位论文]. 广州: 华南理工大学, 2021.
[9] 谭海涛. Linux的TUN/TAP程序设计[C]//中国通信学会, 北方工业大学. 2007通信理论与技术新发展——第十二届全国青年通信学术会议论文集(下册). 北京: 电子工业出版社, 2007: 988-992.