Настройка Windows-сервера Wireguard
Обновлено: 21.11.2024
Если вам нужен общий концептуальный обзор того, что такое WireGuard, читайте дальше здесь. Затем вы можете перейти к установке и чтению кратких инструкций о том, как его использовать.
Если вас интересует внутреннее устройство, вас может заинтересовать краткое изложение протокола или более подробные сведения, прочитанные в технической документации, в которой более подробно рассказывается о протоколе, криптографии и основах. . Если вы собираетесь внедрить WireGuard для новой платформы, ознакомьтесь с примечаниями о разных платформах.
WireGuard надежно инкапсулирует IP-пакеты по протоколу UDP. Вы добавляете интерфейс WireGuard, настраиваете его с помощью своего закрытого ключа и открытых ключей ваших пиров, а затем отправляете через него пакеты. Все вопросы, связанные с распределением ключей и отправкой конфигураций, выходят за рамки WireGuard; эти вопросы лучше оставить для других уровней, иначе мы закончим с раздуванием IKE или OpenVPN. Напротив, он больше имитирует модель SSH и Mosh; у обеих сторон есть открытые ключи друг друга, и тогда они просто могут начать обмен пакетами через интерфейс.
Простой сетевой интерфейс
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 лежит концепция под названием Маршрутизация ключей шифрования, которая работает путем связывания открытых ключей со списком IP-адресов туннеля, разрешенных внутри туннеля. Каждый сетевой интерфейс имеет закрытый ключ и список пиров. У каждого узла есть открытый ключ. Публичные ключи короткие и простые, они используются одноранговыми узлами для аутентификации друг друга. Их можно передавать для использования в файлах конфигурации любым внеполосным методом, подобно тому, как кто-то может отправить свой открытый ключ SSH другу для доступа к серверу оболочки.
Например, серверный компьютер может иметь следующую конфигурацию:
И клиентский компьютер может иметь следующую более простую конфигурацию:
В конфигурации сервера каждый одноранговый узел (клиент) сможет отправлять пакеты на сетевой интерфейс с исходным 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). 0.0/0 — это подстановочный знак). Например, если сетевому интерфейсу предлагается отправить пакет с любым IP-адресом назначения, он зашифрует его, используя открытый ключ единственного узла HIgo9xNz. , а затем отправьте его на самую последнюю конечную точку Интернета одного узла.
Другими словами, при отправке пакетов список разрешенных IP-адресов ведет себя как своего рода таблица маршрутизации, а при получении пакетов список разрешенных IP-адресов ведет себя как своего рода список контроля доступа.
Это то, что мы называем Таблица маршрутизации криптоключей: простая ассоциация открытых ключей и разрешенных IP-адресов.
Для любого из полей можно использовать любую комбинацию IPv4 и IPv6. WireGuard полностью способен инкапсулировать одно в другое, если это необходимо.
Поскольку все пакеты, отправляемые через интерфейс WireGuard, шифруются и аутентифицируются, а также из-за тесной связи между идентификацией однорангового узла и разрешенным IP-адресом однорангового узла, системным администраторам не нужны сложные расширения брандмауэра, такие как в случае IPsec, они могут просто сопоставить «с этого IP-адреса? с этого интерфейса?» и быть уверенными, что это безопасный и аутентичный пакет. Это значительно упрощает управление сетью и контроль доступа, а также дает гораздо больше уверенности в том, что ваши правила iptables действительно делают то, что вы от них хотите.
Встроенный роуминг
Конфигурация клиента содержит начальную конечную точку своего единственного однорангового узла (сервера), чтобы он знал, куда отправлять зашифрованные данные, до того, как он получит зашифрованные данные. Конфигурация сервера не имеет начальных конечных точек его одноранговых узлов (клиентов). Это связано с тем, что сервер обнаруживает конечную точку своих одноранговых узлов, проверяя, откуда исходят правильно аутентифицированные данные. Если сервер сам изменит свою конечную точку и отправит данные клиентам, клиенты обнаружат новую конечную точку сервера и точно так же обновят конфигурацию. И клиент, и сервер отправляют зашифрованные данные на самую последнюю конечную точку IP, для которой они достоверно расшифровали данные. Таким образом, обеспечивается полный IP-роуминг на обоих концах.
Готово к контейнерам
WireGuard отправляет и получает зашифрованные пакеты, используя сетевое пространство имен, в котором изначально был создан интерфейс WireGuard. Это означает, что вы можете создать интерфейс WireGuard в своем основном сетевом пространстве имен, имеющем доступ к Интернету, а затем переместить его в сетевое пространство имен, принадлежащее контейнеру Docker, в качестве единственного интерфейса этого контейнера. Это гарантирует, что единственный возможный способ доступа контейнера к сети — через безопасный зашифрованный туннель WireGuard.
Подробнее
Посмотрите на команды и краткий обзор, чтобы понять, как WireGuard используется на практике. В дополнение к техническому техническому документу, в котором содержится наиболее подробная информация, также имеется описание протокола, криптографии и обмена ключами.
Исходный код
WireGuard разделен на несколько репозиториев, размещенных в ZX2C4 Git Repository и в других местах. Обратитесь к списку репозиториев проекта.
Обсуждения IRC
Список рассылки
Примите участие в обсуждении разработки WireGuard, присоединившись к списку рассылки. Здесь происходят все действия по разработке. Отправляйте исправления с помощью git-send-email, аналогично стилю LKML.
Контакт по электронной почте
Если вы хотите связаться с нами в частном порядке по определенной причине, вы можете связаться с нами по адресу team@wireguard.com. Имейте в виду, однако, что запросы «поддержки» гораздо лучше подходят для нашего IRC-канала.
Контакт службы безопасности
Лицензия
Компоненты ядра выпускаются под лицензией GPLv2, как и само ядро Linux. Другие проекты распространяются под лицензией MIT, BSD, Apache 2.0 или GPL, в зависимости от контекста.
© Copyright 2015-2022 Джейсон А. Доненфельд. Все права защищены. «WireGuard» и логотип «WireGuard» являются зарегистрированными товарными знаками Джейсона А. Доненфельда.
Этот проект разработан ZX2C4 и Edge Security, фирмой, занимающейся исследованиями в области информационной безопасности.
Подозреваю, что я не единственный, кто круглосуточно и без выходных запускает маленькую и тихую систему с Microsoft Windows дома и к которой можно получить удаленный доступ через RDP (с ноутбука, планшета или даже смартфона) и несколько обеспокоен количество неавторизованных попыток подключения. Год назад я опубликовал этот пост, посвященный туннелированию RDP-подключения через SSH, и хотя он работает нормально, у него есть некоторые известные ограничения (см. ниже). Теперь я хотел бы представить более гибкую альтернативу, основанную на WireGuard VPN. Однако начнем с самого начала и рассмотрим все возможности:
- RDP через туннелирование SSH.Поскольку в Windows 10 1809 клиент и сервер OpenSSH являются устанавливаемыми компонентами, я описал, как их настроить, в предыдущем посте. После запуска этой установки некоторое время я бы упомянул следующие проблемы:
- Хотя он отлично работает на ноутбуке на стороне клиента, вряд ли можно сделать то же самое со смартфона. По крайней мере, для iPhone потребуется специальный RDP-клиент со встроенным туннелированием SSH, поскольку вам не разрешено запускать SSH-клиент в фоновом режиме более 30 секунд.
- Поддерживается только TCP, в то время как RDP может использовать UDP.
- Обновления Windows иногда демонстрируют неожиданный побочный эффект и останавливают/отключают службу OpenSSH. Я не исследовал этот вопрос, но это случалось со мной несколько раз.
- Установите VPN на домашнем маршрутизаторе. Так как мой роутер поддерживает и WireGuard, и OpenVPN, то это приемлемый вариант, а минусы, которые я могу отметить, весьма субъективны:
- Мне бы не хотелось создавать дополнительную «дополнительную» нагрузку на маршрутизатор. Это критически важная часть сети, и я никогда не использую ее ни для чего, кроме «маршрутизации». Например. никогда не используйте его в качестве FTP-сервера, NAS и т. д.…
- Он добавляет вектор атаки на устройство, прошивка которого обновляется не так часто.
- Требуются определенные технические навыки для чтения документации и настройки устройства.
- Подключите Raspberry Pi к домашней сети и настройте его как VPN-сервер. Кстати, вы можете запустить на нем гораздо больше, 4-е поколение мощное. Лично я использую пару Raspberry Pi 4 дома для разных целей, и это отличный вариант, если у вас есть навыки работы с Linux и вы можете позволить себе устройство. При тестировании Raspberry Pi 4 в сети 1 Гбит/с он смог обработать около 300 Мбит/с трафика WireGuard.
- Скорее для исчерпывающего списка, чем для реального использования, вы можете установить Hyper-V на машину Windows, создать виртуальную машину Linux и настроить ее как VPN-сервер. Но я бы никогда не рекомендовал это, потому что:
- Для этого требуются определенные технические навыки.
- Это приводит к значительному снижению производительности.
- Проблемы могут возникнуть при отключении питания или обновлении Windows (виртуальная машина может оказаться в состоянии "Сохранено", и VPN будет недоступна).
- И, очевидно, вы можете установить VPN-сервер прямо в Windows. Выбор конкретного VPN — дело глубоко личное, но последние пару лет мне посчастливилось много работать с WireGuard, так что выбор был очевиден.
Предварительное исследование
Я полагаю, что то, что WireGuard уже более года включен в основное ядро Linux, не является чем-то новым. При этом на стороне Windows мы ограничены официальным клиентом, написанным на Go. Однако из-за специфики протокола официальный WireGuard для Windows вполне подходит для работы в качестве сервера. Благодаря Генри Чангу и его последователю micahmo мы примерно знаем, как это сделать стандартными средствами Windows. Честно говоря, процесс, описанный Генри, выглядит немного сложным, поэтому micahmo постарался автоматизировать и упростить многие сложные шаги. Лично я не пробовал его приложение, потому что случайно нашел его только при написании этого поста, но я полагаю, что оно делает то, на что претендует. Кроме того, меня очень заинтересовал следующий комментарий под оригинальным постом Генри:
Добрый день, отличная статья!
У меня есть машина с Win10, которую я планирую использовать в качестве сервера wireguard. Эта машина имеет основной сетевой адаптер Интернета + клиентское соединение OpenVPN, которое используется для выбранных маршрутов.
Если я правильно понимаю описанную выше настройку Wireguard VPN, то мои клиенты Wireguard получат доступ только к основному интернет-интерфейсу, но не к соединению OpenVPN, пожалуйста. поправьте меня, я ошибаюсь.
Есть ли способ для клиента wireguard использовать все доступные соединения и соблюдать существующие настройки маршрутов на сервере wireguard?Спасибо!
Дело в том, что клиенты WireGuard должны иметь возможность использовать не только основной интернет-интерфейс (это единственный возможный вариант для Windows Internet Connection Sharing), но «все доступные подключения и учитывать существующие маршруты». Итак, давайте настроим требования.
Требования
- Максимально упростите процесс установки и настройки WireGuard. Давление на компании, предоставляющие услуги VPN, растет, и мы никогда не знаем, что на самом деле происходит с нашими данными, поэтому было бы хорошо, если бы обычный пользователь Windows мог:
- Просто установите WireGuard VPN Server на облачном VPS, не углубляясь в особенности реализации. Может быть полезно обойти географические ограничения на некоторые онлайн-продукты или услуги. Например, веб-сайт Ghidra не может быть доступен с IP-адресов в России. Любопытно, что в то же время бинарные файлы Ghidra можно загрузить с GitHub.Или другой пример: тарифы на авиабилеты (и предлагаемые валюты) часто зависят от страны, IP-адрес которой вы использовали для доступа к веб-сайту авиакомпании.
- Просто установите WireGuard VPN Server на домашнюю машину с Windows, чтобы получить постоянный безопасный доступ к домашней сети и ВСЕМ службам, доступным ему дома, независимо от того, в какой точке мира он находится.
- Предложите некую альтернативу общему доступу к Интернету, которая будет использовать все доступные подключения и учитывать существующие маршруты.
Я начал работать над этим проектом около месяца назад и, наконец, могу представить его публике. Тем временем у меня он работает на паре домашних машин с Windows 10 Pro и одном VPS в облаке Microsoft Azure (Windows Server 2019 Core, 1vCPU + 1Gb). Должен заметить, что реализация WireGuard в ядре Linux, безусловно, выигрывает по производительности, так что если вы знакомы с Linux, то это будет лучший выбор. Это решение в первую очередь ориентировано на рядовых пользователей Windows, и самое сложное в нем — настроить переадресацию портов UDP (на домашнем роутере или в админке VPS-провайдера).
WireSock VPN-шлюз
wg-quick-config создает файлы конфигурации для сервера (wiresock.conf) и клиента (wsclient_1.conf), после чего создает и запускает туннель WireGuard. Он также отображает конфигурацию клиента в виде QR-кода, который можно отсканировать смартфоном. Дополнительные клиенты могут быть добавлены вызовом ‘wg-quick-config -add -restart’.
Короче говоря, we-quick-config — это простой инструмент автоматизации, написанный на Go. Фоновая работа выполняется службой Wiresock, которая поддерживает два режима работы: NAT и прокси.
Первый — классический NAT: служба включает маршрутизацию Windows (для некоторых типов соединений, поскольку встроенная маршрутизация Windows 7 не работает, и они маршрутизируются «вручную»), определяет внешний интерфейс «по умолчанию» и выполняет трансляцию сетевых адресов для входящих/исходящих пакетов. Это почти то же самое, что и встроенный общий доступ к Интернету, но без ограничений по адресам сети клиента.
Таким образом, наши требования вроде бы выполнены. А если будет интерес к этому проекту, то еще много чего думаю добавить, например:
- В настоящее время (v.1.0.2.4) нет поддержки IPv6.
- Адресное пространство IPv4 исчерпано, и может случиться так, что ваш интернет-провайдер не назначит вам общедоступный IP-адрес. В основном это всегда так с мобильным интернетом. Итак, я хотел бы разрешить серверу WireGuard работать за NAT провайдера (и даже с несколькими NAT). Однако для этого потребуется внешняя служба с общедоступным IP-адресом.
- Было бы неплохо добавить встроенную фильтрацию DNS, аналогичную той, что делает pi-hole, но без необходимости настраивать экземпляр Linux.
- Некоторый пользовательский интерфейс для мониторинга подключенных пользователей и назначения правил доступа или ограничений полосы пропускания.
9 мыслей о том, как настроить WireGuard VPN Server в Windows
<р>0. Админские права нужны не только для, в частности, они нужны для установки этого сервиса туннеля для сервера. Без этого никак…1. Оригинальный WireGuard прописывает себя в PATH (это я проверял), возможно какая-то проблема с инсталлятором…
2. Я проверял Windows 7, правда, там wg-quick-config может сообщать об оплате новой конфигурации сети из общедоступного в частный (точнее при получении прав доступа, с этим у Go проверял некотрые проблемы под Windows 7), но эта ошибка не критична и не критична. ее можно игнорировать. Все будет работать.
3. Ни Wireguard-go, ни wireguard-nt сами по себе не требуют маршрутизации клиентов в предполагаемой сети. Можно подключиться неожиданно к серверу, но ни к проверке сети сервера ни к интернету не получится (нужен NAT или прокси). Сервис Wiresock решает конкретную проблему.
Да, wg-quick-config сохраняет конфиги по той пути, по которой он был запущен, но так как его надо запускать под админом, то если не менять папку после запуска, то это как правило это либо system32 либо либо папка юзера.< /p>
Можно и Wireguard GUI, самому сервису не принципиально на какой-то конкретный адаптер расшаривать сеть. Перконфигурировать сервис для достижения адаптера/конфига можно так:
wiresock-service удалить
wiresock-service install -start-type 2 -mode proxy -interface -log-level none
sc start wiresock-service
P.S. Учел замечания и в версии 1.0.28 перенес конфиги в «ProgramData\NT Kernel Resources\WireSock VPN Gateway»
Поддерживает ли он 32-разрядную версию Windows 7?
Да, я только что протестировал 32-разрядную версию Windows 7, и она работает отлично.
Существует одна проблема с wg-quick-config, о которой стоит упомянуть, когда «Попытка сделать сеть туннеля Wireguard частной» соответствующие скрипты powershell возвращают ошибку:
`Термин Get-NetConnectionProfile не распознается как имя командлета, функции, файла сценария или исполняемой программы. Проверьте правильность написания имени или, если был указан путь, убедитесь, что путь указан правильно, и повторите попытку.`
Эту ошибку можно спокойно игнорировать, просто не забудьте установить сеть wiresock как частную, если вы хотите получить доступ к локальным службам хоста через WireGuard, например. RDP.
Я вижу, что ваша часть nat поддерживает xp, можно ли скомпилировать версию wireguard для xp? вроде как wireguard не поддерживает xp. чтобы задать такой вопрос, я надеюсь, что он работает на сервере win2003:)
Вы правы, официальный WireGuard для Windows не поддерживает Windows XP/2003… Можно как-то его обратно портировать, но я не думаю, что это стоит усилий.
WireGuard — это VPN, созданная для всех. Так как же настроить его на ПК или ноутбуке с Windows?
Стремясь предоставить потребителям простой способ использования виртуальной частной сети (VPN), WireGuard незаметно стал одним из самых популярных приложений VPN с момента его выпуска в середине 2019 года. А поскольку конфиденциальность с каждым днем становится все более серьезной проблемой, WireGuard предлагает способ защиты для всех, а не только для тех, кто разбирается в технологиях.
Давайте посмотрим, как настроить Windows-клиент WireGuard и установить VPN-подключение к виртуальному частному серверу (VPS) WireGuard. Вам нужен компьютер на одном конце VPN и VPS на другом, чтобы правильно настроить WireGuard для Windows.
Настройка WireGuard для Windows
Прежде всего вам нужно понять, что такое VPN. VPN — это безопасный туннель между двумя точками, шифрующий информацию при ее передаче в сети. Это уровень безопасности, который нужен всем.
Настроить WireGuard для Windows довольно просто. Мы проведем вас через процесс шаг за шагом.
Шаг 1. Загрузка и установка WireGuard
Вам просто нужно перейти на сайт WireGuard, нажать кнопку "Установка" в верхнем левом углу страницы и загрузить установщик клиента WireGuard для Windows.
Затем вам нужно будет открыть файл .exe и предоставить ему права администратора. Это выберет самую последнюю версию для вашего оборудования, загрузит и установит ее.
Если это не работает по какой-либо причине или вы просто предпочитаете загрузить файл .msi самостоятельно, вы можете нажать кнопку просмотра MSI-файлов прямо под кнопкой «Загрузить установщик Windows» и выбрать тот, который подходит для вашего оборудования. Запустив этот файл, вы установите WireGuard на свой компьютер.
Шаг 2. Настройка WireGuard для Windows
Теперь вам нужно настроить VPN-туннель. Вам нужно будет указать конечные точки (внутренний IP-адрес вашего ПК и внешний IP-адрес вашего VPS) для туннеля и обмена открытыми ключами.
Откройте клиент WireGuard и нажмите Добавить туннель > Добавить пустой туннель.
Клиент WireGuard для Windows автоматически создает открытый и закрытый ключи, отображая их на экране.
Назовите туннель, а затем напишите следующую конфигурацию, соответствующим образом изменив IP-адреса и ключи:
- PrivateKey: закрытый ключ, предоставленный вам Windows-клиентом WireGuard.
- Адрес: ваш внутренний IP-адрес.
- DNS: IP-адрес DNS-сервера.
- PublicKey: открытый ключ VPS.
- AllowedIPs: здесь вы указываете, какие IP-адреса будут маршрутизироваться через VPN. Конфигурация "0.0.0.0./0" перехватывает весь трафик, направляя его через VPN.
- Конечная точка: внешний IP-адрес и порт прослушивания VPS. Порт должен соответствовать конфигурации сервера ListenPort.
Шаг 3. Настройка сервера WireGuard
На другом конце туннеля, который вы собираетесь создать, вам нужно добавить раздел [Peer] в файл конфигурации WireGuard:
- PublicKey: открытый ключ, предоставленный вам клиентом WireGuard VPN для Windows.
- Разрешенные IP-адреса: указывает, какие IP-адреса могут проходить через этот туннель. Здесь вы вводите свой внутренний IP-адрес.
Шаг 4. Заблокируйте ненаправленный трафик
Вы также можете установить флажок Блокировать весь нетуннелированный трафик. При включении этого параметра клиент WireGuard для Windows добавляет правила брандмауэра и блокирует весь трафик, не проходящий через туннель.
Однако этот параметр можно включить только в том случае, если в вашей конфигурации есть только один раздел [Peer] и для параметра AllowedIPs установлено значение "0.0.0.0./0".
Шаг 5. Активируйте WireGuard
К настоящему времени вы должны быть в состоянии активировать VPN. Просто нажмите кнопку «Активировать», и через несколько секунд статус туннеля должен измениться на «Активный».
Однако, если что-то пойдет не так и вы не сможете активировать туннель, проверьте вкладку Журнал и убедитесь, что конфигурация Windows-клиента WireGuard и сервера совпадают.
Шаг 6. Убедитесь, что VPN работает
Чтобы проверить, правильно ли работает ваш VPN, просто введите в Google запрос "what is my ip". IP-адрес вашего VPS должен появиться в первом результате поиска как ваш общедоступный IP-адрес.
WireGuard: VPN, которую может использовать каждый
Настроить Windows-клиент WireGuard VPN очень просто. Вот почему WireGuard стал так популярен за последние несколько лет: он позволяет каждому установить VPN-подключение самостоятельно.
Если вы хотите повысить уровень конфиденциальности вашего интернет-соединения, загрузите WireGuard для Windows. И не забудьте поставить галочку напротив опции «Блокировать весь нетуннелированный трафик»!
В этом руководстве рассматривается процесс настройки сервера Wireguard в Windows. Большинство руководств Wireguard в Интернете дают вам возможность разместить сервер только в среде Linux. Однако вполне возможно настроить сервер Windows.
После безрезультатных поисков учебника я потратил пару дней, чтобы выяснить, как лучше всего это сделать и как автоматизировать процесс. В идеале вы все равно хотели бы запустить его в среде Linux, но если у вас есть пример использования сервера Windows, как у меня, вы бы оценили гибкость Wireguard!
Необходимое условие
- Установлен последний клиент Wireguard для Windows (скачать с официального сайта)
- Настройте правила брандмауэра (так же, как для сервера Linux: откройте и переадресуйте порты 51820, настройте ddns и т. д.)
Отказ от ответственности
Использование Wireguard в Windows в качестве сервера официально не поддерживается. Используйте на свой страх и риск.
Шаг 1. Подготовьте Wireguard Server и файл конфигурации клиента
Этот шаг такой же, как и в других руководствах по Linux.
Я предоставил свои собственные конфигурации на стороне сервера и на стороне клиента ниже, настройте их в соответствии со своим вариантом использования.
После того, как вы подготовили файлы конфигурации сервера, поместите их в какую-нибудь постоянную папку.
Для этого руководства я предполагаю, что файл конфигурации сервера находится в папке C:\wireguard\wg_server.conf
Шаг 2. Запустите сервер
Вместо использования графического интерфейса для запуска сервера мы запустим его с помощью параметров команды.
На момент написания этого руководства официальный графический интерфейс допускает только одно подключение за раз. Если мы используем его для запуска сервера, графический интерфейс будет занят, и мы не сможем установить новое соединение, не отключив интерфейс сервера.
Запуск сервера с использованием параметров командной строки позволяет нам использовать графический интерфейс бесплатно для повседневного использования.
Если вы не возражаете против того, чтобы графический интерфейс был занят, вы можете просто запустить сервер в графическом интерфейсе и перейти к шагу 3.
Используйте следующий код для запуска/остановки сервера. Само собой разумеется, скорректируйте пути к файлам, если они отличаются в вашей системе.
Вы должны запускать их с правами администратора!
Вам нужно будет запустить команду только один раз, фоновая служба wireguard запомнит состояние выполнения при перезагрузке.
После того, как вы запустите сервер, wireguard создаст новый сетевой адаптер с тем же именем, что и файл конфигурации вашего сервера. Таким образом, для нашего руководства имя сетевого адаптера будет «wg_server».
Проверьте, успешно ли создан сетевой адаптер.
Если вы назвали свой файл конфигурации «Wireguard_Server.conf», созданный сетевой адаптер также будет иметь соответствующее имя
Шаг 2.1: (Необязательно) Настройка профиля адаптера
Теперь у нас есть настройка wireguard adpater, рекомендуется изменить его на «Частный» профиль, по умолчанию адаптер добавляется как «Общий». Частный профиль обеспечит большую совместимость для клиентов (скажем, вы хотите использовать удаленный рабочий стол и т. д.). Частный профиль может заблокировать эти порты и службы.
Для этого мы запускаем три простые команды powershell с правами администратора вручную:
Шаг 3. Включите маршрутизацию сервера
Теперь, когда сервер запущен, клиент должен иметь возможность рукопожатия (учитывая, что у вас открыты правильные порты и правильно переадресованы).
Однако вы заметите, что клиент не сможет получить доступ ни к Интернет или локальная сеть.
Это связано с тем, что по умолчанию Windows не соединяет или NAT интерфейс wireguard с вашим фактическим физическим интернет-интерфейсом.
В Linux это делается с помощью некоторых команд брандмауэра PostUp/PostDown, которые мы не используйте здесь.
Вместо этого мы используем сценарий powershell, чтобы включить функцию NAT (или в Windows термин «общий доступ к Интернету»):
Примечание: сценарий оболочки изначально создан igoravl, я внес некоторые изменения, чтобы упростить процесс и избавиться от некоторых ошибок для нашего приложения сервера wireguard.
Этот сценарий оболочки написан как пользовательская функция «Set-NetConnectionSharing» и должен быть загружен в powershell.
Сохраните сценарий в следующем месте:
wireguard.psm1 должен находиться в папке с именем wireguard, чтобы функция загружалась с помощью powershell
Теперь вы можете открыть окно powershell с правами администратора и выполнить следующие команды, чтобы включить/отключить NAT для нашего интерфейса сервера wireguard.
Если все в порядке, при открытии панели свойств вашего основного сетевого адаптера Интернета (в моем случае Ethernet 3) должны быть отмечены следующие параметры:
Обратите внимание, что в поле «Подключение к домашней сети» должно быть указано имя вашего интерфейса wireguard (на рисунке показано Wireguar_Server, но если вы следуете руководству, следует указать wg_server).
Технически вы можете сделать это через графический интерфейс Windows, используя меню свойств вручную, но наличие этого скрипта позволит вам автоматизировать процесс запуска/остановки сервера, как вы увидите позже в этом руководстве.
Теперь все должно работать правильно, клиент должен иметь доступ к Интернету и локальной сети, которую вы ему разрешили.
Шаг 3.1. Измените IP-адрес общего доступа к подключению к Интернету по умолчанию
По умолчанию, когда включен общий доступ к Интернету (NAT), Windows изменит IP-адрес адаптера на другой (во избежание конфликтов). Однако мы уже знаем, какой IP-адрес мы хотим, чтобы адаптер был (задается в блоке [interface] в нашей конфигурации wireguard), в нашем случае это 192.168.200.1.
Чтобы изменить IP-адрес по умолчанию, Windows переключится на , мы можем просто изменить параметр в реестре.
Откройте редактор реестра и перейдите по следующему пути:
Затем просто измените ScopeAddress и StandaloneDHCPAddress на желаемый IP-адрес (в нашем случае 192.168.200.1).
Отключите и снова включите общий доступ к подключению к Интернету (NAT) с помощью команды powershell на шаге 3, чтобы убедиться, что это изменение вступило в силу (возможно, вам потребуется перезагрузить компьютер).
Шаг 4. Включите постоянный общий доступ к Интернету при перезапуске (обновлено 12 февраля 2020 г.)
Поскольку существует ошибка Windows, из-за которой общий доступ к интернет-соединению не запускается автоматически при перезагрузке, нам нужно изменить несколько настроек, чтобы убедиться, что общий доступ к интернету запущен. В предыдущем учебнике для этого использовалась запланированная задача, но я нашел лучший способ, прочитав здесь исправление ошибки Windows.
Откройте окно Службы и найдите «Общий доступ к подключению к Интернету»:
Измените тип запуска на «Автоматически»:
После этого, наконец, мы добавляем реестр:
Шаг 4.1 (необязательно) Bat-файлы для простого запуска/остановки сервера вручную
Для удобства я также сделал два bat-файла для запуска этих команд, чтобы мне не приходилось каждый раз открывать командную строку или powershell для запуска и остановки сервера.
Пакетный сценарий запуска сервера: (сохраните как «start.bat» и запустите с правами администратора)
Пакетный сценарий остановки сервера: (сохраните как «stop.bat» и запустите с правами администратора)
Заключительные замечания:
По сравнению с Linux настройка сервера Windows Wireguard может оказаться сложной задачей.
Тем не менее, я сделал большую часть основной работы за вас (скрипт powershell для включения NAT).
Запуск скрипта powershell при запуске с задержкой в 3 минуты не очень элегантно, но он работает.
Должен быть способ запустить задачу после запуска и работы службы wireguard, но мне не удалось заставить ее работать. Если вы знаете, как заставить его работать, поделитесь им со мной.
Читайте также: