如何让 OpenVPN 在 OpenBSD 上使用 VIA Padlock?

如何让 OpenVPN 在 OpenBSD 上使用 VIA Padlock?

我买了一台基于 VIA 的路由器,唯一目的是运行 OpenVPN。不幸的是,Padlock 似乎没有被使用。以下是 dmesg 中的重要部分:

OpenBSD 4.8 (GENERIC) #136: Mon Aug 16 09:06:23 MDT 2010
[email protected]:/usr/src/sys/arch/i386/compile/GENERIC
cpu0: VIA C7 Processor 1500MHz ("CentaurHauls" 686-class) 1.51 GHz
cpu0: FPU,V86,DE,PSE,TSC,MSR,PAE,MCE,APIC,SEP,MTRR,PGE,CMOV,PAT,CFLUSH,ACPI,MMX,FXSR,SSE,SSE2,TM,SBF,SSE3,EST,TM2,xTPR

我的 OpenVPN-Config 具有与密码/挂锁相关的以下选项:

cipher AES-128-CBC
engine cryptodev

我可以通过使用 openssl speed 命令进行基准测试来验证 usercrypto 是否已启用。sysctl 还显示:

kern.usercrypto=1

我从这些以 40 Mbit/秒(最大 70/秒)的速度通过 VPN 隧道的顶级信息中推断出 Padlock 没有使用:

load averages:  0.66,  0.62,  0.54                                                                                                                                                          crypto.b0nd4ge.de 21:03:04
28 processes:  2 running, 25 idle, 1 on processor
CPU states:  1.9% user,  0.0% nice,  2.9% system,  3.2% interrupt, 92.1% idle
Memory: Real: 30M/142M act/tot  Free: 839M  Swap: 0K/1214M used/tot

  PID USERNAME PRI NICE  SIZE   RES STATE     WAIT      TIME    CPU COMMAND
20161 root      59    0 1224K 2676K run       -       116:45 53.42% openvpn
11092 named      2    0   18M   19M sleep     select   67:50  0.10% named

我还能做什么才能让 Padlock 与 OpenVPN 配合使用?无法用此 VPN 最大限度地利用我的互联网连接真是太遗憾了。

请帮忙。任何建议都将不胜感激。几周以来我一直在谷歌搜索此内容。

答案1

我不熟悉 VIA Padlock,但是...

  1. OpenVPN 的 CPU 使用率最高时是否会攀升至约 100%?
  2. 封装的数据包平均大小是多少(加密加速对小数据包帮助不大)?
  3. 您能与我们分享“openssl speed aes”的结果吗?

作为参考,我可以为您提供在 Xeon E5530 2.40GHz 上使用 aes128-cbc 密码和 sha1 HMAC 的 OpenVPN 和 OpenSSL 性能数据,当加密发生在 CPU 上且平均数据包大小约为 1400 字节时:openssl=1360Mbit/s openvpn=320Mbit/s(使用相同的密码)

使用 Intel AES-NI 引擎,我只能获得 OpenVPN 30% 的提升,而 OpenSSL 速度测试提高了约 4 倍。

编辑:

您还可以使用“cipher none”对 OpenVPN 进行性能测试,以排除/证明非加密相关代码中的瓶颈。您将获得的带宽将是上限,OpenVPN 在任何加密引擎下都不会比这更快。

如果发现瓶颈在非加密代码中,我建议您使用 IPSec - 它的开销较少(没有 TUN、没有用户空间进程、上下文切换、不涉及 TCP/UDP 堆栈)。如果您仍想坚持使用 OpenVPN,请运行多个 OpenVPN 进程并尝试负载平衡流量(仅当您的路由器上有多个 CPU 核心时才有用)。

答案2

Google 并不总是你的朋友 :-)

请在此处搜索 misc@openbsd 邮件列表存档: http://marc.info/

我记得,VIA 的硬件实现有很多不足之处。

另外,为什么要使用 OpenVPN 包?OpenBSD 内置了 ipsec vpn 和 openSSH,并与网络堆栈和 pf 防火墙集成在一起。所有这些都由跨平台客户端支持,是的,即使在效率最低的客户端上也是如此 :-)

答案3

当发现 OpenVPN 的 CPU 使用率过高时,请记住它是一个用户空间应用程序,除了加密之外,还需要进行大量上下文切换来将封装和非封装的数据包来回内核,以及实际网络通信的 CPU 中断。假设从远程端到 OpenVPN 服务器提供的网络有一个 ICMP ping 数据包:

  1. 内核从远程客户端接收封装的数据包
  2. 内核将封装好的数据包发送给 OpenVPN
  3. OpenVPN 解密数据包并将有效载荷复制到内存中
  4. OpenVPN 创建一个包含有效负载的新数据包并将其交给内核
  5. 内核将数据包发送到本地网络
  6. 内核从本地网络接收响应数据包
  7. 内核将响应数据包发送给 OpenVPN
  8. OpenVPN 创建封装的数据包并将其交给内核
  9. 内核将封装好的数据包发送给远程客户端

每当执行从内核上下文切换到用户空间时,就会发生上下文切换,因此 2-3、4-5、7-8、8-9。与内核中的 IPSec 相比,所有封装/解封装都发生在内核上下文中。

这就是为什么,正如 Ansis 所说,增加加密吞吐量并不直接转化为更好的 OpenVPN 吞吐量。随着数据包速率的增加,上下文切换会压倒硬件加密加速带来的收益。

相关内容