Установка и настройка сервера WireGuard VPN на Rocky Linux

WireGuard позиционируется как современное решение по организации быстрого VPN. Рассмотрим процесс его настройки на Rocky Linux.
Предварительная настройка системы
Установка WireGuard
Настройка клиента
Добавление маршрута в другую подсеть
Читайте также
Подготовка системы
Прежде чем приступить, предварительно подготовим нашу систему.
Настройка брандмауэра
Нам нужно открыть UDP-порт для WireGuard. В различных источниках фигурирует разный номер, но на официальном сайте используют 51820:
firewall-cmd --add-port=51820/udp --permanent
firewall-cmd --reload
Можно переходить к установке сервера VPN.
Установка и настройка сервера
Установка некоторых пакетов выполняется из репозиториев epel и elrepo — установим их:
yum install epel-release elrepo-release
После можно установить wireguard:
yum install kmod-wireguard wireguard-tools
Создаем открытый и закрытый ключи, которые будут использоваться нашим сервером:
wg genkey | tee /etc/wireguard/private.key | wg pubkey > /etc/wireguard/public.key
* оба ключа попадут в каталог /etc/wireguard.
Выводим на экран содержимое закрытого ключа:
cat /etc/wireguard/private.key
В моем случае это:
2Hl2UlyD/xFrDyzIBEkfPa27yKllp0O+7e9023u8sHk=
Фиксируем его. Он нам понадобиться для настройки сервера.
Создаем конфигурационный файл для сервера:
vi /etc/wireguard/wg0.conf
[Interface]
PrivateKey = 2Hl2UlyD/xFrDyzIBEkfPa27yKllp0O+7e9023u8sHk=
Address = 176.16.10.1/24
ListenPort = 51820
SaveConfig = false
* где:
- PrivateKey — закрытый ключ, который мы создали и смотрели командой cat.
- Address — адрес в сети VPN. Можно использовать любую подсеть, но стоит ограничиться выбором из зарезервированных диапазонов для локальных сетей. Также данная подсеть не должна пересекаться с используемыми диапазонами.
- ListenPort — порт, на котором будет работать наш сервер.
- SaveConfig — сохранять или нет конфигурацию из текущего состояния при завершении работы. По факту, если выставить в true, то перезапуск сервиса не принимает новые изменения в конфигурационном файле, а возвращает старые настройки. Для внесения изменений нужно будет остановить службу, внести изменения, запустить службу. Мне это показалось не совсем удобным.
Разрешаем автозапуск сервиса:
systemctl enable wg-quick@wg0 --now
* обратите внимание на то, что идет после собаки (wg0). Это имя конфигурационного файла. При желании, мы можем создать много таких файлов и запустить несколько VPN серверов на разных портах.
Убедимся, что наш сервер начал слушать на заданном порту:
ss -tunlp | grep :51820
Сервер готов принимать запросы.
Подключение клиента
Для примера мы установим и настроим клиентов для Windows и Linux. Настройка будет выполнена в четыре шага:
- Смотрим ключ на сервере.
- Настраиваем клиента.
- Настраиваем сервер.
- Проверяем подключение.
1. Ключ на сервере
На сервере смотрим публичный ключ, который мы генерировали в начале инструкции:
cat /etc/wireguard/public.key
В моем случае это было:
Z5E6sWmAX9JqSBpO2frcIZ9vkkm/V+8xgP7ZxWXnOCs=
Фиксируем — его мы будем использовать для настройки клиентов.
2. Настройка клиента
В зависимости от вашей системы, выбираем один из вариантов настройки.
Windows
Заходим на официальный сайт, страницу загрузки. Скачиваем клиента на Windows:
Запускаем скачанный файл и выполняем установку. Она очень простая.
После запустится клиент — в нижней части окна добавляем пустой туннель:
Задаем название для клиента, также фиксируем публичный ключ — он нам будет нужен дальше:
В окне с редактором вносим свои данные:
[Interface]
PrivateKey = qD/VCIDLAWGAIl2G9wUjL+MAobks5PpDmzqQcuqqQWc=
Address = 176.16.10.10/24
[Peer]
PublicKey = Z5E6sWmAX9JqSBpO2frcIZ9vkkm/V+8xgP7ZxWXnOCs=
AllowedIPs = 176.16.10.0/24
Endpoint = 1.1.1.1:51820
PersistentKeepalive = 15
* где:
- [Interface] — блок настроек для клиента.
- PrivateKey — приватный ключ клиента. Он автоматически будет сгенерирован
- Address — IP-адрес в сети VPN, который будет назначен клиенту.
- [Peer] — настройки для соединения с сервером.
- PublicKey — публичный ключ сервера. Его мы смотрели в самом начале данного раздела.
- AllowedIPs — маршрут, разрешенный для клиента.
- Endpoint — адрес и порт сервера, к которому мы будем подключаться клиентом.
- PersistentKeepalive — интервал между проверками доступности соединения.
Linux
Установка и настройка, отчасти, похожа на то, что мы делали на сервере. Для начала, устанавливаем wireguard. В зависимости от дистрибутива Linux, команды будут отличаться, например:
а) для Ubuntu или Debian:
apt install wireguard
б) для Fedora или CentOS 7:
yum install epel-release
yum install wireguard-tools
в) для Rocky Linux:
yum install epel-release elrepo-release
yum install kmod-wireguard wireguard-tools
Установка клиента выполнена.
* все варианты команд для установки wireguard можно посмотреть на официальном сайте.
После установки необходимо сгенерировать ключи и выполнить настройку.
Ключи создаем командой:
wg genkey | tee /etc/wireguard/private.key | wg pubkey > /etc/wireguard/public.key
* оба ключа попадут в каталог /etc/wireguard.
Смотрим содержимое файлов:
cat /etc/wireguard/private.key
cat /etc/wireguard/public.key
Фиксируем значения. Для настройки клиента нам нужно содержимое приватного ключа, для настройки сервера — публичного.
Создаем конфигурационный файл для сервера:
vi /etc/wireguard/client.conf
[Interface]
PrivateKey = qD/VCIDLAWGAIl2G9wUjL+MAobks5PpDmzqQcuqqQWc=
Address = 176.16.10.10/24
[Peer]
PublicKey = Z5E6sWmAX9JqSBpO2frcIZ9vkkm/V+8xgP7ZxWXnOCs=
AllowedIPs = 176.16.10.0/24
Endpoint = 1.1.1.1:51820
PersistentKeepalive = 15
* где:
- [Interface] — блок настроек для клиента.
- PrivateKey — приватный ключ клиента. Его мы сгенерировали.
- Address — IP-адрес в сети VPN, который будет назначен клиенту.
- [Peer] — настройки для соединения с сервером.
- PublicKey — публичный ключ сервера. Его мы смотрели в самом начале данного раздела.
- AllowedIPs — маршрут, разрешенный для клиента.
- Endpoint — адрес и порт сервера, к которому мы будем подключаться клиентом.
- PersistentKeepalive — интервал между проверками доступности соединения.
Разрешим автозапуск сервиса:
systemctl enable wg-quick@client
* как в случае с сервером, то, что идет после собаки (client) является именем конфигурационного файла. При желании, мы можем создать много таких файлов и запустить несколько VPN подключений к разным серверам.
3. Добавление клиента на сервере
Откроем конфигурационный файл для нашего сервера:
vi /etc/wireguard/wg0.conf
Добавим пир для нашего нового клиента:
...
[Peer]
PublicKey = 6sDdWDSdYcoBAC7EVKg+z8Gcd+F5OQDkKBELf9MEOTY=
AllowedIPs = 176.16.10.10/32
* где PublicKey — публичный ключ, который мы видели при настройке клиента; AllowedIPs — разрешенный адрес для клиента (который мы ему выдали).
** для каждого клиента, который будет подключаться к серверу мы должны создать свой блок настроек [Peer].
Перезапускаем сервис:
systemctl restart wg-quick@wg0
4. Проверка работы
Возвращаемся к настройкам клиента. Можно подключаться.
а) На Windows:
Мы должны увидеть измененный статус на Подключен:
б) На Linux запускаем сервис:
systemctl start wg-quick@client
Мы должны подключиться к серверу.
Для проверки соединения можно отправить пинг на сервер (в нашем примере его IP 176.16.10.1):
ping 176.16.10.1
Базово мы разобрались с настройкой WireGuard.
Маршруты через сервер VPN
Как правило, VPN используется в качестве транзита в другие подсети. Рассмотрим, как теперь настроить наш сервер для работы в качестве маршрутизатора. Настройки выполняются как на сервере, так и клиенте.
Мы предположим, что наш сервер должен пускать клиентов в сеть 192.168.100.0/24.
На сервере
Открываем на редактирование sysctl.conf:
vi /etc/sysctl.conf
Добавляем в него следующую строчку:
net.ipv4.ip_forward=1
Применяем настройки sysctl:
sysctl -p /etc/sysctl.conf
Добавляем правило в брандмауэр:
iptables -t nat -I POSTROUTING -o ens18 -j MASQUERADE
* в данном примере идет расчет на то, что наша сеть 192.168.100.0/24 доступна для сервера через интерфейс ens18. Вы должны заменить значение на свое.
Наш сервер настроен в качестве маршрутизатора в сеть 192.168.100.0/24. Переходим к клиенту.
На клиенте
В конфигурации клиента редактируем опцию AllowedIPs в блоке [Peer]:
[Peer]
...
AllowedIPs = 176.16.10.0/24, 192.168.100.0/24
...
* обратите внимание, что мы добавили подсеть 192.168.100.0/24 — это приведет к тому, что при подключении клиента к серверу будет прописываться маршрут в данную подсеть через сервер VPN.
А если мы хотим, чтобы весь траффик шел через VPN, задаем значение для AllowedIPs:
[Peer]
...
AllowedIPs = 0.0.0.0/0
...
Готово. Перезапускаем клиента и пробуем получить доступ к ресурсам в нужной сети.
Читайте также
Другие инструкции про VPN:
1. Настройка доступа к локальной сети клиентам OpenVPN в Linux.