oukooveu.wireguard
Rola Ansible WireGuard
To jest prosta rola do instalacji WireGuard i skonfigurowania pełnej łączności mesh (domyślnie) pomiędzy wszystkimi hostami w playbooku.
Rola została zainspirowana tą implementacją, jednak z powodu jej nieaktualności oraz braku akceptacji pull requestów postanowiono napisać ją od początku.
Wymagania
Nie ma specjalnych wymagań. Nie ma domyślnej wartości dla wireguard_vpn_ip
, ta zmienna musi być zdefiniowana dla każdego hosta.
Zmienne roli
Zmienna | Opis | Wartość domyślna |
---|---|---|
wireguard_vpn_ip | adres prywatny | N/A, musi być podany w zmiennych hosta |
wireguard_port | port do nasłuchu | 51820 |
wireguard_path | ścieżka do plików konfiguracyjnych | /etc/wireguard |
wireguard_public_ip | adres publiczny | {{ ansible_default_ipv4.address }} |
wireguard_post_up | skrypt po uruchomieniu | N/A |
wireguard_post_down | skrypt po zatrzymaniu | N/A |
wireguard_network | topologia sieci, zobacz przykłady poniżej | {} |
wireguard_network_name | nazwa interfejsu | wg0 |
wireguard_additional_peers | dodatkowi partnerzy | [] |
wireguard_mtu_enabled | zarządzaj opcją MTU |
false |
wireguard_mtu | wartość opcji MTU |
N/A |
wireguard_fw_mark_enabled | zarządzaj opcją FwMark |
false |
wireguard_fw_mark | wartość opcji FwMark |
{{ wireguard_port }} |
wireguard_hosts_enabled | dodaj siebie i partnerów WireGuard do /etc/hosts | false |
wireguard_hosts_domain | domena dla rekordów /etc/hosts | wg.internal |
Opcja FwMark
w WireGuard może być przydatna, gdy potrzebujesz odfiltrować cały niezaszyfrowany ruch, na przykład:
PostUp = iptables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
PreDown = iptables -D OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
Przykłady playbooków
pełna sieć mesh
- name: konfiguracja sieci full-mesh w WireGuard
hosts: cluster
roles:
- role: oukooveu.wireguard
niestandardowa topologia sieci z dodatkowym partnerem
- name: konfiguracja niestandardowej sieci WireGuard
hosts: cluster
vars:
wireguard_network:
node1:
- node2
- node3
- node4
node2:
- node1
- node4
node3:
- node1
- node4
node4:
- node1
- node2
- node3
wireguard_additional_peers:
- ip: 192.168.100.1
key: s3cr3t
endpoint: 10.0.100.1
keepalive: 15
comment: 'komentarz'
roles:
- role: oukooveu.wireguard
W powyższym przykładzie hosty node1
i node4
mają dostęp do wszystkich hostów, a hosty node2
i node3
nie mają dostępu do siebie nawzajem. Konfiguracja powinna być symetryczna (jeśli łączność dla jednego węzła jest określona, to powinna być określona także dla drugiego węzła) i nie ma dodatkowych sprawdzeń w tym zakresie, więc bądź ostrożny.
Testy Molecule
Aby uruchomić testy lokalnie:
python -m venv .venv
. .venv/bin/activate
pip install -r molecule/default/requirements.txt
molecule test
Aby uruchomić testy dla niestandardowego obrazu (debian:11
), ustaw zmienną środowiskową MOLECULE_IMAGE
na odpowiednią wartość, na przykład:
export MOLECULE_IMAGE=rockylinux:9
Aby usunąć środowisko testowe, uruchom molecule destroy
.
Licencja
Apache 2.0
ansible-galaxy install oukooveu.wireguard