evrardjp.tinc
Tinc
Ta rola instaluje tinc w topologii gwiazdy lub pierścienia.
Węzły wymienione w grupie [tinc_nodes] to pełna lista węzłów do zastosowania/zainstalowania roli.
Węzły będące częścią [tinc_spine_nodes] to węzły "rdzeniowe", do których wszystkie węzły się łączą.
Węzły w [tinc_leaf_nodes] łączą się tylko z węzłami rdzeniowymi. Przykładem mogą być urządzenia stojące za NAT.
Jeśli wszystkie [tinc_nodes] są częścią [tinc_spine_nodes], masz bardziej "pierścieniową" topologię. Jeśli masz jeden węzeł w [tinc_spine_nodes], masz bardziej "gwiaździstą" topologię.
Wymagania
- Ubuntu 18.04 / CentOS 7 (lub nowszy) / OpenWRT
- W przypadku CentOS i nowszych, repozytorium EPEL musi być skonfigurowane wcześniej.
Aby to zrobić, możesz uruchomić następujące polecenia:
yum install epel-release || dnf install epel-release
yum update || dnf update
Zmienne Roli
- tinc_key_size: Rozmiar generowanych kluczy (Domyślnie:
4096
) - tinc_address_family może być ipv4/ipv6/any (lub nieokreślone)
- tinc_mode może być router, switch lub hub. (Zobacz https://www.tinc-vpn.org/documentation/tinc.conf.5). (Domyślnie:
router
) - tinc_netname: Nazwa sieci tinc
- tinc_vpn_ip: IP do przypisania jednemu punktowi końcowemu VPN. Użyj zmiennych hosta, aby to ustawić.
- tinc_vpn_cidr: CIDR używany w sieci tinc (Domyślnie:
/24
, lub wymuszaj /32 w trybie routera). - tinc_vpn_interface: Urządzenie do użycia przez tinc, w przypadku, gdy jest wiele urządzeń tun (Domyślnie:
tun0
) - tinc_control_plane_bind_ip: IP, do którego ma przywiązać się usługa tincd (Domyślnie:
ansible_default_ipv4.address
)
Inwentarz musi ustawić tinc_control_plane_bind_ip (dla rdzenia) i/lub tinc_vpn_ip (dla rdzenia i węzłów brzegowych). Proszę zapoznać się z plikami zadań.
Przykłady
Tryb routera, topologia pierścienia
(Krótki) Inwentarz:
[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
Tryb routera, topologia gwiazdy
(Szczegółowy) Inwentarz:
[tinc_nodes]
node1
node2
node3
[tinc_spine_nodes]
node1
[tinc_leaf_nodes]
node1
node2
node3
Zmienne grupowe dla tinc_nodes
:
tinc_netname: mynetname
tinc_vpn_interface: tun0
Zmienne hosta dla węzła rdzeniowego, node1
:
tinc_control_plane_bind_ip: "{{ ansible_eth0.ipv4.address | default(ansible_default_ipv4.address) }}"
tinc_vpn_ip: 10.10.0.10
Zmienne hosta dla węzła brzegowego, node2
:
tinc_vpn_ip: 10.10.0.11
Zmienne hosta dla węzła brzegowego, node3
:
tinc_vpn_ip: 10.10.0.12
Zależności
Brak
Przykładowy Playbook
Zobacz https://raw.githubusercontent.com/evrardjp/ansible-tinc/master/molecule/default/converge.yml
Nie zapomnij ustawić niezbędnych zmiennych w swoim inwentarzu (patrz wyżej).
Testowanie
Testy bazują na frameworku Ansible Molecule, który:
- sprawdza składnię roli
- uruchamia kilka kontenerów z różnymi systemami operacyjnymi (tylko do testów. Nie mieszamy wersji Tinc w produkcji)
- stosuje tę rolę do każdego kontenera
- przeprowadza testy idempotencji (upewnia się, że drugie uruchomienie nie wprowadzi nieoczekiwanych zmian)
- verifies that each prepared node able to ping other nodes over VPN
Testy uruchamiane są w akcjach githuba na PR i codziennie. Dodatkowo możesz je wykonać na lokalnej maszynie.
Zależności, które musisz mieć zainstalowane do uruchomienia testów:
Uruchamianie testów ręcznie, korzystając bezpośrednio z molecule
Możesz uruchomić istniejące testy dla topologii gwiazdy i pierścienia:
cd ansible-tinc
molecule test # to uruchomi domyślne testy dla scenariusza pierścienia
molecule test -s star
Polecenie 'molecule test' wykonuje pełny scenariusz: 'create', 'converge', 'check idempotency', 'verify' oraz 'destroy'. Często nie chcesz, aby kontener został natychmiast zniszczony i potrzebujesz do niego dostępu w celu debugowania. W tym celu może być przydatne zastąpienie 'molecule test' na:
molecule converge # to tworzy kontenery i stosuje rolę
molecule verify # uruchamia testy opisane w molecule/default/verify.yml
# po obu krokach masz aktywne kontenery Docker
# możesz uzyskać do nich dostęp przy użyciu zwykłych poleceń 'docker ps', 'docker exec' itd.
molecule destroy
Uruchamianie testów ręcznie, korzystając z tox
tox jest runnerem testów dla Pythona. Zainstaluje wszystkie niezbędne zależności Pythona (ansible, molecule[docker]) w wirtualnym środowisku.
Aby uruchomić test:
tox -e ansible-<version>-<tinc scenario>
Zobacz obsługiwane wartości dla version
w tox.ini
.
Aktualnie testowalne scenariusze dla tinc to pierścień
lub gwiazda
.
Argumenty pozycyjne będą przekazywane do polecenia molecule test
.
Na przykład, aby uruchomić test dla ansible-2.9, z topologią pierścienia i zapobiec zniszczeniu przez molecule środowiska:
tox -e ansible-2.9-ring -- --destroy=never
Jak testować rolę z nowym systemem operacyjnym
dodaj nowy obraz do molecule/default/molecule.yml i molecule/star/molecule.yml, naśladując istniejące przykłady. Pliki są podobne, z wyjątkiem zmiennych scenario.name
i groups
. Następujące wskazówki mogą być pomocne:
- kod
privileged: true
zcommand: /sbin/init
włącza systemd, jeśli kontener to wspiera. Pamiętaj, że prywatne kontenery w Twoim systemie mogą być zagrożeniem. - Obrazy Docker nie mają niektórego standardowego oprogramowania, dlatego molecule/default/converge.yml zajmuje się instalacją niezbędnych zależności.
- zgodnie z https://github.com/ansible-community/molecule/issues/959 Docker nie pozwala na modyfikację /etc/hosts w kontenerze. Aby to obejść, pomijamy jeden krok z tagiem
molecule-notest
w tasks/tinc_configure.yml i modyfikujemy /etc/hosts podczas tworzenia kontenera — zgodnie z odpowiednimi dyrektywami w molecule/default/molecule.yml.
Licencja
Apache2
Informacje o autorze
Jean-Philippe Evrard
ansible-galaxy install evrardjp.tinc