authsec.pihole

Pihole

Rol de Pi-hole. Esto instalará Pi-hole®: Un agujero negro para anuncios en Internet para ti.

También te ayudará a administrar Pi-hole utilizando un archivo CSV simple que puedes editar con tu editor favorito.

Requisitos

Un host que esté ejecutando Ubuntu/Debian/Photon OS o, por ejemplo, una Raspberry Pi que ejecute Raspberry Pi OS (Lite).

Si encuentras problemas, consultar la documentación de Pi-hole puede ser útil.

Archivo CSV del host

La configuración de Pi-hole se realiza mediante un archivo CSV. Esto te da una buena visión general y hace que sea fácil manejar tu entorno.

El rol incluye un archivo CSV de ejemplo completo en la carpeta files para que lo revises.

Las siguientes líneas muestran la configuración de dhcp-option que se escribirá en el archivo de configuración de dnsmasq. Las líneas etiquetan una dirección IP como el servidor DNS basado en vm y el servidor DNS basado en Raspberry Pi que se ejecuta en una Raspberry Pi real.

Configurar opciones DHCP

hostname,domainname,ip_address,static,mac_address,dhcp_option,type,comment
,,,,,"tag:vm-dns,option:dns-server,192.168.30.253","<<tag>>","Establece el valor de la opción de configuración dhcp-option, aquí qué servidor DNS usar"
,,,,,"tag:pi-dns,option:dns-server,192.168.30.254","<<tag>>","Establece el valor de la opción de configuración dhcp-option, aquí qué servidor DNS usar"

Nota: Si estás configurando múltiples servidores DNS aquí, probablemente querrás establecer la opción riv_pihole_dns_default_tag al configurar tu instalación para establecer un servidor DNS predeterminado para clientes sin una configuración específica.

Configurar mapeo de IP/Host

La configuración a continuación configura el host con el nombre slash para recibir una dirección IP de 192.168.128.2 si esa dirección está disponible. Si ya se le ha otorgado un arrendamiento DHCP a otra máquina, se asignará una nueva dirección IP. También identifica la máquina como un host físico.

hostname,domainname,ip_address,static,mac_address,dhcp_option,type,comment
slash,example.net,192.168.128.2,true,,,"<<physical>>","Host ESXi"

Configurar dirección IP estática

Si deseas asegurarte de que la dirección IP se asigne solo a un nombre de host específico, puedes establecer el campo static en true para lograrlo. Establecer esta opción indicará a dnsmasq que ignore las solicitudes DHCP de cualquier host llamado vmhole, como se muestra en el ejemplo a continuación. El tipo también se identifica como una máquina virtual.

hostname,domainname,ip_address,static,mac_address,dhcp_option,type,comment
vmhole,example.net,192.168.128.253,true,,,"<<virtual>>","Servidor DNS virtual de Pi-hole"

Configurar mapeo de dirección MAC/dirección IP

Para asignar una dirección IP y un nombre de host específico a un dispositivo especial usando la dirección MAC del dispositivo, utiliza la siguiente entrada en la base de datos de configuración CSV.

hostname,domainname,ip_address,static,mac_address,dhcp_option,type,comment
blib,example.net,192.168.128.18,,00:0c:29:43:37:dc,,"<<virtual>>","Servidor DNS virtual de Pi-hole"

Establecer un servidor DNS diferente

Configurar un servidor DNS especial para algunos dispositivos se puede lograr proporcionando la opción DHCP apropiada al definir el mapeo. El siguiente ejemplo muestra cómo establecer el servidor DNS vm-dns para el host photon.

hostname,domainname,ip_address,static,mac_address,dhcp_option,type,comment
photon,example.net,192.168.128.19,,00:0c:29:51:80:1f,"vm-dns","VM proxy basada en una imagen docker, usando el servidor vm-dns"

Variables de Rol

El rol utiliza las siguientes variables:

Variable Predeterminado Descripción
riv_pihole_admin_password_generated {{ lookup('password', '/dev/null length=15 chars=ascii_letters') }} Esta variable establece la contraseña para la interfaz de usuario web. Si no se establece ninguna contraseña, se generará automáticamente. El valor de la contraseña se muestra en texto sencillo en el último paso si se establece la variable riv_pihole_show_summary en true.
riv_pihole_dns_default_tag Esta variable establece una etiqueta DHCP que te permite especificar un servidor DNS predeterminado para los hosts no listados en el archivo de configuración CSV.
riv_pihole_show_summary false Si se establece en true, el último paso mostrará la contraseña (generada) en texto plano junto con información útil como la dirección IP y el nombre del host en el que se instaló Pi-hole.
riv_pihole_docker_network host La red a la que se conectan los contenedores Docker. Si deseas usar DHCP, debes conectarte a la red del host.
riv_pihole_docker_purge_networks yes Eliminar la red creada cuando se apague el contenedor Docker.
riv_pihole_dhcp_active false Habilitar o deshabilitar el servidor DHCP incorporado. Si deseas usar Pi-hole como servidor DHCP, debes activarlo.
riv_pihole_dhcp_leasetime 24h El tiempo de arrendamiento predeterminado a establecer al otorgar una dirección IP a un cliente.
riv_pihole_dhcp_start 192.168.1.2 El rango inicial del servidor DHCP incorporado.
riv_pihole_dhcp_end 192.168.1.253 La última dirección del servidor DHCP incorporado.
riv_pihole_dhcp_router 192.168.1.1 El router que se debe anunciar a los clientes que obtienen una dirección IP.
riv_pihole_domain example.net El dominio de tu red local.
riv_pihole_interface eth0 La interfaz a la que se vincularán los procesos dentro de Pi-hole.
riv_pihole_dhcp_ipv6 false Habilitar soporte para IPv6 en DHCP.
riv_pihole_dhcp_rapid_commit false Interruptor de control de la opción de compromiso rápido.
riv_pihole_dnsmasq_listening all La interfaz a la que dnsmasq debería escuchar.
riv_pihole_query_logging true Registrar consultas DNS.
riv_pihole_install_web_server true Instalar el servidor web integrado.
riv_pihole_install_web_interface true Instalar la interfaz web.
riv_pihole_lighttpd_enabled Habilitar lighttpd.
riv_pihole_ipv4_address {{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] | default(ansible_host) }} La dirección IPv4 en la que deseas que escuche Pi-Hole.
riv_pihole_ipv6_address La dirección IPv6 en la que deseas que escuche Pi-Hole.
riv_pihole_dns_bogus_priv Controlar búsquedas inversas privadas erróneas.
riv_pihole_dns_fqdn_required Controlar si el nombre no calificado se pone en DNS también.
riv_pihole_dnssec Controlar DNSSEC.
riv_pihole_rev_server_enabled Habilitar el reenvío DNS condicional para la resolución del nombre del dispositivo.
riv_pihole_rev_server_cidr Si el reenvío condicional está habilitado, establece la zona DNS inversa (por ejemplo, 192.168.0.0/24).
riv_pihole_rev_server_domain Si el reenvío condicional está habilitado, establece el dominio del router de la red local (por ejemplo, example.net).
riv_pihole_rev_server_target Si el reenvío condicional está habilitado, establece la IP del router de la red local.
riv_pihole_docker_image pihole/pihole:latest Qué imagen de docker bajar. Puedes, por ejemplo, especificar una versión.
riv_pihole_configuration_base_folder /opt/pihole Dónde deseas que viva tu configuración en el host objetivo.
riv_pihole_etc_pihole_folder {{ riv_pihole_configuration_base_folder }}/pihole Controlar la posición de la carpeta pihole.
riv_pihole_etc_dnsmasq_folder {{ riv_pihole_configuration_base_folder }}/dnsmasq.d Controlar la posición de la carpeta dnsmasq.d.
riv_pihole_sys_dns_server1 127.0.0.1 Servidores DNS del sistema para Pi-hole. El primero DEBE SER 127.0.0.1.
riv_pihole_sys_dns_server2 8.8.8.8 Servidor DNS del sistema para Pi-hole.
riv_pihole_dns_server1 1.1.1.1 Servidor DNS utilizado dentro del contenedor Docker.
riv_pihole_dns_server2 8.8.8.8 Servidor DNS utilizado dentro del contenedor Docker.
riv_pihole_serverip {{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] | default(ansible_host) }} La dirección IP del host de Pi-hole.
riv_pihole_timezone Europe/Berlin Tu zona horaria.
riv_pihole_open_firewall_ports true Establecer en false si no deseas que el rol abra los puertos del cortafuegos requeridos.
riv_pihole_dns_db_configuration_file {{ role_path }}/files/mappings.csv La ubicación del archivo de configuración DNS. El archivo predeterminado señalado debe ser copiado y adaptado apropiadamente.

Ejemplo de Playbook

El siguiente ejemplo muestra un playbook que puedes usar para configurar Pi-hole en una máquina virtual basada en Photon OS que se refleja en el archivo de inventario.

Estructura de carpetas

La estructura de carpetas es la siguiente (la carpeta de roles se creará automáticamente más tarde):

|-- dns-db.csv
|-- inventory
|-- pihole-vm.yml
`-- roles
    `-- authsec.pihole
        |-- defaults
        |   `-- main.yml
        |-- files
        |   `-- mappings.csv
        |-- LICENSE
        |-- meta
        |   `-- main.yml
        |-- README.md
        |-- tasks
        |   |-- checkssh-photonos.yml
        |   |-- checkssh.yml
        |   |-- firewall-iptables.yml
        |   |-- install-apt.yml
        |   |-- install-photonos.yml
        |   `-- main.yml
        `-- templates
            |-- 02-pihole-dhcp.conf.j2
            |-- 10-pihole-custom-static.conf.j2
            `-- setupVars.conf.j2

Importar Rol

Puedes importar el rol en tu proyecto usando:

#> ansible-galaxy install -p roles authsec.pihole

Crear base de datos

Esta es una copia de la base de datos de ejemplo en roles/authsec.pihole/files.

dns-db.csv:

hostname,domainname,ip_address,static,mac_address,dhcp_option,comment
,,,,,"tag:vm-dns,option:dns-server,192.168.128.253","Establece el valor de la opción de configuración dhcp-option"
,,,,,"tag:pi-dns,option:dns-server,192.168.128.254","Establece el valor de la opción de configuración dhcp-option"
slash,example.net,192.168.128.2,,,,"Host ESXi"
mohh,example.net,192.168.128.5,,,,"El Cerebro (Servidor vCenter)"
blib,example.net,192.168.128.18,,00:0c:29:43:37:dc,"pi-dns","VM usando servidor DNS (y DHCP) basado en Raspberry Pi"
photon,example.net,192.168.128.19,,00:0c:29:51:80:1f,"vm-dns","VM usando servidor DNS basado en VM"
vmhole,example.net,192.168.128.253,true,,,"Servidor DNS virtual de Pi-hole"
pihole,example.net,192.168.128.254,,,,"Servidor DNS y DHCP Pi-Hole respaldado por Raspberry Pi para esta red, basado en docker y administrado por ansible"

inventario:

[dns_vms]
vmhole.example.net ansible_host=192.168.128.253 ansible_user=pihole ansible_become_method='su' ansible_become_password='kevin.is.dead' ansible_python_interpreter=/usr/bin/python3

pihole-vm.yml:

---
# Configurar una máquina para ejecutar pi-hole dentro de un contenedor docker
- hosts: dns_vms
  gather_facts: yes
  become: yes
  tasks: 
    - include_role: 
        name: authsec.pihole
      vars:
        # true|false
        riv_pihole_admin_password: "secure.me"
        riv_pihole_dhcp_active: "false"
        riv_pihole_dhcp_start: "192.168.128.8"
        riv_pihole_dhcp_end: "192.168.128.252"
        riv_pihole_dhcp_router: "192.168.128.1"
        riv_pihole_domain: "example.net"
        riv_pihole_show_summary: true
        riv_pihole_dns_db_configuration_file: "dns-db.csv"

Ejecutar ansible

Una vez que todo esté configurado, puedes ejecutar ansible para configurar Pi-hole en el sistema configurado en el inventario.

#> ansible-playbook -i inventory pihole-vm.yml

Licencia

MIT

Acerca del proyecto

Install, run and configure Pi-Hole using docker and a CSV file where you can map your hosts to IP addresses.

Instalar
ansible-galaxy install authsec.pihole
Licencia
mit
Descargas
131
Propietario