Оптимизация скорости VPN-соединений к удаленным серверам баз данных при использовании маршрутизаторов с ARM-процессорами::Журнал СА 05.2019
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
О журнале
Журнал «БИТ»
Подписка
Где купить
Авторам
Рекламодателям
Магазин
Архив номеров
Вакансии
Контакты
   

ЭКСПЕРТНАЯ СЕССИЯ 2019


  Опросы

Какие курсы вы бы выбрали для себя?  

Очные
Онлайновые
Платные
Бесплатные
Я и так все знаю

 Читать далее...

1001 и 1 книга  
28.05.2019г.
Просмотров: 974
Комментарии: 2
Анализ вредоносных программ

 Читать далее...

28.05.2019г.
Просмотров: 1097
Комментарии: 1
Микросервисы и контейнеры Docker

 Читать далее...

28.05.2019г.
Просмотров: 828
Комментарии: 0
Django 2 в примерах

 Читать далее...

28.05.2019г.
Просмотров: 662
Комментарии: 0
Введение в анализ алгоритмов

 Читать далее...

27.03.2019г.
Просмотров: 1263
Комментарии: 0
Arduino Uno и Raspberry Pi 3: от схемотехники к интернету вещей

 Читать далее...

Друзья сайта  

Форум системных администраторов  

sysadmins.ru

 Оптимизация скорости VPN-соединений к удаленным серверам баз данных при использовании маршрутизаторов с ARM-процессорами

Архив номеров / 2019 / Выпуск №05 (198) / Оптимизация скорости VPN-соединений к удаленным серверам баз данных при использовании маршрутизаторов с ARM-процессорами

Рубрика: Наука и технологии

Без фото АНДРЕЕВ С.В., ИПМ им. М.В. Келдыша РАН, Москва, Россия

Без фото ХЛУПИНА А.А., ИПМ им. М.В. Келдыша РАН, Москва, Россия

Оптимизация скорости 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-канала.

  1. https://ru.wikipedia.org/wiki/OpenVPN
  2. https://openvpn.net/
  3. https://ru.wikipedia.org/wiki/GNU_General_Public_License
  4. https://ru.wikipedia.org/wiki/OpenSSL
  5. https://ru.wikipedia.org/wiki/Advanced_Encryption_Standard
  6. https://ru.wikipedia.org/wiki/Список_архитектур_ARM
  7. https://ru.wikipedia.org/wiki/SIMD
  8. https://ru.wikipedia.org/wiki/ARM_(архитектура)
  9. https://ru.wikipedia.org/wiki/Krait_(CPU)
  10. https://ru.wikipedia.org/wiki/SHA-2
  11. https://ru.wikipedia.org/wiki/RSA
  12. https://openwrt.org/ru/about
  13. 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.


Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-41
Fax: (499) 277-12-45
E-mail: sa@samag.ru