OpenVPN是什么

Fanly问答2020-09-08 18:54:08阅读(...)

OpenVPN是一个用于创建虚拟私人网络加密通道的软件包,允许创建的VPN使用公开密钥、电子证书、或者用户名密码来进行身份验证。大量使用了OpenSSL加密库中的SSL/TLS协议函数库。

OpenVPN 是一个用于创建虚拟私人网络加密通道的软件包,最早由 James Yonan 编写。OpenVPN 允许创建的 VPN 使用公开密钥、电子证书、或者用户名/密码来进行身份验证。 它大量使用了 OpenSSL 加密库中的 SSL/TLS 协议函数库。

OpenVPN

目前 OpenVPN 能在 Solaris、Linux、OpenBSD、FreeBSD、NetBSD、Mac OS X 与 Microsoft Windows 以及 Android 和 iOS 上运行,并包含了许多安全性的功能。它不与 IPsec 兼容。

原理

OpenVPN 的技术核心是虚拟网卡,其次是 SSL 协议实现。

OpenVPN 中的虚拟网卡

虚拟网卡是使用网络底层编程技术实现的一个驱动软件。安装此类程序后主机上会增加一个非真实的网卡(TAP 或 TUN),并可以像其它网卡一样进行配置。服务程序可以在应用层打开虚拟网卡,如果应用软件(如网络浏览器)向虚拟网卡发送数据,则服务程序可以读取到该数据。如果服务程序写合适的数据到虚拟网卡,应用软件也可以接收得到。虚拟网卡在很多的操作系统中都有相应的实现,这也是 OpenVPN 能够跨平台使用的一个重要原因。

在 OpenVPN 中,如果用户访问一个远程的虚拟地址(属于虚拟网卡配用的地址系列,区别于真实地址),则操作系统会通过路由机制将数据包(TUN 模式)或数据帧(TAP 模式)发送到虚拟网卡上,服务程序接收该数据并进行相应的处理后,会通过 SOCKET 从外网上发送出去。这完成了一个单向传输的过程,反之亦然。当远程服务程序通过 SOCKET 从外网上接收到数据,并进行相应的处理后,又会发送回给虚拟网卡,则该应用软件就可以接收到。

加密

OpenVPN 使用 OpenSSL 库来加密数据与控制信息。这意味着,它能够使用任何 OpenSSL 支持的算法。它提供了 HMAC 功能以提高连接的安全性。此外,OpenSSL 的硬件加速也能提高它的性能。2.3.0 以后版本引入 PolarSSL。

身份验证

OpenVPN 提供了多种身份验证方式,用以确认连接双方的身份,包括:

  • 预共享密钥
  • 数字证书
  • 用户名/密码组合

预共享密钥最为简单,但它只能用于创建点对点的 VPN;基于 PKI 的第三方证书提供了最完善的功能,但是需要额外维护一个 PKI 证书系统。OpenVPN2.0 后引入了用户名/口令组合的身份验证方式,它可以省略客户端证书,但是仍需要一份服务器证书用作加密。

功能与端口

  • OpenVPN 所有的通信都基于一个单一的 IP 端口,默认且推荐使用 UDP 协议通讯,同时也支持 TCP。IANA(Internet Assigned Numbers Authority)指定给 OpenVPN 的官方端口为 1194。OpenVPN 2.0 以后版本每个进程可以同时管理数个并发的隧道。OpenVPN 使用通用网络协议(TCP 与 UDP)的特点使它成为 IPsec 等协议的理想替代,尤其是在 ISP(Internet service provider)过滤某些特定 VPN 协议的情况下。
  • OpenVPN 连接能通过大多数的代理服务器,并且能够在 NAT 的环境中很好地工作。
  • 服务端具有向客户端“推送”某些网络配置信息的功能,这些信息包括:IP 地址、路由设置等。
  • OpenVPN 提供了两种虚拟网络接口:通用 TUN/TAP 驱动,通过它们,可以创建三层 IP 隧道,或者虚拟二层以太网,后者可以传送任何类型的二层以太网络数据。
  • 传送的数据可通过 LZO 算法压缩。

安全

OpenVPN 与生俱来便具备了许多安全特性:它在用户空间运行,无须对内核及网络协议栈作修改;初始完毕后以 chroot 方式运行,放弃 root 权限;使用 mlockall 以防止敏感数据交换到磁盘。

OpenVPN 通过 PKCS#11 支持硬件加密标识,如智能卡。

受中国大陆的限制

防火长城会针对 OpenVPN 服务器回送证书完成握手创建有效加密连接时干扰连接,在使用 TCP 协议模式时握手会被连接重置,而使用 UDP 协议时含有服务器认证证书的数据包会被故意丢弃,使 OpenVPN 无法创建有效加密连接而连接失败。而在中国大陆内部的连接不受这种限制。

伪装的改进

  • Stunnel,通过使用 Stunnel 转发 OpenVPN 流量以消除 OpenVPN 的协议特征,达到提供安全保护与流量伪装的目的(通常将 Stunnel 设置于 443 端口伪装成 Web 网站)。
  • KCPtun,使用 KCPtun 将 OpenVPN 流量转为 UDP 流量传输,也可以消除 OpenVPN 的协议特征。
  • SSH,使用 SSH 创建隧道转发 OpenVPN 流量,但 SSH 会暴露自身协议特征,故这种方式已被淘汰。
收藏0个人收藏
走进科技生活方式

评论交流

泪雪默认头像请「登录」后参与评论
  1. 加载中..