В данной статье будет подробно описано, как настроить защищенный зашифрованный туннель Wireguard на своем сервере. Это может быть виртуальный или выделенный сервер - не имеет большого значения.
Эта инструкция по настройке Wireguard рассчитана на пользователей которые не имеют большого опыта, поэтому все шаги будут достаточно подробными и сопровождаются скриншотами.
Трафик, проходя по нашему тоннелю, будет шифроваться, и в интернете будет отображаться не адрес провайдера, через который мы выходим в сеть, а IP-адрес нашего сервера.
Предполагаю что у вас уже есть VPS. Если нет, то вы можете его заказать у нас.
На нашем сервере мы установим операционную систему Ubuntu 22.04. Если у вас имеется сервер с другой ОС, то вы можете легко переустановить ее по инструкции.
И так, у нас готов сервер с ОС Ubuntu 22.04, теперь подключаемся к нему по SSH. Если вдруг вы до этого не сталкивались с этим протоколом, то у нас есть статья в которой этот процесс подробно описан. Для ОС Linux второй пункт, для ОС Windows третий пункт в статье.
Настройка серверной части
После успешного подключения я напишу несколько команд и описание того что они производят для понимания процесса:
Обновляем список пакетов в репозиториях
apt update
Обновим сами пакеты
apt upgrade -y
Установим пакет wireguard
apt install -y wireguard
Наша конфигурация будет хранится в каталоге /etc/wireguard/ перейдем в каталог:
cd /etc/wireguard/
Нам потребуется открытый и закрытый ключ для нашего сервера. Сгенерируем их, предварительно выставив правильные права при создании файлов и каталогов командами:
umask 077
wg genkey > privatekey
wg pubkey < privatekey > publickey
Выставим права на приватный ключ:
chmod 600 privatekey
Перед созданием конфигурационного файла нам потребуется наименование нашего сетевого интерфейса. Для того что бы его узнать используем команду:
ip a
Нас интересует интерфейс с IP-адресом, Который используется для текущего подключения. Вероятно, у вас он будет называться ens3, но может быть и другое название.

Также нам понадобятся открытый и закрытый ключи. Для их вывода я использую tail
tail privatekey publickey
Выглядит это так:

Для редактирования вы можете использовать любой текстовый редактор Linux. В примере мы будем использовать nano. Чтобы установить его нужно выполнить команду:
apt install -y nano
Редактируем конфигурационный файл:
nano /etc/wireguard/wg0.conf
Примечание:
что бы сохранить файл используем комбинацию клавиш ctrl+o
для выхода ctrl+x
Он должен выглядеть следующим образом:
[Interface]
PrivateKey = [ ваш приватный ключ ]
Address = 10.30.0.1/24
ListenPort = 51928
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
В моем случае он выглядит вот так:

Включаем ip forwarding
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
Запускаем wireguard службу:
systemctl start [email protected]
Если возникла ошибка, скорее всего формата: iptables: command not found
, то просто устанавливаем недостающий компонент и заново запускаем службу:
apt install iptables
Если мы хотим чтобы служба запускалась после перезагрузки сервера то выполняем:
systemctl enable [email protected]
Для того чтобы посмотреть состояние службы:
systemctl status [email protected]
Статус должен быть active как на скриншоте:

Если Вы внимательно следовали нашей инструкции, то на данном этапе, у Вас создано все необходимое для того, чтобы серверная часть Wireguard работала.
Настройка Wireguard-клиента
Осталось настроить клиентскую часть Wireguard. Для примера и простоты я сгенерирую ключи для клиентской части так же на сервере. Но в целях безопасности было бы правильнее генерировать ключи на стороне клиента.
Использую команды для генерации:
wg genkey > mypc_privatekey
wg pubkey < mypc_privatekey > mypc_publickey
Также сгенерирую ключи чтобы использовать VPN и на телефоне:
wg genkey > myphone_privatekey
wg pubkey < myphone_privatekey > myphone_publickey
Следует заметить что все это требуется производить находясь в каталоге /etc/wireguard/
Можно выполнять и в другом каталоге. Но для простоты инструкции выполняем в /etc/wireguard/
Командой ls выводим список файлов в каталоге. У меня получилось вот так:

Выведем открытые ключи на экран. Они понадобятся нам для того, чтобы добавить узлы в нашу сеть:
tail mypc_publickey myphone_publickey
У меня это выглядит так:

Отредактируем наш конфигурационный файл:
nano wg0.conf
Добавим строки:
[Peer]
PublicKey = [ mypc_publickey ]
AllowedIPs = 10.30.0.2/32
[Peer]
PublicKey = [ myphone_publickey ]
AllowedIPs = 10.30.0.3/32
Теперь конфиг файл выглядит следующим образом:

Сохраним файл и перезапустим нашу службу:
systemctl restart wg-quick@wg0
Проверим что все прошло успешно:
systemctl status wg-quick@wg0
Статус должен быть active
Перезагрузку службы требуется делать каждый раз после редактирования файла конфигурации сервера (wg0.conf)
Далее создадим конфигурации для клиентов (в моем случае мой пк и телефон). Я сделаю это также на сервере.
nano mypc.conf
[Interface]
PrivateKey = [ приватный ключ mypc_privatekey ]
Address = 10.30.0.2/32
DNS = 8.8.8.8
[Peer]
PublicKey = [ публичный ключ сервера publickey ]
Endpoint =[ ip адрес сервера ]:51928
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 20
В поле Endpoint можно увидеть IP- адрес сервера - это IP-адрес, по которому мы подключались по SSH. Чтобы увидеть интерфейсы и адреса можно использовать команду ip a
Настройка Wireguard для телефона
Аналогичную конфигурацию создаем для нашего телефона. Только требуется изменить адрес. Для ПК был 10.30.0.2/32, а в конфигурации для телефона сделаем 10.30.0.3/32. Так же если захотим использовать зашифрованный туннель на других устройствах то при создании конфигураций следует добавлять другие адреса в поле Address в конфигурационных файлах и файле конфигурации сервера wg0.conf поле AllowedIPs.
У меня файлы выглядят вот так:
mypc.conf

myphone.conf

Для подключения устанавливаем клиент Wireguard https://www.wireguard.com/install/
В приложении на Windows добавляем новый тоннель и вписываем конфигурацию которую создали в файле mypc.conf

Запускаем туннель и переходим в браузер на сайт который отображает наш адрес

Чтобы удобно добавить VPN на телефон, на сервере установим программу для генерации qr кодов:
apt install -y qrencode
Находясь в каталоге с конфигурацией выполним:
qrencode -t ansiutf8 -r myphone.conf

Перейдем в приложение Wireguard на телефоне, нажмем + для создания нового тоннеля, выберем сканировать QR-код, отсканируем его, включим защищенный туннель. Далее проверим с помощью любого ресурса, отображающего выходной IP-адрес, что у нас отображается адрес нашего сервера.


Готово! Настройка Wireguard выполнена!