Acabo de terminar de configurar Pi-hole, basicamente genera un dns en el servidor que permite bloquear anuncios en las paginas.
En principio probé agregando el dns de mi servidor (posterior a instalación) en cada host conectado apuntando a la ip del server.
Luego me aventuré en tratar de utilizar el dns a traves de mi router (directo) y que se filtre la publicidad de todo el trafico en mi router apuntando el dns al servidor.
Adicional a esto instalé Wg-easy (Wireguard) que es una vpn que nos permitirá poder conectarnos a nuestra red interna a traves de vpn en cualquier dispositivo. Esto sirve bastante, por ejemplo, si quiere compartir netflix con alguien que no está en su red y que la aplicación no les diga que esta en otro domicilio (yo lo hago para compartirle netflix a mi mamá por ejemplo).
Para ello, hice esto
En Docker instalé Pi-hole y Wg-Easy
Apuntar dns a tu ip:
Para ello ir a Duck DNS (Puede utilizar otro), me registré con mi cuenta google y eligen un nombre para su DNS
Hacen clic en "add domain" y listo (idealmente no cerrar la pagina dado que utilizaran estos datos en la configuración de docker-compose.
Configuración Docker-Compose con Pi-hole y Wireguard:
para ello ir a la web de configuración/instalación de Pi-hole (
https://github.com/wg-easy/wg-easy/wiki/Using-WireGuard-Easy-with-Pi-Hole ) y copiar este bloque de codigo:
YAML:
version: "3.8" ### [COLOR=rgb(184, 49, 47)]La Versión ya es un opcional en el docker-compose en versiones mas nuevas (igual yo lo sigo utilizando)[/COLOR]
services:
wg-easy:
environment:
# ⚠️ Change the server's hostname (clients will connect to):
- WG_HOST=myhost.com #### ***AQUI DEBEN INGRESAR SU DIRECCIÓN DE DUCKDNS****
# ⚠️ Change the Web UI Password:
- PASSWORD=foobar123 ### *** GENERAR UN PASSWORD PARA LA WEBUI DE WG-EASY (EL QUE UDS QUIERAN)
# 💡 This is the Pi-Hole Container's IP Address
- WG_DEFAULT_DNS=10.8.1.3
- WG_DEFAULT_ADDRESS=10.8.0.x
image: ghcr.io/wg-easy/wg-easy
container_name: wg-easy
volumes:
- ~/.wg-easy:/etc/wireguard
ports:
- "51820:51820/udp"
- "51821:51821/tcp"
restart: unless-stopped
cap_add:
- NET_ADMIN
- SYS_MODULE
sysctls:
- net.ipv4.ip_forward=1
- net.ipv4.conf.all.src_valid_mark=1
networks:
wg-easy:
ipv4_address: 10.8.1.2
pihole:
image: pihole/pihole
container_name: pihole
environment:
# ⚠️ Change the Web UI Password:
- WEBPASSWORD=foobar123 ### *** GENERAR UN PASSWORD PARA LA WEBUI DE PI-HOLE (EL QUE UDS QUIERAN)
volumes:
- '~/.pihole/etc-pihole:/etc/pihole'
- './.pihole/etc-dnsmasq.d:/etc/dnsmasq.d'
ports:
- "53:53/tcp"
- "53:53/udp"
- "5353:80/tcp"
restart: unless-stopped
networks:
wg-easy:
ipv4_address: 10.8.1.3
networks:
wg-easy:
ipam:
config:
- subnet: 10.8.1.0/24
Importante, solo deben modificar los campos que les dejé comentados.
Estos 3 campos serían el DNS que registraron en DuckDNS y ambos password tanto para Wireguard como para Pi-hole.
Otro punto importante, si ya tienen datos en Docker-compose deben asegurarse de que por ejemplo los networks queden dentro de los otros networks que tengan ya creados. Siempre es importante en estos archivos tener alineadas las lineas o les arrojará errores de levantamiento al intentar levantar el docker.
pueden utilizar
https://www.yamllint.com/ para validar sus archivos de configuración YAML.
ahora debemos levantar el docker compose, para ello utilizar el comando
docker compose up -d
pueden validar con el comando
docker ps para validar que esten levantados correctamente los procesos.
Proximo paso
abrir puerto UDP 51820 en la dirección ip de tu servidor para wireguard esto sirvirá para la conexión a vpn en tu router (aqui no explicaré mucho dado que cada router es diferente).
Les dejo un ejemplo de como abrir el puerto en el router de movistar donde
Dirección ip: sería la dirección IP de tu Servidor
Ahora ya deberiamos poder acceder a nuestro Pi-hole (Si es que todo salió bien).
Para ello abrimos nuestro navegador
Ingresamos a http://[Dirección Ip de nuestro servidor]:5353/admin
nuestro password es el que configuramos en nuestro docker compose
La pantalla de bienvenida nos mostrará un dashboard de bloqueos, actualmente funcionando desde las 23hrs aprox tengo una tasa de bloqueo de un 14.5% del tráfico de mi red
Una vez ingresados tenemos 2 alternativas.
1. Agregar nuestro DNS a cada uno de nuestros hosts conectados, configurando el dns de forma manual (agregando la ip del servidor)
Por ejemplo en MacOS, vamos a CONFIGURACION - RED - (SELECCIONAMOS NUESTRA INTERFAZ UTILIZADA WIFI O RED) - DETALLES - DNS
y en el boton + podemos agregar nuestro dns (ip del servidor).
una vez agregado, reiniciamos la conexión (pueden apagar y encender el wifi y con eso bastará).
Para probar pueden utilizar la web de elmundo.es
Sin Pi-hole:
Con Pi-Hole:
2. La otra alternativa es agregar el dns a tu Router, de esta manera podrás filtrar todo el trafico de ads en tu red sin necesidad de configurar el dns de forma manual en cada host.
Para esto, les comento que yo tengo Movistar, pero utilizo mi router Huawei AX3 QuadCore para la conexión de mi ISP, es decir, tengo configurada mi ppoe en mi router asi que los pasos que mostraré son realizados en esta interfaz (Router Huawei AX3 QC).
- Vamos a la configuración del router
- Nos logeamos
- "Conectarse a internet"
una vez guardado, debemos configurar IPV6 y aqui existe un problema, dado que el router por defecto no me permitía configurar DNS para ipv6 (Viene un combobox estatico bloqueado en automatico).
Por eso tuve que meter mano ahi.
Voy a "MÁS FUNCIONES"
"AJUSTES DE RED"
"IPv6"
Como pueden notar, mi router por defecto el combobox de "Acceso a dns" esta bloqueado en automático.
Para solucionar esto presioné F12 para abrir el devtools (en google chrome)
Accedemos a
"SOURCES"
"TU DIRECCION IP"
"VIEWS"
"IPV6"
SELECCIONAN EL ARCHIVO DENTRO DE LA CARPETA Y PRESIONAN BUSCAR EN EL CODIGO ( EN MI CASO CON CMD+F)
buscamos los siguientes valores:
toIpv6WanPostdata.X_IPv6DNSOverrideAllowed
toIpv6WanPostdata.X_IPv6DNSServerOne
deben configurarlos de la siguiente manera:
toIpv6WanPostdata.X_IPv6DNSOverrideAllowed=true;
toIpv6WanPostdata.X_IPv6DNSServerOne="IPV6 DE TU SERVIDOR" (AQUI DEBEN INGRESAR SU DIRECCION IPV6 DEL SERVIDOR, SI NO LA SABEN PUEDEN CONSULTARLA EN LA TERMINAL DE LINUX CON EL COMANDO ifconfig -a y buscan su adaptador de red utilizado. por lo general, deberia ser una dirección que empieza con fe80::5xxx:xxxx:xxxx)
EN MI CASO ES LA SEGUNDA (LA QUE EMPIEZA POR fe80::5648:10fxxx)
una vez modificados los valores le damos a cmd+s(MacOS) o control + s (Windows) y aparecerá un triangulo en la pestaña del archivo (eso es normal)
Cerramos y damos guardar en la interfaz web del router (pestaña ipv6 que nos encontrabamos).
Importante destacar, que cada vez que entremos a la configuración y modifiquemos algo tendremos que realizar este paso dado que el archivo se sobreescribirá cada vez que ingresemos a la config del router.
Ahora podremos desactivar el dns manual en cada host, y podremos navegar normalmente desde cualquiera de nuestros dispositivos conectados a la red utilizando el dns.
Otro punto importante en el proceso es generar cron para las ips dinamicas que nos entrega nuestro proveedor de internet. Esto dado que nuestro DNS (Duckdns en mi caso) quedó enlazado a mi ip al momento de solicitar el dns.
Para ello podemos hacer lo siguiente:
Vamos a la pagina de DuckDNS
Nos logeamos
una vez logeados vamos en el menu superior a install
Seleccionamos nuestro sistema operativo (en mi caso linux cron)
Abajo en "First Step" seleccionamos nuestro dominio previamente creado e insertamos los registros de consola que aparecen automaticamente para nuestro dominio. Esto finalmente lo que hará es que ejecutará a traves de cron cada 5 minutos una consulta a la IP publica para actualizarla cuando sea necesario.
Para Finalizar, explicaré como funciona Wireguard.
Wireguard es una VPN que nos permitirá, por ejemplo, compartir netflix con nuestra familia sin necesidad de comprar direcciones dado que a traves de esta VPN netflix identificará las tvs como internas de la Red.
Para ello vamos a nuestro navegador favorito e ingresamos la "Ip de nuestro servidor":51821 (dado que en el primeros pasos ya instalamos Wireguard a traves de Wg-Easy
Ingresamos la contraseña que creamos en el archivo docker-compose
Una vez Logeados veremos una pantalla como esta:
Explico cada uno de los puntos marcados:
1. El codigo QR permite configurar la VPN utilizando el codigo QR de nuestro telefono por ejemplo en la aplicación Wireguard (PlayStore, Appstore)
2. Archivo .conf, este archivo es importable por la aplicación de wireguard. Este es el que yo utilizo para configurar la vpn en TV Box, televisores o Computadores.
3. Permite agregar nuevos dispositivos a la conexión, recuerda que es una por cada dispositivo.
Para configurarlo en la casa de tu mamá por ejemplo, vas al tv box, descargas Wireguard en su dispositivo, abres la aplicación, importas el archivo .conf que creaste en la webui y listo, ahora te puedes conectar a la vpn en el dispositivo de tu madre y podrá conectarse a Netflix como que estuviera en tu casa. Cabe destacar que esto si afecta de cierta manera la velocidad de conexión del equipo remoto conectado y necesitas conectar o desconectar cada vez que quieras entrar o salir de la vpn.