WireGuard VPN

2025-11-06 · 4 мин. для прочтения

WireGuard VPN.

Содержание

1 Общая информация

  • WireGuard есть коммуникационный протокол и бесплатное программное обеспечение с открытым исходным кодом, которое реализует зашифрованные виртуальные частные сети (VPN).

1.1 Основные особенности WireGuard

  • Минималистичный дизайн.
  • Высокая производительность.
  • Простота конфигурации.
  • Криптографические примитивы:
    • Curve25519 — для обмена ключами;
    • ChaCha20 — для шифрования данных;
    • Poly1305 — для проверки целостности сообщений;
    • BLAKE2s — для высокоскоростного хэширования;
    • HKDF — для безопасной генерации ключей.
  • Кроссплатформенность.
  • Несколько топологий. Поддерживает топологии «точка-точка», «звезда» (сервер/клиент) и Mesh (сеть).

1.2 Применение WireGuard

  • Защита трафика в корпоративных сетях.
  • Создание безопасного доступа к облачным и локальным ресурсам.
  • Шифрование данных в публичных Wi-Fi сетях.
  • Настройка протокола на домашних роутерах для защиты всей сети.

1.3 Ограничения WireGuard

  • Привязка к статическим IP:
    • каждый клиент должен быть настроен с фиксированным IP, что может быть неудобно в динамических сетях.
  • Ограниченная анонимность
    • протокол не скрывает метаданные, такие как IP-адреса.
  • Отсутствие встроенной обфускации
    • WireGuard не скрывает трафик от анализа.

2 Сервер

2.1 Установка WireGuard

2.1.1 Rocky Linux 9

  • Установим репозиторий EPEL:
sudo dnf install epel-release -y
  • Установим пакет wireguard-tools:
sudo dnf install wireguard-tools -y
  • Проверка установки:
wg --version

2.2 Настройка WireGuard

  • WireGuard использует криптографические ключи для аутентификации и шифрования трафика между узлами.

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

  • Создадим директорию для хранения ключей и сгенерируем пару ключей:
sudo mkdir -p /etc/wireguard
sudo chmod 700 /etc/wireguard
sudo wg genkey | sudo tee /etc/wireguard/server_private.key
sudo wg pubkey < /etc/wireguard/server_private.key | sudo tee /etc/wireguard/server_public.key
sudo chmod 600 /etc/wireguard/server_private.key /etc/wireguard/server_public.key

2.2.2 Создание конфигурационного файла сервера

  • Создадим файл конфигурации wg0.conf:
sudo touch /etc/wireguard/wg0.conf
  • Добавьте в него следующие строки, заменив на ваш приватный ключ:
[Interface]
Address = 10.0.0.1/24
SaveConfig = true
ListenPort = 51820
PrivateKey = <Server_Private_Key>
  • Приведенная выше конфигурация WireGuard создает новый интерфейс с частным IP-адресом. 10.0.0.1/24:
    • Address = 172.16.0.1/24 : назначает частный IP-адрес 172.16.0.1 интерфейсу WireGuard с маской подсети 255.255.255.0 .
    • SaveConfig = true : позволяет WireGuard автоматически сохранять конфигурацию при выключении сервера.
    • PrivateKey = <Server_Private_Key> : устанавливает закрытый ключ сервера WireGuard.
    • ListenPort = 51820: устанавливает порт сервера WireGuard 51820 для прослушивания входящих запросов на VPN-подключение.

2.2.3 Генерация конфигурации клиента

  • Замените client желаемой схемой именования клиентов.
  • Сгенерируем пару ключей для клиента:
sudo wg genkey | sudo tee /etc/wireguard/client_private.key
sudo wg pubkey < /etc/wireguard/client_private.key | sudo tee /etc/wireguard/client_public.key

2.2.4 Создание конфигурационного файла клиента

  • Создайте файл client.conf:
sudo touch /etc/wireguard/client.conf
  • Добавьте следующие строки, заменив соответствующие значения вашими ключами и IP-адресом сервера:
[Interface]
PrivateKey = <Client_Private_Key>
Address = 10.0.0.2/24
DNS = 8.8.8.8

[Peer]
PublicKey = <Server_Public_Key>
Endpoint = <Server_Public_IP>:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
  • Создаётся клиент WireGuard с IP-адресом частного туннеля VPN 10.0.0.2/24:
    • PrivateKey : устанавливает закрытый ключ клиента WireGuard, используемый для шифрования и аутентификации в туннеле VPN.
    • Address : устанавливает частный IP-адрес клиента WireGuard 10.0.0.2/24.
    • DNS: устанавливает публичный DNS-сервер Google 8.8.8.8 в качестве DNS-резолвера для разрешения доменных имен при подключении к VPN-туннелю.
    • PublicKey : устанавливает открытый ключ целевого сервера WireGuard.
    • AllowedIPs : определяет сетевые адреса клиентов сети, которым разрешено подключение через туннель VPN.
    • Endpoint: устанавливает публичный IP-адрес сервера WireGuard и порт 51820 для использования при подключении к VPN-туннелю.
    • PersistentKeepalive : поддерживает VPN-соединение активным, отправляя пакеты поддержки активности каждые 15 секунд.

2.2.5 Добавление клиента на сервер

  • Откройте конфигурационный файл сервера /etc/wireguard/wg0.conf.

  • Добавьте информацию о клиенте:

[Peer]
PublicKey = <Client_Public_Key>
AllowedIPs = 10.0.0.2/32

2.2.6 Управление сервисом WireGuard

  • Запустите интерфейс WireGuard:
sudo systemctl enable --now wg-quick@wg0
  • Убедитесь, что сервис работает корректно:
sudo systemctl status wg-quick@wg0

2.2.7 Настройка брандмауэра

  • Откройте порт 51820/UDP в FirewallD:
sudo firewall-cmd --add-service=wireguard --permanent
sudo firewall-cmd --reload
  • Разрешите пересылку пакетов для обеспечения работы VPN:
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
  • Добавьте правило маскарадинга для сети WireGuard:
sudo firewall-cmd --permanent --add-masquerade
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/24" masquerade'
sudo firewall-cmd --reload

3 Клиент

3.1 Установка

3.1.1 Gentoo

  • Установите:
    emerge net-vpn/wireguard-tools
    

3.1.2 Rocky Linux 9

  • Установим репозиторий EPEL:
sudo dnf install epel-release -y
  • Установим пакет wireguard-tools:
sudo dnf install wireguard-tools -y
  • Проверка установки:
wg --version

3.2 Модуль ядра

  • Включите модуль в ядро:
    Device Drivers  --->
      [*] Network device support  --->
          [*] Network core driver support
          <*>   WireGuard secure network tunnel
    

3.3 Конфигурация

  • Скопируйте конфигурацию клиента с сервера, например с помощью scp:
    sudo scp root@wireguard-server-ip:/etc/wireguard/client.conf /etc/wireguard/wg0.conf
    
  • Активируйте сервис systemd-resolved:
    sudo systemctl enable --now systemd-resolved
    
  • Активируйте интерфейс:
    sudo wg-quick up wg0
    
  • Проверьте статус туннеля:
    sudo wg
    
  • Проверьте связь с сервером:
    ping -c 5 10.0.0.1
    

4 Утилиты

4.1 wghttp

  • Репозиторий: https://github.com/zhsj/wghttp
  • Использовать WireGuard в качестве прокси-сервера HTTP и SOCKS5.
Дмитрий Сергеевич Кулябов
Authors
Профессор кафедры теории вероятностей и кибербезопасности
Мои научные интересы включают физику, администрирование Unix и сетей.