Configuré un DNS con AdBlock usando dnsmasq para ahorrar paquetes en la VPN de WireGuard

7 min

language: ja bn de en es fr hi ko pt ru zh-cn zh-tw

Hola, soy un incompetente.

Tengo una línea de 1.5Mbps, pero cuando hay anuncios, la carga comienza de golpe y se generan paquetes innecesarios, así que quiero evitar esto.
Aunque es 1.5Mbps ilimitado, parece haber un límite de 10GB en 3 días, y fue un infierno cuando la comunicación se redujo a 200kbps, así que, disculpen, pero configuraré un DNS que consulte en mi propio entorno VPN para bloquear anuncios.

Instalar dnsmasq

Mi servidor de WireGuard está en un entorno FreeBSD, así que usaré pkg.

$ pkg search dnsmasq
dnsmasq-2.90_2,1               Lightweight DNS forwarder, DHCP, and TFTP server
$ pkg install dnsmasq
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
The following 7 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
        dnsmasq: 2.90_4,1
        gettext-runtime: 0.23
        gmp: 6.3.0
        indexinfo: 0.3.1
        libidn2: 2.3.7
        libunistring: 1.2
        nettle: 3.10.1

Number of packages to be installed: 7

The process will require 15 MiB more space.
3 MiB to be downloaded.

Proceed with this action? [y/N]: y
[1/7] Fetching indexinfo-0.3.1.pkg: 100%    6 KiB   5.9kB/s    00:01    
[2/7] Fetching libidn2-2.3.7.pkg: 100%  155 KiB 158.7kB/s    00:01    
[3/7] Fetching dnsmasq-2.90_4,1.pkg: 100%  390 KiB 398.9kB/s    00:01    
[4/7] Fetching nettle-3.10.1.pkg: 100%    2 MiB   1.6MB/s    00:01    
[5/7] Fetching libunistring-1.2.pkg: 100%  683 KiB 699.4kB/s    00:01    
[6/7] Fetching gmp-6.3.0.pkg: 100%  498 KiB 510.4kB/s    00:01    
[7/7] Fetching gettext-runtime-0.23.pkg: 100%  235 KiB 241.2kB/s    00:01    
Checking integrity... done (0 conflicting)
[1/7] Installing indexinfo-0.3.1...
[1/7] Extracting indexinfo-0.3.1: 100%
[2/7] Installing libunistring-1.2...
[2/7] Extracting libunistring-1.2: 100%
[3/7] Installing gmp-6.3.0...
[3/7] Extracting gmp-6.3.0: 100%
[4/7] Installing libidn2-2.3.7...
[4/7] Extracting libidn2-2.3.7: 100%
[5/7] Installing nettle-3.10.1...
[5/7] Extracting nettle-3.10.1: 100%
[6/7] Installing gettext-runtime-0.23...
[6/7] Extracting gettext-runtime-0.23: 100%
[7/7] Installing dnsmasq-2.90_4,1...
[7/7] Extracting dnsmasq-2.90_4,1: 100%
=====
Message from dnsmasq-2.90_4,1:

--
To enable dnsmasq, edit /usr/local/etc/dnsmasq.conf and
set dnsmasq_enable="YES" in /etc/rc.conf[.local]

Further options and actions are documented inside
/usr/local/etc/rc.d/dnsmasq

SECURITY RECOMMENDATION
~~~~~~~~~~~~~~~~~~~~~~~
It is recommended to enable the wpad-related options
at the end of the configuration file (you may need to
copy them from the example file to yours) to fix
CERT Vulnerability VU#598349.

$ echo 'dnsmasq_enable="YES" ' >> /etc/rc.local

Añadiré lo siguiente como la ruta del archivo de configuración a aplicar en /usr/local/etc/dnsmasq.conf.

conf-dir=/usr/local/etc/dnsmasq.d

Crear carpeta

mkdir /usr/local/etc/dnsmasq.d
cd /usr/local/etc/dnsmasq.d

Con esto, se introduce la lista para adblock.

curl -o /usr/local/etc/dnsmasq.d/adblock.conf https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts

Como dnsmasq no puede leer lo anterior, lo formatearé.

cat adblock.conf | awk '/^0.0.0.0/ {print "address=/"$2"/0.0.0.0"}' > tmp
rm adblock.conf 
mv tmp adblock.conf

Verificación del archivo de configuración

Con la configuración mínima, quedó así.

# cat dnsmasq.conf | grep -v '^#' | grep [A-z]
no-resolv
server=1.1.1.1
interface=wg0
listen-address=10.0.0.1
log-queries
conf-dir=/usr/local/etc/dnsmasq.d

Inicio

Con esto, se inicia.

# service dnsmasq start
Starting dnsmasq.

Lado del cliente de WireGuard

El servidor DNS del lado del cliente será la IP de escucha de dnsmasq. Por lo tanto, en este caso, será 10.0.0.1.

Probar

Para los dominios listados en adblock.conf, en este caso, como el cliente es un smartphone, al conectarse con el smartphone se puede confirmar que el acceso está bloqueado correctamente.

Con esto, ahora es posible bloquear dominios que distribuyen anuncios, añadiéndolos según sea necesario.

Especificación de dnsmasq incluyendo subdominios

Si se añade . antes del dominio, como se muestra a continuación, es posible especificarlo como un dominio que incluye subdominios.

address=/.test.com/0.0.0.0

Con mi línea de smartphone de 1.5Mbps, el simple hecho de que se entreguen anuncios es bastante crítico, así que me pregunto si fue una buena idea implementarlo.
Hasta la próxima. Saludos.

Related Posts