Для многих обычных пользователей слово VPN сразу ассоциируется со средством доступа в сеть интернет. Действительно, это один из самых популярных сценариев использования данной технологии. Но если для большинства это всего лишь способ обхода ограничений, то специалисты чаще рассматривают VPN как защищенный канал в сетях с низким уровнем доверия: публичный Wi-Fi, сети баров, гостиниц, аэропортов. А если вы работаете с чувствительной информацией, то для таких целей лучше использовать собственный сервер, например, создав его на базе WireGuard.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
WireGuard в последнее время стремительно набирает популярность благодаря своей простоте и скорости работы. Конечно, есть и обратная сторона медали, но в данном сценарии раскрываются в основном только плюсы.
Напомним, WireGuard — это туннель без сохранения состояния, а следовательно применять к нему термины «клиент» и «сервер» некорректно, каждый узел WireGuard может как подключаться к другим узлам, так и принимать соединения. Но если мы говорим об организации выхода в интернет посредством VPN, то здесь данные термины уместны. В данном случае VPN-сервер — это узел предоставляющий возможность выхода в интернет, а VPN-клиенты — узлы, которые данную возможность используют, при этом технология реализации самого VPN-канала роли не играет.
Настройка VPN-сервера
Для обеспечения доступа в интернет VPN-сервер должен находиться на узле, обладающем достаточной пропускной способностью и точкой выхода в определенном географическом положении, которое зависит от того, к каким именно ресурсам вам нужно получать доступ. В большинстве случаев отлично подойдет VPS (виртуальный выделенный сервер) с минимальным тарифом в нужном расположении и ОС семейства Linux. Если говорить о семействе Debian / Ubuntu, то WireGuard поддерживается начиная с Debian 10 и Ubuntu 18.04 LTS. Все описанные ниже действия следует выполнять с правами суперпользователя root или через sudo.
Если вы используете Debian 10, то вам потребуется подключить backports-репозиторий:
echo deb http://deb.debian.org/debian buster-backports main > /etc/apt/sources.list.d/buster-backports.list
Обновим источники пакетов и установим WireGuard:
apt update
apt install wireguard
Следующим шагом выполним генерацию ключей, для этого перейдем в директорию /etc/wireguard:
cd /etc/wireguard
Временно изменим маску для обеспечения нужного набора прав на создаваемые файлы:
umask 077
Выполним генерацию ключевой пары:
wg genkey > privatekey
wg pubkey < privatekey > publickey
И вернем маску к стандартным значениям:
umask 022
Получим содержимое закрытого ключа, для этого воспользуемся командой:
cat /etc/wireguard/privatekey
Скопируем его содержимое, оно понадобится нам на следующем шаге, помним, что приватный ключ является секретным!
Создадим и откроем на редактирование конфигурационный файл WireGuard:
nano /etc/wireguard/wg0.conf
В данном случае мы используем nano, если вам больше по душе редактор mс, то просто замените nanо на mcedit.
Прежде всего настроим сетевой интерфейс WireGuard, для этого добавим в файл следующую секцию:
[Interface]
Address = 10.20.0.1/24
ListenPort = 34567
Privatekey = kNYGiCR3/ikepyURjFnEu5ueoCBsP2pjvGdcj2pggG8=
Настроек немного, указываем адрес интерфейса в VPN-сети, порт и секретный ключ. Зарезервированного порта для службы WireGuard нет, поэтому можем использовать любой.
Сохраним конфигурацию и добавим службу в автозагрузку, одновременно запустив ее:
systemctl enable --now wg-quick@wg0
В качестве имени службы используется wg-quick@<имя_конфигурационного_файла>.
Посмотреть статус WireGuard можно командой:
wg
Если все сделано правильно, то вы увидите информацию о созданном интерфейсе, в частности порт и публичный ключ.
Публичный ключ не является секретным, его также следует скопировать, он понадобиться нам для настройки клиентов.
Настройка NAT и брандмауэра
Для выхода клиентов в интернет нам потребуется рабочая служба NAT, а также требуется обеспечить достаточный уровень безопасности как самого сервера, так и работающих через него клиентов.
Прежде всего включим маршрутизацию, чтобы иметь возможность пересылать пакеты между интерфейсами, для этого откроем файл /etc/sysctl.conf, найдем и раскомментируем в нем следующую опцию:
net.ipv4.ip_forward = 1
Затем перечитаем настройки:
sysctl -p
Остальными настройками будет управлять iptables и этот вопрос может вызвать ряд затруднений. Настройки iptables не сохраняются при перезагрузке и существуют различные способы сделать это, наиболее простые и понятные — это скрипты, более современные — это специальные утилиты.
Более подробно о всех этих способах вы можете прочитать в нашей статье: Основы iptables для начинающих. Как сохранить правила и восстановить их при загрузке
Если вы не обладаете большим опытом работы с iptables, то, на наш взгляд, лучше начать со скрипта, а уже потом переходить к использованию утилит.
Создадим файл скрипта и разместим его в /etc:
nano /etc/nat-rules
И добавим в него следующее содержимое:
#!/bin/sh
# Сбрасываем настройки брандмауэра
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X# Разрешаем уже установленные соединения. Первое правило в цепочке!!!
iptables -A INPUT -i ens33 -m state --state ESTABLISHED,RELATED -j ACCEPT# Разрешаем подключения по SSH
iptables -A INPUT -i ens33 -p tcp --dport 22 -j ACCEPT# Разрешаем подключения к WireGuard
iptables -A INPUT -i ens33 -p udp --dport 34567 -j ACCEPT#Запрещаем входящие извне. Последнее правило в цепочке!!!
iptables -A INPUT -i ens33 -j DROP# Разрешаем уже установленные транзитные соединения
iptables -A FORWARD -i ens33 -o wg0 -m state --state ESTABLISHED,RELATED -j ACCEPT# Запрещаем транзитный трафик извне
iptables -A FORWARD -i ens33 -o wg0 -j DROP# Включаем маскарадинг для WireGuard клиентов
iptables -t nat -A POSTROUTING -o ens33 -s 10.20.0.0/24 -j MASQUERADE
Это минимальная конфигурация брандмауэра, разрешающего только SSH и WireGuard подключения к серверу, по мере необходимости следует добавить в нее собственные правила. Все они должны располагаться между правилами, разрешающими уже установленные соединения и запрещающего входящие соединения извне. В качестве внешнего интерфейса сервера используется ens33.
Сделаем данный файл исполняемым:
chmod + x /etc/nat-rules
Для его запуска можно добавить в секцию [Interface] конфигурационного файла WireGuard опцию:
PostUp = /etc/nat-rules
В большинстве случаев этого достаточно, но, если вдруг у нас не запустится WireGuard мы останемся без брандмауэра. Поэтому мы предлагаем пойти другим путем.
Прежде всего убедимся, что все правила работают как следует, для этого достаточно просто запустить скрипт.
/etc/nat-rules
Посмотреть состояние брандмауэра можно командой:
iptables -L -vn
Если все работает нормально, то установим утилиту iptables-persistent:
apt install iptables-persistent
Во время установки вам будет предложено сохранить текущие правила, с чем следует согласиться. После чего ваши правила будут автоматически сохранены в /etc/iptables/rules.v4, откуда будут восстанавливаться при загрузке. Скрипт нам больше не нужен, можем его убрать.
Можно ли обойтись без скрипта? Можно. Но не все обладают достаточными навыками работы с iptables, поэтому предложенный нами способ, хоть и является более длинным и избыточным, позволяет выполнить настройку брандмауэра наиболее просто для начинающих.
Настройка WireGuard клиента в Windows
Скачайте и установите WireGuard для Windows c официального сайта. В приложении выберите Добавить туннель — Добавить пустой туннель.
При этом автоматически будет создана ключевая пара и откроется окно редактирования конфигурационного файла, который уже будет содержать секцию [Interface] и закрытый ключ, все что нам останется, это добавить туда опцию с адресом интерфейса, его следует выбирать из того же диапазона, который вы указали на сервере.
Address = 10.20.0.101/24
Ниже добавим секцию [Peer] для подключения к серверу:
[Peer]
PublicKey = kKxQ4wF+kUrpsTGwjMvlSwX45WV4nixG76/+sKlzEQA=
AllowedIPs = 10.20.0.0/24, 0.0.0.0/0
Endpoint = 203.0.113.2:34567
PersistentKeepalive = 25
Которая содержит публичный ключ сервера, его адрес и порт, разрешенные сети. Так как нам требуется обеспечить выход в интернет через WireGuard подключение, то в список сетей мы добавили 0.0.0.0/0, что обеспечит направление в туннель всего исходящего трафика. Опция PersistentKeepalive предполагает обмен служебным трафиком с указанным пиром раз в 25 секунд, что требуется для поддержания нормальной работы клиента в том случае, если он находится за NAT.
После сохранения настроек туннельный интерфейс будет поднят и статус соединения будет Подключен, хотя мы еще не делали никаких настроек для данного клиента со стороны сервера. Кого-то может удивить или ввести в заблуждение такое положение дел и именно поэтому мы каждый раз акцентируем тот факт, что WireGuard — это туннель без сохранения состояния. Он ничего не знает о реальном состоянии канала и пира, к которому производится подключение, единственный способ это выяснить — послать пакет на другую сторону туннеля.
Так что же означает Подключен? Только то, что в конфигурации нет ошибок и туннельный интерфейс успешно поднят. Поэтому скопируем публичный ключ клиента и снова вернемся на сервер. Откроем конфигурационный файл и добавим в него следующую секцию:
[Peer]
PublicKey =i p9UjCFHiLnhQTcVgS/Y7j0s8caNj9hhn5RS2UqMXRo=
AllowedIPs = 10.20.0.101/32
Где мы укажем публичный ключ клиента и его внутренний IP-адрес, с которого следует принимать пакеты.
Перезапустим службу WireGuard на сервере:
systemctl restart wg-quick@wg0
Теперь можем проверить связь, для начала пропингуем внутренний адрес сервера 10.20.0.1 — если он отвечает, то туннель работает нормально.
Как мы уже говорили, при тех настройках, которые мы указали в туннель будет заворачиваться весь исходящий трафик клиента, в т.ч. и DNS-запросы. Поэтому если у вас в системе указаны локальные адреса DNS, скажем 192.168.1.1 роутера или адреса провайдера, недоступные из внешнего интернета, то разрешение имен работать не будет. Внешне это будет проявляться в том, что интернет работать не будет с указанием на ошибку DNS.
WireGuard прост, и обратная сторона этой простоты заключается в том, что мы не можем передавать нужные опции с сервера на клиента, как в OpenVPN, поэтому спасение утопающих — дело рук самих утопающих. К счастью, WireGuard позволяет задать опции для конфигурирования локального сетевого интерфейса, поэтому откройте приложение Wireguard, найдите свой туннель и выберите Редактировать, в открывшемся окне в секцию [Interface] добавьте опцию:
DNS = 8.8.8.8, 1.1.1.1
Теперь при поднятии туннельного интерфейса система будет использовать указанные адреса, в их качестве можно использовать любые публичные сервера доступные через ваш VPS.
Настройка WireGuard клиента в Linux
Несмотря на то, что WireGuard уже давно поддерживается на уровне ядра Linux с графическими инструментами для его настройки дело обстоит не совсем хорошо, многое зависит от конкретного дистрибутива, но управлять WireGuard из командной строки тоже очень просто.
С правами root или через sudo выполним установку и генерацию ключей точно также, как мы это делали на сервере, затем также создадим конфигурационный файл:
nano /etc/wireguard/wg0.conf
И внесем в него следующее содержимое:
[Interface]
Address = 10.20.0.102/24
Privatekey = 4Hfj7lZuaQZWkW2OGHPlkhr3Jxheg/lpcJkwiosvG0w=
DNS = 8.8.8.8, 1.1.1.1[Peer]
PublicKey = kKxQ4wF+kUrpsTGwjMvlSwX45WV4nixG76/+sKlzEQA=
AllowedIPs = 10.20.0.0/24, 0.0.0.0/0
Endpoint = 203.0.113.2:34567
PersistentKeepalive = 25
Секция [Interface] описывает сетевой интерфейс, в ней мы указываем секретный ключ клиента, желаемый адрес в VPN-сети и DNS-сервера. Секция [Peer] отвечает за подключение к серверу, у всех клиентов она общая, содержит публичный ключ сервера, его адрес и порт, а также параметры подключения и роутинга.
Для управление туннелем в ручном режиме можно использовать утилиту wg-quick, для подключения выполните:
wg-quick up wg0
где wg0 — имя вашего конфигурационного файла, с этим же именем будет создан сетевой интерфейс. Если запустить команду от имени обычного пользователя будет автоматически запрошено повышение прав.
Для отключения используйте:
wg-quick down wg0
При этом не забудьте добавить секцию [Peer] для этого узла на сервере и перезапустить службу, для этого понадобится указать публичный ключ клиента и его адрес, точно также как мы это делали для Windows-клиента.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
This post belongs to my “mini-course” on Gain flexibility & increase privacy with WireGuard VPN. I’ll only be walking through how to set up a client for WireGuard on Windows 10.
If you don’t have a server (or even if you already have one), definitely start from the top. I make a few assumptions and I broke things into separate posts because I try to get as detailed as possible.
If you are just here for the client configuration, keep reading!
What you’ll achieve
- We will be using the official client from WireGuard on Windows 10 to connect to our WireGuard VPN server
- All Internet traffic on the Windows 10 Client will pass through our WireGuard VPN first, then access the Internet
Here is what this looks like:
Prerequisites
- You need a working WireGuard Server (learn how to set that up here)
- You need a Windows 10 computer with admin privileges for install
The user must also be apart of the local admins group to run the VPN connection (thanks to /u/dubtea on Reddit)- Admin privileges are no longer required on version 0.3.1 or higher
Download the WireGuard Client
Always download clients from official sources. You can find that here: https://www.wireguard.com/install/
Install & Configure
Once you install the client, you will want to click the arrow next to “Add Tunnel”, then click Add empty tunnnel...
.
What’s nice about this is the GUI creates a public and private key for us automatically.
We’re far from done, so let’s get it to connect to our server.
Expanding the configuration
We need to update the configuration file to look like this:
[Interface]
PrivateKey = abcdefghijklmnopqrstuvwxyz1234567890=+
Address = 10.0.0.3/24
DNS = 1.1.1.1, 1.0.0.1
[Peer]
PublicKey = YOUR_SERVER_PUBLIC_KEY
AllowedIPs = 0.0.0.0/0
Endpoint = YOUR_SERVER_WAN_IP:51820
IMPORTANT: You need to replace YOUR_SERVER_PUBLIC_KEY
and YOUR_SERVER_WAN_IP
I dive into detail what this all means in another post, but make sure you are also setting your Address
to a unique IP address on your virtual private network.
This is what mine looks like (again, never share your private key. This is just a demo):
Checking Block untunneled traffic
will make sure that all of our traffic is being routed through our VPN.
Add your client key to your server
If you press Activate
on the next screen, it will not connect. Your server needs to know who you are.
Adding your client’s public key to the server
The easiest way to add your key to your server is through the wg set
command.
ON YOUR SERVER run this command:
sudo wg set wg0 peer YOUR_CLIENT_PUBLIC_KEY allowed-ips YOUR_CLIENT_VPN_IP
IMPORTANT: You need to replace YOUR_CLIENT_PUBLIC_KEY
and YOUR_CLIENT_VPN_IP
You can compare my command below to my diagram at the top of my post for exactly what I mean:
Test your connection
On your Windows 10 machine, press the Activate
button. You should see a successful connection be made:
Once you are connected, head on over to dnsleaktest.com. This will tell you two things:
- Is your DNS “leaking” (using a different DNS provider outside of your VPN)?
- Is your IP Address different?
If you followed my configuration, all DNS tests should comeback using “CloudFlare”.
Test the DNS Leak with WireGuard VPN active and inactive. Compare the results.
The last place to run a test is fast.com. This will run a speed test of your connection. If you run notice a dramatic decline in speed, try setting up a server in a region that is close to you (where you will usually be connecting from). I’ve always had good luck with Digital Ocean, Vultr, and Linode.
That’s all!
If you have any other clients to configure, check out my “mini-course” where you can learn to configure macOS, iOS, Android and more with WireGuard VPN.
Any questions, just let me know! You can add them to the comments below or ask me on Twitter. If you like posts like this, you can get more of them if you sign up on our mailing list.
Установка
1) Скачайте текущую версию для Windows: https://www.wireguard.com/install/ и установите.
2) Запустите C:\Program Files\WireGuard\ wireguard.exe и добавьте пустой туннель (мы будем настраивать серверную часть):
Добавить туннель → Добавить пустой туннель …
Регистрируем настройки:
Имя — имя сетевого подключения
Открытый ключ — открытый ключ сервера WireGuard (необходим для настройки клиентской части)
[Interface]
PrivateKey = # приватный ключ сервера WireGuard
ListenPort = # порт, который будет слушать WireGuard
Address = # желаемый IP адрес сервера WireGuard
3) Добавьте еще один пустой туннель (мы будем настраивать клиентскую часть): Добавить туннель → Добавить пустой туннель
Регистрируем настройки:
Имя — имя сетевого подключения
Открытый ключ — открытый ключ клиента WireGuard (необходим для настройки серверной части)
[Interface]
PrivateKey = # приватный ключ клиента WireGuard
Address = # желаемый IP адрес клиента WireGuard
[Peer]
PublicKey = # публичный ключ сервера WireGuard (из шага 2)
AllowedIPs = # IP адреса локальных пользователей
Endpoint = # IP адрес сервера (реальный, не WireGuard) и порт, который слушает сервер WireGuard (настроено в шаге 2)
4) Теперь нам нужно добавить нашего клиента в серверную часть WireGuard, для этого вернитесь к шагу 2 и добавьте его конфиг:
…
[Peer]
PublicKey = #Публичный ключ клиента WireGuard (из шага 3)
AllowedIPs = #IP адрес пользователя
5) Теперь достаточно экспортировать файлы конфигурации Экспортируйте все туннели в zip→Укажите место для экспорта→Сохранить
Далее откройте сохраненный архив, там будут конфигурации всех наших туннелей.
Отдайте клиенту его конфигурационный файл.
6) На сервере выберите конфиг сервера и запустите программу
7) На клиенте добавьте файл конфигурации в WireGuard. Добавить туннель→Выберите файл конфигурации клиента->Открыть
Выберите конфигурацию клиента и запустите
На этом настройка первого клиента завершена, аналогичным образом настраиваются остальные клиенты путем добавления их данных в конфигурацию сервера (шаг 4).
Автоматический запуск WireGuard после перезапуска сервера.
1) Добавьте файл запуска в автозапуск планировщика Windows:
Пуск → taskschd.msc
Нажмите «Создать простую задачу» → Введите имя задачи (например, wireguard) → Далее
Выберите «При запуске компьютера» → Далее
Выберите «Начать программу» → Далее
В поле «Программа или сценарий» выберите наш файл для запуска WireGuard (по умолчанию это «C:\Program Files\WireGuard\wireguard.exe»)
Добавьте аргументы:
/installtunnelservice «C:\Program Files\WireGuard\wg_server.conf»
где:
C:\Program Files\WireGuard\wg_server.conf — расположение конфигурационного файла *.conf
Установите флажок «Открыть окно свойств для этой задачи после нажатия кнопки «Готово»»→ Готово
В открывшемся окне отметьте пункт «Выполнить с наивысшими правами» → OK
Выполнено. Сделайте перезагрузку, проверьте
С февраля 2022 года каждый пользователь в составе своего тарифа получает возможность использования сервера WireGuard и устанавливать одно подключение к нему из сети Интернет.
Соединение WireGuard является дополнительным к вашим существующим туннелям и использование WireGuard не считается туннелем в рамках тарифного плана.
В рамах базового тарифа пользователю предоставляются 2 туннеля с протоколами PPTP, L2TP, L2TP/IPsec, IKEv2/IPsec, SSTP, OpenVPN и дополнительно одно соединение по протоколу WireGuard. Таким образом, каждый пользователь сможет одновременно установить три соединения к VPNKI.
Соединение WireGuard отличается еще и тем, что пока в нем нет возможности маршрутизации сетей, расположенных «за маршрутизатором», но мы планируем добавить такую возможность несколько позже.
Так как протокол WireGuard использует другую архитектуру, то логика его настройки на сервере VPNKI отличается от традиционной.
Мы хотим получить удаленный доступ к своей сети из Интернет с использованием протокола WireGuard. При этом наша сеть уже подключена к VPNKI по любому из протоколов — PPTP, L2TP/Ipsec, OpenVPN.
В качестве клиентского ПО мы будем использовать клиентское ПО WireGuard для Windows. Компьютер с клиентом WireGuard будет расположен в Интернет.
В момент подключения, в вашем клиентском ПО WireGuard будет создан туннельный интерфейс и использован адрес 172.16.0.3 сети VPNKI. Ну а хотим мы «достучаться» до сервера с адресом 192.168.1.10 в домашней сети.
Схема представлена здесь.
1. Подготовка сервера
Основная особенность WireGuard состоит в том, что у него нет понятия клиент и сервер, а все соединения равнозначны.
Однако в нашей терминологии мы будем использовать слово «Сервер» применительно к тому WireGuard, который запущен на сервере VPNKI, а термин «Клиент» будем применять к Wireguard, который запущен на вашем компьютере с Windows.
Сначала нам будет необходимо сконфигурировать сервер WireGuard на VPNKI. Этот процесс состоит из двух шагов:
- Выбор порта UDP на котором будет «слушать» ваш сервер WireGuard и ожидать подключения из сети Интернет.
- Предварительная конфигурация сервера WireGuard — назначение приватного и публичного ключей сервера.
1.1. Начнем с выбора UDP порта. На главной странице туннелей выберите галочку «Использовать доступ через WireGuard».
Сервер выберет доступный UDP порт, на которому будет «слушать» ваш сервер WireGuard.
В данном примере система выбрала порт 26005 ( у вас будет какой-то другой). После завершения выбора порта можно переходить к предварительной конфигурации сервера.
1.2. На этом шаге система подготовит публичный и приватный ключи вашего сервере WireGuard.
Приватный ключ сервера VPNKI сохранит у себя, а вот публичный ключ покажет вам. Он будет необходим для корректной конфигурации вашего клиента WireGuard на ПК с ОС Windows.
Нажмите «Создать сервер WireGuard«.
После генерации ключей система подготовила вам Публичный ключ сервера: Clu9YfM1KD8C+zl11fob2QDUiZcV1wqJzUOwihmavHA=. (у вас он будет какой-то другой).
На этом этап подготовки завершен и можно переходить к конфигурации клиента.
2. Установка клиента WireGuard
2.1. Установите ПО WireGuard на ваш ПК с ОС Windows, скачав пакет с официального сайта.
После установки вам будет необходимо создать новое соединение. Делается это в меню»Добавить туннель» и дальше нужно выбрать «Добавить пустой туннель».
После добавления пустого туннеля вам будет сгенерирован приватный и публичный ключи клиента. Эти ключи будут показаны на следующем экране. Нас будет интересовать только Публичный ключ (поле 1).
2.2. Назовите как-нибудь соединение (например VPNKI) и нажмите «Сохранить«.
Теперь у вас есть предварительно сконфигурированное подключение, но это еще не полная его конфигурация.
Мы вернемся к нему чуть позже, а пока пришло время сообщить серверу публичный ключ клиента, а клиенту сообщить публичный ключ сервера. Вроде бы просто, но путаница возникает часто.
Выделите и скопируйте в буфер обмена Публичный ключ (поле 1). Сейчас мы перейдем к серверу VPNKI и укажем его там в настройках подключения.
3. Конфигурация подключения на сервере VPNKI
3.1. Вернитесь к экрану настройки сервера Wireguard и в разделе «Данные клиента» нажмите «Создать подключение».
3.2. На следующем экране вам предложат ввести «Публичный ключ клиента».
3.3. Вставьте Публичный ключ клиента из буфера обмена (который вы скопировали туда на шаге 2.2) и нажмите «Сохранить».
!!! Обратите внимание, что ключ всегда имеет длину 44 символа, последний из которых знак равенства =.
3.4. После сохранения публичного ключа клиента на сервере запустится процесс WireGuard и он будет готов принимать подключение.
Теперь осталась одна деталь… надо окончательно сконфигурировать клиента и попробовать подключиться.
4. Завершение конфигурации клиента WireGuard на ПК с ОС Windows для подключения
4.1. Завершим конфигурацию клиента. Для этого войдем в режим редактирования ранее созданного подключения при помощи кнопки «Редактировать«.
4.2. Теперь вам нужно дозаполнить данные, которые будут описывать сервер и его данные. Это описание должно будет располагаться в месте красной рамки.
Взять эти данные для заполнения нам предстоит на сервере VPNKI. Для этого нажмите на кнопку «Конфигурация клиента».
Откроется окно с данными, которые вам будет необходимо перенести в конфигурацию вашего клиентского подключения.
На скриншоте ниже показаны два окна — окно сервера VPNKI и окно редактирования клиентского подключения. Рамкой отомечен тот текст, который вам нужно будет скопировать и вставить.
Вот так:
Нажмите «Сохранить«.
Теперь ваше клиентское подключение полностью сконфигурировано и готово к подключению. После сохранения вы увидите полную конфигурацию вашего клиента.
Однако перед нажатием кнопки подключиться давайте все еще раз проверим и поясним детали.
- В вашей настройке соединения на клиентском ПО верхняя часть описывает ваш собственный интерфейс. Хоть мы его и назвали VPNKI, но это ваш интерфейс. Он пока отключен. Его публичный ключ — OYUNru3L5zljznYR1NEHMCVFCgeIwQWal91O4Q8qwA0= IP адреса:172.16.0.3/32 это адрес, который будет использован на вашем интерфейсе после успешного подключения.
- Нижняя часть (Пир) описывает сервер. Публичный ключ сервера — Clu9YfM1KD8C+zl11fob2QDUiZcV1wqJzUOwihmavHA= Адреса, при обращении к которым, трафик вашего клиента пойдет в туннель WireGuard — 172.6.0.0/16. Это адреса вашей сети VPNKI. То есть при успешном подключении из Интернет пинг с вашего ПК, отправленный по адресу 172.16.0.1 пойдет в интерфейс WireGuard, а не куда-либо еще. По сути, это правило для таблицы маршрутизации вашего ПК. Ну и в завершении — IP адрес сервера и порт — 84.201.157.25:26005. Это то, куда ваш клиент будет подключаться из Интернет используя протокол UDP. Наверное все.
Теперь можно попробовать подключиться. Но ….
5. Подключаемся снаружи
Обратите внимание, что эта инструкция подразумевает, что ваш клиентский ПК расположен в сети Интернет. Но если сейчас ваш ПК подключен к домашней сети, которая, в свою очередь, уже подключена к VPNKI то имеет смысл выключить этот ПК из домашней сети и подключить его, например, к сотовому оператору связи.
Если ваш ПК уже в Интернет, то нажимайте Подключить и смотрите за результатом.
На скриншоте показано успешное подключение. Давайте попробуем выполнить пинг сервера VPNKI по туннелю WireGuard — ping 172.16.0.1.
Пинг успешен. Это хорошо. Но как быть если нужно выполнить пинг, например, адреса 192.168.1.1, который расположен где-то в вашей сети VPNKI.
С текущими настройками это будет невозможно. Потому что ваш клиент просто не отправляет пакеты к адресу 192.168.1.1 в интерфейс Wireguard. Вот пинг и не успешен…
Давайте добавим маршрут к вашей сети 192.168.1.0/24 через интерфейс WireGuard. Для этого остановим соединение и внесем изменение в настройки подключения на вашем клиенте. А именно …
Добавим через запятую нужные адреса сетей, которые должны быть доступны через туннель WireGuard, сохраним настройки, переподключитмся и выполним пинг 192.168.1.1 .
Вот теперь все успешно. И в завершение можно выполнить пинг адреса сервера в домашней сети — 192.168.1.10.
Теперь все.
PS: В процессе написания инструкции мы обратили внимание на некоторые странности в работе ПО WireGuard под Windows. При попытке подключения в статусе содинения может быть написано «Подключен», но при этом не появляется статистика числа переданных и полученных байт. Ну и фактически трафик по туннелю не передается. Поэтому больше доверяйте статистике, чем самому статусу подключения. Если статистика есть — значит туннель работает.
Спасибо за внимание и успехов в пингах!
*** WireGuard пока в тестовом режиме, если вдруг что-то не получилось, обращайтесь на Форум.
A few months ago, I wrote a tutorial on installing WireGuard, a simple, fast, and modern VPN, on Linux and opening a VPN connection from an Android device. Because I work most time on Windows, I was also especially interested in connecting my computer to a WireGuard VPN, but there was no Windows client available at that time.
In the meantime, the developers of WireGuard released a Windows version. This blog post shows you how to install and configure WireGuard on Windows and establish a VPN connection to a WireGuard server running on a VPS.
This tutorial assumes that you already have a WireGuard server running somewhere. I connect the Windows client to a WireGuard server running on Amazon Lightsail, which is set up according to my previous blog post. If you follow my previous tutorial, skip the client setup section, and you also don’t have to generate the public/private key pair for the client.
The topology of our VPN that we will build in this tutorial looks like this:
I’m using WireGuard in this example as a VPN and route all IP traffic from my Windows computer to the Internet through the Linux server.
You can also use WireGuard to connect to a private network like a company LAN or connect two private networks over the public Internet; however, I will not cover these use cases.
Installation
The first step is to download the software from the download page:
https://www.wireguard.com/install/
Install the msi
file. After the installation, you should see the WireGuard icon in the icon bar.
WireGuard for Windows runs on Windows 7, 8, 8.1, 10, 2012, 2016, and 2019 and is available in a 64-bit and a 32-bit version. I’m testing the 64-bit version on Windows 10.
Be aware that all the WireGuard software packages are in a pre-release state and should only be used for testing. If you are concerned about security, I recommend waiting until the official release, and an independent third party has audited the software.
Configuration
Next, we configure the VPN tunnel. This includes setting up the endpoints and exchanging the public keys.
Windows
Open the WireGuard GUI and click on Add Tunnel -> Add empty tunnel…
The software automatically creates the public/private key pair and displays it on the screen.
Give the tunnel a name and insert the following configuration. Change IP addresses and keys according to your environment.
[Interface]
PrivateKey = 6I79zNsp26O2gCYkScEXdypB2UZ8IbNv2pV36QstKlo=
Address = 192.168.2.2/32
DNS = 192.168.2.1
[Peer]
PublicKey = uZik78EWgYCLQRMdG6k6QK0mzHFqfr4uhOEjPyXe5WE=
AllowedIPs = 0.0.0.0/0
Endpoint = 35.174.118.17:54321
- PrivateKey: Private key of this client
- Address: IP address of this client. It must be unique among all clients.
- DNS: IP address of a DNS server. In this case, I use the DNS server running on the WireGuard server.
- PublicKey: Public key of the server
- AllowedIPs: Specifies what IP addresses should be routed over the VPN. For example, 0.0.0.0/0 is a catch-all configuration and routes everything over the VPN.
- Endpoint: External IP address of the server and listening port. Port must match the
ListenPort
server configuration.
Server
On the server-side, you need to add a [Peer]
section to the WireGuard configuration file (/etc/wireguard/wg0.conf
)
[Peer]
PublicKey = rbkuZ+3SyPtT/QLZhFhiTo555ekSCJRsHf3jJb5kdkI=
AllowedIPs = 192.168.2.2/32
- PublicKey: Public key of the Windows client
- AllowedIPs: Specifies what IP addresses are allowed through this tunnel. This is the VPN IP address of the Windows computer.
Here is a screenshot showing the Windows client (left) and the Linux server (right) configuration.
Ensure that you exchange the correct keys and the IP addresses are correct.
Block untunneled traffic
You might notice the option Block untunneled traffic. You can enable this option when your configuration has precisely one [Peer]
section and AllowedIPs
is set to a catch-all address.
If the option is enabled, the WireGuard client adds Windows Firewall rules to block all traffic that is neither to nor from the tunnel interface.
As mentioned before, I use this configuration to route all IP traffic through the VPN, so it makes sense to enable this option to prevent accidentally sending IP packets outside the VPN.
If you use WireGuard to connect to a private network, like a company LAN or your home network, you don’t need to enable this option. Instead, configure AllowedIPs
so that only your private network IP addresses are routed through the VPN.
Activate
You should now be able to activate the VPN connection.
Click on Activate.
After a few seconds, the status should change to Active
If that’s not the case, check the Log tab and double-check the client and server configuration.
Deactivate closes the VPN connection.
Checking VPN connection
To check if the VPN works correctly, open a browser with the URL: https://www.whatismyip.com/
Or enter the search term «my ip» into the Google search.
If the connection is routed through the VPN, it should show the IP address of the WireGuard server as the public address.
If you run your own DNS server, as I do in this example, check if DNS requests are routed through the VPN. Go to https://www.dnsleaktest.com and run the extended test. The test runs for a few seconds and displays a list of servers that answered the DNS queries. Make sure that this list only contains the IP address of your DNS server.
Read this guide about DNS leaks to learn more about why you want to test for DNS leaks and it also shows you other methods for preventing leaks.
Adding more clients
You can connect multiple clients to one server. Follow the configuration above and add a [Peer]
section to the server configuration file for each client. Make sure that you assign a unique IP address for each client.
Don’t forget to restart WireGuard on Linux after you changed the configuration:
wg-quick down wg0 && wg-quick up wg0
I’ve been running the Windows client for a few days, and even though it’s a pre-release, it is remarkably stable and works without any problems.
One feature I like is that the Windows version of WireGuard remembers the VPN connection state. So when you reboot Windows while WireGuard is connected to the server, the software automatically reconnects and re-establishes the VPN tunnel when it starts up. This prevents you from accidentally connecting without a VPN.