OpenVPN Ubuntu2024 年 10 月 9 日 | 阅读 11 分钟 什么是 OpenVPN?OpenVPN 是一个 VPN 虚拟专用网络 系统,它实现多种技术,用于在桥接或路由的远程访问设施和配置中创建安全的站点到站点或点对点连接。它实现了服务器和客户端应用程序。 OpenVPN 允许对等方使用预共享的用户名/密码、证书或密钥对彼此进行身份验证。在多客户端服务器配置中使用时,它允许服务器为所有使用证书和签名机构的客户端发布一个身份验证证书。 它广泛使用 OpenSSL 的加密库、TLS 协议,并包含各种控制和安全功能。此外,它使用一种自定义安全协议,该协议使用 TLS/SSL 进行密钥交换。它可以穿越防火墙和网络地址转换。 OpenVPN 已嵌入并移植到许多系统。例如,DD-WRT 包含 OpenVPN 服务器功能,多协议 VPN 服务器,即 SoftEther VPN 也包括 OpenVPN 协议实现。 它是免费软件,由 James Yonan 定义,根据 GPLv2(GNU 通用公共许可证版本 2)条款发布。也提供商业许可证。 前提条件我们将需要
注意:虽然技术上可以使用我们的本地机器或 OpenVPN 服务器作为我们的 CA,但不建议这样做,因为它会使我们的 VPN 面临一些安全漏洞。我们应该将证书颁发机构放在一个独立的设备上,该设备专门用于导入和处理证书请求。此外,我们还需要一个客户端设备,用于连接到我们的 OpenVPN 服务器。 注意:如果在配置这些服务器时禁用了密码身份验证,在它们之间传输文件时可能会遇到困难。要解决此问题,我们可以重新启用所有服务器上的密码身份验证。我们可以为所有服务器生成一个 SSH 密钥对,将 OpenVPN 服务器的公共 SSH 密钥添加到 CA 机器的 authorized_keys 文件中,反之亦然。OpenVPN 架构![]() 加密OpenVPN 使用 OpenSSL 库来提供控制通道和数据通道的加密。它允许 OpenSSL 执行所有身份验证和加密工作,从而使 OpenVPN 可以使用 OpenSSL 包中的所有密码。 此外,它还可以使用 HMAC 数据包 的身份验证功能,为连接增加额外的安全层。它还可以应用硬件加速以获得更好的加密性能。它支持从 2.3 版本开始提供的 mbed TLS。 认证OpenVPN 包含多种验证对间身份的方法。OpenVPN 提供预共享密钥、基于用户名/密码和基于证书的身份验证。预共享密钥最简单,而基于证书的最功能丰富且最强大。 在 2.0 版本中,可以在有或没有证书的情况下启用密码/用户名身份验证。但是,OpenVPN 依赖第三方模块来使用密码/用户名身份验证。 可扩展性OpenVPN 可以通过第三方脚本和插件进行开发,这些脚本和插件可以在指定的入口点处找到。其目的是通常用于扩展 OpenVPN,提供更先进的日志记录、通过 RADIUS 集成的增强身份验证、动态防火墙更新、密码/用户名等。动态插件是可加载模块,用 C 语言编写,而脚本接口可以运行 OpenVPN 中存在的任何二进制文件和脚本。 OpenVPN 源代码中包含了一些此类插件的示例,包括一个 PAM 身份验证插件。此外,还存在许多第三方插件,用于对 SQL 或 LDAP 数据库(如 MySQL 和 SQLite)进行身份验证。 网络OpenVPN 可以通过 传输控制协议 或 用户数据报协议 传输进行操作,在单个 UDP/TCP 端口上复用已建立的 SSL 隧道。OpenVPN 完全支持 IPv6 作为隧道中虚拟网络的协议,并且从 2.3.x 系列 开始,OpenVPN 应用程序也可以通过 IPv6 创建连接。 它能够与几乎所有代理服务器一起工作,并且在实现网络地址转换和从防火墙中退出方面表现出色。服务器配置包含将各种网络配置选项 “推送” 给客户端的功能。这些包括路由命令、IP 地址和一些连接选项。OpenVPN 通过 通用 TAP/TUN 驱动程序促进了两种网络接口类型。OpenVPN 可以使用 LZO 压缩库 来压缩数据流。对于 OpenVPN,IANA 分配的官方端口号是 **1194** 端口。 当 OpenVPN 使用 TCP 传输建立隧道时,性能仅在未隧道化的网络链接上有足够的额外带宽以确保隧道化 TCP 定时器不会过期的情况下才能接受。如果情况并非如此,性能会急剧下降。这被称为 “TCP 融化问题”。 安全性OpenVPN 提供多种内部安全功能。它包括来自 OpenSSL 库的最高 256 位加密,尽管一些服务提供商可能提供较低的速率,为客户提供一些最快的 VPN。 它在用户空间运行,而不是需要 IP 堆栈操作。OpenVPN 包括放下 root 权限的能力,并应用 mlockall 以防止将敏感数据交换到磁盘。 OpenVPN 实现了一个基于 TLS 和 SSL 的自定义安全协议,而不是支持 PPTP、L2TP、IPSec 或 IKE。OpenVPN 通过 PKCS#11 基于的加密令牌提供对 **智能卡** 的支持。 OpenVPN 平台OpenVPN 在 macOS、QNX、NetBSD、FreeBSD、OpenBSD、Linux、Solaris 和 Windows XP 及更高版本上可用。它适用于多种手机操作系统,包括 Windows Mobile 6.5、Maemo 及以下版本、Android 设备、Android 4.0+ 设备、越狱的 iOS 3.1.2+ 设备 和 **正确安装了内核模块的 iOS 3GS+ 设备**。 它与一些手机操作系统不兼容,包括 Palm 操作系统。它不是一个基于 Web 的 VPN,不像 终端服务 Web 访问 或 Citrix 那样显示为网页:该程序是独立安装和配置的,通过手动编辑文本文件而不是使用基于 GUI 的向导。 OpenVPN 不适用于使用 IPSec over PPTP 或 L2TP 协议的 VPN 客户端。整个软件包由一个用于服务器和客户端连接的二进制文件、一个配置文件(可选)以及多个密钥文件(取决于使用的身份验证方法)组成。 固件实现OpenVPN 被移植到各种路由器固件包,允许用户使用他们的网络路由器以服务器或客户端模式运行 OpenVPN。例如,运行 OpenVPN 客户端模式的路由器允许网络上的设备访问 VPN,而无需安装 OpenVPN 的能力。 此外,OpenVPN 已被实现到一些制造商的路由器固件中。 软件实现OpenVPN 已移植到 SoftEther VPN。它是一个多协议开源 VPN 服务器,允许用户通过 OpenVPN 客户端连接到 VPN 服务器。 此外,OpenVPN 也已移植到 Vyos。这是一个开源路由操作系统,是从 Vyatta 软件路由器 分叉而来的。 OpenVPN 配置OpenVPN 可以通过证书、预共享密钥、用户/密码等来验证用户。 GNOME/NetworkManager 系统菜单可以使用 `network-manager-openvpn-gnome` 命令在 Debian GNOME 设置(默认)中完全设置 OpenVPN 连接。在 NetworkManager 中,VPN 连接将被视为另一个网络连接,并在 GNOME 系统菜单中的以太网和 WiFi 控件旁边具有权限。 在 GNOME 42 中,要自动激活 OpenVPN 配置,我们使用 `nm-connection-editor` 命令。搜索网络连接,启动其设置,然后在“常规”下选择“自动连接到 VPN”选项。保存后,将 `secondaries=` 行添加到该网络在连接部分中的配置文件中。它包含一个要启用的辅助连接 UUID 列表。通常,配置文件位于 `/etc/NetworkManager/system-connections/`。 用于测试的未加密(原始)VPN 连接
openvpn --remote SERVER_IP --dev tun1 --ifconfig 10.9.8.2 10.9.8.1 此外,我们可以 ping 服务器以检查是否可以访问它。
我们可以在服务器 shell 中执行以下命令 openvpn --remote CLIENT_IP --dev tun1 --ifconfig 10.9.8.1 10.9.8.2 如果我们的客户端有任何静态 IP#,我们可以执行以下命令 openvpn --dev tun1 --ifconfig 10.9.8.1 10.9.8.2 静态密钥 VPN 连接
我们可以在服务器的 `/etc/openvpn` 目录中执行以下命令来生成一个静态密钥 openvpn --genkey secret static.key 注意:在 Debian 10 的 OpenVPN 2.4 版本中,可以使用 `--secret` 而不是 `secret`。
我们可以从服务器复制 `/etc/openvpn/static.key` 文件,并创建一个新的 `/etc/openvpn/tun0.conf` 文件。 使用以下命令手动启动双方的 OpenVPN openvpn --config /etc/openvpn/tun0.conf --verb 6 我们可以 ping 10.9.8.2 端口以验证 VPN 是否已从服务器激活,从客户端 ping 10.9.8.1 端口。 TLS 启用的 VPN 连接
Easy-rsa 是一个单独的包,可以从 OpenVPN 安装中获取,从 Jessie 版本开始 请记住
生成 CA 密钥/证书
./easyrsa build-ca 这将在 `/etc/openvpn/easy-rsa/{pki,pki/private}` 目录中生成 `ca.crt` 和 `ca.key`。
./easyrsa build-server-full server 这将在 `/etc/openvpn/easy-rsa/pki/{issued/server.crt,private/server.key}` 目录中生成 `server.key` 和 `server.crt`,并使用我们的根证书进行签名。 生成 DIFFIE-HELLMAN 参数生成 DIFFIE-HELLMAN 参数(服务器完成 SSL/TLS 连接所必需) ./easyrsa gen-dh 生成用于身份验证的静态密钥如果我们生成了任何静态密钥,我们可以重命名并传输它。否则,我们可以运行以下命令 openvpn --genkey secret /etc/openvpn/server/ta.key 注意:在 Debian 10 的 OpenVPN 2.4 版本中,可以使用 `--secret` 选项而不是 `secret` 选项。生成客户端的密钥/证书为所有客户端生成密钥:我们可以使用以下两个命令
./easy build-client-full clientname nopass
./easyrsa build-client-full clientname 这将在 `/etc/openvpn/easy-rsa/pki/{issued/clientname.crt,private/clientname.key}` 目录中生成密钥。 OpenVPN 许可OpenVPN 有两个不同的版本
此版本严重依赖 iptables 进行负载均衡,并且由于这个原因从未在 Windows 上提供。此外,此版本可以动态创建客户端安装程序,这些安装程序会添加一个客户端配置文件以连接到特定的 Access Server 实例。 但是,用户不需要拥有 Access Server 客户端即可连接到 Access Server 实例;可以使用 OpenVPN Community Edition 的客户端。 在 Ubuntu 上安装 OpenVPNOpenVPN 是一个流行的、快速的开源程序,用于创建虚拟专用网络。它应用 UDP 和 TCP 传输协议。VPN 隧道通过 OpenVPN 协议捕获,并带有 TLS/SSL 身份验证、凭据、证书、MAC 地址簿和多因素身份验证。 OpenVPN 可用于各种系统和设备。它具有与市场上几乎所有 VPN 协议相同的客户端-服务器架构。OpenVPN 访问服务器在 Linux 系统上运行,客户端可以安装在多种 Linux 系统、macOS、Windows 以及 iOS、Android 和 Windows Mobile 等移动操作系统上。 OpenVPN 访问服务器接受多个传入 VPN 连接,OpenVPN 客户端或与 OpenVPN 兼容的开源客户端可以启动到服务器的连接。 在本文中,我们将学习如何在 Ubuntu 上设置 OpenVPN 访问服务器,并从多种 Linux 系统连接 VPN 客户端。 在 Ubuntu 中设置 OpenVPN 服务器
在下载和执行脚本之前,请记住该脚本将自动检测服务器的 **私有 IP 地址**。但是,我们需要注意服务器的公共 IP 地址,尤其是在它在 **NAT** 后面运行时。 要检查服务器的公共 IP 地址,我们需要在终端窗口中执行以下 **wget** 命令
首次运行时,此脚本将提示我们一些问题,我们需要仔细阅读它们,并根据我们的偏好来回答以设置我们的 OpenVPN 服务器。
![]()
![]()
![]() 设置 OpenVPN 客户端
![]()
![]()
![]() ![]() ![]()
![]() |
我们请求您订阅我们的新闻通讯以获取最新更新。