С помощью этого руководства вы научитесь автоматически развертывать защищенную VPN-инфраструктуру с использованием Terraform и WireGuard в облачной платформе Cloud.ru Evolution.
Вы развернете WireGuard на виртуальной машине и настроите конфигурацию сервера с помощью Terraform, а также настроите WireGuard на клиентском устройстве и подключитесь к VPN-серверу.
Вы будете использовать следующие сервисы:
«Виртуальные машины» — сервис, в рамках которого предоставляется виртуальная машина.
Terraform — инструмент для управления инфраструктурой как кодом (Infrastructure as Code).
WireGuard — современный VPN-протокол.
Шаги:
Если вы уже зарегистрированы, войдите под своей учетной записью.
Создайте сервисный аккаунт для управления облачными ресурсами.
Создайте ключ доступа для аутентификации сервисного аккаунта в API Cloud.ru. Сохраните Key ID (логин) и Key Secret (пароль).
Скопируйте идентификатор проекта, в котором будете разворачивать ресурсы.
На этом шаге вы установите Terraform и провайдер.
Если не удается скачать Terraform с сайта Hashicorp, скачайте дистрибутив Terraform из зеркала Cloud.ru.
Если вы загрузили дистрибутив Terraform из зеркала, добавьте в переменную PATH путь к папке с исполняемым файлом:
export PATH=$PATH:<path>
Где <path> — путь к исполняемому файлу Terraform.
Не выполняйте команду terraform init — вы выполните ее далее.
В конфигурационных файлах опишите облачные ресурсы, которые создает Terraform.
Создайте директорию для конфигурационных файлов и перейдите в нее:
mkdir wireguard-vpn-lab && cd wireguard-vpn-lab
Сгенерируйте ключевую пару для подключения к серверу по SSH:
ssh-keygen -t ed25519 -f id_ed25519 -N ""
Выведите на экран и скопируйте публичный ключ id_ed25519.pub:
cat id_ed25519.pub
Создайте файл main.tf, содержащий определение всех создаваемых ресурсов и их конфигурацию. Вместо значений <project_id> и <ssh_public_key> укажите идентификатор проекта и содержимое публичного ключа id_ed25519.pub соответственно.
С помощью этой конфигурации вы создадите новые ресурсы:
виртуальную машину vpn-server с публичным IP-адресом vpn-fip;
группу безопасности vpn-security-group;
подсеть vpn-subnet.
Создайте файл variables.tf, содержащий все настраиваемые параметры инфраструктуры для удобства управления и повторного использования. Вместо значений <access_key> и <secret_key> укажите логин и пароль ключа доступа, который вы создали перед началом работы.
Создайте файл data.tf для получения информации о существующих ресурсах в облаке и динамической конфигурации.
Создайте файл wg0.conf, содержащий конфигурацию сервера. В процессе развертывания инфраструктуры он будет автоматически скопирован на виртуальную машину vpn-server.
Инициализируйте конфигурацию Terraform:
terraform init
Если все прошло успешно, появится сообщение:
Terraform has been successfully initialized!You may now begin working with Terraform. Try running "terraform plan" to seeany changes that are required for your infrastructure. All Terraform commandsshould now work.If you ever set or change modules or backend configuration for Terraform,rerun this command to reinitialize your working directory. If you forget, othercommands will detect it and remind you to do so if necessary.
Проверьте корректность конфигурационных файлов с помощью команды:
terraform validate
Если файлы корректные, появится сообщение:
Success! The configuration is valid.
Для предварительного просмотра изменений инфраструктуры выполните команду:
terraform plan
В терминале появится список ресурсов с параметрами. На этом этапе изменения не будут внесены.
Примените изменения инфраструктуры, описанные в конфигурации Terraform:
terraform apply
Подтвердите изменения: введите yes и нажмите Enter.
Проверьте создание ресурсов:
Убедитесь, что в личном кабинете на странице Сети → Группы безопасности отображается группа безопасности vpn-security-group со статусом «Создана».
Убедитесь, что в личном кабинете на странице Инфраструктура → Виртуальные машины отображается виртуальная машина vpn-server со статусом «Запущена».
Скопируйте и сохраните публичный IP-адрес виртуальной машины, он понадобится для настройки клиента.
Убедитесь, что в личном кабинете на странице Сети → Подсети отображается подсеть vpn-subnet со статусом «Создана».
Для подключения к серверу установите WireGuard на своем устройстве. В руководстве в качестве клиента используется устройство с ОС Ubuntu 22.04.
На клиенте в терминале выполните команду:
sudo apt install wireguard
Сгенерируйте ключи доступа для клиента:
wg genkey | tee client_privatekey | wg pubkey > client_publickey
Выведите на экран и скопируйте публичный ключ клиента:
cat client_publickey
Подробнее об установке WireGuard на других платформах читайте на официальном сайте.
В конфигурации сервера укажите данные для подключения клиента.
Подключитесь к ВМ vpn-server по SSH.
Откройте файл конфигурации сервера:
sudo nano /etc/wireguard/wg0.conf
Добавьте в конец файла настройки клиента:
[Peer]PublicKey = <client_public_key>AllowedIPs = 10.0.0.2/32Где <client_public_key> — публичный ключ клиента.
Перезапустите WireGuard:
sudo systemctl restart wg-quick@wg0
Результат:
interface: wg0public key: cQxq+75SZhnTetq/sXKTrPOHBGCZaArot8T0********private key: (hidden)listening port: 51820peer: J0SrgdesqESNTmbd858pT/x+cEKsBfOgcVO/********allowed ips: 10.0.0.2/32
Скопируйте значение public key в выводе.
Оно потребуется на следующем этапе для настройки клиента.
На клиентском устройстве создайте конфигурационный файл с настройками для подключения к серверу.
Выведите на экран и скопируйте приватный ключ клиента:
cat client_privatekey
Создайте файл конфигурации клиента:
sudo nano /etc/wireguard/wg0.conf
Вставьте конфигурацию для клиента:
[Interface]Address = 10.0.0.2/32PrivateKey = <client_private_key>DNS = 8.8.8.8[Peer]PublicKey = <server_public_key>Endpoint = <server_public_ip>:51820AllowedIPs = 0.0.0.0/0PersistentKeepalive = 25
Где:
<client_private_key> — приватный ключ клиента.
<server_public_key> — публичный ключ сервера.
<server_public_ip> — публичный IP-адрес виртуальной машины vpn-server.
Запустите WireGuard:
sudo systemctl start wg-quick@wg0
Соединение с сервером будет установлено.
Проверьте статус туннеля. На клиентском устройстве выполните команду:
wg show
Результат:
interface: wg0public key: J0SrgdesqESNTmbd858pT/x+cEKsBfOgcVO/********private key: (hidden)listening port: 37904fwmark: 0xca6cpeer: cQxq+75SZhnTetq/sXKTrPOHBGCZaArot8T0********endpoint: 176.123.***.***:51820allowed ips: 0.0.0.0/0latest handshake: 46 seconds agotransfer: 92 B received, 212 B sentpersistent keepalive: every 25 seconds
Проверьте доступность сервера:
ping 10.0.0.1
Вы научились использовать Terraform для создания облачной инфраструктуры, а также настраивать серверную и клиентскую часть для WireGuard VPN.