publicarray.unbound

Ansible-Rolle-Unbound

Build Status Ansible Galaxy

Hochgradig konfigurierbare Ansible-Rolle für den Unbound DNS-Resolver

  • Ansible 2.2+
  • Kompatibel mit Systemen, die systemd als Init-System nutzen. Neueste Versionen von Ubuntu/Debian, RHEL/CentOS 6.x und FreeBSD

Inhalt

  1. Installation
  2. Beispiele und häufige Anwendungsfälle
  3. Anforderungen
  4. Rollenvariablen
  5. Abhängigkeiten
  6. Beispiel-Playbook
  7. Tests
    1. mit Molecule
    2. mit dem Skript von geerlingguy

Installation

$ ansible-galaxy install publicarray.unbound

Beispiele und häufige Anwendungsfälle

Bitte schaue in das Wiki: Beispiele

Abhängigkeiten

Ansible 2.2+

Anforderungen

Keine

Rollenvariablen

Hier ist eine Liste der Standardvariablen für diese Rolle. Sie sind auch in defaults/main.yml verfügbar. Ich empfehle, die folgenden Variablen in deine Datei group_vars/all/configs zu kopieren und die Dokumentation von Unbound zu betrachten: https://unbound.net/documentation/unbound.conf.html

---
# Ob Unbound aus dem Quellcode kompiliert werden soll oder ob der Paketmanager verwendet werden soll.
unbound_compile: false
# Die Unbound-Version, von der der Quellcode heruntergeladen werden soll <https://nlnetlabs.nl/projects/unbound/download/>
unbound_compile_version: 1.8.0
# Prüfzsummen, um die heruntergeladene Datei zu vergleichen <https://nlnetlabs.nl/projects/unbound/download/>
unbound_compile_sha256: 78f79d6d3b643fdcd74a14fc76542250da886c82f82bc55b51e189663d61b83f
# Die Argumente für den Befehl `./configure` angeben. <!--Solaris-Nutzer sollten --with-solaris-threads verwenden -->
unbound_compile_config: "--enable-dnscrypt --with-username={{unbound.server.username|default(unbound)}} --with-libevent --with-run-dir={{unbound.server.directory}} --with-conf-file={{unbound.server.directory}}/unbound.conf"

# Ob die Optimierungsrichtlinien von <http://unbound.nlnetlabs.nl/documentation/howto_optimise.html> verwendet werden sollen
unbound_optimise: false
# Prozentsatz des physischen Speichers, der für Unbound verwendet werden soll. Nur verwendet, wenn `unbound_optimise` wahr ist
unbound_optimise_memory: 100

## DNS-over-TLS-Einstellungen
# siehe <https://github.com/publicarray/ansible-role-unbound/wiki/Examples#dns-over-tls> für ein Beispiel
# Gemeinsamer Name für das Zertifikat
unbound_tls_domain: example.com
# Methode zur Zertifikatserstellung. Muss eines von: selfsigned oder acme sein.
# Die Option 'acme-cf' (implementiert mit dehydrated) ist veraltet zugunsten der neuen 'acme'-Option (implementiert mit acme.sh)
unbound_tls_cert_provider: selfsigned
## acme.sh Optionen https://github.com/Neilpang/acme.sh/wiki/Options-and-Params
# Option, um das acme.sh-Skript automatisch zu aktualisieren, 0 = false, 1 = true
unbound_tls_acme_auto_upgrade: 0
# Zertifizierungsstelle. Standard ist die Let's Encrypt API v1, v2 kommt am 27. Februar 2018 (--server)
# https://community.letsencrypt.org/t/staging-endpoint-for-acme-v2/49605
# - https://acme-v02.api.letsencrypt.org/directory
unbound_tls_acme_ca: https://acme-v01.api.letsencrypt.org/directory
# Verwende den Testserver für Tests (--staging, --test)
# https://letsencrypt.org/docs/staging-environment/
# HINWEIS: Wenn du von Staging auf Produktion wechselst, musst du 'unbound_tls_acme_force' auf true setzen.
unbound_tls_acme_staging: false
# Zertifikat erstellen (Ablaufdatum ignorieren)
unbound_tls_acme_force: false
# Domainvalidierungsmodus. Verfügbare Modi sind standalone, stateless, tls, apache, dns [dns_cf|dns_dp|dns_cx|/path/to/api/file]
unbound_tls_acme_mode: dns dns_cf
# Setze Umgebungsvariablen, um DNS als Domainvalidierung zu verwenden
# Siehe https://github.com/Neilpang/acme.sh/tree/master/dnsapi#how-to-use-dns-api für Details
unbound_tls_acme_dns_acc:
  # CloudFlare E-Mail-Adresse
  CF_Email:
  # CloudFlare 'Global' API-Schlüssel <https://www.cloudflare.com/a/profile>
  # BITTE DEINEN KLARTEXT-SCHLÜSSEL NICHT EINFÜGEN! <https://docs.ansible.com/ansible/latest/playbooks_vault.html>
  CF_Key:
  # CloudFlare API-URL
  CF_Api: https://api.cloudflare.com/client/v4
# Schlüssellänge [2048, 3072, 4096, 8192 oder ec-256, ec-384] (--keylength, -k)
unbound_tls_acme_keysize: 4096
# Erstelle ein ECC (Elliptic Curve Cryptography) Zertifikat (--ecc)
unbound_tls_acme_ecc: false
# Debug-Informationen ausgeben (--debug)
unbound_tls_acme_debug: false
# Alle zusätzlichen Befehle. https://github.com/Neilpang/acme.sh/wiki/Options-and-Params
# z.B. --dnssleep 300, --webroot /path/to/webroot/
unbound_tls_acme_custom:

### OpenNic <https://www.opennic.org/>
## Die Adresse und der Port für den autoritativen Server z.B. nsd <https://nlnetlabs.nl/projects/nsd/>
# opennic_address: "127.0.0.1@5300"
## Die TLDs, die vom autoritativen Server und OpenNic bereitgestellt werden
# opennic_tlds: [ free, geek, oss, ... ]
#
## Beispiel zur Abfrage von OpenNIC TLDs
##
## - name: Hole OpenNIC TLDs
##   shell: "dig @45.56.115.189 TXT tlds.opennic.glue +short | grep -v '^;' | sed s/\\\"//g | tr \" \" \"\\n\""
##   register: opennic_tlds_temp
##   check_mode: false
## - name: Setze OpenNIC TLDs - https://wiki.opennic.org/opennic/dot
##   set_fact:
##     opennic_tlds: "{{opennic_tlds_temp.stdout_lines}}"

## Hauptkonfiguration von Unbound
# Siehe <https://unbound.net/documentation/unbound.conf.html> für mehr Optionen und detaillierte Beschreibungen
# Hinweis: In Ansible müssen die Variablen Unterstriche (_) anstelle von Bindestrichen (-) als Trennzeichen verwenden
unbound:
  server:
    verbosity: 1
    # interface: [127.0.0.1, "::1"]
    # access_control: [0.0.0.0/0 allow, "::0 allow"]
    # use_syslog: no
    # log_time_ascii: yes
    logfile: unbound.log
    auto_trust_anchor_file: root.key
    root_hints: root.hints
    pidfile: "{{_unbound.pidfile|default('unbound.pid')}}"
    username: "{{_unbound.user}}"
    # Wenn nicht kompiliert wird, verwenden Sie das Standardverzeichnis der Distribution, andernfalls verwenden Sie das Standardverzeichnis von Unbound
    directory: "{{_unbound.conf_dir if unbound_compile == false else \"/usr/local/etc/unbound\"}}"
    chroot: "{{_unbound.conf_dir if unbound_compile == false else \"/usr/local/etc/unbound\"}}"
    ## DNS-over-TLS
    # interface: [0.0.0.0@853, '::0@853']
    # ssl_service_key: "private.key"
    # ssl_service_pem: "certificate.pem"
    # ssl_port: 853
  remote_control:  # unbound-control
    control_enable: false

Abhängigkeiten

Keine

Beispiel-Playbook

---
- hosts: all
  roles:
    - { role: publicarray.unbound }
  vars:
    - unbound_optimise: true
$ ansible-playbook -i dns.example.com, playbook.yml

Tests

mit molecule

Benötigt Python 2.7 und Docker

virtualenv --no-setuptools venv
source venv/bin/activate oder source venv/bin/activate.fish
pip install docker-py molecule
molecule test # --debug - für ausführliche Ausgaben
deactivate

mit geerlingguy's Skript

  1. Installiere und starte Docker.
  2. Lade das Testscripte in tests/test.sh herunter: - wget -O tests/test.sh https://gist.githubusercontent.com/geerlingguy/73ef1e5ee45d8694570f334be385e181/raw/
  3. Mache das Testscripte ausführbar: chmod +x tests/test.sh.
  4. Führe (aus dem Wurzelverzeichnis der Rolle) distro=[distro] playbook=[playbook] ./tests/test.sh aus. Wenn du nicht möchtest, dass der Container nach dem Ausführen des Test-Playbooks automatisch gelöscht wird, füge die folgenden Umgebungsvariablen hinzu: cleanup=false container_id=$(date +%s)

Ein Dankeschön für das Tests Script geht an @geerlingguy

Distributionen:

  • centos7
  • ubuntu1604
  • ubuntu1404
  • debian9
  • debian8

Playbooks: befinden sich im Verzeichnis tests

  • test.yml Teste die Standardkonfiguration
  • compile-test.yml Teste das Kompilieren von Unbound
  • package-test.yml Teste DNS-over-DNS und optimierte Konfiguration

Beispiel in bash/sh:

$ distro=debian9 playbook=package-test.yml cleanup=false container_id=$(date +%s) ./tests/test.sh
$ distro=debian9 playbook=compile-test.yml cleanup=false container_id=$(date +%s) ./tests/test.sh

Beispiel in der Fish-Shell:

$ set -x distro debian9; set -x playbook package-test.yml; set -x cleanup false; set -x container_id (date +%s); ./tests/test.sh
$ set -x distro debian9; set -x playbook compile-test.yml; set -x cleanup false; set -x container_id (date +%s); ./tests/test.sh

Lizenz

MIT/BSD

Autoreninformation

@publicarray

Über das Projekt

Unbound - Validating, recursive, and caching DNS resolver

Installieren
ansible-galaxy install publicarray.unbound
GitHub Repository
Lizenz
mit
Downloads
82