Introducción
Este documento explica como crear un bridge (Puente de red) usando Debian, y debe funcionar con las versiones Sarge, Etch y Sid.
Cuando este documento esté más completo, se traducirá al inglés, en la página debian-bridge, que es parte de sysadmin.
Este documento está en estado experimental, usted puede ayudar a mejorarlo. Puede editarlo usando el enlace Edit que está arriba.
Configuración básica
Un bridge pasa paquetes sin modificaciones de una interfaz a otra. El bridge mira las direcciones de los paquetes para determinar lo que ha de pasar de un lado al otro. Esto significa que el tráfico que pasa por el bridge no tiene que ser comprendido por Linux, basta con que los paquetes tengan una dirección de hardware.
El primer paso para crear un bridge es instalar el paquete bridge-utils.
apt-get install bridge-utils
Luego, se inicializan las interfaces de red. Se asume que la máquina no tiene una IP configurada en ninguna interfaz de red.
ifconfig eth0 0.0.0.0 ifconfig eth1 0.0.0.0 brctl addbr br0 brctl addif br0 eth0 brctl addif br0 eth1
Ah hacer esto, la máquina ya debe funcionar como un bridge.
Falta un paso importante, se debe levantar la interface br0
ifconfig br0 up
Puedes comprobarlo usando un sniffer como tcpdump.
tcpdump -i eth1 dst 192.168.0.10
Para que este ejemplo sea útil, el tráfico hacia la IP 192.168.0.10 debería generarse desde el segmento conectado a eth0.
Nota: No es necesario hacer IP Forwarding ni Proxy ARP para que el bridge funcione.
Bridge con IP
Opcionalmente puede ser deseable que el bridge tenga una IP, para administrar remotamente el bridge con SSH. No es necesario poner una IP en un bridge, pero se puede hacer así:
ifconfig br0 192.168.0.2 netmask 255.255.255.0 up route add default gw 192.168.0.1 dev br0
Aquí suponemos que la IP del bridge es 192.168.0.2 y que la IP del gateway se encuentra en uno de los segmentos configurados en el bridge (eth0 y eth1 en este ejemplo).
Pseudo-bridges
En un pseudo-bridge funciona de forma diferente, y se porta más como un router oculto que como un bridge.
Un caso común en el que son muy útiles los pseudo-bridges es el siguiente:
Red Interna Pseudo-bridge Red externa eth1 192.168.0.2/24 --+--[ 192.168.0.1 ]-- 10.0.0.0/8 | [ 10.0.0.1 ] | eth0 [ 10.0.0.2 ]
Si uno quiere que desde la red externa se pueda acceder al computador con IP 10.0.0.2 sin hacer NAT, entonces el proxy_arp es lo más útil. Es importante tener bien hechas las tablas de enrutamiento antes de hacer Proxy ARP.
En este caso, un haría algo como:
echo "1" > /proc/sys/net/ipv4/conf/eth0/proxy_arp echo "1" > /proc/sys/net/ipv4/conf/eth1/proxy_arp route add -host 10.0.0.2 dev eth1
Estas líneas hacen que automáticamente, cuando un computador en la red externa intente enviar un paquete al host 10.0.0.2, este sea enrutado a través de el Linux Router. De igual forma, cuando el host 10.0.0.2 quiera enviar un paquete a la Red externa, este será enrutado a través del Linux Router.
La explicación técnica: Cuando la máquina con IP 10.0.0.5 (no aparece en la gráfica) que está en la Red Externa va a enviar un paquete a la IP 10.0.0.2, primero debe averiguar la dirección de hardware de la máquina con IP 10.0.0.2, y esto se hace a través de una solicitud de ARP (ARP request) que es enviada usando broadcast en toda la red externa. Esta solicitud le llega alLinux Router. Si el Linux Router no conoce la dirección de hardware que corresponde a esta IP, retransmitirá la solicitud a la red interna.
Cuando esto pasa, el host con IP 10.0.0.2 responde a la solicitud diciendo que la IP 10.0.0.2 corresponde a su dirección de hardware (por ejemplo 00:16:76:3C:CA:1E.
Como el Linux Router está configurado para hacer Proxy ARP, y ya sabe que alguien en la red externa está preguntando por el host con IP 10.0.0.2, él responderá a la solicitud hecha por 10.0.0.5, pero responderá diciendo que la IP 10.0.0.2 está en la dirección de hardware que tiene la interfaz eth0 del mismo, la misma que corresponde a la IP 10.0.0.1, digamos que es00:15:26:30:CD:3E
Así, 10.0.0.5 envía el paquete Ethernet a la dirección 00:15:26:30:CD:3E, que corresponde al Linux Router. Entonces el router re-envía el paquete a la dirección 00:16:76:3C:CA:1E, diciendo que el paquete Ethernet debe ser retornado a la dirección de hardware de la interfaz eth1 del router.
Cuando el paquete retorna, se hace el proceso inverso, y es así como funciona el Proxy ARP.
Note que los paquetes son modificados en la capa Ethernet.
Más Información
- Chapter 16. Building bridges, and pseudo-bridges with Proxy ARP, Linux Advanced Routing & Traffic Control HOWTO
- http://es.wikipedia.org/wiki/Proxy_ARP
- Simple Firewall Script