С помощью этого руководства вы научитесь автоматически развертывать защищенную VPN-инфраструктуру с использованием Terraform и WireGuard в облачной платформе Cloud.ru Evolution.
Вы развернете WireGuard на виртуальной машине и настроите конфигурацию сервера с помощью Terraform, а также настроите WireGuard на клиентском устройстве и подключитесь к VPN-серверу.
Вы будете использовать следующие сервисы:
Виртуальные машины — сервис, в рамках которого предоставляется виртуальная машина.
Terraform — инструмент для управления инфраструктурой как кодом (Infrastructure as Code).
WireGuard — современный VPN-протокол.
Шаги:
Перед началом работы
-
Если вы уже зарегистрированы, войдите под своей учетной записью.
Создайте сервисный аккаунт для управления облачными ресурсами.
Создайте ключ доступа для аутентификации сервисного аккаунта в API Cloud.ru. Сохраните Key ID (логин) и Key Secret (пароль).
Скопируйте идентификатор проекта, в котором будете разворачивать ресурсы.
1. Установите и настройте Terraform
-
Если не удается скачать Terraform с сайта Hashicorp, скачайте дистрибутив Terraform из зеркала Cloud.ru.
Если вы загрузили дистрибутив Terraform из зеркала, добавьте в переменную PATH путь к папке с исполняемым файлом:
export PATH=$PATH:<path>Где <path> — путь к исполняемому файлу Terraform.
2. Подготовьте файлы конфигурации
В конфигурационных файлах опишите облачные ресурсы, которые создает 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 соответственно.
main.tfС помощью этой конфигурации вы создадите новые ресурсы:
виртуальную машину vpn-server с публичным IP-адресом vpn-fip;
группу безопасности vpn-security-group;
подсеть vpn-subnet.
Создайте файл variables.tf, содержащий все настраиваемые параметры инфраструктуры для удобства управления и повторного использования. Вместо значений <access_key> и <secret_key> укажите логин и пароль ключа доступа, который вы создали перед началом работы.
variables.tfСоздайте файл data.tf для получения информации о существующих ресурсах в облаке и динамической конфигурации.
data.tfСоздайте файл wg0.conf, содержащий конфигурацию сервера. В процессе развертывания инфраструктуры он будет автоматически скопирован на виртуальную машину vpn-server.
wg0.conf
3. Разверните инфраструктуру
Инициализируйте конфигурацию 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.
После создания всех ресурсов появится сообщение:
Apply complete! Resources: 4 added, 0 changed, 0 destroyed.Проверьте создание ресурсов:
Убедитесь, что в личном кабинете на странице Сети → Группы безопасности отображается группа безопасности vpn-security-group со статусом «Создана».
Убедитесь, что в личном кабинете на странице Инфраструктура → Виртуальные машины отображается виртуальная машина vpn-server со статусом «Запущена».
Скопируйте и сохраните публичный IP-адрес виртуальной машины, он понадобится для настройки клиента.
Убедитесь, что в личном кабинете на странице Сети → Подсети отображается подсеть vpn-subnet со статусом «Создана».
4. Установите WireGuard на клиенте
Для подключения к серверу установите WireGuard на своем устройстве. В руководстве в качестве клиента используется устройство с ОС Ubuntu 22.04.
На клиенте в терминале выполните команду:
sudo apt install wireguardСгенерируйте ключи доступа для клиента:
wg genkey | tee client_privatekey | wg pubkey > client_publickeyВыведите на экран и скопируйте публичный ключ клиента:
cat client_publickey
Подробнее об установке WireGuard на других платформах читайте на официальном сайте.
5. Настройте сервер
В конфигурации сервера укажите данные для подключения клиента.
Подключитесь к ВМ 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 в выводе.
Оно потребуется на следующем этапе для настройки клиента.
6. Настройте клиент
На клиентском устройстве создайте конфигурационный файл с настройками для подключения к серверу.
Выведите на экран и скопируйте приватный ключ клиента:
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Соединение с сервером будет установлено.
7. Проверьте соединение
Проверьте статус туннеля. На клиентском устройстве выполните команду:
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.