Данная статья связана с
Данная статья применима к
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.8)
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7), РУСБ.10015-10
- Astra Linux Special Edition РУСБ.10015-17
- Astra Linux Special Edition РУСБ.10015-37 (очередное обновление 7.7)
- Astra Linux Special Edition РУСБ.10015-03 (очередное обновление 7.6)
- Astra Linux Special Edition РУСБ.10152-02 (очередное обновление 4.7)
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)
- Astra Linux Special Edition РУСБ.10015-16 исп. 1
- Astra Linux Special Edition РУСБ.10015-16 исп. 2
- Astra Linux Special Edition РУСБ.10265-01 (очередное обновление 8.1)
- Astra Linux Common Edition 2.12
Аннотация
WireGuard протокол виртуальных частных сетей (VPN), созданный для обеспечения защищённого соединения между устройствами через ненадёжные или недоверенные сети. Аналог OpenVPN или IPSec. WireGuard создаёт виртуальные сетевые интерфейсы, работающие аналогично физическим сетевым интерфейсам. Каждый интерфейс имеет свой набор правил маршрутизации и криптографические ключи (приватный и публичный). Доступ к приватному ключу должен быть ограничен. Публичные ключи используются для установления доверительных отношений между устройствами (парами или peers).
Особенности протокола WireGuard:
- Протокол работает на уровне ядра операционной системы.
- Соединение устанавливается только между доверенными парами, указанными в конфигурации.
- WireGuard автоматически поддерживает соединение даже при изменении IP-адреса устройства.
- Протокол не требует постоянного подключения к серверу.
Используемые определения:
- Физический IP-адрес узла
- Виртуальный сетевой интерфейс
- Виртуальный IP-адрес
Виртуальный IP-адрес для сервера и клиентов назначаются из одной подсети.
Описание стенда
Пример начальной конфигурации пары узлов для работы WireGuard:
| Параметр | Сервер | Клиент |
|---|---|---|
| Имя узла | wgserver | wgclient |
| Физический IP-адрес узла | <физический_IP-адрес_сервера> | не используется в настройке |
Название сетевого интерфейса стенда: eth0. (Пример, название может быть произвольным).
Название виртуального сетевого интерфейса стенда: wg0. (Пример, название может быть произвольным).
Установка
На сервере и клиенте:
- Обновить репозитории:sudo apt update
- Установить инструметы WireGuard:sudo apt install wireguard wireguard-tools
Генерация ключей
На сервере и клиенте:
- Перейти в каталог для хранения конфигурационных файлов WireGuard последовательно выполнив:
sudo su
cd /etc/wireguard
- Если каталога не существует, создать его последовательно выполнив:
sudo mkdir /etc/wireguard
sudo chmod 644 /etc/wireguard
- Если каталога не существует, создать его последовательно выполнив:
- Создать пару из приватного и публичного ключа:wg genkey | tee privatekey | wg pubkey > publickey
- Проверить пару ключей последовательно отобразив содержимое ранее сгенерированных файлов с ключами:
cat privatekey
cat publickey
- Ограничить доступ к файлам с ключами WireGuard:
sudo chmod 600 privatekey
sudo chmod 644 publickey
Установленные правила дают полный доступ к приватному ключу только пользователю, создавшему его, а для остальных дают право только на чтение публичного ключа.
Настоятельно не рекомендуется распространение или передача приватного ключа.
Пары из приватного и публичного ключа генерируются отдельно и на сервере и на клиенте.
Настройка маршрутизации
На сервере:
- В каталоге
/etc/wireguardсоздать конфигурационный файл со следующим содержимым:sudo nano /etc/wireguard/wg0.confГде:[Interface] Address =<виртуальный_IP-адрес_сервера>SaveConfig = false PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ListenPort = 51820 PrivateKey = ПРИВАТНЫЙ КЛЮЧ СЕРВЕРА
[Peer] PublicKey = ПУБЛИЧНЫЙ КЛЮЧ КЛИЕНТА
PresharedKey = ДОПОЛНИТЕЛЬНЫЙ КЛЮЧ КЛИЕНТА AllowedIPs =0.0.0.0/0[Interface]— секция для определения настроек сервера;Address— виртуальный IP-адрес сервера WireGuard по которому он будет достунен внутри соединения WireGuard, указывается произвольный IP-адрес, отличный от физического;SaveConfig— автоматическое сохранение изменений конфигурации интерфейса в файл его конфигурации при их определении через wg set;PostUp— команда при запуске интерфейса. В примере это добавление правилаiptaples, разрешающего перенаправление трафика с виртуального сетевого интерфейсаwg0на физическийeth0;PostDown— команда при выключении интерфейса. В примере это удаление предыдущего правила изPostUp;ListenPort— номер сетевого порта для прослушивания входящих соединений;PrivateKeyсгенерированный ранее приватный ключ сервера.
[Peer]— секция для определения настроек клиента, данных секций может быть несколько по количеству планируемых к подключению клиентов;PublicKey— публичный ключ клиента;PresharedKey— опциональный параметр, дополнительный ключ используется совместно с основной парой в целях усиления защиты соединения;AllowedIPs—0.0.0.0/0это значение по умолчанию для перенаправления всего сетевого трафика клиента. При необходимости, указывается конкретный физический IP-адрес клиента, трафик с которого будет перенаправляться в WireGuard.
Подробная справка о настройках виртуального сетевого интерфейса доступна по командеman wg-quick.
- Ограничить доступ к файлу конфигурации:sudo chmod 600 wg0.cfg
Включить маршрутизацию на уровне ядра:
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf- Применить внесённые изменения для ядра:sudo sysctl -p
- Включить созданный через WireGuard виртуальный сетевой интерфейс:sudo wg-quick up wg0
Следует учитывать временную задержку до 20 секунд при запуске виртуального сетевого интерфейса.
- Добавить службу инструмента в автозагрузку:sudo systemctl enable wg-quick@wg0
- Отключить проверку конфликта адресов. По умолчанию механизм включен :sudo nmcli connection modify wg0 ipv4.dad-timeout 0
- Перезапустить сетевую службу:
Для включения и выключения виртуального сетевого интерфейса WireGuard нужно использовать инструмент
wg-quick. Командыnmcli device connect/disconnectи их аналоги, приводят к ошибке:"Ошибка: не удалось добавить/активировать новое подключение: Device class NMDeviceWireGuard had no complete_connection method".
sudo wg-quick down wg0 && sudo wg-quick up wg0 - Проверить статус виртуального сетевого интерфейса:sudo wg show wg0
interface: wg0
public key: m5HtgJD/zHHPQBPVW8I/WoLvPfx+rpWolcxRyQVJChQ=
private key: (hidden)
listening port: 32823
fwmark: 0xca6cpeer: FldFF7ld0SC9ns7d+fWHwhBBomBLGD1F9E0babeYk3o=
endpoint: 10.0.2.15:51820
allowed ips: 0.0.0.0/0
transfer: 0 B received, 296 B sent
persistent keepalive: every 20 seconds
На клиенте:
- В каталоге
/etc/wireguardсоздать конфигурационный файл со следующим содержимым:sudo nano /etc/wireguard/wg0.confГде:[Interface]PrivateKey = ПРИВАТНЫЙ КЛЮЧ КЛИЕНТАAddress =<виртуальный_IP-адрес_клиента>DNS=77.88.8.1[Peer]PublicKey = ПУБЛИЧНЫЙ КЛЮЧ СЕРВЕРАPresharedKey = ДОПОЛНИТЕЛЬНЫЙ КЛЮЧ КЛИЕНТАAllowedIPs = 0.0.0.0/0Endpoint =<физический_IP-адрес_сервера>:51820persistent keepalive = 25[Interface]— секция для определения настроек клиента;PrivateKey— приватный ключ клиента;Address— виртуальный IP-адрес клиента WireGuard. Указывается IP-адрес, отличный от физических IP-адресов узлов из той же подсети что и IP-адрес сервера WireGuard ;- DNS — опциональный параметр, IP-адрес DNS-сервера;
[Peer]— секция для определения настроек сервера;PublicKey— публичный ключ сервера;PresharedKey— опциональный параметр, дополнительный ключ клиента;AllowedIPs—0.0.0.0/0это значение по умолчанию для перенаправления всего сетевого трафика клиента. При необходимости, указывается конкретный физический IP-адрес клиента, трафик с которого будет перенаправляться в WireGuard;Endpoint— физический IP-адрес и порт сервера (по умолчанию51820);persistent keepalive—задержка в секундах, для удержания соединения при бездействии.
Выполнить шаги 2-9 сценария "На сервере".
Созданный виртуальный сетевой интерфейс доступен через графический интерфейс как новое VPN-соединение:
Доступна опция автоматического подключения:
Изменение настроек
- Проверить текущую конфигурацию виртуального сетевого интерфейса:sudo wg
interface: wg0
public key: b6Oy053LK5RRL3akvFP8oCaygL8owqJQE0DJPKAb/w8=
private key: (hidden)
listening port: 51820
- Создать новый приватный ключ:sudo wg genkey
- Создать новый публичный ключ на основе приватного:wg genkey | tee <файл_приватного_ключа> | wg pubkey > <файл_публичного_ключа>
- Создать дополнительный ключ клиента:wg genpsk > <файл_дополнительного_ключа>
- Указать динамические настройки виртуального сетевого интерфейса для текущего сеанса:sudo wg set <набор_параметров_настройки>Перечень доступных настроек указан в
man wgв разделеset. Заданные настройки сохраняются до перезагрузки узла. - sudo wg-quick save <имя_виртуального_интерфейса>
- sudo wg-quick strip <имя_виртуального_интерфейса> > <файл_для_экспорта_настроек>
- sudo wg-quick strip wg0 > wireguard-config.txt
- Добавить или обновить настройки в текущем файле конфигурации:sudo wg addconf <имя_виртуального_интерфейса> <имя_файла_конфигурации>
- Указать новый файл конфигурации для виртуального сетевого интерфейса:sudo wg setconf <имя_виртуального_интерфейса> <имя_файла_конфигурации>
Инструмент использует файлы конфигурации из /etc/wireguard.
Справка по инструменту wg -h, подробная справка man wg.
Управление соединением
Управление виртуальным сетевым интерфейсом осуществляется с помощью инструмента wg-quick. Общий синтаксис:
Где <команда>:
updown
Справка по инструменту man wg-quick.

