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
Install, run and configure Pi-Hole using docker and a CSV file where you can map your hosts to IP addresses.
ansible-galaxy install authsec.pihole