WireGuard VPN: основы

WireGuard — это бесплатная программа для создания виртуальной частной сети (VPN). С помощью VPN вы можете открыть виртуальный туннель между двумя компьютерами в Интернете. Через туннель создается сетевое соединение, как если бы компьютеры были напрямую соединены сетевым кабелем. VPN часто используются крупными организациями, такими как научно-исследовательские институты, правительственные учреждения и компании. Они позволяют регулировать доступ к определенным ресурсам в сети и изолировать поток данных пользователей от внешнего мира.

Уже существует целый ряд зрелых стеков протоколов VPN: IPsec, OpenVPN, L2TP и PPTP. Поставщики VPN-решений основываются на этих протоколах, чтобы дать своим пользователям возможность пропускать собственный интернет-трафик через VPN. Все больше провайдеров VPN интегрируют WireGuard благодаря преимуществам этого протокола в свои приложения.

Что такое WireGuard?

WireGuard — это приложение и сетевой протокол для создания зашифрованных VPN-туннелей. Он лицензируется как свободное программное обеспечение под лицензией GPLv2 и доступен для различных платформ. WireGuard написан на языках «C» и «Go» и работает на Windows, macOS, BSD, iOS и Android.

WireGuard позволяет создать зашифрованный туннель. Потоки данных направляются через туннель и тем самым защищаются от несанкционированного доступа. Помимо акцента на надежное шифрование, WireGuard предлагает оптимизацию для мобильных систем и устройств Интернета вещей (IoT).

С весны 2020 года WireGuard напрямую интегрирован в ядро Linux. Поскольку Linux является стандартной операционной системой на миллиардах сетевых устройств по всему миру, WireGuard может использоваться практически везде. Его широкому распространению способствует и тот факт, что программное обеспечение является относительно компактным и предъявляет лишь скромные требования к аппаратному обеспечению.

Каковы особенности WireGuard?

Центральной особенностью протокола WireGuard является криптоключевая маршрутизация. Здесь диапазоны IP-адресов, разрешенные в туннеле, назначаются на открытый ключ партнера по соединению. Открытый ключ используется для расшифровки входящих пакетов партнера по соединению. Входящий пакет назначается после расшифровки только в том случае, если он пришел с IP-адреса, соответствующего ключу. В противном случае пакет отбрасывается.

В отличие от устоявшихся стеков протоколов VPN IPsec и OpenVPN, WireGuard не является гибким протоколом. Вместо того чтобы индивидуально согласовывать соответствующие криптографические базы на этапе рукопожатия при установлении соединения, WireGuard ограничивается несколькими вариантами. Используемые криптографические функции имеют версии в объединенном виде. Если в будущем одна из криптографических основ окажется скомпрометированной, будет выпущена новая, безопасная версия протокола WireGuard. Если оба партнера по коммуникации используют новую версию, поток данных будет защищен.

На момент написания статьи используются следующие протоколы и технологии шифрования:

  • Протокол Noise
  • Curve25519
  • ChaCha20
  • Poly1305
  • BLAKE2
  • SipHash24
  • HKDF

Каковы преимущества WireGuard?

Аккуратная кодовая база — одно из главных преимуществ WireGuard. Объем всего кода ядра составляет всего около 4 000 строк кода. Для сравнения, объем кода реализации OpenVPN или IPsec составляет от 100 000 до 600 000 строк. Меньшая кодовая база по своей сути более безопасна, поскольку разработчикам легче найти ошибки и минимизировать площадь атаки.

Даже изобретатель Linux Линус Торвальдс, известный своим язвительным стилем письма и периодическими выпадами, после ознакомления с кодовой базой WireGuard отозвался о ней с похвалой:

Цитата

«Возможно, код не идеален, но я просмотрел его, и по сравнению с ужасами, которые представляют собой OpenVPN и IPsec, это произведение искусства». — Источник: netdev — Re: [GIT] Networking

Помимо повышенной безопасности, меньшая сложность программного обеспечения также обеспечивает лучшую производительность. В сравнительных тестах WireGuard обеспечивает более высокую скорость передачи данных и меньшую задержку по сравнению с конкурирующими протоколами. Более того, WireGuard не является «болтливым протоколом». WireGuard остается тихим до тех пор, пока пользователь не отправляет данные через туннель. Это также означает, что потребляется меньше энергии, что положительно сказывается на времени автономной работы.

Энергоэффективность особенно важна для мобильных устройств, и WireGuard во многих отношениях хорошо подходит для таких приложений. Например, протокол поддерживает роуминг — то есть автоматическое переключение с WLAN на мобильную сеть и наоборот. Тем не менее, при потере соединения восстановление связи с WireGuard обычно происходит быстрее, чем с конкурирующими протоколами.

Как работает WireGuard?

В принципе, WireGuard — это децентрализованный, одноранговый протокол VPN. Вместо того, чтобы использовать сервер, WireGuard может открывать туннель непосредственно между двумя компьютерами. Сервер» WireGuard — это просто машина, содержащая конфигурации соединений для нескольких одноранговых компьютеров.

Установление соединения с WireGuard происходит примерно так же, как и с Secure Shell (SSH): Пользователи («пиры») генерируют открытые ключи в WireGuard и обмениваются ими друг с другом. Используя эти ключи, пользователи взаимно аутентифицируют друг друга и шифруют пакеты данных для их адресата.

Помимо генерации криптографических ключей, на каждом пире должны быть реализованы различные сетевые настройки. Подробнее об этом см. в нашем руководстве по настройке WireGuard ниже. Для обмена данными разрешенные диапазоны IP-адресов связываются с криптографическим ключом на пирах. Пакеты, которые не приходят из разрешенных диапазонов адресов, отбрасываются. В WireGuard данные передаются по протоколу User Datagram Protocol (UDP).

На машине аналога для настройки используется инструмент командной строки WireGuard и другие ресурсы, стандартно доступные в Linux. Хотя настройка программного обеспечения считается относительно простой, WireGuard служит лишь основой. Приложение поверх протокола может помочь пользователям пройти отдельные этапы настройки и установления соединения. Поэтому пользователи коммерческих служб VPN могут пользоваться современным протоколом VPN, не имея дела с командной строкой.

Первые шаги с WireGuard

По сути, WireGuard может быть установлен и настроен в системе Linux без особых усилий. Например, вы можете создать свой собственный VPN-сервер с помощью Raspberry Pi. Однако точный процесс зависит от приложения, используемой операционной системы и существующего сетевого окружения. Ниже мы описали общий подход, который подходит для тестирования.

Совет

Установите WireGuard на IONOS vServer и создайте свою собственную VPN.

Установка WireGuard на собственную систему

Выполните следующие команды в командной строке для установки WireGuard на вашу систему Linux:

# for Ubuntu from version 19.10
sudo apt install wireguard
# for Ubuntu versions below 19.10
sudo add-apt-repository ppa:wireguard/wireguard
sudo apt-get update
sudo apt-get install wireguard
Примечание

Показанные шаги относятся к установке на Ubuntu Linux. На других системах вам может потребоваться корректировка кода.

Генерация ключей WireGuard

Как и в случае с SSH и PGP, криптографические ключи составляют основу для использования WireGuard VPN. Закрытый ключ должен храниться в секрете. Более того, с помощью закрытого ключа генерируется открытый ключ, который передается другим пользователям. Это позволяет одноранговым пользователям шифровать и отправлять данные. Наконец, закрытый ключ используется для расшифровки зашифрованных данных.

Выполните следующие команды в командной строке, чтобы сгенерировать закрытый и открытый ключ WireGuard:

# Create directory for keys
# WARNING: only for test purposes as it is not protected!
mkdir ~/.wireguard/ && cd ~/.wireguard/
# Set file rights
umask 077
# Generate private key
wg genkey > privatekey
# Generate public key using the private key
wg pubkey < privatekey > publickey

Настройка сетевых параметров для WireGuard

Установка WireGuard и генерация ключей — это общие подготовительные процедуры, которые более или менее одинаковы на любой системе. В отличие от этого, конфигурация WireGuard зависит от существующих настроек локальной сети. По этой причине ниже приведен общий подход. Для получения более подробной информации мы рекомендуем обратиться к руководству по быстрому запуску, предоставленному проектом WireGuard.

Общие шаги по настройке сетевого соединения с WireGuard приведены ниже:

# Add WireGuard network interface
ip link add dev wg0 type wireguard
# Configure IP addresses
ip address add dev wg0 192.168.2.1 peer 192.168.2.2
# Configure network interface using the configuration file
wg setconf wg0 myconfig.conf
# Activate network interface
ip link set up dev wg0
Резюме

WireGuard является современным, стройным претендентом на место устаревших стеков протоколов VPN IPsec и OpenVPN и может в значительной степени заменить их в обозримом будущем.

Оцените статью
cdelat.ru
Добавить комментарий