Налаштування WireGuard для Windows | INTROSERV
EUR
european

EUR

usa

USD

Ukraine Ua
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