wireguard

Роль Ansible для WireGuard

Molecule

Это простая роль для установки WireGuard и настройки полной сетевой связности между всеми хостами по умолчанию.

Роль была вдохновлена этой реализацией, но из-за того, что она не поддерживается и PR не принимаются, было решено переписать её с нуля.

Требования

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

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

Переменная Описание Значение по умолчанию
wireguard_vpn_ip приватный адрес Не указано, должно быть предоставлено через переменные хоста
wireguard_port порт для прослушивания 51820
wireguard_path путь к конфигурационным файлам /etc/wireguard
wireguard_public_ip публичный адрес {{ ansible_default_ipv4.address }}
wireguard_post_up скрипт после поднятия Не указано
wireguard_post_down скрипт после падения Не указано
wireguard_network топология сети, см. примеры ниже {}
wireguard_network_name имя интерфейса wg0
wireguard_additional_peers дополнительные пиры []
wireguard_mtu_enabled управлять опцией MTU false
wireguard_mtu значение опции MTU Не указано
wireguard_fw_mark_enabled управлять опцией FwMark false
wireguard_fw_mark значение опции FwMark {{ wireguard_port }}
wireguard_hosts_enabled добавить себя и пиры WireGuard в /etc/hosts false
wireguard_hosts_domain домен для записей /etc/hosts wg.internal

Опция FwMark WireGuard может быть полезна, когда вам нужно фильтровать весь незашифрованный трафик, например:

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

Примеры плейбуков

полносетевой трафик

- name: настройка полной сетевой связности WireGuard
  hosts: cluster
  roles:
    - role: oukooveu.wireguard

пользовательская топология сети с дополнительным пиром

- name: настройка пользовательской сети 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: 'комментарий'
  roles:
    - role: oukooveu.wireguard

В приведённом примере хосты node1 и node4 имеют доступ ко всем хостам, а хосты node2 и node3 не имеют доступа друг к другу. Конфигурация должна быть симметричной (если доступ для одного узла определён, он должен быть определён и для другого узла), и дополнительных проверок на это нет, будьте осторожны.

Тесты Molecule

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

python -m venv .venv
. .venv/bin/activate
pip install -r molecule/default/requirements.txt
molecule test

Чтобы запустить тесты для нестандартного образа (debian:11), установите переменную окружения MOLECULE_IMAGE на соответствующее значение, например:

export MOLECULE_IMAGE=rockylinux:9

Чтобы очистить тестовую среду, выполните molecule destroy.

Лицензия

Apache 2.0

О проекте

wireguard ansible role

Установить
ansible-galaxy install oukooveu/ansible-role-wireguard
Лицензия
Unknown
Загрузки
151
Владелец