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

Что такое 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/виртуальные сети с управляемой облачной инфраструктурой.
Краткая методология (минимальный чеклист действий)
- Обновить систему. 2. Установить EPEL и включить PowerTools. 3. Подключить репозиторий WireGuard и установить пакеты. 4. Сгенерировать ключи и создать конфиги. 5. Настроить firewalld и sysctl. 6. Запустить сервисы и протестировать.
Контрольный список по ролям
- Системный администратор:
- Проверить доступность публичного IP и портов;
- Настроить firewalld и маскарадинг;
- Управлять конфигурацией /etc/wireguard/wg0.conf;
- DevOps / инженер безопасности:
- Провести ревью ключей и политик AllowedIPs;
- Настроить резервное копирование конфигов и механизм ротации ключей;
- Оператор/пользователь:
- Сгенерировать ключ на клиенте и предоставить публичный ключ администратору;
- Проверить подключение по приватному IP и доступ к необходимым ресурсам.
Отладочный runbook (быстрая проверка при проблемах)
- Проверка процесса и статуса:
- systemctl status wg-quick@wg0
- sudo wg — проверка публичных ключей, endpoint и handshake
- Проверка интерфейсов:
- ip a show wg0
- Проверка маршрутов:
- ip route show
- Проверка правил firewall:
- sudo firewall-cmd –list-all и sudo firewall-cmd –zone=internal –list-all
- Логи:
- journalctl -u wg-quick@wg0 –since “1 hour ago”
- Тест из клиента:
- 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-сетей. Если появились вопросы по конкретным шагам или вы хотите пример для другого дистрибутива — задайте уточняющий вопрос.
Похожие материалы

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

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

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

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

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