НАЗВАНИЕ Почему люблю IKEv2 больше других VPN метки openvpn ikev2 ipse

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
НАЗВАНИЕ: Почему я люблю IKEv2 больше других VPN
метки: openvpn, ikev2, ipsec, strongswan, x.509, ssl, mschapv2, eap
картинка для соц. сетей: https://habrastorage.org/webt/gg/tv/jr/ggtvjr7iq-tknhzeiv-3cdogqw0.png
<img src="https://habrastorage.org/webt/gg/tv/jr/ggtvjr7iq-tknhzeiv-3cdogqw0.png" />
Сейчас все вокруг настраивают VPN для удаленных сотрудников. Мне больно смотреть, как люди устанавливают монструозные глючные программы, настраивают какие-то сертификаты, устанавливают драйвера TUN/TAP и делают множество сложных операций, в то время как лучшее решение уже встроено в операционную систему.
IKEv2 — это современный протокол VPN, разработанный Microsoft и Cisco. Он используется по умолчанию для новых VPN-подключений в Windows, macOS, iOS. Он быстрее и безопаснее большинства VPN-протоколов и может легко настраиваться на стороне клиента в два клика без использования сторонних программ.
Я считаю, что IPsec IKEv2 отлично подходит не только для соединения серверов, но и для обычных VPN-подключений конечных пользователей. В этом посте я постараюсь убедить вас использовать IPsec IKEv2 для обычных домашних пользователей вместо OpenVPN.
<cut />
<h2>IKEv2 быстрее</h2>
При прочих равных условиях, IKEv2 будет всегда быстрее OpenVPN. Это особенно заметно на маломощных системах с медленной памятью, например на роутерах или одноплатных компьютерах.
Дело в том, что IPsec работает в контексте ядра операционной системы, а OpenVPN в контексте пользователя (userspace), и на обработку каждого пакета происходит переключение контекста между процессами ядра и процессами пользователя. Это влияет как на пропускную способность, так и на задержки.
<img src="https://habrastorage.org/webt/uy/3-/46/uy3-46uxfp_8yy9hp2l314om5fq.png" />
<font color="999999"><sup>Сравнение задержек для разных протоколов VPN.</sup></font>
Скриншот выше показывает разницу в задержке в два раза между IPsec и OpenVPN. Разумеется, разницу в 1мс невозможно заметить на глаз, но при нагрузке на систему эти значения могут значительно изменяться. Кроме того, реальные показатели сильно зависят от характеристик конкретной системы, поэтому я не буду приводить абсолютные цифры для сравнения двух протоколов. Задержки очень важны при использовании голосовой и видеосвязи через VPN.
По моим субъективным ощущениям IKEv2 на Windows 10 работает заметно отзывчивее чем OpenVPN. Ведь реальное использование десктопного компьютера сильно отличается от синтетических тестов VPN-протоколов. Нагрузка на процессор и память непостоянная, пользователь может запускать ресурсоемкие программы, все это будет влиять на показатели.
<h2>IKEv2 проще в настройке</h2>
Все современные операционные системы (кроме Android) поддерживают IPsec IKEv2 прямо из коробки. <b>Не нужно устанавливать никакие программы</b>, драйвера виртуальных адаптеров TUN/TAP и прочее. Всё управление VPN происходит из системного меню.
При этом настройку на клиенте можно упростить до трех строчек:
<ul>
<li><b>Домен</b> — для IPsec домен обязателен, так как для него выпускается SSL-сертификат</li>
<li><b>логин</b></li>
<li><b>пароль</b></li>
</ul>
Не нужно больше передавать клиенту файлы с сертификатами и ключами, заставлять его импортировать корневые сертификаты в системное хранилище. Достаточно логина и пароля, при этом соединение будет так же надежно защищено, как и в OpenVPN при использовании сертификатов, ведь для установки соединения используется такой же x.509 сертификат, как и для веб-сайтов с HTTPS.
<h3>Настройка на Windows 10</h3>
Мастер настройки VPN вызывается из меню подключения к WiFi. С настройкой одного окна справится пользователь любой квалификации. Созданное подключение активируется из меню со списком WiFi-сетей.
<img src="https://habrastorage.org/webt/ju/fm/cg/jufmcgkjprojhspfqnbxjacdhtw.png" />
<font color="999999"><sup>Интерфейс настройки нового IKEv2 подключения в Windows 10</sup></font>
<spoiler title="Настройка macOS">
В macOS поддерживается IKEv2 начиная с версии 10.11 (El Capitan). Создание подключения происходит через меню настроек сети.
<img src="https://habrastorage.org/webt/f4/ad/hk/f4adhkw9swpneyfo0jn9jgro9s4.png" alt="image"/>
Добавляем новое подключение. В качестве имени подключения задаем любое произвольное имя.
<img src="https://habrastorage.org/webt/xc/ng/zq/xcngzqon0ilejqrl7hqla-8vbf4.png" alt="image"/>
Для проверки подлинности сертификата, нужно указать доменное имя. При этом в поле "Server Address" можно указать IP-адрес сервера, а домен только в "Remote ID", тогда для подключения не будет выполняться DNS-резолв, и оно будет происходить чуть быстрее.
<img src="https://habrastorage.org/webt/x4/c2/eq/x4c2eqk2waefy8woi_pnaa8o5uw.png" alt="image"/>
Логин и пароль пользователя указываем из файла <b>/etc/ipsec.secrets</b>
<img src="https://habrastorage.org/webt/-p/gu/98/-pgu98eevkywzjzqjd7dfvq94zc.png" alt="image"/>
</spoiler>
<spoiler title="Настройка iOS">
Настройку iOS можно выполнить вручную через мастер, но намного удобнее использовать профиль автоконфигурации mobileconfig.
Ручная настройка по смыслу аналогична десктопной macOS:
<b>Настройки -> VPN -> Добавить конфигурацию VPN</b>
</spoiler>
<h2>IKEv2 это безопасно</h2>
На предыдущем шаге мы выяснили, что для настройки подключения достаточно логина и пароля. Но как клиенту проверить, что подключение не прослушивается, не подменяются данные и сервер действительно тот, за кого себя выдает? Для этого используются обычные SSL-сертификаты, которые мы привыкли использовать для веб-сайтов и HTTPS.
<img src="https://habrastorage.org/webt/21/rh/ka/21rhkapzsdz7of__ym8ea2fqshw.png" />
Клиент устанавливает защищенный SSL-тоннель с сервером, и уже внутри него передается логин-пароль. По умолчанию в Windows и macOS для передачи пароля используется алгоритм mschapv2. Таким образом с помощью SSL-сертификата клиент проверяет подлинность сервера, а по логину-паролю сервер проверяет подлинность клиента.
Сервер IKEv2 может использовать один и тот же сертификат вместе с веб-сервером, например от популярного Let's Encrypt. Это сильно упрощает управлением сертификатами.
Такая же модель используется в OpenVPN, и при желании в нем можно использовать сертификат от Lets Encrypt, однако администратору в любом случае потребуется передать пользователю файл для настройки VPN.
<h2>SSL-сертификат без настроек</h2>
В данной статье мы рассматриваем IKEv2 только со стороны удобства пользователя и не затрагиваем настройку сервера. На хабре достаточно статей <a href="https://habr.com/ru/search/?q=%5Bstrongswan%5D&target_type=posts">по настройке сервера IKEv2 </a>. Однако один нюанс стоит упомянуть.
В OpenVPN меня напрягает менеджмент ключей и сертификатов: для каждого пользователя нужно генерировать отдельный файл, поддерживать собственный центр сертификации. Даже при использовании сертификата от Lets Encrypt, администратору все равно нужно генерировать свои собственные файлы с сертификатами.
Администратор, использующий сервер OpenVPN может возразить, что для использования IKEv2 вместе с публичным SSL-сертификатом обязательно требуется доменное имя, а это не всегда удобно. Например, в случае с автоматическим развертыванием из образов или контейнеров. Но решение есть.
Сервис SSLip.io предоставляет заранее сгенерированные домены для всех существующих IP-адресов в мире. Достаточно просто преобразовать IP-адрес вашего сервера в специальную запись поддомена.
Вот как это выглядит:
Если IP-адрес сервера: <code>123.45.67.89</code>
Домен будет: <code>123-45-67-89.sslip.io</code>
Проверим действительно ли это так:
<source lang="bash">$ host 123-45-67-89.sslip.io
123-45-67-89.sslip.io has address 123.45.67.89</source>
Так можно моментально выпустить сертификат для нового сервера без необходимости настраивать какие-либо домены и DNS. SSLip.io можно использовать в скриптах в связке с автоматическим определением внешнего IP-адреса сервера, и генерировать полностью настроенный сервер прямо при первой загрузке.
<h2>Заключение</h2>
Мы рассмотрели удобство IKEv2 со стороны пользователя. Администрирование такого сервера не сложнее, а иногда даже проще чем OpenVPN. Если вы только планируете организовать удаленный доступ для своих сотрудников, обязательно посмотрите в сторону IKEv2. Не заставляйте своих пользователей устанавливать лишние программы, если все необходимое уже есть на их компьютере. Это удобнее, безопаснее и намного прогрессивнее.