В этом мануале — пошаговая инструкция по установке, настройке и подключению к WireGuard (WG) VPN. Для работы WG вам понадобится любой виртуальный сервер под управлением Linux. Мы выбрали виртуальный сервер на базе Open source в минимальной конфигурации под управлением Ubuntu 20.
Обратите внимание, в инструкции для работы с текстовыми файлами используется текстовый редактор VIM. Если вы не знакомы с ним — настоятельно рекомендуем сначала прочитать этот краткий мануал.
Работа по установке, настройке и подключению к WG серверу разделена на два этапа:
- работа по настройке WG на удаленном сервере;
- работа на клиентских машинах по подключению к WG серверу.
Работа на удаленном сервере
Подключимся по SSH к удалённому серверу, на котором хотим развернуть VPN. В нашем случае, это сервер на базе Open source, находящийся в Таллине: ssh <имя пользователя>@
Установка, настройка и запуск WG VPN сервера:
- Обновим apt-репозиторий: sudo apt update -y
- Установим сам WG: sudo apt install -y wireguard
- Перейдём в директорию с WG:
cd /etc/wireguard/ — в этой директории будут происходить все действия - Теперь нужно сгенерировать с помощью встроенных команд WiG пару ключей для подключения к VPN-серверу:
wg genkey | tee /etc/wireguard/privatekey | wg pubkey | tee /etc/wireguard/publickey
Что тут происходит?
Команда wg genkey генерирует секретный ключ, затем с помощью Linux-оператора пайп — «|» передаёт его команде tee, которая сохраняет ключ в файл /etc/wireguard/privatekey и передаёт его на вход команде wg pubkey, которая на основе полученного секретного ключа, генерирует публичный ключ и передаёт его через пайп другой команде tee, которая, опять же, сохраняет полученный ключ в файл /etc/wireguard/publickey и печатает его в терминале. - Убедимся с помощью команды cat в наличии ключей в файлах:
cat publickey
cat privatekey - Теперь с помощью текстового редактора VIM создадим конфигурационный файл нашего VPN-сервера: sudo vim wg0.conf
- Внесём в конфиг следующее:
[Interface]
Тут нужно только скопировать приватный ключ из файла privatekey и вставить его вместо <privatekey>. Остальное менять не надо.
PrivateKey = <privatekey> # Приватный ключ из файла privatekey.
Address = 10.0.0.1/24 #Адрес VPN-сервера в частной сети.
ListenPort = 51830 #Порт, который будет слушать VPN-сервер.
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE #Команды, который будут выполнять при поднятии сервера
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE #Команды, который будут выполнять при выключении сервера - Теперь чтобы прокидывался интернет трафик через VPN-сервер — настроим IP-форвардинг следующей командой: echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
- Убедимся в применении новых правил командой: sysctl -p Команда должна вернуть вывод следующего вида:
net.ipv4.ip_forward = 1 - Настроим автоматический запуск WG сервера после перезагрузки или выключения виртуального сервера: systemctl enable wg-quick@wg0.service. Команда должна вернуть следующее сообщение:
Created symlink /etc/systemd/system/multi-user.target.wants/wg-quick@wg0.service → /lib/systemd/system/wg-quick@.service.
- Теперь запустим VPN-сервер: systemctl start wg-quick@wg0.service
- Проверим статус WG сервера: systemctl status wg-quick@wg0.service
В отчёте должен стоять статус active!
На этом шаге WireGuard сервер установлен, сконфигурирован и запущен. Переходим к созданию конфигурации для подключения клиентов.
Настройка подключения клиентов к WireGuard серверу:
- Сначала нужно создать пары ключей для подключения клиента. Если у вас будет подключаться несколько клиентов, старайтесь давать ключам осмысленные названия, чтобы потом в них не запутаться. Воспользуемся уже хорошо нам знакомой связкой команд:
wg genkey | tee /etc/WireGuard/katkov_privatekey | wg pubkey | tee /etc/WireGuard/katkov_publickey - Теперь в директории WireGuard сервера находятся следующие файлы:
.
├── katkov_privatekey — частный ключ клиента
├── katkov_publickey — публичный ключ клиента
├── privatekey — частный ключ WG сервера
├── publickey — публичный ключ WG сервера
└── wg0.conf — конфигурационный файл WG сервера - У нас всё готово для добавления нового клиента в конфигурационный файл wg0.conf. Откроем его: vim /etc/WireGuard/wg0.conf
- Добавим в конец файла новую секцию:
[Peer]
PublicKey = <katkov_publickey> #Публичный ключ клиента
AllowedIPs = 10.0.0.2/32 #IP-адрес в частной сети, который будет присвоен клиенту. - После добавления секции с данным для подключения нового клиента WG сервер нужно перезагрузить и проверить его статус командой systemctl:
systemctl restart wg-quick@wg0
Вывод команды systemctl status wg-quick@wg0 должен вернуть следующий вывод:
systemctl status wg-quick@wg0
Теперь можно переходить к настройке клиентской машины.
Создайте облачный сервер под любые задачи
В Панели 1cloud вы можете настроить VPS на базе Open Source всего за несколько минут. На выбор доступны популярные дистрибутивы Linux и CMS последних версий, а разместить ресурсы можно в ЦОДе Санкт-Петербурга, Москвы, Таллина или Амстердама. Гибкая настройка конфигураций поможет создать виртуальный сервер не только для VPN, но и под веб-хостинг, FTP-хранилище или любые другие задачи.
Закажите VPS на базе Open Source и разверните свою инфраструктуру в надежном облаке.
Работа на клиентской машине
Мы будем подключать к WG серверу с клиентской машины под управлением Windows 11. Вне зависимости от версии Windows шаги по подключению будут одинаковы.
Рекомендуем не закрыть SSH-сессию с удалённым сервером, так как мы будем часто обращаться к ключам, расположенным в директории /etc/WireGuard/.
- Скачиваем клиент под нужную ОС и устанавливаем его: Windows, macOS, Android, iOS.
- После установки WG клиента в любом текстовом редакторе создаем конфигурационный файл для подключения к WG серверу. Месторасположения файла значения не имеет. Мы создадим файл wgvpn_connect.conf прямо на диске D и запишем в него следующие:
[Interface]
PrivateKey = <CLIENT-PRIVATE-KEY> #Клиентский приватный ключ. В нашем случае katkov_privetkey.
Address = 10.0.0.2/32 #IP-адрес клиента, который настроен на WG сервере
DNS = 8.8.8.8 #DNS, который будет использовать при подключении
[Peer]
PublicKey = <SERVER-PUBKEY> #Публичный ключ сервера
Endpoint = <SERVER-IP>:51830 #IP адрес удалённого сервера и порт прослушивания
AllowedIPs = 0.0.0.0/0 #Если указаны все нули — весь трафик клиента будет проходить через WG сервер
PersistentKeepalive = 20 #Интервал проверки соединения между клиентом и сервером (сек).Узнать IP адрес удаленного сервера можно через Панель управления, либо командой curl ifconfig.me.
- Загрузим полученный конфигурационный файл в WG-клиент. На Windows это делается так:
- После успешного подключения к WG серверу в статусах подключения должны быть зеленые индикаторы, а переданных трафик должен постоянно увеличивать:
Убедиться в том, что вы выходите в интернет под другим IP, в нашем случае, это IP адрес удаленного сервера в Таллине, можно с помощью сайта ifconfig.me.
IP-адрес удаленного сервера и IP-адрес клиента, распознаваемый сайтом ifconfig.me должны совпадать:
Настройка частой WireGuard VPN-сети окончена. Для подключения других клиентов к VPN-сети нужно сгенерировать новые пары ключей связкой команд wg genkey и wg pubkey, добавить в конфигурационный файл WG ещё секций с клиентами, указать им IP-адреса и создать клиентские конфигурационные файлы на подключаемых устройствах.