Облачная платформаEvolution

Настройка WireGuard VPN между виртуальной машиной и локальным компьютером


С помощью этого руководства вы научитесь развертывать защищенную VPN-инфраструктуру с использованием WireGuard в облачной платформе Cloud.ru Evolution.

Вы развернете WireGuard на виртуальной машине и настроите конфигурацию сервера, а также настроите WireGuard на клиентском устройстве и подключитесь к VPN-серверу.

Примечание

В этом руководстве показано, как настроить WireGuard VPN-туннель через личный кабинет Cloud.ru Evolution. Вы также можете настроить туннель, используя Terraform.

Вы будете использовать следующие сервисы:

  • «Виртуальные машины» — сервис, в рамках которого предоставляется виртуальная машина.

  • «Публичные IP» — сервис для организации доступа.

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

Шаги:

  1. Разверните инфраструктуру.

  2. Настройте VPN-сервер.

  3. Подготовьте VPN-клиент.

  4. Настройте клиент на локальном компьютере.

  5. Проверьте подключение.

Перед началом работы

  1. Узнайте IP-адрес вашего компьютера. Для этого вы можете использовать сервис 2ip.io или другие.

  2. Зарегистрируйтесь в личном кабинете Cloud.ru.

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

  3. Сгенерируйте ключевую пару и загрузите публичный ключ в Cloud.ru Evolution.

1. Разверните ресурсы в облаке

На этом шаге вы подготовите сеть, группу безопасности, виртуальную машину.

  1. Создайте группу безопасности с названием vpn-vm и добавьте в нее правила:

    Трафик

    Протокол

    Порт

    Тип источника/адресата

    Источник/Адресат

    Входящий

    UDP

    51820

    IP-адрес

    IP-адрес вашего компьютера в формате <your_computer_ip>/32

    Исходящий

    —

    —

    IP-адрес

    0.0.0.0/0

    На странице Сети → Группы безопасности убедитесь, что отображается группа безопасности vpn-vm со статусом «Создана».

  2. Создайте виртуальную машину со следующими параметрами:

    • Название — vpn-vm.

    • Образ — публичный образ Ubuntu 22.04.

    • Публичный IP — оставьте Арендовать новый или выберите IP-адрес из списка арендованных.

    • Группы безопасности — группа по умолчанию и vpn-vm.

    • Логин — vpn-vm.

    • Метод аутентификации — Публичный ключ и Пароль.

    • Публичный ключ — укажите ключ, созданный ранее.

    • Пароль — задайте пароль пользователя.

    • Имя хоста — vpn-vm.

    • Остальные параметры оставьте по умолчанию или выберите на свое усмотрение.

    Запишите публичный IP-адрес виртуальной машины — он понадобится при настройке VPN-туннеля.

    На странице Инфраструктура → Виртуальные машины убедитесь, что отображается виртуальная машина vpn-vm со статусом «Запущена».

2. Настройте VPN-сервер

На этом шаге вы установите ПО, сгенерируете ключи и настроите VPN-сервер на виртуальной машине.

  1. Подключитесь к виртуальной машине через консоль или SSH.

  2. Обновите систему и установите WireGuard:

    sudo apt update && sudo apt install -y wireguard
  3. Сгенерируйте ключи для сервера:

    1. Создайте директорию для конфигурационных файлов:

      sudo mkdir -p /etc/wireguard
    2. Сгенерируйте приватный и публичный ключи сервера:

      sudo bash -c 'wg genkey | tee /etc/wireguard/server-privatekey | wg pubkey > /etc/wireguard/server-publickey'
    3. Посмотрите и скопируйте сгенерированные ключи — они понадобятся в дальнейшем. Поочередно выполните команды:

      sudo cat /etc/wireguard/server-publickey
      sudo cat /etc/wireguard/server-privatekey
  4. Создайте конфигурационный файл WireGuard на сервере:

    sudo nano /etc/wireguard/wg0.conf
  5. Вставьте в него следующую конфигурацию и сохраните изменения:

    [Interface]
    # Приватный ключ сервера
    PrivateKey = <server-privatekey>
    # Адрес ВМ в сети WireGuard
    Address = 10.0.1.1/24
    # Порт для входящих соединений
    ListenPort = 51820

    Где <server-privatekey> — приватный ключ, сгенерированный ранее.

  6. Включите пересылку пакетов — IP forwarding:

    echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
    sudo sysctl -p
  7. Включите NAT для сети WireGuard:

    1. Узнайте название внешнего интерфейса (обычно eth0):

      ip route | grep default
    2. Добавьте правило NAT — замените eth0 на ваш интерфейс:

      sudo iptables -t nat -A POSTROUTING -o <interface> -j MASQUERADE
      sudo apt install -y iptables-persistent
      sudo netfilter-persistent save

3. Подготовьте VPN-клиент

На этом шаге вы установите ПО, сгенерируете ключи и укажете их в конфигурации VPN на виртуальной машине.

  1. На ваш компьютер установите WireGuard и сгенерируйте ключи для клиента:


    1. Установите WireGuard:

      sudo apt install wireguard-tools
    2. Создайте ключи:

      wg genkey | tee client-privatekey | wg pubkey > client-publickey
    3. Посмотрите и скопируйте приватный ключ — он понадобится на следующем шаге:

      cat client-publickey
  2. Добавьте клиента в конфигурационный файл VPN-сервера:

    1. Вернитесь в консоль виртуальной машины и запустите WireGuard:

      sudo wg-quick up wg0
    2. Проверьте, что интерфейс создан:

      ip link show wg0
    3. Добавьте устройство:

      sudo wg set wg0 peer <client_public_key> allowed-ips 10.0.1.2/32 endpoint <your_computer_ip>:51820 persistent-keepalive 25

      Где:

      • <client_public_key> — публичный ключ, сгенерированный в приложении на вашем компьютере.

      • <your_computer_ip> — публичный IP-адрес вашего компьютера.

    4. Сохраните конфигурацию:

      sudo wg-quick save wg0
    5. Проверьте, что конфигурация сохранилась:

      sudo wg show

      В ответе должны вернуться параметры интерфейса wg0 и подключенного клиента.

    6. Включите автозагрузку:

      sudo systemctl enable wg-quick@wg0

4. Настройте клиент на локальном компьютере

На этом шаге вы настроите VPN-клиент на вашем компьютере.


  1. Создайте конфигурационный файл:

    nano /etc/wireguard/wg0.conf
  2. Вставьте и сохраните код:

    [Interface]
    PrivateKey = <client_private_key>
    Address = 10.0.1.2/24
    [Peer]
    PublicKey = <server_public_key>
    Endpoint = <vm_ip_address>:51820
    AllowedIPs = 10.0.1.0/24
    PersistentKeepalive = 25

    Где:

    • <client_private_key> — публичный ключ, сгенерированный в приложении на вашем компьютере.

    • <server_public_key> — публичный ключ, сгенерированный виртуальной машине.

    • <vm_ip_address> — публичный IP-адрес виртуальной машины.

  3. Запустите VPN:

    sudo wg-quick up wg0
    sudo systemctl enable wg-quick@wg0

5. Проверьте VPN-соединение

  1. На сервере или клиенте выполните команду:

    sudo wg

    В ответе должно вернуться время последнего соединения — Latest handshake. Если время обновляется, туннель работает.

  2. Выполните ping от одного узла к другому.

    • На виртуальной машине выполните команду:

      ping 10.0.1.2
    • На компьютере выполните команду:

      ping 10.0.1.1

Если пакеты передаются без потерь, VPN-туннель настроен корректно.

Результат

Вы научились настраивать серверную и клиентскую части WireGuard VPN для создания защищенной инфраструктуры.