wireguard
Роль Ansible для WireGuard
Это простая роль для установки 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
ansible-galaxy install oukooveu/ansible-role-wireguard