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

Установка и настройка WireGuard на CentOS 8

6 min read Системное администрирование Обновлено 25 Sep 2025
WireGuard на CentOS 8: установка и настройка
WireGuard на CentOS 8: установка и настройка

Схема подключения WireGuard: сервер и клиент

Что такое WireGuard

WireGuard — это кроссплатформенный VPN с открытым исходным кодом, использующий современные криптографические алгоритмы. Он легче, быстрее и проще в настройке по сравнению с IPSec и OpenVPN. WireGuard работает на Linux, Windows, macOS, iOS, Android, BSD и других платформах.

Важно: в кодовых примерах сохранены исходные конфигурации и команды. Комментарии в блоках кода оставлены как в исходном руководстве.


Шаг 1 — Обновление системы

Перед началом убедитесь, что на сервере установлены последние обновления.

$ sudo dnf update

Шаг 2 — Установка и включение репозитория EPEL

Пакеты WireGuard доступны в репозитории EPEL, поэтому нужно его установить и включить PowerTools (зависимости EPEL).

$ sudo dnf install epel-release
$ sudo dnf config-manager --set-enabled PowerTools

Мы включили PowerTools, поскольку некоторые пакеты из EPEL зависят от него.

Шаг 3 — Установка WireGuard

Включите репозиторий WireGuard:

$ sudo dnf copr enable jdoss/wireguard

Установите пакеты WireGuard:

$ sudo dnf install wireguard-dkms wireguard-tools

Эта команда также установит компилятор GNU GCC, необходимый для сборки модулей ядра.

Шаг 4 — Конфигурация сервера WireGuard

Создайте каталог и пустой конфигурационный файл с безопасными правами доступа.

$ sudo mkdir /etc/wireguard
$ sudo sh -c 'umask 077; touch /etc/wireguard/wg0.conf'

Touch создаст файл wg0.conf в каталоге /etc/wireguard.

Создайте пару ключей (приватный/публичный) для сервера.

$ cd /etc/wireguard
$ sudo sh -c 'umask 077; wg genkey | tee privatekey | wg pubkey > publickey'

Это создаст файлы privatekey и publickey.

Просмотрите приватный ключ:

$ sudo cat privatekey

Скопируйте ключ — он понадобится для конфигурации.

Отредактируйте конфигурационный файл:

$ sudo nano /etc/wireguard/wg0.conf

Добавьте следующий блок (как в исходном примере):

[Interface]
## VPN server private IP address ##
Address = 192.168.10.1/24
 
## VPN server port - You can choose any port ##
ListenPort = 37822
 
## VPN server's private key i.e. /etc/wireguard/privatekey - the one from above ##
PrivateKey = GCEXafeZKqSsuLfvuHE+zLzMYwoH4qQyBh7MZ4f/3kM=
 
## Save and update this config file when a new peer (vpn client) added ##
SaveConfig = true

Раздел [Interface] описывает локальную (серверную) часть: приватный ключ, порт прослушивания и адреса VPN. Параметр SaveConfig = true позволяет службе автоматически сохранять действующую конфигурацию при выключении.

Сохраните файл (в редакторе Nano нажмите ««Ctrl»» + «W» затем подтвердите «Y» при необходимости).

Шаг 5 — Настройка брандмауэра (firewalld)

Откройте выбранный UDP-порт в брандмауэре. Сначала создайте описание сервиса:

$ sudo nano /etc/firewalld/services/wireguard.xml

Вставьте следующий XML:



  wireguard
  WireGuard open UDP port 37822 for client connections
  

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

Затем включите сервис в firewalld:

$ sudo firewall-cmd --permanent --add-service=wireguard

Включите маскарадинг, чтобы трафик из сети 192.168.10.0/24 выходил через публичный IP сервера (в примере 203.1.114.98/24):

$ sudo firewall-cmd --permanent --add-masquerade

Перезагрузите правила firewall:

$ sudo firewall-cmd --reload

Проверьте текущие правила:

$ sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: wireguard ssh
  ports: 
  protocols: 
  masquerade: yes
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

Важно: в примерах выше используются имена интерфейсов и адреса из учебного сценария. Подставьте свои значения (например, внешний интерфейс и публичный IP) при настройке на реальном сервере.

Шаг 6 — Включение пересылки IPv4 и тонкая настройка ядра

Создайте файл sysctl для включения пересылки и некоторых оптимизаций:

$ sudo nano /etc/sysctl.d/99-custom.conf

Вставьте:

## Turn on bbr ##
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
 
## for IPv4 ##
net.ipv4.ip_forward = 1
 
## Turn on basic protection/security ##
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.tcp_syncookies = 1

## for IPv6 ##
net.ipv6.conf.all.forwarding = 1

Сохраните и загрузите параметры:

$ sudo sysctl -p /etc/sysctl.d/99-custom.conf

Добавьте интерфейс wg0 в зону internal и включите маскарадинг для этой зоны:

$ sudo firewall-cmd --add-interface=wg0 --zone=internal
$ sudo firewall-cmd --permanent --zone=internal --add-masquerade

Шаг 7 — Включение и запуск службы WireGuard на сервере

Включите автозапуск и запустите интерфейс wg0:

$ sudo systemctl enable wg-quick@wg0
$ sudo systemctl start wg-quick@wg0

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

$ sudo wg
interface: wg0
  public key: VWndJ4oB7ZJwC/7UOm++OLDrbAxMPsR2yd0cl3sEkUI=
  private key: (hidden)
  listening port: 37822

$ sudo ip a show wg0
3: wg0:  mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none
    inet 192.168.10.1/24 scope global wg0
       valid_lft forever preferred_lft forever

Шаг 8 — Установка и настройка клиента WireGuard (Linux)

Инструкции для конкретной дистрибуции клиента доступны на официальной странице WireGuard. После установки создайте каталог и конфиг клиента:

$ sudo mkdir /etc/wireguard
$ sudo sh -c 'umask 077; touch /etc/wireguard/wg0.conf'
$ cd /etc/wireguard/
$ sudo sh -c 'umask 077; wg genkey | tee privatekey | wg pubkey > publickey'
$ sudo cat privatekey

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

$ sudo nano /etc/wireguard/wg0.conf

Добавьте:

[Interface]
## client private key ##
PrivateKey = OEM6D/zt2fVWOepVv3iEDD430V0gAshKp4+5oVVt5EE=
 
## client ip address ##
Address = 192.168.10.2/24
 
[Peer]
## CentOS 8 server public key ##
PublicKey = VWndJ4oB7ZJwC/7UOm++OLDrbAxMPsR2yd0cl3sEkUI=
 
## set ACL ##
AllowedIPs = 192.168.10.0/24
 
## Your CentOS 8 server's public IPv4/IPv6 address and port ##
Endpoint = 203.1.114.98:37822
 
##  Key connection alive ##
PersistentKeepalive = 15

Здесь сервер имеет адрес 192.168.10.1, клиент — 192.168.10.2. Параметр PersistentKeepalive полезен при NAT, чтобы поддерживать связь.

Включите и запустите клиентскую службу:

$ sudo systemctl enable wg-quick@wg0
$ sudo systemctl start wg-quick@wg0
$ sudo systemctl status wg-quick@wg0

Шаг 9 — Добавление клиента в конфигурацию сервера

Чтобы сервер «знал» о клиенте, добавьте секцию [Peer] в /etc/wireguard/wg0.conf на сервере.

Остановите сервис перед правкой:

$ sudo systemctl stop wg-quick@wg0

Откройте конфигурацию:

$ sudo nano /etc/wireguard/wg0.conf

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

[Peer] 
## client VPN public key ## 
PublicKey = dmfO9pirB315slXOgxXtmrBwAqPy07C57EvPks1IKzA=  

## client VPN IP address (note /32 subnet) ## 
AllowedIPs = 192.168.10.2/32

Каждый раздел [Peer] описывает другого участника сети. Входящее соединение сначала аутентифицируется по публичному ключу — если ключ не совпадает, пакеты просто игнорируются. Поэтому WireGuard не только шифрует трафик, но и делает сервис «невидимым» для посторонних.

Запустите сервис снова:

$ sudo systemctl start wg-quick@wg0

Шаг 10 — Тестирование

Проверьте связь с клиента, пропингуйте сервер по приватному адресу:

$ ping -c 192.168.10.1
PING 192.168.10.1 (192.168.10.1) 56(84) bytes of data.
64 bytes from 192.168.10.1: icmp_seq=1 ttl=64 time=44.2 ms
64 bytes from 192.168.10.1: icmp_seq=2 ttl=64 time=45.8 ms
64 bytes from 192.168.10.1: icmp_seq=3 ttl=64 time=46.7 ms
64 bytes from 192.168.10.1: icmp_seq=4 ttl=64 time=44.1 ms

--- 192.168.10.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2800ms
rtt min/avg/max/mdev = 41.729/47.829/48.953/5.046 ms

$ sudo wg
interface: wg0
  public key: dmfO9pirB315slXOgxXtmrBwAqPy07C57EvPks1IKzA= 
  private key: (hidden)
  listening port: 
 
peer: VWndJ4oB7ZJwC/7UOm++OLDrbAxMPsR2yd0cl3sEkUI=
  endpoint: 203.1.114.98:37822
  allowed ips: 192.168.10.0/24
  latest handshake: 1 minute, 40 seconds ago
  transfer: 938 B received, 45.67 KiB sent
  persistent: keepalive: every 15 seconds

Если пинги проходят и в выводе wg видны handshake и передача данных — соединение работает.

Когда этот подход не подходит

  • Когда требуется сложная маршрутизация на уровне корпоративной сети с множеством политик и интеграцией в AD — могут подойти решения типа IPSec с централизованным управлением;
  • Если платформа критична к поддержке старого оборудования или устаревших ОС, где сборка модулей невозможна;
  • При необходимости использования инфраструктуры, требующей глубоких DPI (deep packet inspection) — WireGuard работает на сетевом уровне и не предоставляет встроенных средств для DPI.

Альтернативы

  • OpenVPN — гибкость и совместимость, но больше накладных расходов;
  • IPSec (strongSwan, libreswan) — стандарт для корпоративных VPN, больше возможностей по аутентификации и интеграции;
  • Tailscale/ZeroTier — решения поверх WireGuard/виртуальные сети с управляемой облачной инфраструктурой.

Краткая методология (минимальный чеклист действий)

  1. Обновить систему. 2. Установить EPEL и включить PowerTools. 3. Подключить репозиторий WireGuard и установить пакеты. 4. Сгенерировать ключи и создать конфиги. 5. Настроить firewalld и sysctl. 6. Запустить сервисы и протестировать.

Контрольный список по ролям

  • Системный администратор:
    • Проверить доступность публичного IP и портов;
    • Настроить firewalld и маскарадинг;
    • Управлять конфигурацией /etc/wireguard/wg0.conf;
  • DevOps / инженер безопасности:
    • Провести ревью ключей и политик AllowedIPs;
    • Настроить резервное копирование конфигов и механизм ротации ключей;
  • Оператор/пользователь:
    • Сгенерировать ключ на клиенте и предоставить публичный ключ администратору;
    • Проверить подключение по приватному IP и доступ к необходимым ресурсам.

Отладочный runbook (быстрая проверка при проблемах)

  1. Проверка процесса и статуса:
    • systemctl status wg-quick@wg0
    • sudo wg — проверка публичных ключей, endpoint и handshake
  2. Проверка интерфейсов:
    • ip a show wg0
  3. Проверка маршрутов:
    • ip route show
  4. Проверка правил firewall:
    • sudo firewall-cmd –list-all и sudo firewall-cmd –zone=internal –list-all
  5. Логи:
    • journalctl -u wg-quick@wg0 –since “1 hour ago”
  6. Тест из клиента:
    • ping приватный адрес сервера
    • wg show peer

Если handshake не происходит — проверьте правильность Endpoint, PublicKey и доступность UDP-порта на сервере.

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

  • Интерфейс wg0 поднят на сервере и клиенте;
  • На клиенте успешный ping до 192.168.10.1 или другого заданного приватного адреса;
  • В выводе wg виден недавний handshake и передача трафика;
  • NAT-маскарадинг позволяет клиентам выходить в Интернет через публичный IP сервера (если это требовалось).

Меры безопасности и рекомендации

  • Храните приватные ключи с правами 600 и в каталоге с umask 077;
  • Не публикуйте приватный ключ в публичных репозиториях или логах;
  • При каждой смене ключей обновляйте соответствующие секции [Peer] на серверах и клиентах;
  • Ограничьте AllowedIPs до минимально необходимого набора подсетей (не указывайте 0.0.0.0/0, если не нужно перенаправлять весь трафик);
  • Рассмотрите ротацию ключей по расписанию для повышения безопасности.

Глоссарий (одна строка)

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

Заключение

В этой инструкции показан полный цикл: установка WireGuard на CentOS 8, создание ключей, настройка брандмауэра и sysctl, конфигурация клиента, добавление пира на сервере и базовая отладка. WireGuard — современное и легковесное решение для приватных VPN-сетей. Если появились вопросы по конкретным шагам или вы хотите пример для другого дистрибутива — задайте уточняющий вопрос.

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

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

Btrfs: пул дисков и зеркалирование в Linux
Файловые системы

Btrfs: пул дисков и зеркалирование в Linux

CyanogenMod 12.1 на Lenovo A2010 — установка
Android ROM

CyanogenMod 12.1 на Lenovo A2010 — установка

Анимированные тексты в Сообщениях iPhone
Гайды

Анимированные тексты в Сообщениях iPhone

Как включить PWA в Firefox на Windows
Браузеры

Как включить PWA в Firefox на Windows

Очистить память iPhone без удаления приложений
iOS

Очистить память iPhone без удаления приложений

WireGuard на CentOS 8: установка и настройка
Системное администрирование

WireGuard на CentOS 8: установка и настройка