EUR
european

EUR

usa

USD

Russian Ru
Ex. VAT Ex. VAT 0%

Настройка WireGuard для Windows

В этом руководстве описано, как настроить VPN-туннель WireGuard между двумя машинами Windows: сервером WireGuard на удалённом хосте Windows, например на Windows-VPS, и клиентом WireGuard на вашем локальном компьютере Windows. Когда туннель активен, обе машины обмениваются данными по зашифрованному частному соединению, и при желании можно направить весь трафик клиента через сервер.

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

Перед началом установите последнюю версию WireGuard с официальной страницы установки (https://www.wireguard.com/install/) и на сервере, и на клиенте, и убедитесь, что на каждой машине у вас есть права администратора.

Схема в этом руководстве выглядит так:

Server (public IP, listening on UDP 51820) Tunnel address 10.0.0.1/24 | | encrypted WireGuard tunnel | Client Tunnel address 10.0.0.2/32

Создание конфигурации сервера

Запустите C:\Program Files\WireGuard\wireguard.exe, нажмите Add tunnel и выберите Add empty tunnel. WireGuard автоматически создаёт пару ключей. Открытый ключ, показанный вверху окна, — это открытый ключ сервера. Он понадобится позже, при настройке клиента.

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

[Interface] PrivateKey = # private key of the WireGuard server ListenPort = # port that WireGuard will listen on Address = # internal IP address of the WireGuard server, for example 10.0.0.1/24

Используйте для сети туннеля частную подсеть и держите сервер и всех клиентов в одном диапазоне. Распространённый выбор — 10.0.0.1/24 для сервера и 10.0.0.2/32, 10.0.0.3/32 и так далее для каждого клиента. Сервер использует префикс /24, поэтому считает весь диапазон туннеля доступным через интерфейс WireGuard. Каждый клиент использует /32, потому что клиент представляет один адрес, а не подсеть. Клиент с /24 решил бы, что весь диапазон находится на его собственном интерфейсе, и не отправлял бы через туннель трафик, предназначенный другим адресам туннеля.

В редакторе туннеля, под полем конфигурации, можно по желанию включить Block untunneled traffic (kill-switch), который блокирует любой трафик, идущий вне туннеля, и задать Pre-shared key, добавляющий дополнительный уровень безопасности. Обе опции необязательны. О том, когда kill-switch полезен и что он блокирует, см. раздел «Разбираемся с AllowedIPs».

Создание конфигурации клиента

Нажмите Add tunnel и выберите Add empty tunnel второй раз, теперь для клиента. Открытый ключ, показанный для этого туннеля, — это открытый ключ клиента, который нужен серверу, чтобы принять клиента.

Заполните конфигурацию клиента:

[Interface] PrivateKey = # private key of the WireGuard client Address = # internal IP address of the WireGuard client, for example 10.0.0.2/32 DNS = 1.1.1.1, 1.0.0.1 [Peer] PublicKey = # public key of the WireGuard server AllowedIPs = # 0.0.0.0/0 for a full tunnel, or 10.0.0.0/24 for a split tunnel Endpoint = # public IP address and port of the WireGuard server PersistentKeepalive = 25

Endpoint должен быть реальным публичным IP-адресом сервера вместе с портом, заданным в ListenPort сервера, а не внутренним адресом туннеля. Помощь по выбору значения AllowedIPs см. в разделе «Разбираемся с AllowedIPs» ниже.

Строки DNS и PersistentKeepalive необязательны. DNS задаёт DNS-серверы, используемые, пока туннель активен, что предотвращает проблемы с разрешением имён после подключения. Можно использовать публичные резолверы, такие как 1.1.1.1, 1.0.0.1 или 8.8.8.8, 8.8.4.4, либо DNS-сервер самой VPN-сети. PersistentKeepalive = 25 отправляет небольшой пакет каждые 25 секунд и помогает держать соединение открытым, когда клиент находится за NAT.

Копируйте ключи и Endpoint очень внимательно. Опечатка в ключе или неверный Endpoint — самая частая причина, по которой туннель не подключается.

Добавление клиента на сервер

Снова откройте конфигурацию сервера и добавьте секцию [Peer] для клиента, используя открытый ключ клиента из предыдущего шага.

[Peer] PublicKey = # public key of the WireGuard client AllowedIPs = # internal IP address of the client

В конфигурации сервера AllowedIPs выполняет две роли. Он сообщает серверу, какой адрес туннеля принадлежит этому клиенту, и работает как список маршрутизации: любой пакет, адресованный этим диапазонам, шифруется и отправляется этому пиру. Для одного клиента это его адрес туннеля, например 10.0.0.2/32. Если клиент должен также делать доступной через туннель локальную сеть, добавьте сюда и эту подсеть, например 10.0.0.2/32, 192.168.1.0/24. Повторите этот шаг для каждого дополнительного клиента.

Настройка брандмауэра Windows на сервере

Сервер должен принимать входящий трафик WireGuard на своём UDP-порту. Откройте Брандмауэр Защитника Windows в режиме повышенной безопасности, выберите Правила для входящих подключений и нажмите Создать правило. Выберите Для порта и нажмите Далее. Выберите UDP, введите порт WireGuard, например 51820, и нажмите Далее. Если используется несколько портов, перечислите их через запятую, например 51820, 51821. Выберите Разрешить подключение и нажмите Далее. Выберите профили, к которым применяется правило. Если сервер размещён в дата-центре, обычно достаточно профиля «Публичный»; иначе оставьте профили «Доменный», «Частный» и «Публичный» выбранными. Нажмите Далее, задайте правилу понятное имя, например WireGuard UDP 51820, и нажмите Готово.

Это входящее правило нужно только на сервере, потому что именно сервер принимает входящие подключения. На VPS также убедитесь, что ваш хостинг-провайдер разрешает входящий UDP-трафик на этом порту на сетевом уровне, а не только в брандмауэре Windows.

Экспорт и развёртывание конфигураций

Когда обе конфигурации готовы, нажмите Export all tunnels to zip, выберите расположение и сохраните.

Откройте архив, чтобы найти файлы конфигурации всех туннелей. Поместите серверную конфигурацию на сервер и передайте каждому клиенту его собственный файл конфигурации. Если на машине много туннелей, можно также экспортировать отдельный туннель из его контекстного меню. Экспорт в zip-файл удобен, когда оба туннеля созданы на одной машине, как в этом руководстве. Если вы создаёте каждую конфигурацию прямо на её собственном хосте, экспорт не нужен, и файл конфигурации можно скопировать вручную.

На сервере выберите серверную конфигурацию и нажмите Активировать.

На клиенте нажмите Add Tunnel, выберите файл конфигурации клиента и откройте его.

Затем нажмите Активировать.

Первый клиент теперь настроен. Добавляйте остальных клиентов тем же способом: создавайте для каждого клиента новый пустой туннель и добавляйте в серверную конфигурацию соответствующую секцию [Peer] с открытым ключом и адресом туннеля этого клиента, как описано в разделе «Добавление клиента на сервер».

Warning: Если вы настраиваете WireGuard на удалённом сервере через сеанс RDP, прочитайте раздел «Разбираемся с AllowedIPs», прежде чем активировать туннель, направляющий весь трафик. Конфигурация с AllowedIPs = 0.0.0.0/0 может перенаправить собственный трафик сервера в туннель и оборвать ваше RDP-подключение.

Проверка подключения

После активации туннеля Windows может показывать адаптер WireGuard как «Нет доступа к сети» или «Нет доступа к Интернету» в Центре управления сетями и общим доступом. Это ожидаемое поведение, потому что Windows не считает адаптеры VPN-туннелей стандартными интернет-подключениями, и на туннель это не влияет. Windows определяет этот статус своей проверкой подключения, которая опрашивает определённые URL Microsoft, поэтому предупреждение может появиться и если эти запросы заблокированы или не разрешаются вашим DNS, даже когда туннель работает.

Чтобы убедиться, что туннель работает, проверьте его статус в клиенте WireGuard. Активный туннель показывает статус «Активен» вместе со счётчиками передачи данных. Если счётчики растут, туннель пропускает трафик.

На сервере также можно убедиться, что WireGuard слушает свой UDP-порт, пока туннель активен:

netstat -ano | findstr 51820

В PowerShell эквивалент:

Get-NetUDPEndpoint -LocalPort 51820

Замените 51820 на свой порт WireGuard. Если ничего не возвращается, туннель не активен или порт отличается от заданного в конфигурации сервера.

Далее откройте командную строку и выполните ping внутреннего адреса туннеля сервера:

ping 10.0.0.1

Замените 10.0.0.1 на реальный внутренний IP, который вы задали для сервера. Ответы подтверждают, что туннель работает.

Если клиент использует AllowedIPs = 0.0.0.0/0, можно также убедиться, что трафик маршрутизируется через туннель:

tracert 8.8.8.8

Первым переходом должен быть внутренний IP-адрес сервера WireGuard.

Проверка рукопожатия WireGuard

Рукопожатие (handshake) — самый полезный индикатор при диагностике соединения WireGuard. В приложении WireGuard откройте туннель и следите за полем Latest handshake. На работающем туннеле рукопожатие появляется через несколько секунд после активации, а затем периодически обновляется по мере передачи данных. Если туннель простаивает, между рукопожатиями может пройти некоторое время, поэтому короткая пауза — это нормально. Если поле остаётся пустым, пиры не могут достичь друг друга, что обычно указывает на неверный Endpoint, закрытый UDP-порт или несовпадающие ключи.

Рукопожатие также можно проверить из командной строки с помощью утилиты wg, поставляемой вместе с WireGuard:

wg show

В выводе перечислен каждый пир вместе со временем его последнего рукопожатия и счётчиками передачи.

Разбираемся с AllowedIPs

Значение AllowedIPs в конфигурации клиента определяет, какой трафик отправляется через туннель. Если коротко: на клиенте AllowedIPs задаёт, какие пакеты отправляются в туннель, а на сервере — какие пакеты принимаются от данного клиента и куда они маршрутизируются.

AllowedIPs = 0.0.0.0/0 направляет через туннель весь трафик, включая обычный сёрфинг в Интернете. Используйте это значение, когда нужна полная защита трафика. Чтобы этот трафик достигал Интернета, сервер должен его транслировать. См. «Настройка NAT на сервере для полного туннелирования» ниже.

AllowedIPs = 10.0.0.0/24 направляет через туннель только трафик внутренней сети, а обычный интернет-трафик продолжает идти через обычное соединение. Используйте это значение, когда нужно достучаться только до определённых ресурсов удалённой сети.

Можно перечислить несколько подсетей через запятую, например AllowedIPs = 10.0.0.0/24, 192.168.1.0/24.

Tip: Опция Block untunneled traffic (kill-switch) в редакторе туннеля действует в полную силу при AllowedIPs = 0.0.0.0/0. Она блокирует всё, что пошло бы вне туннеля, а значит, блокирует и локальную сеть. Если вам нужен доступ к принтерам или другим устройствам в LAN, оставьте kill-switch отключённым.
Warning: Установка AllowedIPs = 0.0.0.0/0 отправляет каждое соединение через туннель. Если применить это на удалённом сервере, которым вы управляете по RDP, сеанс RDP может оборваться в момент активации туннеля, потому что трафик сервера перенаправляется. На сервере, доступном по RDP, маршрутизируйте только нужные подсети и проверяйте с узким значением AllowedIPs, прежде чем переключаться на 0.0.0.0/0.

Настройка NAT на сервере для полного туннелирования

Если клиенты используют AllowedIPs = 0.0.0.0/0 и вы хотите, чтобы их трафик действительно достигал Интернета через сервер, сервер должен транслировать внутренние адреса WireGuard в свой внешний адрес. В Windows это делается командой New-NetNat, а не скриптами PostUp и PostDown, которые используются в Linux.

Откройте PowerShell от имени администратора на сервере и выполните следующее, используя подсеть туннеля, назначенную серверу:

New-NetNat -Name WireGuardNAT -InternalIPInterfaceAddressPrefix 10.0.0.0/24

Замените 10.0.0.0/24 на свою подсеть туннеля и убедитесь, что префикс охватывает каждый назначаемый адрес клиента. Клиент вне этого диапазона, например 10.0.1.2, не попал бы под это правило. Активные правила можно просмотреть в любой момент:

Get-NetNat

Чтобы позже удалить правило NAT, выполните:

Remove-NetNat -Name WireGuardNAT

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

Set-NetIPInterface -InterfaceAlias "Ethernet" -Forwarding Enabled

Примените это к внешнему интерфейсу, который несёт интернет-трафик, и к интерфейсу WireGuard, используя их реальные имена из Get-NetIPInterface.

Info: New-NetNat требует Windows 10, Windows 11 или Windows Server 2016 и новее, а на некоторых системах требует включения компонента Hyper-V, даже если вы иначе Hyper-V не используете. На некоторых тарифах VPS Hyper-V включить нельзя, что блокирует этот метод. Достаточно ли одного New-NetNat или нужно дополнительно включить IP-форвардинг, может зависеть от версии Windows, поэтому проверьте это на своём сервере, если полное туннелирование не работает.

Устранение неполадок

Туннель активен, но соединения с сервером нет. Проверьте, открыт ли UDP-порт WireGuard, например 51820, в брандмауэре на сервере. Убедитесь, что открытые ключи правильно скопированы между конфигурациями сервера и клиента. Убедитесь, что Endpoint в конфигурации клиента указывает на реальный публичный IP-адрес сервера, а не на внутренний адрес туннеля.

DNS не работает после подключения. Добавьте DNS-сервер в секцию interface клиента:

[Interface] PrivateKey = ... Address = ... DNS = 1.1.1.1, 1.0.0.1

Счётчики пакетов не растут. Туннель не передаёт данные. Проверьте, правильно ли задан AllowedIPs с обеих сторон, не конфликтуют ли внутренние адреса WireGuard с существующей локальной сетью и не занят ли ListenPort другим приложением.

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

Автозапуск WireGuard после перезагрузки сервера

Чтобы туннель работал после перезагрузок, установите его как службу Windows. Когда туннель установлен как служба, он запускается автоматически после перезагрузки. Откройте командную строку или PowerShell от имени администратора и выполните следующее, используя путь к вашему файлу конфигурации сервера:

wireguard /installtunnelservice "C:\Program Files\WireGuard\wg_server.conf"

После установки туннель появляется в списке Служб Windows как WireGuard Manager со статусом «Выполняется» и типом запуска «Автоматически», что подтверждает, что он будет запускаться сам после перезагрузки.

Выполните эту команду только один раз, а не при каждом запуске. Активация туннеля из приложения WireGuard обычно устанавливает ту же службу, поэтому во многих случаях достаточно активировать его один раз. Чтобы позже удалить службу, используйте имя туннеля, которое совпадает с именем файла конфигурации без расширения .conf:

wireguard /uninstalltunnelservice wg_server

Чтобы перезапустить службу, например после изменения конфигурации, выполните команду удаления, а затем снова команду установки.

Info: Поскольку туннель работает как служба, отдельная задача в Планировщике заданий не нужна.

Перезагрузите сервер и убедитесь, что туннель запускается сам.

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA