Dnsmasq+IPTables en Ubuntu 14.04

Este curso que entra he decidido hacer un cambio en los servidores de aula, dejando de lado el proxy Squid, inclinándome hacia un servidor más ligero. Por este motivo he decidido instalar Dnsmasq y las correspondientes IPTables para convertir los servidores de aula routers.

Dnsmasq es un paquete que nos permitirá instalar un servidor DNS y DHCP ligero y de fácil configuración para redes pequeñas. También permite resolver los nombres que tengamos configurados en el fichero /etc/hosts.

Para este caso, disponemos de un servidor de aula con dos tarjetas de red. Una conectada al router que proporciona Internet (eth0) y que está configurada por DHCP. Y la otra será la que esté conectada a la red interna del aula (eth1), configurada manualmente la dirección IP (192.168.0.1), máscara de red, puerta de enlace y DNS.

Instalar Dnsmasq

Desde un terminal ejecutamos el siguiente comando para instalar el paquete.

$ sudo apt-get install dnsmasq

Una vez instalado pasamos a la configuración. Todo lo que tenemos que modificar lo encontraremos en el archivo /etc/dnsmasq.conf.

Buscamos las siguientes líneas y hacemos las modificaciones necesarias.

interface=eth1  # indicamos la tarjeta por la que serviremos la configuración DHCP.
listen-address=192.168.0.1  # hace lo mismo que la anterior, pero en este caso especifica la dirección IP que escuchará la peticiones.
dhcp-range=192.168.0.10,192.168.0.50,24h  # establecemos el rango de IPs a servir y el tiempo de concesión.

Por último, buscamos la línea bind-interfaces y la descomentamos quitando la almohadilla (#). Esta última opción es recomendable activarla cuando se tienen dos tarjetas, ya que permite a Dnsmasq discriminar peticiones.

DHCP

En la configuración DHCP del servidor únicamente deberemos descomentar una línea. Editamos el archivo /etc/dhcp/dhclient.conf. Buscamos la línea prepend domain-name-servers 127.0.0.1; y le quitamos la almohadilla.

Activar intercambio de paquetes entre tarjetas

Esta opción permitirá que el sistema pueda comunicar ambas tarjetas e intercambiar paquetes entre ellas. Hay dos formas de hacerlo, en este ejemplo se hará de ambas formas, no supone ningún problema y así nos aseguramos que realmente se active.

De forma permanente, editamos el archivo /etc/sysctl.conf. Buscamos la línea net.ipv4.ip_forward=1 y la descomentamos quitando la almohadilla.

La otra forma es ejecutando el siguiente comando, que como se verá a continuación se ejecuta con las IPTables.

echo 1 > /proc/sys/net/ipv4/ip_forward

IPTables

Ya sólo nos queda indicar como se realizará la comunicación entre las tarjetas, para eso, creamos un script que deberemos copiar en el directorio /etc/network/if-up.d, sin extensión, que contendrá los siguientes comandos. Asegúrate que tiene los permisos correctos (root:root y 755).

Al copiar el script en este directorio, éste se ejecutará durante el inicio, cuando las tarjetas de red estén levantadas. Fíjate que durante la ejecución del script nos aseguramos que Dnsmasq se inicie, así como activar el forward de las tarjetas de red.

#!/bin/sh
# Interface conectada a Internet
INTERNET="eth0"
# Interface interna
LAN="eth1"

# Se inicia dnsmasq
service dnsmasq start

# Limpia las reglas anteriores
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X

# Se activa el forward para permitir que pasen paquetes de una interfaz de red a otra
echo 1 > /proc/sys/net/ipv4/ip_forward

# Politica de filtro por defecto
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT

# Acceso ilimitado a loop back
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Permite UDP, DNS y FTP pasivo
iptables -A INPUT -i $INTERNET -m state --state ESTABLISHED,RELATED -j ACCEPT

# Establecer el servidor como router para la red
iptables --table nat --append POSTROUTING --out-interface $INTERNET -j MASQUERADE
iptables --append FORWARD --in-interface $LAN -j ACCEPT

# acceso ilimiato a la LAN
iptables -A INPUT -i $LAN -j ACCEPT
iptables -A OUTPUT -o $LAN -j ACCEPT

# Registrar todo
iptables -A INPUT -j LOG
iptables -A INPUT -j DROP

Para cualquier cambio que hagas sobre Dnsmasq acuérdate de reiniciar el servicio.

$ sudo service dnsmasq restart

Reservas de IPs

Si tienes que hacer reservas de IPs para algunos equipos, o todos, sólo tienes que añadir una línea como la siguiente por cada una de las reservas en el archivo /etc/dnsmasq.conf.

dhcp-host=11:22:33:44:55:66,192.168.0.60

Indicando la dirección MAC del equipo para el que quieres la reserva y la dirección IP que quieres asignarle.

Si necesitas consultar las concesiones de Dnsmasq, sólo tienes que consultar el archivo de leases en /var/lib/misc/dnsmasq.leases.

Espero que os sirva, au!!