Bridges y filtrado de protocolos

networkingArco

A. K. A. Cómo suplantar un servidor :P
Aunque suene un poco delictivo (o como les gusta llamarlo ahora, pirata), esto puede ser una buena solución para muchas situaciones; como crear "islas" dentro de una misma red, u ofrecer servicios adicionales.

Problema

Nos vamos a centrar en una configuración de red como la siguiente:

Lo que pretendemos es poder poner un servidor que sustituya al que hay para poder tener más control sobre las máquinas finales. Necesitaremos poder colocar un ordenador propio en la red, de forma que quede así:

Ingredientes

Configuración

En este ejemplo vamos a intentar suplantar el servidor DHCP para que, además de direcciones IP, nos proporcione también arranque por PXE. La configuración para el arranque por PXE podéis hacerla siguiendo la receta Instalar Debian desde red con PXE (nunca fue tan fácil).

Ahora, lo que tenemos que hacer es que el PC que actúa de bridge no reenvíe las peticiones DHCP hacia el exterior, y que bloquee también los paquetes DHCP que vengan desde el exterior hacia nuestra red. Aquí es donde entra en juego ebtables. Es una utilidad parecida a iptables, específico para bridging y firewall (o sea, lo que nosotros queremos).
Ejecutamos los siguientes comandos para añadir las reglas (tenéis que cambiar $PUB y $PRV por los correspondientes nombres de vuestras tarjetas de red):

# ebtables -A INPUT --in-interface $PUB --protocol IPv4 --ip-protocol udp --ip-source-port 68 --ip-destination-port 67 -j DROP
# ebtables -A FORWARD --in-interface $PUB --out-interface $PRV --protocol IPv4 --ip-protocol udp --ip-source-port 67 --ip-destination-port 68 -j DROP
# ebtables -A FORWARD --in-interface $PRV --out-interface $PUB --protocol IPv4 --ip-protocol udp --ip-source-port 68 --ip-destination-port 67 -j DROP

Con la primera estamos bloqueando las peticiones DHCP que vengan del exterior (sólo queremos atender las de nuestra red).
La segunda regla ignora las respuestas DHCP que llegan desde fuera (tampoco nos interesan).
Con la tercera, evitamos que las peticiones de nuestra red se propaguen hacia la red exterior.