Ubuntu OpenVPN服务器搭建测试(二) 高阶配置

前面我们介绍了Ubuntu上怎么搭建OpenVPN服务器(Ubuntu OpenVPN服务器搭建测试),并使用TLS+证书校验方式,然而OpenVPN配置项很多,认证方式也不止这一种,这篇文件就详细介绍下怎么配置不同的OpenVPN,并附上不同认证方式的配置。

1. 服务端配置项介绍

|----------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 配置项 | 参数范围 | 是否为必选参数 | 配置示例 | 详细介绍 |
| dev | tun / tap | 必选参数 | 使用tap模式:dev tap 使用tun模式:dev tun | dev是一个设备类型选项,dev tap 与 dev tun 是 OpenVPN 中的两种不同的网络设备模式,分别代表不同的工作方式: 1. TAP模式: - 使用 dev tap 来启用 TAP 设备。 - TAP 模式创建一个以太网隧道,这意味着它可以传输第2层(数据链路层)的数据包,包括以太网帧。 - 这对于需要通过 VPN 隧道传输非 IP 流量的情况(例如桥接两个以太网段)特别有用。 - TAP 模式支持输出的所有以太网流量,包括ARP和广播数据包,类似于VXLAN。 2. TUN模式: - 使用 dev tun 来启用 TUN 设备。 - TUN 模式则创建一个IP隧道,这意味着它主要传输第3层(网络层)的数据包。 - 相对于 TAP 模式,TUN 模式更常用在传输基于IP的VPN流量时,因为它对性能会有更好的优化。 因此,如果你的需求是创建一个虚拟的以太网接口并可能在不同网络之间桥接,那么 dev tap 会是一个合适的选择。如果你只需在VPN上传输IP包,那么 dev tun 会更合适。 综上所述如果不需要关注链路层报文,最好是选用tun模式,传输速率相比tap模式会更快,CPU负载也会减少。 |
| proto | tcp / udp | 非必选参数 默认使用udp | 使用tcp传输:proto tcp 使用udp传输:proto udp | proto 是一个协议选项,用来指定OpenVPN使用的传输协议。 OpenVPN支持TCP和UDP两种传输协议,可以通过配置文件中的proto选项来指定: 1. proto tcp: 1. TCP具有可靠的数据传输保障机制,包括包重发、校验和流量控制等。 2. TCP确保数据的可靠性和顺序性,但相对于UDP,有较大的传输开销和潜在的延迟,尤其是在链路质量较差的情况下。 3. 使用TCP的好处是在防火墙和代理服务器(例如HTTP代理)后面更容易穿透,因为很多此类设备允许TCP流量通过,而且TCP流量更难被区分为VPN流量。 2. proto udp: 1. UDP(用户数据报协议)比较轻量级,没有TCP的重传和流量控制机制,因此具有较低的延迟和开销。 2. 由于没有重传机制,UDP在传输丢包较多的网络环境中,表现可能不如TCP稳定。 3. UDP适合对实时性要求较高的应用,如VoIP、视频会议和在线游戏等。 因此,选择tcp还是udp需要根据具体的使用场景和需求来决定: * 如果你需要可靠的数据传输,且网络环境可能存在防火墙或代理限制,那么使用tcp是一个不错的选择。 * 如果你需要更低的延迟和更高的传输效率,并且网络环境比较稳定,可以选择使用udp。 默认情况下,OpenVPN使用的是UDP协议,即proto udp。 |
| port | 1-65535 | 非必选参数 默认使用1194 | port 1194 | 用来指定OpenVPN守护进程监听的端口号。1194是默认端口,但你可以根据需要选择其他端口。注意需要配置防火墙,以允许通过这个端口的流量。 |
| keepalive | int型数字 第一个参数建议10-100 第二个参数建议是一地个参数的两倍以上 | 必选参数 如果不配置则没有重连和心跳,连接很不稳定,强烈建议配置上 | keepalive 10 120 | 用于设置OpenVPN服务器与客户端之间的连接检测和保持机制。它帮助检测连接的状态并在连接断开时进行恢复。具体来说,它定义了OpenVPN守护进程发送ping消息的频率和等待响应的时间。 语法: keepalive <interval> <timeout> 以下是参数和其作用的解释: 1. interval:定义Ping请求的发送间隔,单位为秒。在上述例子中,每隔10秒发送一次Ping请求。 2. timeout:定义在没有收到Ping响应时等待的时间,单位为秒。在上述例子中,如果120秒内没有收到Ping响应,OpenVPN将认为连接已经中断,并尝试重新建立连接。 工作机制 * 当 keepalive 10 120 被设置后,OpenVPN每10秒将发送一条Ping请求。 * 如果在120秒内没有收到任何响应,OpenVPN将认为连接已断开,并尝试重新建立连接。 综上所述,keepalive 设置帮助维护OpenVPN连接的稳定性,是实际配置中非常有用的选项。为了确保连接的稳定性,建议使用适当的keepalive设置。 |
| max-clients | int型数字 | 非必选参数 不配置则不限制客户端数量,可能会带给CPU过高的负载 | max-clients 10 | 用于限制可以同时连接到OpenVPN服务器的客户端数量。它可以帮助管理服务器资源并防止过多客户端连接导致服务器过载。 例如:max-clients 10 这个配置的作用是最多允许10个客户端同时连接到OpenVPN服务器。 如果不配置,OpenVPN则不限制同时连接的客户端数量。这意味着,有多少客户端想要连接就会有多少客户端能够连接,前提是服务器的资源(如CPU、内存和带宽)能够支持这些连接。 通过合理的 max-clients 设置,可以确保服务器稳定运行,同时提供良好的用户体验。 |
| ca | ca证书路径 | 非必选参数 使用预共享密钥方式连接时这个参数可以不选 | ca /data/cafile/ca.crt | 用于指定CA证书文件的位置。CA证书文件是用来验证客户端证书是否由可信的证书颁发机构签署的。 概述: 在OpenVPN配置中,CA证书用于建立信任链,确保客户端和服务器之间的通信是安全的,并且连接的双方的证书都是由同一可信的证书颁发机构签署的。 几个相关配置 1. cert:指定服务器证书文件。例如: 1. cert /etc/cafile/server.crt 1. key:指定服务器私钥文件。例如: 1. key /etc/cafile/server.key 1. dh:指定Diffie-Hellman参数文件。例如: 1. dh /etc/cafile/dh.pem 信任链的建立 通过指定CA证书,服务器能够验证客户端证书,这样确保了只有经过认证的客户端才能连接到服务器。同样,客户端也应该有对应的CA证书来验证服务器证书。 总结 ca /etc/cafile/ca.crt是OpenVPN配置中的必要部分,用于指向CA证书文件,以便在连接建立过程中验证对等方的证书。确保该文件路径正确,并且文件内容合法,这是OpenVPN安全配置的重要部分。 没有指定此配置项,OpenVPN将无法正常工作,因为无法验证对等方的证书。 |
| cert | 服务器的公钥证书文 | 非必选参数 使用预共享密钥方式连接时这个参数可以不选 | cert /data/cafile/server.crt | 用于指定服务器的公钥证书文件。这个文件包含了OpenVPN使用的X.509证书,该证书由证书颁发机构(CA)签署,证明了服务器或客户端的身份。 |
| key | 服务器私钥文件 | 非必选参数 使用预共享密钥方式连接时这个参数可以不选 | key /data/cafile/server.key | 用于指定服务器或客户端的私钥文件。这个文件应该与 cert 参数指定的公钥证书匹配,且必须保持保密,因为它用来解密接收到的数据和生成加密连接。 |
| dh | Diffie-Hellman参数文件 | 非必选参数 使用预共享密钥方式连接时这个参数可以不选 | dh /data/cafile/dh.pem | 用于指定Diffie-Hellman参数文件。Diffie-Hellman参数用于安全地交换密钥,以便在未建立安全隧道的环境下也能安全地交换加密密钥。 |
| tls-auth | | 非必选参数 | tls-auth /data/cafile/ta.key 0 | 用于在OpenVPN连接中启用并配置TLS认证(TLS Authentication),以提供额外的安全层。该参数通过HMAC(Hash-based Message Authentication Code)来验证TLS握手的包,以防止基于端口扫描的攻击、DoS(Denial of Service)攻击等。这种方法需要在服务器和客户端之间共享一个额外的预共享密钥文件 (ta.key 文件)。 参数格式 tls-auth ta.key [direction] ta.key 是包含预共享密钥的文件路径。 [direction] 是一个可选参数,表示当前配置的连接方向: * 0 表示该端是服务器。 * 1 表示该端是客户端。 默认值 direction 参数的默认值是 0,即在没有明确指定的情况下,OpenVPN会将其视作服务器端。 作用与好处 1. 防止DoS攻击:启用TLS-auth可保护服务器免受来自恶意来源的连接请求。 2. 阻止端口扫描:只有拥有正确预共享密钥的一方才能进行TLS握手,因此可以阻止很多自动化的端口扫描攻击。 3. 验证数据包来源:通过验证HMAC,以确保数据包确实是由拥有正确密钥的一方生成的。 总结 * tls-auth ta.key 0 这个参数用于启用TLS认证,并指定 ta.key 文件作为预共享密钥。 * direction 参数可以是 0(对于服务器)或 1(对于客户端),默认值为 0。 * 该功能可以增强安全性,防止多种网络攻击。 |
| tls-version-min | 1.0 1.1 1.2 1.3 | 非必选参数 | tls-version-min 1.2 | 用于指定 OpenVPN 连接中所需的最小 TLS 版本。设置此参数可以提升安全性,因为旧版本的 TLS 可能存在已知的漏洞。这对于确保连接使用更现代、更安全的协议版本是非常重要的。 tls-version-min 1.2 这个配置项指示 OpenVPN 要求使用至少 TLS 1.2 版本的协议。 作用与好处: 1. 提升安全性:通过强制使用 TLS 1.2 或更高版本,可以避免使用存在已知安全漏洞的旧版 TLS 协议。 2. 兼容性:TLS 1.2 是目前广泛应用的标准,已经被大多数现代客户端和服务器所支持。 3. 防止降级攻击:设置最低版本可以防止攻击者通过降级攻击(Protocol Downgrade Attack)强制服务器和客户端使用低版本的协议。 |
| cipher | BF-CBC AES-128-CBC AES-196-CBC AES-256-CBC AES-128-GCM AES-256-GCM | 非必选参数 如果未指定,OpenVPN 将使用默认的加密算法。OpenVPN 2.4 之前的版本,默认使用 BF-CBC 作为加密算法。然而,这种算法现在被视为不够安全,在 OpenVPN 2.4 及更高版本中,默认算法为 AES-256-CBC。 | cipher AES-256-CBC | 用于指定 OpenVPN 连接所使用的加密算法。 以下是一些常用的加密算法,可以用于 cipher 参数: 1. BF-CBC(Blowfish, 128-bit) 2. AES-128-CBC 3. AES-192-CBC 4. AES-256-CBC(推荐) 5. AES-128-GCM(推荐, 推动以 ChaCha20 为基础的新算法) 6. AES-256-GCM |
| auth | SHA1 SHA224 SHA256 SHA384 SHA512 | 非必选参数 如果未指定,OpenVPN 将使用默认的哈希算法(在较新的 OpenVPN 版本中默认使用 SHA256)。 | auth SHA256 | 用于指定 OpenVPN 连接所使用的哈希算法。 OpenVPN 默认值可能会随版本更新而变化。在较新的 OpenVPN 版本中,如果未指定 auth 参数,默认使用 SHA256 算法,因为它比 SHA1 更为安全。 |
| tls-cipher | 以下是一些常用的加密套件,可以同时支持,以冒号隔开即可 1. TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384 2. TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA384 3. TLS-DHE-RSA-WITH-AES-256-GCM-SHA384 4. TLS-DHE-RSA-WITH-AES-256-CBC-SHA256 5. TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384 | 非必选参数 OpenVPN 默认使用 OpenSSL 提供的默认加密套件,并且会尝试协商一个合适的套件。不指定 tls-cipher 参数时,将使用 OpenSSL 自定义的默认套件列表。 | tls-cipher TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256 | 用于指定 OpenVPN 连接中使用的 TLS/SSL 加密套件。加密套件决定了用于安全通信的加密算法、消息认证算法、密钥交换算法以及其他安全功能。 不是必选参数的。如果未指定,OpenVPN 将使用 OpenSSL 的默认加密套件。不过,为了确保最大程度的安全性和兼容性,明确指定符合当前安全标准的加密套件是一个好习惯。 |
| server | 参数格式: server <network> <netmask> | 必选参数 | server 10.16.2.0 255.255.255.0 | 用于 OpenVPN 配置中的服务器模式,指定虚拟专用网络 (VPN) 使用的 IP 地址范围和子网掩码。这个参数在配置 OpenVPN 服务器时是必选的,因为它定义了 VPN 客户端将使用的 IP 地址池。 server 参数格式如下: server <network> <netmask> * <network>:VPN 客户端的 IP 地址范围的起始地址。 * <netmask>:定义此 IP 地址范围的子网掩码。 |
| topology | net30 p2p subnet | 非必选参数 强烈推荐使用 topology subnet,特别是在 TUN 设备模式下,以简化配置并提升兼容性和可维护性。 | topology subnet | 在 OpenVPN 配置中用于指定网络拓扑结构。此参数控制 VPN 服务器如何为客户端分配 IP 地址,并影响到数据包的路由和处理方式。 topology 参数有以下几个值可选: 1. net30(默认值,但不推荐):为每个客户端分配一个 /30 子网。每个子网包含 4 个 IP 地址,其中 2 个可用。适用于点对点连接。 2. p2p:点对点模式,通常在老版本中使用。 3. subnet:为每个客户端分配一个 IP 地址,更现代化和推荐的方式,特别适合 TUN 模式下使用。 topology 参数不是必选参数,但强烈推荐使用 topology subnet,特别是在 TUN 设备模式下,以简化配置并提升兼容性和可维护性。在较新的 OpenVPN 配置中,topology subnet 提供了更直观的网络结构和更高的灵活性。 |
| ifconfig-pool-persist | 无默认值 | 非必选参数 | ifconfig-pool-persist ipp.txt | 用于 OpenVPN 配置中,指定一个文件来持久化客户端的 IP 地址分配。此参数可确保每次客户端连接时分配相同的 IP 地址,便于管理和日志记录。 参数格式如下: ifconfig-pool-persist <file> [interval] * <file>:存储客户端 IP 地址分配信息的文件名。例如,ipp.txt。 * [interval](可选):指定更新文件的时间间隔(单位:秒)。默认是 600 秒(10 分钟)。 ifconfig-pool-persist参数不是必选的,但强烈推荐使用,特别是在需要确保客户端每次连接时获得相同 IP 地址的场景下。例如,某些情况下需要保持客户端的固定 IP 地址以便进行网络管理、日志记录或防火墙配置等。 |
| persist-key | | 非必选参数 | persist-key | persist-key 参数是 OpenVPN 配置中的一个选项,用于控制在重启或者响应某些信号时是否保持密钥和安全的会话状态。它的主要目的是在不重新读取(重新加载)密钥和证书的情况下保持连接的安全性和连续性。 这个参数的作用是增加连接的可靠性和提升性能,因为重新加载密钥和证书可能会引入延迟和不必要的安全风险。 使用此参数随后,OpenVPN 将缓存密钥,并确保在 TUN/TAP 设备重启后,保持与客户端的稳定连接。 * persist-key 参数用于保持密钥和会话状态,以提高连接的稳定性和可靠性。 * 这个参数没有默认值,须显式指定。 * 强烈推荐与 persist-tun 一起使用,以确保在设备或进程重新启动时,连接和会话能够继续保持。 |
| persist-tun | | 非必选参数 | persist-tun | persist-tun 参数是 OpenVPN 配置中的一个选项,用于在 OpenVPN 进程重启或重新连接时保持 TUN/TAP 设备的状态,从而避免重新初始化设备所带来的延迟和潜在问题。 当配置了 persist-tun 参数时,以下情况不会重新初始化 TUN/TAP 设备: * OpenVPN 进程重启时(例如通过信号或某些特殊操作)。 * 客户端重新连接时。 这个参数的作用是增加连接的可靠性和提升性能,因为重新初始化 TUN/TAP 设备可能会引入延迟和中断。 使用此参数后,OpenVPN 将保持设备状态,并确保在重新连接或进程重启后,保持与客户端的稳定连接。 |
| push | | 非必选参数 | push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 8.8.4.4" | push "redirect-gateway def1 bypass-dhcp"是 OpenVPN 服务器配置文件中的一个参数,用于告诉连接到该服务器的客户端重定向其所有网络流量通过 VPN。这是实现全局 VPN(也称为"强制所有流量通过 VPN")的常用配置。 * redirect-gateway: 这个选项告诉客户端将其默认网关(默认路由)修改为指向 VPN 隧道。 * def1: 使用两个路由条目替代默认路由,这样做的好处是保留原先的默认路由(通常指向非 VPN 网关),从而在断开 VPN 连接时能够更好地恢复。 * bypass-dhcp: 保留 DHCP 的默认路由选项,以确保 DHCP 请求仍能正常处理。这对于在 VPN 连接中使用 DHCP 的客户端特别有用。 这个指令的主要功能是: * 全局流量重定向:确保连接到 VPN 服务器的客户端设备将所有流量通过 VPN 隧道传输。 * 安全:通过所有流量通过 VPN,可以确保数据在传输过程中被加密,从而提高安全性,特别是在使用公共 Wi-Fi 或在不安全的网络中。 * 简便:客户端无需手动配置路由器,只需连接到 VPN 服务器即可实现全局流量重定向。 DNS 配置 :在大多数情况下,建议同时推送 DNS 服务器的配置,以确保客户端解析域名时也通过 VPN。例如,可以使用 push "dhcp-option DNS x.x.x.x" 语句推送 DNS 服务器地址。 |
| log-append | | 非必选参数 | log-append /var/log/openvpn.log | 用于指定将日志信息追加到指定的日志文件中。 这是一个 OpenVPN 的配置选项,用于指定日志文件的路径以及将日志信息追加到该文件中。如果日志文件不存在,该选项会创建文件;如果日志文件已经存在,则会在文件末尾追加新的日志信息,而不是覆盖原有的内容。可以自定义路径和文件名,根据你的系统和需求来设置日志位置。 主要功能 * 日志记录: 通过启用这个参数,OpenVPN 会记录运行时的状态信息、连接情况、错误信息等日志信息,帮助管理员了解 VPN 的运行状态以及故障排查。 * 日志保留 : 使用 log-append 而不是 log 参数,可以确保每次启动 OpenVPN 时不会覆盖之前的日志,有助于保留历史运行记录。 典型用途 * 监控和排错: 在管理和排查 OpenVPN 连接问题时,日志文件是一个重要的工具,可以帮助识别问题并采取相应措施。 * 安全审计: 可以用来记录连接和断开情况,以便进行安全审核和用户活动的追踪。 |
| verb | 0-11 | 非必选参数 | verb 3 | 在 OpenVPN 配置文件中,verb 参数用来设置日志和控制台输出的详细程度。verb 参数的值可以从 0 到 11,每个级别代表不同的详细程度: * verb 0: 仅输出致命错误信息。 * verb 1: 输出一些较少的重要信息。 * verb 2: 输出连接状态信息,这是默认的级别。 * verb 3: 使用更多详细的调试信息。 * verb 4: 输出更详细的调试信息。 * verb 5-11: 输出逐步增加的详细调试信息,级别越高,输出的信息越多。一般在调试非常复杂的问题时才会用到这些级别。 参数在 OpenVPN 配置文件中不是必选参数。如果未设置 verb 参数,OpenVPN 会使用默认值 verb 1。默认值提供基本连接信息和错误信息,而不会输出过多的调试信息。 |
| plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so login | | 非必选参数 | plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so login | 用于在 OpenVPN 服务器上启用 PAM (Pluggable Authentication Modules) 认证。这允许 OpenVPN 使用 PAM 框架来进行用户认证。具体来说,这一行配置告诉 OpenVPN 使用位于 /usr/lib/openvpn/openvpn-plugin-auth-pam.so 的插件,并使用 PAM 服务 login 进行认证。 以下是这个命令的详细解析: * plugin:指示 OpenVPN 加载并使用一个插件。 * /usr/lib/openvpn/openvpn-plugin-auth-pam.so:插件的路径,这个插件实现了 PAM 认证功能。 * login:PAM 服务名称。在大多数系统中,login 是一个常用的 PAM 服务,处理用户的登录认证。 添加这一行到 OpenVPN 配置文件后,在客户端连接时将提示输入用户名和密码,并通过 PAM 进行验证。注意,PAM 服务 login 必须在系统上正确配置。 需要注意的是,启用 PAM 认证会提高系统安全性的要求,确保仅授权用户可以访问和进行认证。同时,openvpn-plugin-auth-pam.so 插件和 PAM 服务必须正确安装和配置。 |
| 以上是一些常用参数的配置介绍,更详细参数可以使用openvpn --help |||||
| 以上是一些常用参数的配置介绍,更详细参数可以使用openvpn --help |||||

2常见配置示例

本章节介绍了一些常见的认证场景配置文件示例,需要注意服务端配置和客户端配置必须搭配使用,否则可能导致认证不过。

2.1 证书+TLS

2.1.1 服务端配置

bash 复制代码
#base config
dev tun
proto udp
port 1194
keepalive 10 120
max-clients 10

# Certs
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh.pem
tls-auth /etc/openvpn/ta.key 0

# Ciphers and Hardening
tls-version-min 1.2
cipher AES-256-CBC
auth SHA512
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256
# Drop Privs

# IP pool
server 10.16.1.0 255.255.255.0
topology subnet
ifconfig-pool-persist ipp.txt
#client-config-dir client
# Misc
persist-key
persist-tun
# DHCP Push options force all traffic through VPN and sets DNS servers
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
# Logging
log-append /var/log/openvpn.log
verb 4

2.1.2 客户端配置

bash 复制代码
# Secure OpenVPN Client Config
#viscosity dns full
#viscosity usepeerdns true
#viscosity dhcp true
tls-client
pull
client
dev tun
proto udp
remote 192.168.184.14 1194
redirect-gateway def1
nobind
persist-key
persist-tun
verb 3
ca ca.crt
cert client.crt
key client.key
tls-auth ta.key 1
remote-cert-tls server
ns-cert-type server
key-direction 1
cipher AES-256-CBC
tls-version-min 1.2
auth SHA512
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256

2.2 证书+TLS+用户名密码

2.2.1 服务端配置

注:服务器地址为192.168.184.14 防火墙已经关闭

bash 复制代码
# Secure OpenVPN Server Config
# Basic Connection Config
dev tun
proto udp
port 1194
keepalive 10 120
max-clients 10
# Certs
ca ca.crt
cert server.crt
key server.key
dh dh.pem
tls-auth ta.key 0


# Ciphers and Hardening
#reneg-sec 0
#remote-cert-tls client
tls-version-min 1.2
cipher AES-256-CBC
auth SHA512
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256
# Drop Privs
#user nobody
#group nobody
# IP pool
server 10.16.1.0 255.255.255.0
topology subnet
ifconfig-pool-persist ipp.txt
#client-config-dir client
# Misc
persist-key
persist-tun
# DHCP Push options force all traffic through VPN and sets DNS servers
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
# Logging
log-append /var/log/openvpn.log
verb 4

# Enable username and password authentication
plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so login
verify-client-cert none
username-as-common-name

2.2.2 客户端配置

客户端如果不想每次都输入用户名密码,则直接创建一个用户名密码文件,如下:首行是用户名 第二行是密码

bash 复制代码
axk
axk@123

然后在客户端配置中指定用户名密码配置文件路径auth-user-pass /config/work/openvpn/auth.conf

bash 复制代码
#openVPN Client Config
#viscosity dns full
#viscosity usepeerdns true
#viscosity dhcp true
tls-client
pull
client
dev tun
proto udp
remote 192.168.184.14 1194
redirect-gateway def1
nobind
persist-key
persist-tun
verb 3
ca ca.crt
cert client.crt
key client.key
tls-auth ta.key 1
remote-cert-tls server
ns-cert-type server
key-direction 1
cipher AES-256-CBC
tls-version-min 1.2
auth SHA512
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256
auth-user-pass /config/work/openvpn/auth.conf

2.3 用户名密码

2.3.1 服务端配置

bash 复制代码
port 1194
proto udp
dev tun
server 10.16.1.0 255.255.255.0
topology subnet
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
keepalive 10 120
data-ciphers AES-256-GCM:AES-256-CBC
compress lzo
allow-compression yes
persist-key
persist-tun
status openvpn-status.log
dh none
verb 3
plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so login
verify-client-cert none
username-as-common-name
ca ca.crt
cert server.crt
key server.key
# tls-server and cert config removed
tls-server
key-direction 0

2.3.2 客户端配置

用户名密码配置参考++2.2.2章节++

bash 复制代码
client
dev tun
proto udp
remote 192.168.184.14 1194
resolv-retry infinite
nobind
persist-key
persist-tun
auth-user-pass
data-ciphers AES-256-GCM:AES-256-CBC
compress lzo
verb 3
auth-user-pass /config/work/openvpn/auth.conf
ca /config/work/openvpn/ca.crt
# 禁用TLS
tls-client
key-direction 1

2.4 预共享密钥

预共享密钥方式需要手动配置本地和对端隧道地址,没有dhcp分配机制,配置需要和对端一致。

2.4.1 服务端配置

bash 复制代码
port 1194
proto udp
dev tun
ifconfig 10.16.1.1 10.16.1.2  # 指定隧道两端的IP地址
secret /etc/openvpn/static.key  # 预共享密钥文件路径

cipher AES-256-CBC
auth SHA512
keepalive 10 120
data-ciphers AES-256-GCM:AES-256-CBC
compress lzo
allow-compression yes
persist-key
persist-tun
status openvpn-status.log
verb 3

2.4.2 客户端配置

bash 复制代码
remote 192.168.184.14 1194
port 1194
proto udp
dev tun
ifconfig 10.16.1.2 10.16.1.1  # 客户端隧道的IP地址与服务器对应
secret /config/work/openvpn/static.key  # 预共享密钥文件路径

cipher AES-256-CBC
auth SHA512
keepalive 10 120
data-ciphers AES-256-GCM:AES-256-CBC
compress lzo
allow-compression yes
persist-key
persist-tun
verb 3
相关推荐
vvw&几秒前
如何在 Ubuntu 22.04 上安装 JupyterLab 环境教程
linux·运维·服务器·ubuntu·jupyter·开源·python3.11
zengshitang52010 分钟前
Intel-ECI之Codesys PLC + Ethercat 远端IO + Codesys IDE编程
linux·windows·ubuntu
编码浪子13 分钟前
构建一个rust生产应用读书笔记四(实战6)
网络·oracle·rust
路星辞*1 小时前
TCP 三次握手四次挥手
linux·服务器·网络
m0_541034841 小时前
Linux shell脚本练习(七)
linux
2201_759154881 小时前
Linux应用开发————mysql数据库表
linux·mysql
sheepfagdng2 小时前
网络时延由哪几部分构成,哪部分可以为0
网络
代码欢乐豆2 小时前
计算机网络——期末复习(2)1-3章考试重点
网络·计算机网络·智能路由器
雨中rain2 小时前
Linux -- 线程控制相关的函数
linux·开发语言
亭墨2 小时前
linux0.11源码分析第二弹——setup.s内容
linux·驱动开发·学习·系统架构