VPN
VPN 概述
VPN是Virtual Private Network(虚拟私人网络)的缩写,它是一种通过公用网络(如互联网)建立起加密隧道的技术,用于实现远程访问、数据加密和匿名性保护等功能。
VPN技术通常采用三个组件:客户端、VPN服务器和协议。
- 客户端是安装在用户设备上的应用程序,用于与VPN服务器建立连接。
- VPN服务器是一个位于公共网络上的服务器,它负责加密和解密数据,并充当用户和Internet之间的网关。
- 协议是用于控制和管理数据传输的规则和流程。
使用VPN可以带来多种好处,包括:
- 保护隐私:VPN可以加密您的数据传输,使您的在线活动更加安全和私密。这对于那些希望在互联网上匿名或保护个人隐私的人来说非常有用。
- 访问限制网站:VPN可以帮助您访问受限制的网站或应用程序,例如某些国家或地区的在线服务,或者受到学校或公司网络限制的网站。
- 远程访问:VPN可以使用户从远程地方访问他们的公司网络,从而方便远程办公。
- 避免监视和审查:VPN可以帮助您避免被政府、ISP、雇主等实体监视和审查,从而保护您的在线隐私。
- 提高速度和稳定性:使用VPN可以避免ISP限制带宽和降低连接速度的问题,从而提高网络速度和稳定性。
当然,VPN也存在一些缺点,例如:
- 可能会降低网络速度、可能会受到防火墙和其他安全措施的限制等。
- 但总的来说,VPN是一种非常有用的技术,可以帮助保护您的在线隐私,并提供更安全和方便的网络体验。
以下是一些流行的开源VPN应用:
- OpenVPN: OpenVPN是一种开放源代码的VPN解决方案,可用于安全远程访问,站点到站点通信和Wi-Fi安全。它使用SSL / TLS协议和加密算法来提供强大的安全性。 OpenVPN支持多种操作系统,包括Windows,Linux,MacOS等。
- WireGuard: WireGuard是一种轻量级的VPN协议,具有高速性,强大的加密性和低资源占用率。它支持多种操作系统,包括Linux,Windows,macOS,Android和iOS。 WireGuard是基于内核模块实现的,这使得它在网络安全性和性能方面具有优势。
- SoftEther VPN: SoftEther VPN是一种开源,跨平台的VPN解决方案,可用于远程访问,站点到站点连接和安全通信。它支持多种协议,包括OpenVPN,L2TP / IPsec,SSTP和SoftEther VPN协议。 SoftEther VPN具有高速性,可靠性和强大的安全性。
- StrongSwan: StrongSwan是一种开源的IPsec VPN解决方案,可用于远程访问,站点到站点连接和移动设备安全。它支持多种操作系统,包括Linux,Unix,Android,iOS等。 StrongSwan使用IPsec协议和IKEv2协议来提供安全性,具有高速性和稳定性。
- Tinc: Tinc是一种分布式的,加密的VPN解决方案,可用于安全地连接多个计算机。它支持多种操作系统,包括Linux,Windows,macOS等。 Tinc使用加密技术来提供安全性,并具有高度灵活性和可扩展性。
这些开源VPN应用都具有不同的特点和优势,用户可以根据自己的需求选择适合自己的应用。
VPN 工作原理
VPN的工作原理可以分为以下步骤:
- 加密数据:当用户使用VPN连接到Internet时,VPN客户端会自动对用户的数据进行加密处理,以保护数据的隐私性和安全性。加密后的数据会被传输到VPN服务器上。
- 建立VPN隧道:VPN客户端与VPN服务器之间通过Internet建立一个安全的通信通道,这个通道称为VPN隧道。在建立隧道时,VPN客户端和VPN服务器会协商一种加密协议,以确保数据传输的安全性。
- 解密数据:VPN服务器会接收到加密后的数据,然后使用相同的加密协议进行解密,以还原原始的数据。解密后的数据将在VPN服务器和目标服务器之间传输。
- 访问目标服务器:解密后的数据将通过VPN服务器访问目标服务器。VPN服务器在处理请求时,会将其标识为来自VPN客户端的请求,然后将数据传回VPN隧道,最终返回到VPN客户端。
总的来说,VPN的工作原理就是将用户的数据加密和解密,以确保用户的数据传输安全和隐私保护。通过VPN隧道,用户可以访问Internet上的资源,而无需担心数据被窃取或监视。同时,VPN还可以提供远程访问,保护数据和网络隐私等功能,使其成为一种非常有用的技术。
VPN 网络原理

应用程序发送的数据,从 OpenVPN TUN 接口 tun0 接收,先进行加密处理,再发给物理网卡 eth0 发出去。 对端的 OpenVPN 客户端从物理网卡 eth0 收到加密数据,通过 OpenVPN 进行解密处理之后,再经由 tun0 将数据转发到应用程序。 也就是说,OpenVPN 就像是一个工作在虚拟接口 tun0 与物理接口 eth0 之间的代理,从而实现在物理网络上构建一条加密隧道。
发送数据流程

- 发送机制如上图所示,红线是内网 IP,黑色线是加密过后的公网 IP 包。
- 应用程序发送目的 IP 为 内网 IP 的数据包,到达虚拟网卡,转到字符设备文件(tun/tap设备),被 VPN 进程读取到 经过封包加密后,通过协议栈路由到网卡,最终通过公网网卡发送出去。
数据接受流程

- 接收机制如上图所示,黑线是公网 IP,红线是解密后的内网 IP 包。
- VPN 进程监听的是公网 IP + 端口,数据包经过网卡到达协议栈,到达 VPN 进程,VPN 进程解密解包后,将数据通过 字符设备文件(tun/tap设备)发送给虚拟设备,再次经过协议栈的路由,最终将数据发到用户程序。
使用 tun 设备的目的
- 为了把来自协议栈的数据包,先交给某个打开了/dev/net/tun字符设备的用户进程处理(这个用户进程通常是VPN进程)。然后它再把处理过后的数据包重新发回到协议栈中