Рубрика:
Наука и технологии
|
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|
АНДРЕЕВ С.В., ИПМ им. М.В. Келдыша РАН, Москва, Россия
ХЛУПИНА А.А., ИПМ им. М.В. Келдыша РАН, Москва, Россия
Оптимизация скорости VPN-соединений к удаленным серверам баз данных при использовании маршрутизаторов с ARM-процессорами
Данная статья посвящена задачам оптимизации скорости OpenVPN-соединения при использовании маршрутизаторов с процессорами ARM
1. Введение
В настоящее время на многих предприятиях и в учреждениях довольно часто встает необходимость обеспечения доступа удаленного филиала или подразделения к ресурсам локальной сети головного офиса. Также такая необходимость возникает и для отдельных сотрудников, например, работающих из дома и имеющих необходимость получить доступ к базам данных предприятия. При этом удаленные пользователи, часто находящиеся даже в другом городе или стране, вынуждены использовать открытые сети Интернета, и, следовательно, встает вопрос обеспечения безопасности данных и исключения утечки информации.
Для решения проблемы сохранения безопасности данных и информации при такой необходимости удаленного доступа к локальным сетевым ресурсам и базам данных предприятия/учреждения применяется подход с использованием виртуальных частных сетей, или VPN (Virtual Private Network). Как это работает: создается виртуальный цифровой канал поверх открытых сетей, и перехват трафика третьими лицами не позволит им получить доступ к секретной информации, так как при этом используются надежные алгоритмы шифрования потока данных.
Кроме того, VPN-решение подходит и частным лицам, часто вынужденным использовать открытые незашифрованные сети в кафе или гостиницах для обеспечения приватности и доступа к своим домашним архивам.
2. Использование маршрутизаторов для VPN-соединений
На данный момент большинство VPN-решений обеспечивают кросс-платформенную совместимость, демонстрируя отличную работу на различных типах устройств (Windows, Mac, Linux, iOS, Android) как при использовании специальных клиентов, так и при ручной настройке. Однако в большинстве случаев для системных администраторов предприятий и учреждений такой подход с использованием отдельных конфигурационных файлов VPN-клиентов для каждого работника предприятия, часто имеющего несколько устройств (компьютер, телефон, планшет), не является приемлемым из-за большого объема работы по настройке иподдержке всех устройств. В таких случаях применимо централизованное использование маршрутизаторов (роутеров), поддерживающих постоянное соединение с головным VPN-сервером предприятия/учреждения 24 часа в сутки и обеспечивающих доступ к данным локальных сетевых ресурсов для всех своих пользователей одновременно, подключенных проводным или беспроводным соединением к маршрутизатору. При таком подходе IT-специалистам достаточно настроить и поддерживать в рабочем состоянии только сам маршрутизатор, автоматически обеспечивая тем самым VPN-соединение для всех работников филиала и ихразличных устройств.
Кроме того, сравнительно недорогой бытовой маршрутизатор может выступать и в качестве дешевого домашнего микросервера VPN для нужд частного лица, обеспечивая приватность его соединения при использовании открытых Wi-Fi-сетей. Такие бытовые маршрутизаторы относятся к классу SOHO (Small Office, Home Office), они доступны по цене и могут быть также использованы для подключения относительно небольшого филиала или квартиры работника к центральному серверу VPN.
3. Проблема, возникающая при использовании маршрутизаторов для VPN-соединений
В настоящее время наиболее широкое распространение получила частная виртуальная сеть OpenVPN [1], [2] с открытым исходным кодом, применяемая для создания зашифрованных каналов и свободно распространяемая под лицензией GNU GPL [3]. Она позволяет устанавливать соединения между компьютерами и устройствам, находящимися за NAT и сетевым экраном, без необходимости изменения их настроек. Данные, которые передаются и принимаются VPN-сервером, идут по шифрованному каналу, защита которого обеспечивает безопасность и приватность. Шифрование и дешифрование данных происходят как на сервере, так и наклиентской машине. При этом чаще всего для шифрования канала используется OpenSSL [4] – полноценная криптографическая библиотека с открытым исходным кодом, широко известная из-за расширения SSL/TLS, используемого в веб-протоколе HTTPS. Она поддерживает симметричный алгоритм блочного шифрования AES [5], который является одним из самых распространенных в настоящее время алгоритмов криптографии. Так, аппаратная поддержка AES введена компанией Intel в семейство процессоров x86, которые в основном используются в современных мощных компьютерах – серверах VPN.
Однако подавляющее большинство современных маршрутизаторов построено на базе намного более слабого типа процессоров ARMv7-A [6], управляемых специализированной версией Linux и чаще всего с аппаратным ускорением NAT и беспроводного соединения (прошивкой), но не обладающих поддержкой AES-шифрования на уровне ЦПУ. Таким образом, при использовании маршрутизаторов критичным местом является скорость работы библиотеки OpenSSL, чтобы шифрование и дешифрование не замедляли скорость канала OpenVPN, тем самым обеспечивая быстрый доступ пользователей к данным удаленной локальной сети.
4. Методы ускорения работы OpenSSL с учетом специфических возможностей ARM-процессора
Рассмотрим типичную ошибку, допускаемую разработчиками программного обеспечения маршрутизаторов. Часто разработчики не являются постоянными сотрудниками компании производителя маршрутизаторов, а временно наняты в формате аутсорсинга.
OpenSSL является кросс-платформенным решением, и ее сборка кросс-компилятором, как и само использование, возможны для различных типов процессоров (x86, ARM, MIPS, PowerPC и т.д.). Однако такой формальный обобщенный подход к компиляции OpenSSL не раскрывает полностью всех возможностей целевого процессора, что приводит к деградации скорости шифрования и дешифрования, замедляющей VPN-канал.
Самый первый процессор архитектуры ARM был создан еще в 1985 году, и с того времени архитектура постоянно совершенствовалась и дополнялась.
Так, например, ARMv7-A на базе ядра Cortex-A9, довольно широко используемый в маршрутизаторах, опционально поддерживает усовершенствованный SIMD [7], названный технологией NEON, что позволяет обеспечить параллелизм вычислений, а это значительно ускоряет процесс шифрования и дешифрования. Кроме того, Cortex-A9 также опционально может содержать блок VFPv3 FPU.
Более продвинутый вариант процессора с ядром Cortex-A15 или близкий к нему вариант процессора Snapdragon Krait [9] компании Qualcomm уже в обязательном порядке содержит и NEON и VFPv4 FPU. Использование этих специальных возможностей процессора позволяет значительно ускорить работу криптоалгоритмов на современных ARMv7-A, а значит, и ускорить OpenVPN-канал.
Рассмотрим пример ошибки, допущенной разработчиками компании, создающей официальную прошивку для маршрутизатора R9000 компании NETGEAR. При этом R9000 позиционируется NETGEAR, как самый быстрый маршрутизатор в мире. Он оснащен достаточно мощным четырехядерным ARM-процессором с частотой 1.7ГГц с ядром Cortex-A15.
Ниже представлены результаты тестов OpenSSL официальной прошивки маршрутизатора:
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
sha1 19729.61k 54213.54k 111554.18k 150575.10k 168700.40k
des cbc 33284.58k 34141.59k 34585.00k 34665.81k 34553.86k
des ede3 12548.81k 12727.87k 12788.65k 12801.71k 12782.25k
aes-128 cbc 57205.07k 60562.69k 62545.32k 63109.12k 63310.51k
aes-192 cbc 50571.55k 52632.14k 53764.35k 54159.02k 54274.73k
aes-256 cbc 44746.83k 45857.66k 47048.96k 47419.08k 47363.41k
sha256 13311.57k 29732.76k 50673.44k 61281.28k 65227.43k
sha512 3768.93k 14927.25k 21400.58k 29089.11k 32216.41k
sign verify sign/s verify/s
rsa 2048 bits 0.036533s 0.001101s 27.4 908.0
sign verify sign/s verify/s
dsa 2048 bits 0.012148s 0.013405s 82.3 74.6
А это результаты того же теста при специализированном использовании инструкций NEON и некоторых других возможностей Cortex-A15 для OpenSSL в созданной автором статьи версии прошивки на том же маршрутизаторе:
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
sha1 21691.86k 67717.40k 163728.90k 251297.48k 296394.75k
des cbc 33224.61k 34769.92k 35351.13k 35573.21k 35370.33k
des ede3 13231.06k 13375.81k 13498.79k 13595.49k 13485.29k
aes-128 cbc 76702.52k 80093.80k 83207.17k 84156.70k 83875.16k
aes-192 cbc 61568.46k 66469.16k 70230.95k 71435.13k 71363.24k
aes-256 cbc 55345.12k 57141.60k 58567.85k 58935.30k 59026.09k
sha256 24173.65k 56915.65k 102226.09k 128476.16k 139047.56k
sha512 11151.64k 44457.20k 66356.57k 93356.71k 105865.22k
sign verify sign/s verify/s
rsa 2048 bits 0.008718s 0.000212s 114.7 4709.8
sign verify sign/s verify/s
dsa 2048 bits 0.002358s 0.002485s 424.1 402.4
Как можно заметить, достигнуто увеличение скорости алгоритма AES до 33 процентов, алгоритм хеширования SHA-512 [10] ускорен более, чем в 3 раза, а алгоритм RSA [11] подписи и проверки ускорен в 4-5 раз. Это значит, что скорость OpenVPN соединения для данного маршрутизатора может быть увеличена примерно на 35-50 процентов при использовании альтернативной оптимизированной прошивки, и «самый быстрый маршрутизатор в мире» может быть ускорен.
Еще более интересные результаты тестов можно получить, применяя те же способы оптимизации для маршрутизаторов с двухъядерным процессором IPQ8064 компании Qualcomm с частотой 1.4ГГц и ядром Snapdragon Krait. Данный процессор используется в маршрутизаторах NETGEAR R7500, R7500v2, ZyXEL NBG6816, ASUS RT-AC87U и некоторых других производителей. Так, для алгоритма AES-256-CBC в официальной прошивке от компании NETGEAR наблюдается скорость 24443.80k для блока размером 1 КБ, а в прошивке, оптимизированной автором, результат 42048.00k. То есть скорость OpenVPN-соединения может и, следовательно, должна быть увеличена как минимум на 70 процентов.
5. Методы ускорения работы OpenSSL при нестандартном использовании дополнительных аппаратных средств маршрутизаторов
Многие современные маршрутизаторы, хотя и не обладают поддержкой AES-инструкций в центральном процессоре в соответствии со спецификацией ARMv7-A, тем не менее оснащены специальными аппаратными криптографическими ускорителями, которые чаще всего используются в закрытых кодах драйверов производителей чипсетов для этих маршрутизаторов.
Тем не менее использование таких аппаратных ускорителей вполне применимо и для целей ускорения OpenSSL, а следовательно, и для увеличения скорости OpenVPN-канала, что, к сожалению, очень часто игнорируется разработчиками официальных прошивок.
Так, все тот же маршрутизатор R9000 компании NETGEAR оснащен специальным PCI-устройством аппаратного криптографического ускорителя. Тем не менее в официальной прошивке данные возможности для ускорения OpenSSL не используются, так же как и возможности самого ЦПУ, что описано выше.
Для доступа к возможностям таких аппаратных криптографических ускорителей обычно используется метод доступа через драйвер ядра, так как сами ускорители поддерживают инструкции, отличающиеся от инструкций ЦПУ. Драйвер ядра, созданный автором для R9000, создает после загрузки прошивки специальное устройство /dev/crypto, которое позволяет OpenSSL использовать аппаратные возможности ускорителя. Результаты тестов OpenSSL при использовании аппаратного ускорителя для алгоритма AES-256-CBC:
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
aes-256-cbc 1313.02k 5265.17k 20732.59k 70701.06k 305261.23k
Как можно заметить, сравнивая с ускорением, описанным выше при полном использовании всех возможностей ЦПУ (NEON и т.п.):
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
aes-256 cbc 55345.12k 57141.60k 58567.85k 58935.30k 59026.09k
и даже при игнорирования специфики процессора в официальной прошивке:
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
aes-256 cbc 44746.83k 45857.66k 47048.96k 47419.08k 47363.41k
наблюдается существенная деградация производительности для малых блоков памяти размером менее 1 КБ (от 16 байт до 256 байт). Это происходит из-за специфики взаимодействия шины PCI с памятью RAM-устройства. Однако принцип работы OpenVPN основан на использовании достаточно больших блоков памяти, и, следовательно, этой деградацией для малых блоков можно пренебречь. И для достаточно больших блоков в 8 КБ мы получаем ускорение почти в 6,5 раза.
Для демонстрации возможностей маршрутизатора, достижимых при использовании аппаратных возможностей криптографических устройств, можно привести результаты аналогичного теста для процессора Intel Xeon L5420 с тактовой частотой 2.50ГГц, использующегося в сервере HP Proliant, который до сих пор применяется во многих учреждениях и предприятиях:
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
aes-256-cbc 114937.78k 144171.48k 154188.71k 156741.29k 157261.82k
То есть для блоков от 8 КБ скорость OpenSSL в относительно недорогом маршрутизаторе стоимостью в несколько сотен долларов США, с процессором на базе ARMv7-A, с тактовой частотой 1.7 ГГц почти в два раза превосходит скорость high-end-сервера стоимостью в несколько тысяч долларов США.
6. Методы общей оптимизации, использующие возможности компилятора и учитывающие специфику целевого ARM-процессора
Еще одна типичная ошибка, допускаемая разработчиками официального программного обеспечения маршрутизаторов – это некорректный набор опций компилятора GNU C/C++, используемый при сборке всей прошивки, а следовательно, и OpenVPN.
Обычно такой набор опций устанавливается в конфигурационном файле один раз и затем автоматически используется для сборки всех программных пакетов прошивки и ядра Linux. Особенно это касается нестандартных целевых ARM-совместимых ЦПУ, таких как, например, семейство процессоров Snapdragon с ядром Krait компании Qualcomm, которые созданы по лицензии от ARM.
Например, рассмотрим двухядерные процессоры Qualcomm IPQ8065 с тактовой частотой 1.7ГГц, использующиеся в таких маршрутизаторах, как NETGEAR R7800, Synology RT2600ac, Asus BRT-AC828 и некоторых других производителей.
Разработчики официальных прошивок ошибочно предполагают, что данный процессор с ядром Krait является клоном ядра Cortex-A9 от ARM, не учитывая, что по набору инструкций и поддерживаемым расширениям, Krait скорее является клоном более продвинутого ядра Cortex-A15, который обладает значительно большей производительностью и большими возможностями из-за этих расширений. Причем такую ошибку допускали в свое время и разработчики усовершенствованной версии компилятора GNU C/C++ Linaro (Linaro – некоммерческая организация, занимающаяся консолидацией и оптимизацией программного обеспечения соткрытыми исходными кодами для платформ ARM) и даже разработчики широко известной альтернативной прошивки OpenWRT/LEDE [12].
Так, в официальной версии прошивки для маршрутизатора NETGEAR R7800 до сих пор используются опции компилятора, такие как [13]:
–march=armv7-a
–mfpu=vfpv3-d16
в то время, как ЦПУ с ядром Krait поддерживает более продвинутый блок FPU: VFPv4, а использование –march=armv7-a не позволяет, например, использовать такие инструкции, как SDIV/UDIV, для целочисленного деления чисел, которые выполняются намного быстрее, чем аналогичные стандартные инструкции ARM. То есть набор инструкций для Cortex-A15, а следовательно, и для Krait, является надмножеством инструкций ARMv7-A. Таким образом, простая замена этих опций компилятора на:
–mcpu=cortex-a15
–mfpu=neon-vfpv4
позволяет получить увеличение производительности OpenVPN на 10-15 процентов, как и общей производительности маршрутизатора, так как разработчики официальной прошивки ограничивали использование всех возможностей целевого ЦПУ выбором некорректных опций GNU C/C++ компилятора.
Например, результаты теста вычисления скорости работы с RAM и вычисления чисел Пи и E с использованием опций, выбранных разработчиками официальной прошивки (–march=armv7-a и –mfpu=vfpv3-d16) на маршрутизаторе с процессором IPQ8065:
Time to run memory bench: 0.49[secs]
Time to run computation of pi (2400 digits, 10 times): 2.88[secs]
Time to run computation of e (9009 digits): 2.41[secs]
А этот же тест с опциями –mcpu=cortex-a15 и –mfpu=neon-vfpv4:
Time to run memory bench: 0.43[secs]
Time to run computation of pi (2400 digits, 10 times): 1.50[secs]
Time to run computation of e (9009 digits): 1.43[secs]
Так, можно наблюдать значительное увеличение скорости вычислений, что ведет и к увеличению скорости канала OpenVPN (как, впрочем, и к увеличению общей производительности маршрутизатора).
7. Заключение
Методы оптимизации скорости OpenVPN, рассмотренные выше, включены автором в прошивку Voxel для маршрутизаторов NETGEAR R7500/R7800/R9000, которая используется тысячами владельцев этих маршрутизаторов по всему миру, успешно конкурируя как с официальной прошивкой от NETGEAR, так и с другими альтернативными прошивками, и позволяет получить высокую скорость OpenVPN-канала.
- https://ru.wikipedia.org/wiki/OpenVPN
- https://openvpn.net/
- https://ru.wikipedia.org/wiki/GNU_General_Public_License
- https://ru.wikipedia.org/wiki/OpenSSL
- https://ru.wikipedia.org/wiki/Advanced_Encryption_Standard
- https://ru.wikipedia.org/wiki/Список_архитектур_ARM
- https://ru.wikipedia.org/wiki/SIMD
- https://ru.wikipedia.org/wiki/ARM_(архитектура)
- https://ru.wikipedia.org/wiki/Krait_(CPU)
- https://ru.wikipedia.org/wiki/SHA-2
- https://ru.wikipedia.org/wiki/RSA
- https://openwrt.org/ru/about
- https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html
Ключевые слова: VPN, марщрутизатор, скорость, настройка.
Acceleration of the speed for VPN connections to remote databases using routers powered by ARM CPU
Andreev S.V., Khlupina A.A., Keldysh Institute of Applied Mathematics RAS, Moscow, Russia
Abstract: This work is devoted to the tasks of acceleration of OpenVPN speed using ARM-based routers.
Keywords: VPN, router, speed, configuration.
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|