WireGuard — это бесплатное программное приложение с открытым исходным кодом и протокол связи, который реализует методы виртуальной частной сети для создания безопасных соединений «точка-точка» в маршрутизируемых или мостовых конфигурациях.

1. Настройка главного сервера.

1.1. Устанавливаем wireguard.

1.1.1. Первый вариант установки. (Именно этот вариант установки сработал после обновления AlmaLinux до версии 8.5)

# dnf install epel-release
# dnf config-manager --set-enabled powertools
# dnf copr enable jdoss/wireguard
# dnf install wireguard-dkms wireguard-tools

1.1.2. Второй вариант установки. (Именно этот вариант установки сработал на ОС RockyLinux)

# dnf install elrepo-release epel-release
# dnf install kmod-wireguard wireguard-tools

Внимание! В случае возникновения необъяснимых ошибок уже при запуске интерфейса wg0, командами описанными ниже, нужно попробовать другой вариант установки. Разница у них в установке пакетов: wireguard-dkms или kmod-wireguard. В каких-то ОС работает первый вариант, в каких-то второй.

1.2. Проверяем, подключен ли нужный драйвер:

# lsmod | grep 8021q

8021q 40960 0 
garp 16384 1 8021q 
mrp 20480 1 8021q

1.3. Если этих строк нет, добавляем драйвер в ядро:

# modprobe 8021q

1.4. Генерируем приватный и публичный ключи:

# wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey > /etc/wireguard/publickey

1.5. Настраиваем конфигурационный файл для интерфейса wg0 и меняем права доступа:

# touch /etc/wireguard/wg0.conf
# chmod 600 /etc/wireguard/{privatekey,wg0.conf}

1.6. Открываем порт (будем использовать порт 41321):

# firewall-cmd --permanent --zone=public --add-port=41321/udp
# firewall-cmd --reload

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

# cat /etc/wireguard/privatekey
SMWUid073s000000000tvGgeN/Ow4BX9gsLqXFY=

# cat /etc/wireguard/publickey
RAalpQDMW000000000M761Vc56ugguVupB8ig=

1.8. Настраиваем интерфейс wg0:

# nano /etc/wireguard/wg0.conf

[Interface]
Address = 172.16.30.1/24
# Отключаем перезапись конфига клиентом
SaveConfig = false
ListenPort = 41321
# Private Key сервера
PrivateKey = SMWUid073s000000000tvGgeN/Ow4BX9gsLqXFY=

[Peer]
# Public Key второго узла
PublicKey = vQyGpGrx00000000000000000cTieq/yIJJ3Y=
AllowedIPs = 172.16.30.2/32
PersistentKeepalive = 15

1.9. Команды для управления wireguard:

# wg-quick up wg0
# wg-quick down wg0
# wg show wg0
interface: wg0
  public key: RAalpQD0000Z7fP5L000000000006ugguVupB8ig=
  private key: (hidden)
  listening port: 41321

1.10. Добавляем сервис в автозагрузку и запускаем его:

# systemctl enable --now wg-quick@wg0

1.11. Проверяем, появился ли интерфейс, и доступен ли порт:

# ip a
# ss -nltup

2. Настройка второстепенного сервера

2.1. Установка производится аналогичным образом.

2.2. Смотрим приватный/публичный ключи:

# cat /etc/wireguard/privatekey
SNtUeP3cn700000000Zc0000pDi4MC1nl8AoR28=

# cat /etc/wireguard/publickey
vQyGpGrx00000000000000000cTieq/yIJJ3Y=

2.3. Настраиваем интерфейс wg0:

$ sudo nano /etc/wireguard/wg0.conf
[Interface]
Address = 172.16.30.2/24
SaveConfig = true
ListenPort = 41321
# Private Key второго узла
PrivateKey = SNtUeP3cn700000000Zc0000pDi4MC1nl8AoR28=
[Peer]
# Public Key основного сервера
PublicKey = RAalpQDMW000000000M761Vc56ugguVupB8ig=
AllowedIPs = 172.16.30.1/32
# Внешний IP основного сервера
Endpoint = 93.78.115.123:41321
PersistentKeepalive = 15

2.4. Добавляем сервис в автозагрузку и запускаем его:

# systemctl enable --now wg-quick@wg0

2.5. Командами управления wireguard:

# wg-quick up wg0
# wg-quick down wg0
# wg show wg0

2.6. Далее проверяем канал с основного сервера:

# ping 172.16.30.2 -c 3

2.7. Проверяем канал со второго узла:

# ping 172.16.30.1 -c 3

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