Как заставить 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, но...
- Поднимается ли когда-нибудь центральный процессор для OpenVPN до ~100%?
- Каков средний размер инкапсулируемого пакета (ускорение шифрования не должно сильно помогать маленьким пакетам)?
- Не могли бы вы поделиться с нами результатами "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:
- Ядро получает инкапсулированный пакет от удаленного клиента
- Ядро передает инкапсулированный пакет в OpenVPN
- OpenVPN расшифровывает пакет и копирует полезную нагрузку в память
- OpenVPN создает новый пакет, содержащий полезную нагрузку, и передает его ядру
- Ядро отправляет пакет в локальной сети
- Ядро получает ответный пакет из локальной сети
- Ядро передает ответный пакет в OpenVPN
- OpenVPN создает инкапсулированный пакет и передает его ядру
- Ядро отправляет инкапсулированный пакет на удаленный клиент
Переключение контекста происходит всякий раз, когда выполнение изменяется от контекста ядра к пользовательскому пространству, поэтому 2-3, 4-5, 7-8, 8-9. Сравните это с IPSec, который встроен в ядро, поэтому вся эта инкапсуляция / деинкапсуляция происходит в контексте ядра.
Вот почему, как говорит Ансис, увеличение пропускной способности шифрования напрямую не приводит к повышению пропускной способности OpenVPN. По мере увеличения скорости передачи пакетов переключение контекста подавляет выгоды от аппаратного крипто-ускорения.
Гугл не всегда твой друг:-)
Поищите в списке рассылки misc@openbsd здесь: http://marc.info/
Последнее, что я помню, аппаратная реализация VIA оставляет желать лучшего.
Кроме того, почему вы используете пакет OpenVPN? OpenBSD имеет встроенные ipsec vpn и openSSH и интегрированы с сетевым стеком и межсетевым экраном pf. Все они поддерживаются кроссплатформенными клиентами, и да, даже на самых неэффективных из них:-)