tinc

Tinc

Статус ежедневного теста ветки

Этот ролик устанавливает tinc в звёздной или кольцевой топологии.

Узел, указанный в группе [tinc_nodes], представляет собой полный список узлов для применения/установки роли.

Узлы из [tinc_spine_nodes] являются "основными" узлами, к которым подключаются все остальные узлы.

Узлы в [tinc_leaf_nodes] подключаются только к основным узлам. Устройства за NAT будут примером таких узлов.

Если все узлы [tinc_nodes] входят в [tinc_spine_nodes], вы получаете более "кольцевую" топологию. Если у вас есть один узел в [tinc_spine_nodes], у вас будет более "звёздчатая" топология.

Требования

  • Ubuntu 18.04 / CentOS 7 (или выше) / OpenWRT
  • На CentOS и выше необходимо предварительно настроить репозиторий EPEL.

Для этого вы можете выполнить следующее:

yum install epel-release || dnf install epel-release
yum update || dnf update

Переменные роли

  • tinc_key_size: Размер сгенерированных ключей (По умолчанию: 4096)
  • tinc_address_family может быть ipv4/ipv6/any (или неопределённой)
  • tinc_mode может быть router, switch или hub. (См. https://www.tinc-vpn.org/documentation/tinc.conf.5). (По умолчанию: router)
  • tinc_netname: Имя сети tinc
  • tinc_vpn_ip: IP, который будет назначен одному конечному устройству VPN. Используйте переменные хоста для установки этого значения.
  • tinc_vpn_cidr: CIDR, используемый в сети tinc (По умолчанию: /24, или принудительно /32 в режиме маршрутизатора).
  • tinc_vpn_interface: Устройство, которое будет использовать tinc, в случае, если существует несколько туннельных устройств (По умолчанию: tun0)
  • tinc_control_plane_bind_ip: IP для привязки службы tincd (По умолчанию: ansible_default_ipv4.address)

Инвентарь должен устанавливать tinc_control_plane_bind_ip (для основных узлов) и/или tinc_vpn_ip (для основных и крайних узлов). Пожалуйста, посмотрите на файлы задач.

Примеры

Режим маршрутизатора, кольцевая топология

(Кратко) Инвентарь:

[tinc_nodes:children]
tinc_spine_nodes
tinc_leaf_nodes

[tinc_spine_nodes]
node1 tinc_vpn_ip=10.10.0.11
node2 tinc_vpn_ip=10.10.0.12
node3 tinc_vpn_ip=10.10.0.13

[tinc_leaf_nodes]
node1
node2
node3

Режим маршрутизатора, звёздная топология

(Подробный) Инвентарь:

[tinc_nodes]
node1
node2
node3

[tinc_spine_nodes]
node1

[tinc_leaf_nodes]
node1
node2
node3

Групповые переменные для tinc_nodes:

tinc_netname: mynetname
tinc_vpn_interface: tun0

Переменные хоста для основного узла, node1:

tinc_control_plane_bind_ip: "{{ ansible_eth0.ipv4.address | default(ansible_default_ipv4.address) }}"
tinc_vpn_ip: 10.10.0.10

Переменные хоста для крайнего узла, node2:

tinc_vpn_ip: 10.10.0.11

Переменные хоста для крайнего узла, node3:

tinc_vpn_ip: 10.10.0.12

Зависимости

Нет

Пример плейбука

См. https://raw.githubusercontent.com/evrardjp/ansible-tinc/master/molecule/default/converge.yml

Не забудьте задать необходимые переменные в вашем инвентаре (см. выше).

Тестирование

Тесты основаны на фреймворке Ansible Molecule, который:

  • проверяет синтаксис роли
  • запускает несколько контейнеров с разными ОС (только для тестов. Мы не смешиваем версии Tinc в продакшен)
  • применяет эту роль к каждому контейнеру
  • выполняет тесты идемпотентности (на убедитесь, что второй запуск не внесет неожиданные изменения)
  • проверяет, что каждый подготовленный узел может пинговать другие узлы по VPN

Тесты запускаются в действиях GitHub при PR и каждый день. Кроме того, вы можете выполнять их на локальной машине.

Зависимости, которые необходимо установить для запуска тестов:

  • Ansible
  • Docker
  • Molecule с драйвером molecule-docker, или tox.

Запуск тестов вручную, используя molecule напрямую

Вы можете запустить существующие тесты для звёздной и кольцевой топологи:

cd ansible-tinc
molecule test # это запустит тесты по умолчанию для сценария кольцо
molecule test -s star

Команда 'molecule test' выполняет полный сценарий: 'create', 'converge', 'check idempotency', 'verify' и 'destroy'. Часто вы не хотите, чтобы контейнер немедленно уничтожался и нужен доступ к нему для отладки. Для этого может быть полезно заменить 'molecule test' на:

molecule converge # это создаст контейнеры и применит роль
molecule verify # выполнит тесты, описанные в molecule/default/verify.yml

# после этих двух шагов у вас будут запущенные Docker контейнеры
# вы можете получить к ним доступ обычными командами 'docker ps', 'docker exec' и т. д.

molecule destroy

Запуск тестов вручную, используя tox

tox - это среда запуска тестов для Python. Она установит все необходимые зависимости Python (ansible, molecule[docker]) в виртуальной среде.

Чтобы запустить тест:

tox -e ansible-<version>-<tinc scenario>

См. поддерживаемые значения для version в tox.ini. Текущие тестируемые сценарии для tinc - это ring или star. Позиционные аргументы будут переданы команде molecule test.

Например, чтобы запустить тест для ansible-2.9 с кольцевой топологией и предотвратить разрушение среды:

tox -e ansible-2.9-ring -- --destroy=never

Как протестировать роль с новой ОС

Добавьте новый образ в molecule/default/molecule.yml и molecule/star/molecule.yml, следуя существующим примерам. Файлы похожи, за исключением переменных scenario.name и groups. Следующие моменты могут быть полезны:

  • код privileged: true с command: /sbin/init включает systemd, если контейнер это поддерживает. Не забудьте, что привилегированные контейнеры в вашей системе могут представлять риск.
  • Docker-изображения могут не содержать стандартного программного обеспечения, поэтому molecule/default/converge.yml заботится об установке необходимых зависимостей.
  • согласно https://github.com/ansible-community/molecule/issues/959 Docker не позволяет изменять /etc/hosts в контейнере. Чтобы обойти это, мы пропускаем один шаг с тегом molecule-notest в tasks/tinc_configure.yml и изменяем /etc/hosts во время создания контейнера - следуя соответствующим директивам в molecule/default/molecule.yml.

Лицензия

Apache2

Информация об авторе

Жан-Филипп Эврар

О проекте

Role to install tinc vpn in multiple topologies

Установить
ansible-galaxy install evrardjp/ansible-tinc
Лицензия
apache-2.0
Загрузки
991
Владелец