Виртуальные частные сети — это технология подключения в сеть, при котором происходит шифрование данных. Подключение к такой сети происходит поверх обычного соединения. Среди преимуществ их использования — безопасное подключение к общественным Wi-Fi-сетям и не только, а также дополнительный уровень безопасности и защиты данных при использовании облачных сервисов.
WireGuard — это протокол, разработанный с целью обеспечения безопасной и эффективной передачи данных в интернете. Как заявляет разработчик, он чрезвычайно простой, но в то же время быстрый и инновационный. Изначально он был доступен только для ОС семейства Linux, но немногим позже стал кроссплатформенным. Ниже перечислим основные его преимущества:
В настоящей статье будет представлена подробная пошаговая инструкция по установке сети WireGuard, включая дальнейшую его настройку со стороны сервера и со стороны пользователей. Все действия будут выполнены на облачном сервере нашей компании, который вы можете заказать по этой ссылке.
В статье, для поднятия сервера WireGuard, была выбрана Ubuntu 22.04. Клиентская версия данного ПО будет установлена на Windows 10.
А если не хочется заниматься ручной настройкой — в Timeweb Cloud вы можете заказать сервер с готовым образом WireGuard. Сервер будет установлен и настроен автоматически, и вам останется только настроить подключение.
Шаг 1. Чтобы поднять свой WireGuard, необходимо в первую очередь выполнить подключение к своему облачному серверу, используя протокол SSH. Команда для подключения представлена ниже:
ssh user_name@Server_IP-address
Если возникнут сложности, вы можете воспользоваться нашей инструкцией, чтобы правильно произвести подключение.
cloud
Шаг 2. Как только подключение будет выполнено, переходим к следующему шагу — обновлению существующих пакетов apt
. Для этого в терминале выполним следующую команду:
sudo apt update
После начнется процесс обновления пакетов, который продемонстрирован на картинке ниже.
Шаг 3. Как только все пакеты будут обновлены, начинаем загрузку собственного WireGuard. Вводим в терминал системы команду, представленную ниже:
sudo apt install wireguard
После выполнения команды начнется процесс установки. На все вопросы системы во время скачивания отвечаем утвердительно.
Шаг 4. Как только закончится скачивание всех файлов, переходим в главный каталог устанавливаемого ПО. Он находится по следующему адресу:
cd /etc/wireguard/
Это нужно для того, чтобы дальнейшая настройка сервера, включая создание ключей и редактирование конфига, происходила именно в каталоге установленного сервиса. Здесь будут храниться все создаваемые ключи сервера и его пользователей, а также главный конфиг, которые мы будем рассматривать немного позже.
Шаг 5. На данном этапе мы приступаем к созданию пары ключей для нашего сервера, которые будут нужны для настройки безопасного соединения. Сделать это возможно способом, представленным ниже:
wg genkey | tee /etc/wireguard/server_privatekey | wg pubkey | tee /etc/wireguard/server_publickey
Опишем ключевые элементы команды:
wg genkey
— отвечает за генерацию закрытого ключа;wg pubkey
— отвечает за генерацию открытого ключа;|
— в первом и третьем случае служит для передачи ключа команде tee
. Второе использование |
необходимо для генерации открытого ключа на основе ранее полученного закрытого;tee
— записывает значения ключей в указанные после команды файлы.Как итог, мы получим пару ключей, которые потребуются для последующей конфигурации сервера.
Чтобы изучить содержимое файлов с ключами, вводим в строку терминала:
cat server_privatekey
cat server_publickey
Как видно по картинке ниже, пара ключей успешно сгенерирована.
На данном этапе также нужно выполнить копирование приватного ключа. Он понадобится при настройке сервера WireGuard в следующем шаге.
Шаг 6. От правильной настройки главного конфигурационного файла сервера зависит успешность его дальнейшей работы. Сюда входят следующие настройки:
Перед началом редактирования конфига, определим имя своего сетевого интерфейса. В строку терминала напишем:
ip a
В результате будет выведен список интерфейсов, среди которых нужно найти тот, что имеет IP-адрес текущего подключения.
Чтобы создать свой сервер WireGuard, перейдем к редактированию конфига:
sudo nano wg0.conf
Ниже приведем синтаксис данных в файле, достаточный для запуска:
[Interface]
PrivateKey = <закрытый_ключ>
Address = <IP-адрес_сервера>
ListenPort = <Порт>
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o <Интерфейс> -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o <Интерфейс> -j MASQUERADE
Порядок заполненных данных соответствует порядку списка, который мы приводили в начале этого шага.
В данной конфигурации:
PrivateKey
— закрытый ключ сервера. Его можно получить из файла server_privatekey
. О том, как это сделать, мы говорили в прошлом шаге.
Address
— внутренний IP-адрес для интерфейса WireGuard. Например,10.0.0.1/24. Он должен быть уникальным и не конфликтовать с другими IP-адресами в вашей сети.
ListenPort
— это порт, на котором сервер WireGuard будет слушать входящие соединения. Обычно выбирают порты от 51820 до 51830, но можно использовать любой свободный. Убедитесь, что выбранный порт открыт в настройках вашего брандмауэра.
PostUp
— команды, выполняемые при запуске интерфейса. Они добавляют правила iptables для маршрутизации трафика через интерфейс WireGuard.
PostDown
— команды, выполняемые при остановке интерфейса. Эти команды удаляют правила iptables, добавленные в PostUp.
Шаг 7. Далее произведем настройку IP forwarding:
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
Затем сразу проверим внесенные изменения:
sysctl -p
Как видно по картинке выше, все прошло успешно.
Шаг 8. Заключительным шагом данного раздела будет настройка правил запуска.
Автозапуск сервера при включении системы настраивается следующим образом:
systemctl enable wg-quick@wg0.service
Для включения сервера, вводим в терминал:
systemctl start wg-quick@wg0.service
И наконец, чтобы проверить работу сервера:
systemctl status wg-quick@wg0.service
Как видно по картинке выше, сервер успешно запущен и функционирует. На этом шаге создание сервера WireGuard и его настройка окончена.
Шаг 1. Чтобы пользователь мог пользоваться только что созданным собственным сервером WireGuard, необходимо создать для него ключи. Выполнить это можно также на сервере.
Для этого воспользуемся ранее рассмотренной командой:
wg genkey | tee /etc/wireguard/user1_privatekey | wg pubkey | tee /etc/wireguard/user1_publickey
Чтобы в будущем не было путаницы, старайтесь называть файлы с ключами уникальными именами.
Сразу копируем открытый ключ пользователя. Он понадобится нам в следующем этапе.
Теперь в папке wireguard
находится 4 ключа и конфигурационный файл, как показано на рисунке ниже.
Шаг 2. Теперь, когда ключи созданы, переходим к доработке ранее созданного конфига сервера. Для этого открываем наш файл конфигурации:
nano wg0.conf
Нам нужно добавить настройки для соответствующего пользователя. Ниже представлен синтаксис этих настроек:
[Peer]
PublicKey = <Открытый_ключ_клиента>
AllowedIPs = <Разрешенный_IP_адрес_для_клиента>
AllowedIPs выбирается из того же диапазона IP, что был указан для сервера.
На картинке ниже приведен пример итогового файла конфигурации для сервера.
Шаг 3. После внесения всех изменений перезагружаем сервер WireGuard. Это нужно делать каждый раз при внесении корректировок в свой конфиг.
systemctl restart wg-quick@wg0
Шаг 4. Проверяем, что после внесенных изменений сервер успешно работает:
systemctl status wg-quick@wg0
Шаг 5. Переходим к установке необходимого ПО на компьютер клиента. Выполнить загрузку можно с сайта компании-разработчика.
Шаг 6. Теперь необходимо организовать пользовательский конфиг для подключения к серверу. Для этого на своем устройстве создадим специальный файл с расширением .conf
— его название может быть произвольным, например, wg.conf.
Синтаксис файла представлен ниже:
[Interface]
PrivateKey = <Закрытый_ключ_клента>
Address = <IP-адрес_клиента>
DNS = 8.8.8.8
[Peer]
PublicKey = <Публичный_ключ_сервера>
Endpoint = <IP-адрес_сервера>:<Порт>
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 20
В данной конфигурации:
PrivateKey
— закрытый ключ клиента. Его можно получить из файла user1_privatekey
.
Address
— внутренний IP-адрес клиента в подсети WireGuard. Например, 10.0.0.2/24, где IP-адрес должен быть уникальным в пределах вашей сети.
DNS
— DNS-сервер для использования клиентом. Например, 8.8.8.8 для использования DNS-серверов Google.
PublicKey
— публичный ключ сервера. Его можно получить из файла server_publickey
.
Endpoint
— внешний IP-адрес сервера и порт для подключения.
AllowedIPs
— разрешенные IP-адреса для маршрутизации через сервер. Строка AllowedIPs = 0.0.0.0/0
означает, что весь трафик будет маршрутизироваться через WireGuard. Так как мы указали именно такое значение AllowedIPs
, то в этом случае указываем DNS = 8.8.8.8
(8.8.8.8 — DNS-сервер Google), чтобы DNS-запросы выполнялись через защищенное соединение.
PersistentKeepalive
— интервал отправки keepalive -пакетов для поддержания соединения. Он указывается в секундах.
У вас рассмотренные параметры могут отличаться, в зависимости от поставленных целей.
На картинке ниже приведен пример итогового файла конфигурации для клиента.
Шаг 7. Следующим шагом загрузим только что созданный пользовательский конфиг в WireGuard. Для этого нажимаем на кнопку «Импорт туннелей из файла», как показано на рисунке ниже.
Шаг 8. После добавления файла перед вами откроется окно, в котором необходимо нажать кнопку «Подключить». После этого в поле «Статус» появится надпись «Подключен», если все было выполнено верно.
Настройте WireGuard на собственном облачном сервере
В данной статье мы представили подробную инструкцию по установке WireGuard на свой сервер: скачали соответствующее ПО, а затем провели полную настройку как серверной, так и клиентской части. Надеемся, что данная инструкция была полезна и вы с легкостью сможете настроить сервер для своих потребностей.
Доброго дня! Не подскажите, адрес интерфейса Wireguard обязательно должен быть 10...? Нельзя назначить что-то из 192.168..*, то есть адрес из внутренней серой сети, с той разницей что два последних октета будут другими. Допустим адрес сервера - 192.168.50.50, а адрес интерфейса - 192.168.100.50
"Address — внутренний IP-адрес клиента в подсети WireGuard. Например, 10.0.0.2/24" - сами-то пробовали такой адрес назначить на чистом конфиге? У меня не заработало пока маску /32 не выставил.
Подскажите пожалуйста, при такой настройке, я могу использовать один и тот же конфиг для подключения нескольких устройств одновременно (пк, ноут, телефон, роутер)?
Или надо создавать для каждого нового устройства свой конфиг?
Для безопасного и корректного использования WireGuard каждому устройству рекомендуется создавать отдельный конфигурационный файл.
Приношу извинения автору. Статья актуальна не для России. Некоторые провайдеры блокируют WireGuard, даже с нестандартным портом. Научились. Ростелеком блокирует.
Статья не актуальна.
В результате будет выведен список интерфейсов, среди которых нужно найти тот, что имеет IP-адрес текущего подключения.
на скрине обозначен используемый интерфейс а конфигурируем wg0, это не опечатка?
Когда вы настраиваете WireGuard, вы создаете новый виртуальный сетевой интерфейс, который обычно называется
wg0
. Этот интерфейс используется исключительно для работы WireGuard и связан с конфигурацией туннеля, который вы настраиваете.На скриншоте показан другой сетевой интерфейс, связанный с нашим текущим интернет-соединением (например,
eth0
,wlan0
, и т.д.), который имеет IP-адрес, используемый для выхода в интернет. Этот интерфейс нужен для того, чтобы указать, через какой именно интерфейс будет проходить трафик, когда вы подключаетесь через WireGuard.Иными словами:
— Интерфейс с текущим IP-адресом используется для определения исходного соединения.
— Интерфейс
wg0
— это новый интерфейс, который вы создаете для работы WireGuard.Подскажите, как обновиться на новую версию без потери текущей конфигурации и пользователей?
Добрый день! Для обновления выполните следующее:
Шаг 1. Сделайте резервную копию текущих конфигурационных файлов. Скопируйте все конфигурационные файлы из директории
/etc/wireguard/
в безопасное место:В Windows откройте WireGuard и экспортируйте текущие конфигурации туннелей. Для этого выберите каждый туннель, нажмите правой кнопкой мыши и выберите "Export tunnel(s)".
Шаг 2. Скачайте последнюю версию WireGuard или обновите его с помощью команд:
Для Ubuntu/Debian:
Для CentOS/RHEL:
Шаг 3. Перезапустите WireGuard и убедитесь, что после обновления конфигурационные файлы остались на месте и не изменились. Если вы создали резервную копию на шаге 1, сравните файлы в
/etc/wireguard/
с резервной копией.Не работает интернет, делал как в статье, но при подключении нет интернета, где я мог ошибиться?
Добрый день! Работа протокола Wireguard может быть ограничена вашим провайдером интернета (уточнить можно в их поддержке). Вместо готовой сборки Wireguard можно попробовать другие решения, например, настройку Outline на своем сервере.
У вас тут ошибка: Вы пишите server_privatekey: wg genkey | tee /etc/wireguard/server_privatekey | wg pubkey | tee /etc/wireguard/server_publickey
А потом вызываете почему-то: cat server_privatekeyCAT. Из-за этого не находит приватный ключ.
Спасибо, исправили досадную опечатку.
я скачал wireguard tools на linux как мне добавить файл конфигурации из Шаг 7
Добрый день! Выполните следующее:
/etc/wireguard/
. Например, если ваш файл называетсяwg0.conf
, выполните команду:Не работает подключение по SSH, пишет Permission denied (publickey,password).
Добрый день! По поводу этой ошибки напишите, пожалуйста, в поддержку из своей панели управления — коллеги помогут разобраться.
Статья хорошая. Из того, чего мне не хватило и пришлось искать дополнительно, так это разъяснений где в конфигах прописываются "внутренние айпишники", а где внешний от сервера.
И что на арендуемом сервере уже установлен mc и не надо заморачиваться с окном терминала (как минимум он решает проблему просмотра ключей и конфига).
Спасибо за замечание! Расписали подробнее про элементы конфигов.
Не понятно откуда брать ListenPort для файла конфигурации?
51820 ставьте
Добрый день! Параметр ListenPort — это порт, на котором сервер WireGuard будет слушать входящие соединения. Обычно выбирают порты от 51820 до 51830, но можно использовать любой свободный. Убедитесь, что выбранный порт открыт в настройках вашего брандмауэра.
здравствуйте, я не совсем понял что вписывать в "IP-адрес_клиента" при создании конфига для подключения. Туда ружно адрес пк или телефона, верно?
Добрый день! Секция
[Interface]
описывает конфигурацию вашего устройства — клиента, который подключается к серверу WireGuard. ПараметрAddress
в этой секции указывает на IP-адрес (или диапазон IP-адресов), который будет назначен виртуальному сетевому интерфейсу WireGuard на вашем устройстве.Для частных сетей обычно используются следующие диапазоны IP-адресов:
10.0.0.0 до 10.255.255.255
172.16.0.0 до 172.31.255.255
192.168.0.0 до 192.168.255.255
Если вы настраиваете WireGuard только для одного устройства или для личного использования, вам необязательно нужен целый диапазон IP-адресов. Например:
Address = 10.0.0.2/32
Адрес выбирается так, чтобы он не пересекался с адресами других сетей, к которым ваше устройство может быть подключено, чтобы избежать путаницы и проблем с доставкой данных.
Крутая статья. Пробовал по другим инструкциям и ничего не работало. Сделал по этой все работает да и еще с обьяснением теперь хоть стало понятно. Спасибо! Единственное что не верно в этой команде:
нужно сделать вот так:
Путь идет маленькими буквами а не большими.
Спасибо за замечание, поправили пути. Очень рады, что инструкция помогла 💙
Мне дико "нравится", когда автор ближе к концу статьи просто отвалился и стало уже не понятно. Особенно, касаемо создания конфиг-файла для wg...
Спасибо за комментарий! Автор внес правки, чтобы описать настройку клиентской части подробнее. Если какие-то моменты остались неясными, дайте знать — тоже доработаем. Также напомним, что у нас есть готовая сборка с Wireguard :) Можно развернуть VPN в Польше или Нидерландах в один клик, и все конфиги будут настроены автоматически.
Спасибо за статью. Пока главная проблема, что некоторые сервисы типа OpenAI (ChatGPT) умеют отлавливать ваши IP и банить. Из-за чего VPN на ваших серверах уступают другим хостерам.
У меня с апреля работает Wireguard на нидерландском сервере и пока ChatGPT пускает. Может, палево происходит ещё по какой-то причине? В частности, палится роутер - гугл и яндекс отслеживают местоположение вайфай роутеров и могут привязывать пользователей к местоположению независимо от пользования vpn. OpenAI может каким-то образом иметь доступ к этой инфе или иметь свою базу привязок. Попробуйте зайти через браузер Dolphin через тот же забаненый VPN.