href https habr com ru company ruvds blog 498852 img src https habrast

  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
107
108
109
110
111
112
113
114
115
116
<a href="https://habr.com/ru/company/ruvds/blog/498852/"><img src="https://habrastorage.org/webt/gg/tv/jr/ggtvjr7iq-tknhzeiv-3cdogqw0.png" align="center"/></a>
Сейчас все вокруг настраивают VPN для удаленных сотрудников. Мне больно смотреть, как люди устанавливают монструозные глючные программы, настраивают какие-то сертификаты, устанавливают драйвера TUN/TAP и делают множество сложных операций, в то время как лучшее решение уже встроено в операционную систему.
IKEv2 — это современный протокол VPN, разработанный Microsoft и Cisco. Он используется по умолчанию для новых VPN-подключений в Windows, macOS, iOS. Он быстрее и безопаснее большинства VPN-протоколов и может легко настраиваться на стороне клиента в два клика без использования сторонних программ.
Я считаю, что IPsec IKEv2 отлично подходит не только для соединения серверов, но и для обычных VPN-подключений конечных пользователей. В этом посте я постараюсь убедить вас использовать IPsec IKEv2 для обычных домашних пользователей вместо OpenVPN.
<cut />
<h2><font color="#3AC1EF">IKEv2 быстрее</font></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><font color="#3AC1EF">IKEv2 проще в настройке</font></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><font color="#3AC1EF">Настройка на Windows 10</font></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><font color="#3AC1EF">IKEv2 это безопасно</font></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><font color="#3AC1EF">Настраиваем IKEv2 сервер</font></h2>
Развернуть свой IKEv2 сервер можно за пару минут с помощью скриптов автоматической установки или используя готовые контейнеры. Использовать docker не рекомендуется, так как его сетевая подсистема снижает производительность IPsec на дешевых тарифах VPS. Вы также можете настроить IKEv2-сервер вручную, на Хабре есть статьи с <a href="https://habr.com/ru/search/?q=%5Bstrongswan%5D&target_type=posts">примерами настройки сервера Strongswan</a>.
Мы будем использовать один из наиболее удачных вариантов скриптов автонастройки <a href="https://github.com/jawj/IKEv2-setup">github.com/jawj/IKEv2-setup</a>
Этот скрипт хорош тем, что использует сертификаты от Lets Encrypt и автоматически генерирует валидный сертификат.
<h2><font color="#3AC1EF">Шаг 1: Выбор сервера</font></h2>
Для запуска VPN сервер нам потребуется VDS. Подойдет самая простая конфигурация с одним ядром процессора. Скрипт из нашего примера лучше всего протестирован на Ubuntu 18.04, поэтому при создании сервера выбираем этот образ ОС.
<img src="https://habrastorage.org/webt/oy/uq/xq/oyuqxqe5ojckq6-rfdcmsbv9qps.png" />
Ждем окончания установки сервера и копируем реквизиты для подключения. Поль root придет на почту, либо его можно задать вручную через веб-интервейс. Далее все команды мы вводим
<img src="https://habrastorage.org/webt/uv/ot/vm/uvotvmd9a_5l7l_g3bnnqkudxhc.png" />
<h2><font color="#3AC1EF">Шаг 2: Установка Strongswan</font></h2>
Подключаемся SSH-клиентом и запускаем скрипт установки:
<source lang="bash">
# запуск автоматической установки сервера IKEv2
wget https://raw.githubusercontent.com/jawj/IKEv2-setup/master/setup.sh
chmod u+x setup.sh
./setup.sh
....
# Введите имя домена направленного на IP-адрес сервера
# используйте сервис sslip.io если у вас нет домена
Hostname for VPN: 123-45-67-89.sslip.io
# Имя пользователя VPN
VPN username: coolguy
# пароль
VPN password (no quotes, please):
....
# скрипт запрос создать нового SSH-пользователя, этот шаг нельзя пропускать.
</source>
<h2><font color="#3AC1EF">Шаг 3: Настройка клиента</font></h2>
Введенные реквизиты пользователя VPN теперь нужно использовать для настройки на клиенте. Важно использовать именно то доменное имя, которое вы вводили в <b>Hostname for VPN</b>.
<h2><font color="#3AC1EF">Заключение</font></h2>
Мы рассмотрели удобство IKEv2 со стороны пользователя. Администрирование такого сервера не сложнее, а иногда даже проще чем OpenVPN. Если вы только планируете организовать удаленный доступ для своих сотрудников, обязательно посмотрите в сторону IKEv2. Не заставляйте своих пользователей устанавливать лишние программы, если все необходимое уже есть на их компьютере. Это удобнее, безопаснее и намного прогрессивнее.