wireguard_vpn

wireguard_vpn

Настройка сервиса VPN Wireguard "клиент-сервер" и создание конфигурационных файлов для клиентов.

Описание

Роль настраивает сервис VPN на основе Wireguard на Linux с следующими отличительными особенностями:

  • Вся сетевая конфигурация управляется с помощью systemd-networkd
  • IPv4 сети в туннеле используют адресацию RFC 1918 и NAT
  • IPv6 сети в туннеле используют полностью маршрутизируемую подсеть и проксирование NDP
  • Поддержка предварительно разделяемых ключей Wireguard
  • Генерация файлов конфигурации клиентов в формате .conf для wg-quick(8)
  • Поддержка всех опций конфигурации wg-quick(8)

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

vpn_interface: wg1

# генерируется с помощью `wg genkey` ***защитить с помощью ansible-vault***
# vpn_private_key: "iP/lnL/zhicPMnAphlT6qAciKusTmR2X5utTAo7u5Ug="  # ОБЯЗАТЕЛЬНО

# генерируется с помощью `wg pubkey` из вышеуказанного
# vpn_public_key: "OBGsZZxxX0jcehmFJc0L6v7FX3PMnVDFgdgpjJFU0k4="   # ОБЯЗАТЕЛЬНО

## Порт UDP для прослушивания в открытом интернете
# vpn_listen_port: 1194  # ОБЯЗАТЕЛЬНО

## Адреса в внутреннем туннеле VPN
# vpn_address4: "192.168.2.252/24"            # хотя бы один ОБЯЗАТЕЛЕН      
# vpn_address6: '2a05:1111:0:3:8000::252/65'  # хотя бы один ОБЯЗАТЕЛЕН

## необходимо для настройки записей NDP для клиентов IPv6 VPN
# vpn_ndp_config: /etc/systemd/network/eth0.network  # НЕОБЯЗАТЕЛЬНО

## DNS-резолверы, которые будут установлены на клиентах для использования с VPN
# vpn_dns_resolvers: ["9.9.9.9", "2620:fe::fe"]  # НЕОБЯЗАТЕЛЬНО массив

# включает генерацию файлов .conf для утилиты wg-quick клиентов
# vpn_clients_dir: /root/wireguard  # НЕОБЯЗАТЕЛЬНО

# vpn_clients:                                # НЕОБЯЗАТЕЛЬНО массив
#   - name: client1                           # ОБЯЗАТЕЛЬНО
#     address4: 192.168.2.110/32              # хотя бы один из address4, address6 ОБЯЗАТЕЛЕН
#     address6: "2a05:1111:0:3:8000::110/80"  # хотя бы один из address4, address6 ОБЯЗАТЕЛЕН
#     # нужно только если сгенерированные файлы .config должны содержать уже включенный закрытый ключ
#     # в противном случае они будут содержать заполнители
#     # генерируется с помощью `wg genkey` ***защитить с помощью ansible-vault***
#     # private_key: "+Noalz2HL9+nYFQpplZF2dYMmc7+MaXGuxMgc/QBbXU="  # НЕОБЯЗАТЕЛЬНО
#     # генерируется с помощью `wg pubkey` из вышеуказанного
#     public_key: "RfDKFurwFo/ytXd9Ko5oEy7I7H4hjNBiT1bc1t+V4Wc="              # ОБЯЗАТЕЛЬНО
#     # маршрут туннеля, который необходимо установить на стороне клиента
#     # allowed_ips: ["192.168.2.1/32"]         # НЕОБЯЗАТЕЛЬНО
#     # генерируется с помощью `wg genpsk` ***защитить с помощью ansible-vault***
#     # psk: "151ODHNbvmiK/ox+2ndnZbVcfrIMRJjFjHXlb7o3ZeI="  # НЕОБЯЗАТЕЛЬНО
#     # mtu, table, preup, postdown - по wg-quick(8)

Предупреждение: всегда используйте ansible-vault для защиты закрытых ключей и предварительно разделяемых секретов в ваших файлах переменных.

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

- hosts: vpn
  roles:
    - role: kravietz.wireguard_vpn
      vpn_private_key: "wIfnNpua6YlD4XzVGUvOCVknCo1LzAF6iGkp7Tho43o="
      vpn_public_key: "+RHdC7oc8O/dojCOMf7CtYBZc5pA2DZPiE4dNRHHhlw="
      vpn_listen_port: 1194
      vpn_address4: "192.168.1.1/24"
      vpn_address6: '2a05:1111:0:3:8000::1/65'
      vpn_clients_dir: /root/wireguard
      vpn_clients:
        - name: client1
          address4: 192.168.1.100/32
          address6: "2a05:1111:0:3:8000::100/128"
          private_key: "iJgcqx21xGETtzFIIdKfD/LvMqswJ2LWUiFPKUBLenw="
          public_key: "T4QbCHfGKLYFdmFeXVfDHP5AYpQ2AZapHIw+ZiCDIHs="

Лицензия

GPLv3

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

Пауль Кравчук https://krvtz.net/

О проекте

Configure a IPv4/IPv6 Wireguard-based VPN service using `systemd-networkd` and generate client config files.

Установить
ansible-galaxy install kravietz/wireguard_vpn
Лицензия
Unknown
Загрузки
5314
Владелец
Information security, DevOps and DevSecOps professional from Poland living in the UK