Главная » Виртуальные частные сети » Виртуальная частная сеть WireGuard » Общее и концептуальное описание WireGuard

📑 Общее и концептуальное описание WireGuard

WireGuard logo

Что такое WireGuard?

WireGuard® — это чрезвычайно простой, но быстрый и современный VPN, в котором используется самая современная криптография. Он нацелен на то, чтобы быть быстрее, проще, компактнее и полезнее, чем IPsec, избегая при этом огромной головной боли. Он намерен быть значительно более производительным, чем OpenVPN.

WireGuard разработан как VPN общего назначения для работы как на встроенных интерфейсах, так и на суперкомпьютерах, пригодный для многих различных ситуаций. Изначально выпущенный для ядра Linux, теперь он является кроссплатформенным (Windows, macOS, BSD, iOS, Android) и может широко развертываться. В настоящее время он находится в стадии интенсивной разработки, но уже может считаться самым безопасным, простым в использовании и самым простым решением VPN в отрасли.

Простой и легкий в использовании

WireGuard стремится быть таким же простым в настройке и развертывании, как и SSH. VPN-соединение устанавливается путем простого обмена очень простыми открытыми ключами — точно так же, как обмен ключами SSH — а все остальное прозрачно обрабатывается WireGuard. Он даже может перемещаться между IP-адресами, как и Мош. Нет необходимости управлять соединениями, беспокоиться о состоянии, управлять демонами или беспокоиться о том, что находится под капотом. WireGuard представляет собой чрезвычайно простой, но мощный интерфейс.

Криптографически надежный

WireGuard использует современную криптографию, такую ​​как структура протокола Noise, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF и безопасные доверенные конструкции. Он делает консервативный и разумный выбор и был рассмотрен криптографами.

Минимальная возможность атаки

WireGuard был разработан с учетом простоты внедрения и простоты. Он предназначен для того, чтобы его можно было легко реализовать в очень небольшом количестве строк кода и легко проверять на наличие уязвимостей. По сравнению с такими гигантами, как Swan / IPsec или OpenVPN / OpenSSL, в которых аудит гигантских кодовых баз является непосильной задачей даже для больших групп экспертов по безопасности, WireGuard предназначен для всестороннего анализа отдельными лицами.

Высокая производительность

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

Хорошо определен и тщательно продуман

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

Концептуальный обзор WireGuard

Если вам нужен общий концептуальный обзор того, что такое WireGuard, читайте дальше. Затем вы можете перейти к установке.

WireGuard надежно инкапсулирует IP-пакеты через UDP. Вы добавляете интерфейс WireGuard, настраиваете его, используя свой закрытый ключ и открытые ключи ваших коллег, а затем отправляете через него пакеты. Все вопросы распределения ключей и заданных конфигураций выходят за рамки WireGuard; эти проблемы лучше оставить для других уровней, иначе мы столкнемся с раздуванием IKE или OpenVPN. Напротив, он больше имитирует модель SSH и Mosh; у обеих сторон есть открытые ключи друг друга, а затем они просто могут начать обмен пакетами через интерфейс.

Простой сетевой интерфейс WireGuard

WireGuard работает путем добавления сетевого интерфейса (или нескольких), такого как eth0 или wlan0, который называется wg0 (или wg1, wg2, wg3 и т. д.). Затем этот сетевой интерфейс можно настроить обычным образом, используя ifconfig (8) или ip-address (8), с добавлением и удалением маршрутов для него с помощью route (8) или ip-route (8), и так далее со всеми обычными сетевыми утилитами.  Конкретные аспекты интерфейса WireGuard настраиваются с помощью инструмента wg (8). Этот интерфейс действует как туннельный интерфейс.

WireGuard связывает IP-адреса туннелей с открытыми ключами и удаленными конечными точками. Когда интерфейс отправляет пакет одноранговому узлу, он выполняет следующие действия:

  • Этот пакет предназначен для 192.168.30.8. Какой это пир? Дай мне посмотреть … Хорошо, это для коллеги ABCDEFGH. (Или, если это не для какого-либо настроенного однорангового узла, отбросить пакет.)
  • Зашифровать весь IP-пакет, используя открытый ключ однорангового узла ABCDEFGH.
  • Что такое удаленная конечная точка однорангового узла ABCDEFGH? Дайте мне посмотреть … Хорошо, конечная точка — это UDP-порт 53133 на хосте 216.58.211.110.
  • Отправить зашифрованные байты с шага 2 через Интернет на 216.58.211.110:53133, используя UDP.

Когда интерфейс получает пакет, происходит следующее:

  • Я только что получил пакет от UDP-порта 7361 на хосте 98.139.183.24. Давайте расшифруем это!
  • Он правильно расшифрован и аутентифицирован для однорангового LMNOPQRS. Хорошо, давайте вспомним, что последняя конечная точка Интернета однорангового узла LMNOPQRS — 98.139.183.24:7361 с использованием UDP.
  • После расшифровки это обычный текстовый пакет с адресом 192.168.43.89. Разрешено ли одноранговому узлу LMNOPQRS отправлять нам пакеты как 192.168.43.89?
  • Если да, примите пакет на интерфейсе. Если нет, удалить пакет.

Маршрутизация криптоключей в WireGuard

В основе WireGuard лежит концепция под названием Cryptokey Routing, которая работает путем связывания открытых ключей со списком IP-адресов туннеля, которые разрешены внутри туннеля. Каждый сетевой интерфейс имеет закрытый ключ и список одноранговых узлов. У каждого однорангового узла есть открытый ключ.

Открытые ключи короткие и простые, они используются одноранговыми узлами для аутентификации друг друга. Их можно передавать для использования в файлах конфигурации любым внеполосным методом, аналогично тому, как можно отправить открытый ключ SSH другу для доступа к серверу оболочки.

Например, серверный компьютер может иметь такую ​​конфигурацию:

[Interface]
PrivateKey = yAnz5TF+lXXJte14tji3zlMNq+hd2rYUIgJBgB3fBmk=
ListenPort = 51820

[Peer]
PublicKey = xTIBA5rboUvnH4htodjb6e697QjLERt1NAB4mZqp8Dg=
AllowedIPs = 10.192.122.3/32, 10.192.124.1/24

[Peer]
PublicKey = TrMvSoP4jYQlY6RIzBgbssQqY3vxI2Pi+y71lOWWXX0=
AllowedIPs = 10.192.122.4/32, 192.168.0.0/16

[Peer]
PublicKey = gN65BkIKy1eCE9pP1wdc8ROUtkHLF2PfAqYdyYBz6EA=
AllowedIPs = 10.10.10.230/32

And a client computer might have this simpler configuration:

[Interface]
PrivateKey = gI6EdUSYvn8ugXOt8QQD6Yc+JyiZxIhp3GInSWRfWGE=
ListenPort = 21841

[Peer]
PublicKey = HIgo9xNzJMWLKASShiTqIybxZ0U3wGLiUeJ1PKf8ykw=
Endpoint = 192.95.5.69:51820
AllowedIPs = 0.0.0.0/0

В конфигурации сервера каждый одноранговый узел (клиент) сможет отправлять пакеты на сетевой интерфейс с исходным IP-адресом, соответствующим его списку разрешенных IP-адресов. Например, когда пакет получен сервером от однорангового узла gN65BkIK …, после расшифровки и аутентификации, если его исходный IP-адрес 10.10.10.230, то он разрешен для интерфейса; в противном случае он удаляется.

В конфигурации сервера, когда сетевой интерфейс хочет отправить пакет одноранговому узлу (клиенту), он смотрит на IP-адрес назначения этого пакета и сравнивает его со списком разрешенных IP-адресов каждого однорангового узла, чтобы увидеть, какому одноранговому узлу его отправить. Например, если сетевому интерфейсу предлагается отправить пакет с IP-адресом назначения 10.10.10.230, он зашифрует его с помощью открытого ключа однорангового узла gN65BkIK …, а затем отправит его на последнюю конечную точку Интернета этого однорангового узла.

В конфигурации клиента его единственный одноранговый узел (сервер) сможет отправлять пакеты на сетевой интерфейс с любым исходным IP-адресом (поскольку 0.0.0.0/0 является подстановочным знаком). Например, когда пакет получен от однорангового узла HIgo9xNz …, если он правильно расшифровывает и аутентифицируется, с любым исходным IP-адресом, то он разрешен для интерфейса; в противном случае удаляется.

В конфигурации клиента, когда сетевой интерфейс хочет отправить пакет своему единственному узлу (серверу), он будет шифровать пакеты для одного однорангового узла с любым IP-адресом назначения (поскольку 0.0.0.0/0 является подстановочным знаком). Например, если сетевому интерфейсу предлагается отправить пакет с любым IP-адресом назначения, он зашифрует его, используя открытый ключ единственного однорангового узла HIgo9xNz …, а затем отправит его на последнюю конечную точку Интернета одного однорангового узла.

Другими словами, при отправке пакетов список разрешенных IP-адресов ведет себя как своего рода таблица маршрутизации, а при получении пакетов список разрешенных IP-адресов ведет себя как своего рода список управления доступом.

Это то, что мы называем таблицей маршрутизации Cryptokey: простая ассоциация открытых ключей и разрешенных IP-адресов.

Любая комбинация IPv4 и IPv6 может использоваться для любого поля. WireGuard при необходимости полностью способен инкапсулировать одно внутри другого.

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

Встроенный роуминг WireGuard

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

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

Готов к использованию в контейнерах

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

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

О проекте WireGuard

Исходный код

WireGuard разделен на несколько репозиториев, размещенных в репозитории ZX2C4 Git и в других местах. Проконсультируйтесь со списком репозиториев проекта.

IRC обсуждения

Если у вас возникли проблемы с настройкой WireGuard или его использованием, лучшее место для получения помощи — это канал IRC #wireguard на Freenode. Там же мы обсуждаем задачи развития и планируем будущее проекта.

Список рассылки

Примите участие в обсуждении разработки WireGuard, присоединившись к списку рассылки. Здесь происходят все разработки. Отправляйте патчи с помощью git-send-email, аналогично стилю LKML.

Электронная почта контакт

Если вы хотите связаться с нами в частном порядке по определенной причине, вы можете связаться с нами по адресу team@wireguard.com. Однако имейте в виду, что запросы на «поддержку» намного лучше подходят для нашего IRC-канала на Freenode.

Контакт безопасности

Пожалуйста, сообщайте о любых проблемах безопасности только по адресу security@wireguard.com. Не отправляйте на этот псевдоним электронной почты вопросы, не связанные с безопасностью. Не отправляйте вопросы, связанные с безопасностью, на разные адреса электронной почты.

Лицензия WireGuard

Компоненты ядра выпускаются под лицензией GPLv2, как и само ядро ​​Linux. Другие проекты лицензируются под MIT, BSD, Apache 2.0 или GPL, в зависимости от контекста.

При перепечатке просьба вставлять активные ссылки на oslogic.ru
Copyright oslogic.ru © 2021 . All Rights Reserved.