вторник, 30 апреля 2019 г.

VPN - коротко о главном


Сразу поясню, что я не разбираюсь в сетях, протоколах и в том, как всё это устроено и работает. Другими словами, я не "сетевик". Но есть пограничные области, где системный администратор очень близко подходит и соприкасается с сетевыми технологиями. И вот тут-то нам и нужно понимать хотя бы базовые принципы работы. В статье приведены материалы, собранные по разным сайтам в Internet. Не претендую ни на какую полноту или достоверность.

В статье использованы материалы свободной энциклопедии Wikipedia.

Как сообщает Wikipedia, технология VPN была разработана для того, чтобы позволить удалённым офисам получить доступ к корпоративным ресурсам[1]. Для обеспечения безопасности используется один из туннельных протоколов, использующих шифрование (an encrypted layered tunneling protocol). А также аутентификация пользователей с использованием пароля и/или сертификата.

Туннельный протокол или протокол туннелирования - это коммуникационный протокол, который позволяет передавать данные из одной сети в другую.


СПРАВКА:
Коммуникационный протокол - это система правил, которая позволяет двум или более объектам системы связи передавать информацию посредством любого изменения физической величины. Протокол определяет правила, синтаксис, семантику и синхронизацию связи и возможные методы восстановления после ошибок. Протоколы могут быть реализованы аппаратными средствами, программным обеспечением или комбинацией обоих[3].


Суть туннелирования состоит в том, чтобы «упаковать» передаваемую порцию данных, вместе со служебными полями, в новый «конверт» для обеспечения конфиденциальности и целостности всей передаваемой порции, включая служебные поля. Этот процесс называется инкапсуляцией (encapsulation).

Инкапсуляция - это включение сообщений вышестоящего уровня в сообщения нижестоящего уровня. Так, например, WEB-страница инкапсулируется в HTTP, тот в свою очередь в TCP, затем в IP и так далее.

На скриншоте проиллюстрирован процесс инкапсуляции на примере отправки сообщения UDP.

 

Чтобы лучше понять иллюстрацию, вспоминаем модель OSI, которая показана на скриншоте.

Используя Microsoft Message Analyzer или Wireshark можно более наглядно посмотреть, как устроена инкапсуляция


На всякий случай, если кто-то забыл формат заголовка IPv4, то можете его увидеть на скриншоте ниже.


Собственно, комбинация туннелирования + шифрования и позволяет реализовать виртуальные частные сети (VPN)[2].

Вот наиболее популярные протоколы туннелирования. Каждый из них обладает своими особенностями, достоинствами и недостатками. Об этом позже.

·         GRE (Protocol 47): Generic Routing Encapsulation
·         OpenVPN (UDP port 1194): Openvpn
·         SSTP (TCP port 443): Secure Socket Tunneling Protocol
·         IPSec (Protocol 50 and 51): Internet Protocol Security
·         L2TP (Protocol 115): Layer 2 Tunneling Protocol

Давайте взглянем какие из этих протоколов поддерживает Windows 10 и iOS. Создавая и настраивая VPN соединение в Windows мы можем выбрать между PPTP, L2TP, SSTP и IKEv2 протоколами. Apple некоторое время назад отказались от поддержки PPTP и сейчас в iOS поддерживается IKEv2, L2TP и IPsec.



В Windows Server, запустив оснастку Routing and Remote Access, в свойствах элемента Ports мы можем увидеть, какие протоколы задействованы на нашем VPN-сервере в данный момент.



Теперь попробуем определиться, какой из этих протоколов выбрать. Как я уже говорил каждый из них имеет свои особенности. В интернете можно найти много статей на эту тему, не буду их повторять. Приведу лишь небольшую табличку, в качестве памятки. Из неё видно, что наиболее универсальным является протокол IKEv2. Он быстрый, защищенный, поддерживается Windows и iOS. Но не поддерживается производителям Android и Linux.


Обратите внимание на протокол OpenVPN. Он не присутствует нативно в Windows и iOS, но для этих ОС существует клиент, который позволяет настраивать и устанавливать VPN соединение с использованием данного протокола.

О том, как воспользоваться протоколом OpenVPN, как настроить серверную часть и клиентскую, я хочу написать отдельную статью. В интернете их существует огромное множество, но я не нашёл ни одной, которая описывала бы процесс настройки так как мне того хотелось бы. С необходимыми, на мой взгляд, пояснениями того или иного действия.