<!-- 31 -->
<div class="img zoomable">
  <img src="/static/source_imgs/linux/pst_2/dns.webp" alt="" style="height: 300px; width: auto;">
</div>
<p>
  Para crear un <a class="link" data-bs-toggle="modal" data-bs-target="#dns">Servidor DNS</a> en tu <a class="link"
    data-bs-toggle="modal" data-bs-target="#red_local">red local</a> vamos a usar una herramienta
  sencilla y práctica llamada <a class="link" data-bs-toggle="modal" data-bs-target="#dnsmasq">dnsmasq</a> el cual nos
  ayudará a conectarnos a los dispositivos de la red local sin necesidad de aprendernos
  las IPs de los dispositivos, adicionalmente es muy importante que tanto tu servidor dns y todos los equipos a los que
  deseamos acceder mediante dns
  tengan asignada una <a class="link" data-bs-toggle="modal" data-bs-target="#ip_estatica">ip estática</a> de lo
  contrario, no funcionará de forma permanente..
</p>

<ul class="nav nav-tabs" id="tab-dix" role="tablist">
  <li class="nav-item">
    <a class="nav-link active" id="tab1-tab" data-toggle="tab" href="#tab1" role="tab" aria-controls="tab1"
      aria-selected="true"><i class="bi bi-database-fill-gear"></i> Servidor DNS</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" id="tab2-tab" data-toggle="tab" href="#tab2" role="tab" aria-controls="tab2"
      aria-selected="false"><i class="bi bi-file-earmark-person-fill"></i> Cliente</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" id="tab3-tab" data-toggle="tab" href="#tab3" role="tab" aria-controls="tab3"
      aria-selected="false"><i class="bi bi-windows"></i> Windows - WSL</a>
  </li>
</ul>

<div class="tab-content" id="myTabContent">
  <div class="tab-pane fade active show" id="tab1" role="tabpanel" aria-labelledby="tab1-tab">
    <!-- {# i nav 1 #} -->
    <pre><i class="bi bi-copy" > Copiar código</i>
<code class=""> # actualizar el sistema e instalar dnsmasq
sudo apt-get update && sudo apt-get upgrade -y && sudo apt install dnsmasq -y
</code></pre>

    <p>
      Una vez instalado dnsmasq debemos modificar el archivo de configuración:
    </p>

    <pre><i class="bi bi-copy" > Copiar código</i>
<code class=""> # modificar archivo de configuración de dnsmasq
sudo nano /etc/dnsmasq.conf
</code></pre>

    <p>
      Dentro del archivo, nos desplazamos hasta el final del documento y añadiremos los siguientes registros:
    </p>
    <pre><i class="bi bi-copy" > Copiar código</i>
<code contenteditable="true"> # añadir registros al final del documento
interface=eth0                  # Interfaz de red del equipo, puedes obtenerla con el comando [ip a] (puede ser wlan0 si usas WiFi), en este caso uso eth0
bind-interfaces                 # Asegura que dnsmasq solo escuche en la interfaz especificada
server=8.8.8.8                  # Servidor DNS de respaldo (Google DNS u otro)
domain-needed                   # Solo resuelve nombres de dominio completos
bogus-priv                      # Bloquea consultas a direcciones privadas que no deberían salir de la red
local=/mi-red.local/            # Dominio local personalizado
expand-hosts                    # Expande nombres de host con el dominio especificado
domain=mi-red.local             # Dominio DNS local
addn-hosts=/etc/hosts.dnsmasq 	# Archivo donde defines los nombres de host y sus IPs
</code></pre>
    <p>
      Creamos el archivo con los hosts personalizados para ello debemos conocer las ips de todos los dispositivos que
      queremos acceder a través
      de esta modalidad, considerando que en la configuración indicamos que los hosts iban a estar en la ruta
      <b>/etc/hosts.dnsmasq</b> <i>(addn-hosts=/etc/hosts.dnsmasq)</i>,
      ejecutamos el siguiente comando:
    </p>

    <pre><i class="bi bi-copy" > Copiar código</i>
<code class=""> # crear y editar el archivo con la lista de host e ips
sudo nano /etc/hosts.dnsmasq
</code></pre>

    <p>Una vez abierto el archivo añadimos la lista de ips de la red local y seguido, separado por un espacio, el nombre
      de los hosts, ejemplo:</p>
    <pre><i class="bi bi-copy"> Copiar código</i>
<code contenteditable="true"> # crear y editar el archivo con la lista de ips y los nombres de host deseados
192.168.1.1   server1
192.168.1.2   server2
192.168.1.3   server3
192.168.1.4   server4
192.168.1.5   server5
</code></pre>

    <p>
      Guardamos y cerramos el archivo, luego reiniciamos el servicio de dnsmasq:
    </p>

    <pre><i class="bi bi-copy" > Copiar código</i>
<code class=""> # reiniciar dnsmasq
sudo systemctl restart dnsmasq
</code></pre>
    <!-- {# f nav 1 #} -->
  </div>
  <div class="tab-pane fade" id="tab2" role="tabpanel" aria-labelledby="tab2-tab">
    <!-- {# i nav 2 #} -->
    <p>En el equipo cliente donde usas alguna distribución de linux debes modificar el archivo resolv.conf, para ello
      ejecutamos el comando:</p>
    <pre><i class="bi bi-copy" > Copiar código</i>
<code class=""> # en cliente modificar archivo resolv.conf
sudo nano /etc/resolv.conf
</code></pre>

    <p>Al final del archivo añadimos lo siguiente:</p>
    <pre><i class="bi bi-copy" > Copiar código</i>
<code contenteditable="true"> # cliente conf resolv.conf
nameserver 192.168.1.12 # ip local del servidor dns 
nameserver 8.8.8.8 # dns google
nameserver 8.8.4.4 # dns google
</code></pre>

    <p>
      El archivo resolv.conf es un archivo que puede ser sobreescrito por el sistema por lo tanto debes de protegerlo de
      escritura con el siguiente
      comando:
    </p>
    <pre><i class="bi bi-copy" > Copiar código</i>
<code class=""> # comando para hacer inmutable el archivo resolv.conf
sudo chattr +i /etc/resolv.conf
</code></pre>

    <p>
      En caso de que quieras volver a modificarlo es importante que primero lo vuelvas a hacer mutable con el comando:
    </p>
    <pre><i class="bi bi-copy" > Copiar código</i>
<code class=""> # comando para hacer mutable el archivo resolv.conf
sudo chattr -i /etc/resolv.conf
</code></pre>

    <p>
      Finalmente para verificar que esta funcionando el servidor DNS lo que podemos hacer es un simple ping al server1 y
      verificar que si hay
      tráfico o en su defecto conectarnos mediante ssh ejemplo ssh usuario@server1
    </p>

    <div class="alert alert-warning" role="alert">
      <p><i class="bi bi-journal-bookmark-fill"></i>
        Si tienes problemas para hacer inmutable el archivo te recomiendo que primero copies el contenido del archivo
        resolv.conf y luego lo
        elimines, lo vuelves a crear y finalmente pegarle el archivo e intenta nuevamente hacerlo inmutable, esto
        seguramente lo resolverá:
      </p>
      <pre><i class="bi bi-copy" > Copiar código</i>
<code class=""> # moverse a la ruta etc donde esta el archivo de configuración
cd /etc
# copiar el contenido y hacer un respaldo del archivo de configuración, eliminar el archivo original de configuración
sudo cat resolv.conf > backup_resolv.conf && sudo rm resolv.conf
# tomar la información del archivo de respaldo para crear un nuevo archivo resolv.conf y asignarle una propiedad inmutable
sudo cat backup_resolv.conf > resolv.conf && sudo chattr +i /etc/resolv.conf
</code></pre>
    </div>
    <!-- {# f nav 2 #} -->
  </div>
  <div class="tab-pane fade" id="tab3" role="tabpanel" aria-labelledby="tab3-tab">
    <!-- {# i nav 3 #} -->
    <div class="alert alert-info" role="alert">
      <p>
        <i class="bi bi-info-circle-fill"></i> Si la maquina cliente es Windows deberás usar WSL y adicional a los pasos
        anteriores de cliente,
        deberas modificar el archivo wsl.conf mediante el comando:
      <pre><i class="bi bi-copy" > Copiar código</i>
<code class=""> # modificar archivo wsl.conf
sudo nano /etc/wsl.conf
</code></pre>
      Una vez abierto el archivo, al final del documento pegarás la siguiente información:
      <pre><i class="bi bi-copy" > Copiar código</i>
<code contenteditable="true">[network]
generateResolvConf = false
nameserver=192.168.1.12  # IP del servidor DNS en este ejemplo
</code></pre>

      </p>
    </div>
    <!-- {# f nav 3 #} -->
  </div>
</div>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>