WireGuard VPN

WireGuard VPN

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

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 имеют абсолютно одинаковую функциональность.
  • Обычно ожидается, что серверная часть всегда запущена и имеет публичный IP-адрес, но это всего лишь для удобства.

2.2 AllowedIPs

  • Директива AllowedIPs в WireGuard — это параметр конфигурации, который определяет, какие IP-адреса могут проходить через туннель WireGuard.
  • Она указывает, какой трафик будет разрешён для передачи через VPN-соединение, и играет ключевую роль в настройке маршрутизации и безопасности.

2.2.1 Основные функции AllowedIPs

  • Определение разрешённого трафика.

    • С помощью AllowedIPs указывается, какие IP-адреса (или диапазоны адресов) могут быть получены или отправлены через конкретный интерфейс WireGuard.
    • Это позволяет контролировать, какой трафик будет проходить через туннель.
  • Настройка маршрутизации.

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

    • Ограничение трафика помогает предотвратить несанкционированный доступ и утечки данных.

2.2.2 Как работает AllowedIPs

  • В конфигурационном файле WireGuard для каждого пира (peer) можно указать список IP-адресов или подсетей, которые будут разрешены для этого пира.

  • Формат указания адресов: стандартный для IP-сетей, включая CIDR-нотацию (например, 192.168.1.0/24 для подсети).

  • Можно указывать как отдельные IP-адреса, так и диапазоны.

2.2.3 Примеры использования AllowedIPs

  • AllowedIPs = 0.0.0.0/0 : весь трафик будет направляться через туннель WireGuard (полная маршрутизация через VPN).

  • AllowedIPs = 192.168.1.0/24 : через туннель будут проходить только адреса из указанной подсети.

  • AllowedIPs = 10.0.0.5/32 : разрешение трафика только для конкретного IP-адреса 10.0.0.5.

  • Если в AllowedIPs указаны узкие диапазоны или конкретные адреса, то трафик для остальных адресов будет идти через обычный сетевой интерфейс, а не через VPN.

  • Настройка AllowedIPs влияет на то, как система будет маршрутизировать трафик, поэтому важно правильно указать адреса, чтобы обеспечить нужную функциональность и безопасность.

  • При настройке AllowedIPs необходимо учитывать как локальные сети, так и публичные IP-адреса, если требуется доступ к определённым ресурсам в интернете через VPN.

2.3 Настройка маршрутизации

  • Чтобы добавить маршрутизацию в WireGuard, настройте AllowedIPs в конфигурации удаленного узла, что указывает ядру, как маршрутизировать трафик для этого узла.
  • Для более сложной маршрутизации может потребоваться вручную настроить статические маршруты.
  • AllowedIPs определяет, какие IP-адреса передаются через туннель WireGuard.
  • В системе Linux wg-quick автоматически преобразует AllowedIP в маршруты ядра при создании туннеля.
  • Для расширенной маршрутизации используйте ip-rules:
    • Создайте новую таблицу маршрутизации с помощью команды ip route add table 100.
    • Добавьте правило для использования этой таблицы для трафика, исходящего с IP-адреса интерфейса WireGuard: ip rule add from 10.66.127.142/32 lookup 40.
    • Добавьте это правило в команду PostUp в конфигурации WireGuard, чтобы автоматизировать её.

3 Сервер

3.1 Установка WireGuard

3.1.1 Rocky Linux 9

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

3.2 Настройка WireGuard

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

3.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

3.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 = 10.0.0.1/24 : назначает частный IP-адрес 10.0.0.1 интерфейсу WireGuard с маской подсети 255.255.255.0 .
    • SaveConfig = true : позволяет WireGuard автоматически сохранять конфигурацию при выключении сервера.
    • PrivateKey = <Server_Private_Key> : устанавливает закрытый ключ сервера WireGuard.
    • ListenPort = 51820: устанавливает порт сервера WireGuard 51820 для прослушивания входящих запросов на VPN-подключение.

3.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

3.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 секунд.

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

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

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

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

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

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

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

  1. Открытие порта

    • Откройте порт 51820/UDP в FirewallD:
    sudo firewall-cmd --add-service=wireguard --permanent
    sudo firewall-cmd --reload
    
    • Разрешите пересылку пакетов для обеспечения работы VPN:
    sudo echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf
    sudo sysctl -p
    

3.2.8 Маскарадинг

  • Если необходимо подключить маскарадинг.
  • Добавьте правило маскарадинга для сети 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

4 Клиент

4.1 Установка

4.1.1 Gentoo

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

4.1.2 Rocky Linux 9

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

4.2 Модуль ядра

  • Включите модуль в ядро:
    Device Drivers  --->
      [*] Network device support  --->
          [*] Network core driver support
          <*>   WireGuard secure network tunnel
    
  • Кроме того, должны быть включены следующие параметры:
    CONFIG_IP_MULTIPLE_TABLES=y
    
  • Это в конфигураторе:
    -> Networking support (NET [=y])
       -> Networking options
          -> TCP/IP networking (INET [=y])
             -> IP: advanced router (IP_ADVANCED_ROUTER [=y])
                -> IP: policy routing (IP_MULTIPLE_TABLES [=y])
    
  • Для ipv6 нужно будет установить:
    CONFIG_IPV6_MULTIPLE_TABLES=1
    

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

  • Скопируйте конфигурацию клиента с сервера, например с помощью scp:
    sudo scp root@wireguard-server-ip:/etc/wireguard/client.conf /etc/wireguard/wg0.conf
    sudo chmod 600 /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
    

5 Утилиты

5.1 wghttp

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