Гид по технологиям

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

• 8 min read • Инфраструктура • Обновлено 25 Nov 2025
WireGuard на Rocky Linux 9 — установка и настройка
WireGuard на Rocky Linux 9 — установка и настройка

Общее изображение WireGuard и схемы подключения

WireGuard — это современный открытый VPN-протокол, альтернативный IPSec, IKEv2 и OpenVPN. WireGuard спроектирован для Linux/Unix-подобных ОС: он реализован в пространстве ядра Linux, что делает его быстрым и надёжным. WireGuard используется для создания защищённых туннелей между двумя и более узлами.

WireGuard стремится заменить более старые VPN-протоколы, оставаясь лёгким, быстрым и простым в настройке, не жертвуя при этом криптографической надёжностью. В основе протокола — современные криптографические примитивы: Noise, Curve25519, ChaCha20-Poly1305, BLAKE2, SipHash24, HKDF и другие безопасные конструкции.

В этом руководстве подробно показано, как установить и настроить WireGuard-сервер на Rocky Linux 9 и как подключить клиентскую машину (на примере Rocky Linux). Команды можно адаптировать для других дистрибутивов Linux.

Что вы получите из руководства

  • Полная пошаговая инструкция для сервера и клиента.
  • Объяснение ключевых параметров конфигурации (Address, ListenPort, AllowedIPs, Endpoint, PersistentKeepalive и пр.).
  • Правильная организация проброса пакетов и NAT через firewalld.
  • Проверки и отладка: команды wg, ip, resolvectl, systemctl, ping.
  • Рекомендации по безопасности и контроль списков задач для администратора.

Важно: в примерах используются файлы в /etc/wireguard и примерные IP-сети 10.8.0.0/24. Замените значения на подходящие для вашей инфраструктуры.

Преимущества и ограничения WireGuard

  • Преимущества: простота конфигурации, небольшая кодовая база, высокая производительность, современная криптография.
  • Ограничения: статическая модель peers (в классическом варианте — публичные ключи привязаны к адресам), меньше интеграций с корпоративным IAM по сравнению с IPSec в некоторых сценариях.

Важно: WireGuard хранит ключи в файловой системе; удобнее автоматизировать управление ключами и ротацию в вашей системе управления конфигурацией.

Краткие требования

  • Rocky Linux 9 сервер (в примере hostname: wireguard-rocky).
  • Неразрешённый пользователь с sudo/root правами.
  • SELinux в режиме permissive (или корректные политические правила, если включён в enforcing).

Включение модуля WireGuard в ядре

В Rocky Linux 9 по умолчанию ядро совместимо с модулем wireguard. Чтобы включить модуль в текущей сессии и проверить его, выполните:

sudo modprobe wireguard
lsmod | grep wireguard

Если модуль загружен, вы увидите запись в выводе lsmod.

Проверка и включение модуля wireguard в ядре

Чтобы модуль загружался автоматически при старте системы, создайте файл конфигурации в /etc/modules-load.d:

sudo sh -c 'echo wireguard > /etc/modules-load.d/wireguard.conf'

Затем установите набор утилит для управления WireGuard:

sudo dnf install wireguard-tools

На этом этапе в системе должны присутствовать утилиты wg и wg-quick.

Установка wireguard-tools

Генерация ключевых пар сервера и клиента

Пояснение терминов:

  • PrivateKey — приватный ключ (должен храниться с минимальными правами доступа).
  • PublicKey — публичный ключ, получаемый из приватного ключа; используется для аутентификации peer.

WireGuard предоставляет две основные утилиты:

  • wg — низкоуровневый инструмент для управления интерфейсами и ключами;
  • wg-quick — упрощённый скриптовый запуск интерфейсов по конфигам.

Генерация ключей сервера

Создайте приватный ключ сервера и установите строгие права:

wg genkey | sudo tee /etc/wireguard/server.key
sudo chmod 0400 /etc/wireguard/server.key

Сгенерируйте публичный ключ на основе приватного:

sudo cat /etc/wireguard/server.key | wg pubkey | sudo tee /etc/wireguard/server.pub

Проверьте содержимое ключей (не публикуйте приватные ключи в открытом доступе):

cat /etc/wireguard/server.key
cat /etc/wireguard/server.pub

Генерация ключей сервера

Генерация ключей клиента

Создайте каталог для клиентов и сгенерируйте ключи для client1:

sudo mkdir -p /etc/wireguard/clients
wg genkey | sudo tee /etc/wireguard/clients/client1.key
sudo chmod 0400 /etc/wireguard/clients/client1.key
sudo cat /etc/wireguard/clients/client1.key | wg pubkey | sudo tee /etc/wireguard/clients/client1.pub

Проверьте ключи клиента:

cat /etc/wireguard/clients/client1.key
cat /etc/wireguard/clients/client1.pub

Генерация ключей клиента

Совет: храните ключи в защищённой файловой системе и автоматизируйте резервное копирование секретов в соответствии с политиками безопасности вашей организации.

Конфигурация WireGuard-сервера

Создайте конфигурационный файл /etc/wireguard/wg0.conf:

sudo nano /etc/wireguard/wg0.conf

Добавьте базовый блок интерфейса, заменив PrivateKey на содержимое вашего /etc/wireguard/server.key:

[Interface]
# Приватный ключ WireGuard-сервера - /etc/wireguard/server.key
PrivateKey = iHaI5bkEbW8wqTQDbU/KITGhxtKoiezWVohVZsKwj3w=

# Интерфейс WireGuard будет иметь адрес 10.8.0.1
Address = 10.8.0.1/24

# Порт UDP, на котором сервер будет принимать подключения
ListenPort = 51820

# Сохранять изменения конфигурации в файл
SaveConfig = true

Далее добавьте секцию Peer для клиента, указав его PublicKey и разрешённый IP внутри VPN:

[Peer]
# Публичный ключ клиента - /etc/wireguard/clients/client1.pub
PublicKey = iWskvxyj+QK4185xO6Z2Fb0XYo1jGyiyI3iKbyGTkT8=

# IP клиента в VPN / можно указывать подсеть
AllowedIPs = 10.8.0.8/32

Примечание: для AllowedIPs используйте /32 для конкретного хоста; в исходном руководстве использовалось /24 — это допустимо, но потенциально даёт доступ широкому диапазону IP в VPN. Подбирайте префикс исходя из модели доступа.

Сохраните файл и закройте редактор.

Включение проброса пакетов (IP forwarding)

Чтобы маршрутизировать трафик между интерфейсами и наружным интернетом, включите IP forwarding:

sudo nano /etc/sysctl.conf

Добавьте в конец:

# Проброс пакетов IPv4
net.ipv4.ip_forward=1

# Проброс пакетов IPv6 (опционально)
net.ipv6.conf.all.forwarding=1

Примените изменения:

sudo sysctl -p

Включение проброса пакетов

Настройка firewalld и правил NAT

Определите сетевой интерфейс, который предоставляет доступ в интернет (в примере eth0):

ip route show default

Откройте конфигурацию сервера /etc/wireguard/wg0.conf и в секцию [Interface] добавьте команды PostUp/PostDown, чтобы при поднятии интерфейса автоматически настраивались правила firewall:

PostUp = firewall-cmd --zone=public --add-masquerade
PostUp = firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i wg -o eth0 -j ACCEPT
PostUp = firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -o eth0 -j MASQUERADE

PostDown = firewall-cmd --zone=public --remove-masquerade
PostDown = firewall-cmd --direct --remove-rule ipv4 filter FORWARD 0 -i wg -o eth0 -j ACCEPT
PostDown = firewall-cmd --direct --remove-rule ipv4 nat POSTROUTING 0 -o eth0 -j MASQUERADE

Сохраните файл. Затем откройте UDP-порт для WireGuard и перезагрузите firewalld:

sudo firewall-cmd --add-port=51820/udp --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-all

Правила firewalld для WireGuard

Пояснения:

  • PostUp выполняется при поднятии интерфейса wg0 — туда можно добавить любые команды сетевой настройки.
  • PostDown отменяет изменения при остановке интерфейса.
  • MASQUERADE нужен для NAT, если вы хотите, чтобы клиенты выходили в интернет через IP сервера.

Запуск и включение сервиса WireGuard

Запустите systemd-сервис для интерфейса wg0 и включите автозапуск:

sudo systemctl start [email protected]
sudo systemctl enable [email protected]

Проверьте статус:

sudo systemctl status [email protected]

Запуск и проверка сервиса WireGuard

Проверьте интерфейс wg0:

ip a show wg0

Информация должна соответствовать конфигурации (Address = 10.8.0.1/24).

Информация по интерфейсу wg0

Альтернативный способ управления: wg-quick

sudo wg-quick up /etc/wireguard/wg0.conf
sudo wg-quick down /etc/wireguard/wg0.conf

Настройка клиента и подключение

На клиентской машине (в примере — Rocky Linux с именем client1) установите wireguard-tools:

sudo dnf install wireguard-tools

При установке может подтянуться systemd-resolved. Включите и запустите его:

sudo systemctl start systemd-resolved
sudo systemctl enable systemd-resolved

Задайте NetworkManager использовать systemd-resolved как backend DNS:

sudo nano /etc/NetworkManager/NetworkManager.conf

Добавьте в секцию [main]:

[main]
dns=systemd-resolved

Сделайте симлинк для /etc/resolv.conf:

sudo rm -f /etc/resolv.conf
sudo ln -s /usr/lib/systemd/resolv.conf /etc/resolv.conf
sudo systemctl restart NetworkManager

Создайте файл конфигурации клиента /etc/wireguard/wg-client1.conf:

sudo nano /etc/wireguard/wg-client1.conf

Пример содержимого (замените PrivateKey и PublicKey на ваши значения):

[Interface]
# IP клиента в VPN (должен совпадать с AllowedIPs на сервере)
Address = 10.8.0.8/24

# Приватный ключ клиента - /etc/wireguard/clients/client1.key
PrivateKey = 4FsCdtKr9GrLiX7zpNEYeqodMa5oSeHwH/m9hsNNfEs=

# Настройка DNS через systemd-resolved
PostUp = resolvectl dns %i 1.1.1.1 9.9.9.9; resolvectl domain %i ~.
PreDown = resolvectl revert %i

[Peer]
# Публичный ключ сервера - /etc/wireguard/server.pub
PublicKey = aK+MQ48PVopb8j1Vjs8Fvgz5ZIG2k6pmVZs8iVsgr1E=

# Маршрутизация всего трафика через VPN
AllowedIPs = 0.0.0.0/0

# Внешний адрес и порт сервера
Endpoint = 192.168.5.59:51820

# Keepalive для обхода NAT/динамических конечных точек
PersistentKeepalive = 25

Запустите интерфейс клиента:

sudo wg-quick up wg-client1

Проверьте интерфейс и адреса:

ip a show wg-client1
resolvectl status wg-client1
wg show

Запуск клиента WireGuard

На сервере проверьте командой wg show, вы должны увидеть peer с публичным ключом клиента и endpoint.

Проверка wg на сервере

Проверки соединения

С клиента выполните несколько пингов:

ping -c5 10.8.0.1
ping -c5 1.1.1.1
ping -c5 duckduckgo.com

Если все успешны, значит туннель работает и маршрутизация в интернет через сервер также настроена.

Проверка пинга к серверу

Проверка доступа в интернет через VPN

Отладка и распространённые проблемы

  • Нет связи после поднятия интерфейса:
    • Проверьте, что ListenPort открыт в фаерволе и что PostUp команды были выполнены (journalctl -u [email protected]).
    • Убедитесь, что в AllowedIPs на сервере указан именно адрес клиента (/32) или корректный диапазон.
  • Клиент подключается, но интернет не работает:
    • Проверьте sysctl net.ipv4.ip_forward=1 и правила NAT (firewall-cmd –direct –get-all-rules).
    • Проверьте, не блокирует ли внешний провайдер нужный порт UDP.
  • DNS не резолвится:
    • Убедитесь, что systemd-resolved запущен и что в NetworkManager настроен dns=systemd-resolved, а /etc/resolv.conf указывает на resolv.conf от systemd.
  • Приватные ключи видны в конфиге:
    • Файл с приватным ключом должен иметь права 0400 и быть доступен только root.

Безопасность и рекомендации для production

  • Ограничьте доступ к файлам с приватными ключами: chmod 0400 и владелец root.
  • Настройте ротацию ключей: планируйте регулярную ротацию для приватных ключей с минимальным окном простоя (ввод новых ключей и обновление конфигурации peers).
  • Логирование: включите и собирайте логи systemd для отслеживания аномалий (journalctl -u [email protected]).
  • SELinux: если включён в режиме enforcing, создайте политику, которая позволит WireGuard и firewalld выполнять нужные действия, либо используйте permissive до настройки политик.
  • Разделение привилегий: управляйте коллективными ключами через защищённый секретный хранилище.

Рольовые чек-листы (кратко)

Администратор сети:

  • Проверить доступность UDP порта 51820 по публичному IP.
  • Убедиться в корректности маршрутов и NAT.
  • Настроить мониторинг интерфейса wg0.

Системный администратор сервера:

  • Установить wireguard-tools и включить модуль ядра.
  • Сгенерировать ключи, выставить права.
  • Настроить systemd unit и тестовый запуск.

Девопс / автоматизация:

  • Автоматизировать генерацию/оповещение о ротации ключей.
  • Включить проверку конфигурации и CI тесты развертывания.

Мини-методика развертывания (шаги для автоматизации)

  1. Подготовить базовый образ Rocky Linux 9 с dnf обновлениями.
  2. Установить wireguard-tools и зависимости.
  3. Сгенерировать ключи на сервере и на клиенте (или централизованно из защищённого CI).
  4. Развернуть /etc/wireguard/wg0.conf и конфиги клиентов.
  5. Настроить правила firewalld через PostUp/PostDown.
  6. Тестировать соединение и записать результаты проверок (wg show, ip a, ping).
  7. Включить мониторинг и оповещения о падении интерфейса.

Модель принятия решений: когда использовать WireGuard

  • Если нужна простая, быстрая и производительная VPN для удалённого доступа — WireGuard хорош.
  • Если требуются интеграции с корпоративными PKI и сложными политиками авторизации на уровне шлюзов — рассмотрите IPSec или решения с поддержкой централизованной аутентификации.

Сравнение кратко (на уровне выбора)

  • WireGuard: простота, скорость, современная криптография.
  • OpenVPN: больше возможностей для TLS-авторизации, широкий набор опций, но более сложен и медленнее.
  • IPSec: стандарт для корпоративных связей и межсетевых шлюзов, сложнее настроить, но интегрируется с аппаратными решениями.

Тесты приёмки (пара простых тест-кейсов)

  • Подключение клиента: wg show показывает peer, на сервере виден endpoint клиента.
  • Маршрутизация: с клиента ping 1.1.1.1 успешен.
  • DNS: с клиента nslookup google.com возвращает результат.

Советы по миграции с OpenVPN/IPSec на WireGuard

  • Перенесите список пользователей/доступов и сопоставьте IP в AllowedIPs.
  • Подготовьте план отката: сохраните конфигурации старого VPN и возможность запустить их параллельно.
  • Тестируйте ротацию ключей и работу NAT на тестовой подсети перед production.

Критерии приёмки

  • Сервер поднимается и удерживает интерфейс wg0 после перезагрузки.
  • Клиент подключается и получает IP из VPN подсети.
  • Трафик клиента проходит через сервер и доступен в интернет при включённом NAT.

Краткая справка: команды для повседневной проверки

  • Показать состояние интерфейсов WireGuard: wg show
  • Показать IP/интерфейсы: ip a
  • Проверить маршруты: ip route
  • Проверить systemd unit: sudo systemctl status [email protected]
  • Проверить логи: sudo journalctl -u [email protected]

Глоссарий (однострочные определения)

  • Endpoint — адрес и порт удалённого peer, к которому устанавливается соединение.
  • AllowedIPs — список маршрутов, которые отправляются через peer.
  • PersistentKeepalive — период посылки «сигнала», чтобы поддерживать состояние NAT.

Заключение

В этом руководстве вы узнали, как установить и настроить WireGuard на Rocky Linux 9: включить модуль ядра, сгенерировать ключи, создать конфигурации сервера и клиента, настроить проброс пакетов и правила firewalld, запустить сервис и проверить соединение. WireGuard — компактное и эффективное решение для большинства задач удалённого доступа и VPN-каналов. При внедрении в production не забудьте о защите приватных ключей, мониторинге и политике ротации.

Если хотите углубиться: официальная документация WireGuard и репозитории GitHub содержат дополнительную информацию по интеграции и автоматизации развертываний.

Важно: адаптируйте примеры IP и пути к ключам под вашу инфраструктуру.

Сводка основных шагов:

  • Включить модуль ядра wireguard и установить wireguard-tools.
  • Сгенерировать пары ключей для сервера и каждого клиента.
  • Создать /etc/wireguard/wg0.conf с секциями [Interface] и [Peer].
  • Включить ip_forward и настроить NAT/firewalld через PostUp/PostDown.
  • Запустить сервис и проверить подключение клиентов.

Дополнительно: мониторьте и управляйте ключами, используйте автоматизацию и проверяйте совместимость с корпоративными политиками безопасности.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро