Развертывание VPN с помощью Ansible: Руководство для начинающих

На список статей
Blog image

Защитите свои сайты с My-Sites-Guard.com!
Сервис обеспечивает надежную защиту ваших веб-ресурсов: мониторинг доступности сайта, контроль валидности сертификатов, а также возможность собирать и анализировать логи работы сервера. My-Sites-Guard.com — всё для сохранности вашего сайта и спокойствия в работе!

Введение

В современном мире сети VPN (виртуальные частные сети) играют важную роль в обеспечении безопасности и конфиденциальности данных при передаче информации через интернет. VPN позволяет создать зашифрованное соединение между устройствами, обеспечивая безопасный доступ к ресурсам компании или частным данным. Существует множество способов развертывания VPN, однако одним из самых удобных и автоматизированных подходов является использование инструмента Ansible.

Ansible — это инструмент для автоматизации управления конфигурацией и развертывания приложений. Его основное преимущество заключается в возможности описания инфраструктуры в виде кода (Infrastructure as Code), что упрощает процесс настройки и развертывания, минимизируя человеческие ошибки и экономя время.

В этой статье мы рассмотрим, как развернуть VPN с помощью Ansible для начинающих. Мы пройдем по шагам создания простого сценария (playbook) Ansible для установки и настройки OpenVPN — популярного решения для организации VPN.

Шаг 1: Основы Ansible

Что такое Ansible?

Ansible — это агент-ориентированная система управления конфигурацией, которая работает по принципу push (клиент инициирует связь с серверами и отправляет им команды). Он использует SSH для подключения к серверам, что делает его легким и простым в настройке. Ansible использует YAML (Yet Another Markup Language) для написания сценариев (playbooks), которые описывают последовательность действий для конфигурирования системы.

Установка Ansible

Для начала работы с Ansible, его необходимо установить на локальный компьютер. Ansible можно установить на Linux с помощью пакетного менеджера:

sudo apt update
sudo apt install ansible

После установки Ansible можно проверить его работоспособность, используя команду:

ansible --version

Шаг 2: Настройка окружения для Ansible

Перед тем как начать работу с Ansible для развертывания VPN, необходимо подготовить окружение, которое будет включать:

  • Локальную машину (где установлен Ansible),
  • Один или несколько удаленных серверов, где будет развернут VPN.

Создание файла инвентаря

Ansible использует файл инвентаря для управления списком серверов, к которым необходимо подключиться. Этот файл обычно хранится в директории /etc/ansible/hosts, однако для удобства можно создать его локально в проекте.

Пример файла инвентаря (inventory):

[vpn_servers]
vpn1 ansible_host=192.168.1.10 ansible_user=root
vpn2 ansible_host=192.168.1.11 ansible_user=root

Здесь vpn1 и vpn2 — это имена хостов, которые будут использоваться в playbook для идентификации серверов, а ansible_host — это IP-адреса удаленных серверов.

Шаг 3: Создание playbook для установки OpenVPN

Следующий шаг — создание playbook, который автоматизирует установку и настройку OpenVPN на серверах.

Шаг 3.1: Создание структуры playbook

Создадим директорию для нашего проекта:

mkdir vpn-ansible
cd vpn-ansible

Внутри директории создадим playbook install_openvpn.yml, который будет содержать команды для установки OpenVPN на целевых серверах.

Шаг 3.2: Установка OpenVPN с помощью Ansible

Вот пример playbook для установки OpenVPN:

---
- hosts: vpn_servers
 become: yes
 tasks:
   - name: Обновление списка пакетов
     apt:
       update_cache: yes

   - name: Установка OpenVPN
     apt:
       name: openvpn
       state: present

   - name: Установка easy-rsa (необходимого для создания сертификатов)
     apt:
       name: easy-rsa
       state: present

   - name: Создание директории для easy-rsa
     file:
       path: /etc/openvpn/easy-rsa
       state: directory
       mode: 0700

   - name: Копирование файлов easy-rsa
     copy:
       src: /usr/share/easy-rsa/
       dest: /etc/openvpn/easy-rsa/
       remote_src: yes

   - name: Инициализация PKI
     command: ./easyrsa init-pki
     args:
       chdir: /etc/openvpn/easy-rsa

   - name: Генерация корневого сертификата
     command: ./easyrsa build-ca nopass
     args:
       chdir: /etc/openvpn/easy-rsa

   - name: Генерация серверного сертификата и ключа
     command: ./easyrsa gen-req server nopass
     args:
       chdir: /etc/openvpn/easy-rsa

   - name: Подписание серверного сертификата
     command: ./easyrsa sign-req server server
     args:
       chdir: /etc/openvpn/easy-rsa
     notify: restart openvpn

   - name: Создание файла конфигурации для сервера OpenVPN
     template:
       src: templates/server.conf.j2
       dest: /etc/openvpn/server.conf
       mode: 0644
     notify: restart openvpn

 handlers:
   - name: restart openvpn
     service:
       name: openvpn
       state: restarted

Шаг 3.3: Пояснение playbook

  • Обновление списка пакетов: Ansible обновляет кэш пакетов на удаленном сервере.
  • Установка OpenVPN и easy-rsa: Устанавливаются пакеты OpenVPN и easy-rsa, который нужен для генерации сертификатов.
  • Создание директории для easy-rsa: Для хранения файлов конфигурации и сертификатов создается папка.
  • Инициализация PKI: Инициализируется инфраструктура открытых ключей (PKI), необходимая для управления сертификатами.
  • Генерация и подпись сертификатов: Создаются ключи и сертификаты для сервера.
  • Создание конфигурации OpenVPN: Используется шаблон server.conf.j2, который генерирует конфигурационный файл для сервера OpenVPN.

Шаг 4: Настройка шаблона конфигурации OpenVPN

Для правильной работы OpenVPN необходимо создать файл конфигурации. Ansible позволяет использовать шаблоны для динамического создания конфигурационных файлов. Мы создадим файл templates/server.conf.j2:

mkdir templates

И создадим внутри файл server.conf.j2:

port 1194
proto udp
dev tun
ca /etc/openvpn/easy-rsa/pki/ca.crt
cert /etc/openvpn/easy-rsa/pki/issued/server.crt
key /etc/openvpn/easy-rsa/pki/private/server.key
dh /etc/openvpn/easy-rsa/pki/dh.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
keepalive 10 120
cipher AES-256-CBC
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log-append /var/log/openvpn/openvpn.log
verb 3

Этот шаблон описывает основные настройки VPN-сервера: порт, протокол, пути к сертификатам, IP-пул для клиентов и параметры безопасности.

Шаг 5: Создание и подключение клиентов

Шаг 5.1: Генерация клиентских сертификатов

Для подключения к VPN клиентам нужны свои сертификаты. Мы добавим задачу в playbook для генерации клиентских ключей:

- name: Генерация ключа клиента
     command: ./easyrsa gen-req client nopass
     args:
       chdir: /etc/openvpn/easy-rsa

   - name: Подписание сертификата клиента
     command: ./easyrsa sign-req client client
     args:
       chdir: /etc/openvpn/easy-rsa

Шаг 5.2: Конфигурация клиента

После генерации сертификатов нужно создать конфигурационный файл для клиентов. Это можно сделать с помощью шаблона client.conf.j2:

client
dev tun
proto udp
remote your_server_ip 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
cipher AES-256-CBC
verb 3

Этот шаблон содержит минимальные настройки для клиента, которые можно автоматически отправить пользователям.

Шаг 6: Проверка и тестирование

После того как вы настроили VPN, следующим шагом будет проверка его работоспособности. Для этого:

  1. Запустите playbook:ansible-playbook install_openvpn.yml
  2. Проверьте статус OpenVPN на сервере:systemctl status openvpn
  3. Подключитесь к VPN с клиентского устройства, используя сгенер

ированные сертификаты.

Заключение

Развертывание VPN с помощью Ansible позволяет упростить процесс установки и настройки, автоматизируя выполнение повторяющихся задач и минимизируя ошибки. В этой статье мы рассмотрели основные шаги по развертыванию OpenVPN с использованием Ansible. Этот подход можно адаптировать под различные требования, добавляя дополнительные настройки безопасности и интеграцию с другими сервисами.

Настройка VPN — это только начало. С помощью Ansible можно автоматизировать и другие аспекты управления сервером, такие как мониторинг, обновление ПО и управление пользователями.

Комментарии

Пока нет комментариев

Добавить комментарий