Как заставить OpenVPN использовать VIA Padlock на OpenBSD?

Я купил маршрутизатор на основе VIA с единственной целью запустить на нем OpenVPN. К сожалению, кажется, что замок не используется. Вот важная часть от dmesg:

OpenBSD 4.8 (GENERIC) #136: Mon Aug 16 09:06:23 MDT 2010
deraadt@i386.openbsd.org:/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

Я могу убедиться, что usercrypto включен, с помощью команды openssl speed. Sysctl также гласит:

kern.usercrypto=1

Я делаю вывод, что Padlock не используется из этих основных данных, которые принимаются со скоростью 40 Мбит / с (максимум 70/ с), проходящих через VPN-туннель:

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.

Пожалуйста помоги. Любое предложение будет оценено. Я гуглял по этому поводу пару недель.

3 ответа

Я не знаком с VIA Padlock, но...

  1. Поднимается ли когда-нибудь центральный процессор для OpenVPN до ~100%?
  2. Каков средний размер инкапсулируемого пакета (ускорение шифрования не должно сильно помогать маленьким пакетам)?
  3. Не могли бы вы поделиться с нами результатами "openssl speed aes"?

Для справки я могу дать вам свои показатели производительности OpenVPN и OpenSSL для шифра aes128-cbc и H1AC sha1 на Xeon E5530 2,40 ГГц, когда крипто происходит на ЦП и средний размер пакета ~1400 байтов: openssl=1360 Мбит / с openvpn=320 Мбит / с (с тот же шифр)

С процессором Intel AES-NI я смог получить только 30% улучшений для OpenVPN, в то время как тест скорости OpenSSL улучшился в ~4 раза.

Редактировать:

Вы также можете протестировать производительность OpenVPN с помощью "ничего не шифровать", чтобы исключить / доказать наличие узких мест в коде, не связанном с шифрованием. Пропускная способность, которую вы получите, будет верхней границей, и OpenVPN никогда не будет работать быстрее, чем с любым криптографическим движком.

Если окажется, что узкое место находится в не криптографическом коде, я бы посоветовал вам использовать IPSec - у него меньше накладных расходов (нет TUN, нет процессов в пространстве пользователя, переключение контекста, не задействован стек TCP/UDP). Если вы все еще хотите придерживаться OpenVPN, то запустите несколько процессов OpenVPN и попробуйте загрузить баланс трафика (помогает, только если у вас есть несколько процессорных ядер на маршрутизаторе).

Наблюдая высокую загрузку ЦП с OpenVPN, помните, что это пользовательское приложение, и кроме крипто, существует много переключения контекста, необходимого для перетаскивания как инкапсулированных, так и неинкапсулированных пакетов в ядро ​​и из него, а также прерываний ЦП. для фактического сетевого общения. Предполагая, что один пакет проверки связи ICMP от удаленного конца к сети сделан доступным сервером OpenVPN:

  1. Ядро получает инкапсулированный пакет от удаленного клиента
  2. Ядро передает инкапсулированный пакет в OpenVPN
  3. OpenVPN расшифровывает пакет и копирует полезную нагрузку в память
  4. OpenVPN создает новый пакет, содержащий полезную нагрузку, и передает его ядру
  5. Ядро отправляет пакет в локальной сети
  6. Ядро получает ответный пакет из локальной сети
  7. Ядро передает ответный пакет в OpenVPN
  8. OpenVPN создает инкапсулированный пакет и передает его ядру
  9. Ядро отправляет инкапсулированный пакет на удаленный клиент

Переключение контекста происходит всякий раз, когда выполнение изменяется от контекста ядра к пользовательскому пространству, поэтому 2-3, 4-5, 7-8, 8-9. Сравните это с IPSec, который встроен в ядро, поэтому вся эта инкапсуляция / деинкапсуляция происходит в контексте ядра.

Вот почему, как говорит Ансис, увеличение пропускной способности шифрования напрямую не приводит к повышению пропускной способности OpenVPN. По мере увеличения скорости передачи пакетов переключение контекста подавляет выгоды от аппаратного крипто-ускорения.

Гугл не всегда твой друг:-)

Поищите в списке рассылки misc@openbsd здесь: http://marc.info/

Последнее, что я помню, аппаратная реализация VIA оставляет желать лучшего.

Кроме того, почему вы используете пакет OpenVPN? OpenBSD имеет встроенные ipsec vpn и openSSH и интегрированы с сетевым стеком и межсетевым экраном pf. Все они поддерживаются кроссплатформенными клиентами, и да, даже на самых неэффективных из них:-)

Другие вопросы по тегам