[Anterior: authpf: shell de usuario para pasarelas de autenticación] [Contenido] [Siguiente: Cortafuegos para una red doméstica o una oficina]
CARP funciona permitiendo que un grupo de máquinas o nodos en el mismo segmento de red compartan una dirección IP. Este grupo de nodos se conoce como un "grupo de redundancia". Al grupo de redundancia se le asigna una dirección IP que se comparte entre los los miembros del grupo. Dentro del grupo, un nodo es denominado «maestro» (master) y el resto son nodos «de respaldo» (backups). El nodo maestro es el que en ese momento «posee» la IP compartida; es el que responde al tráfico o peticiones ARP dirigidas hacia esa IP. Cada nodo puede pertenecer a más de un grupo de redundancia a la vez.
Un uso común de CARP es crear un grupo de cortafuegos redundantes. La IP virtual que se asigna al grupo de redundancia se configura en las máquinas cliente como pasarela predeterminada. En el caso de que el cortafuegos maestro sufra un fallo o quede desconectado de la red, la IP se trasladará a uno de los cortafuegos de respaldo y el servicio continuará sin interrupción.
Pueden existir varios grupos de CARP en el mismo segmento de red. Los avisos de CARP contienen un identificador denominado VHID (Virtual Host ID) que permite a los miembros del grupo identificar a qué grupo de redundancia pertenece el aviso.
Con el fin de evitar que un usuario malicioso en el segmento de red pueda falsificar avisos CARP, cada grupo se puede configurar con una contraseña. Cada paquete CARP enviado al grupo es así protegido por HMAC-SHA1.
Dado que CARP es un protocolo en sí mismo, debe ser expresamente autorizado por las reglas de filtrado:
pass out on $carp_dev proto carp keep state
$carp_dev es la interfaz física que CARP utiliza para comunicarse.
ifconfig carpN create
ifconfig carpN vhid vhid [pass password] [carpdev carpdev] \
[advbase advbase] [advskew advskew] [state state] [group|-group group] \
ipaddress netmask mask
El comportamiento de CARP puede controlarse también mediante sysctl(8).
# sysctl -w net.inet.carp.allow=1
# ifconfig carp1 create
# ifconfig carp1 vhid 1 pass mekmitasdigoat carpdev em0 \
advskew 100 10.0.0.1 netmask 255.255.255.0
Estas órdenes configuran lo siguiente:
El uso de ifconfig permite ver el estado de la interfaz carp1:
# ifconfig carp1
carp1: flags=8802<UP,BROADCAST,SIMPLEX,MULTICAST> mtu 1500
carp: BACKUP carpdev em0 vhid 1 advbase 1 advskew 100
groups: carp
inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255
Cuando pfsync(4) está configurado para enviar o recibir actualizaciones a través de la red, el comportamiento prederminado es usar multicast sobre la red local. Todas las actualizaciones se envían sin autenticación. La práctica más habitual es una de las dos siguientes:
Cuando las actualizaciones se envían y reciben a través de la red, los paquetes pfsync deben ser autorizados por las reglas de filtrado:
pass on $sync_if proto pfsync
$sync_if debe ser la interfaz física por la que pfsync(4) se comunica.
ifconfig pfsyncN syncdev syncdev [syncpeer syncpeer] [defer|-defer]
# ifconfig pfsync0 syncdev em1Esta orden activa pfsync en la interfaz em1. Las actualizaciones serán transmitidas en «multicast» a la red, permitiendo que cualquier otro nodo que utilice pfsync pueda recibirlas.
Un escenario de ejemplo. Dos cortafuegos: fw1 y fw2.
+----| WAN/Internet |----+
| |
em2| |em2
+-----+ +-----+
| fw1 |-em1----------em1-| fw2 |
+-----+ +-----+
em0| |em0
| |
---+-----LAN compartida-----+---
Las interfaces em1 de los cortafuegos son conectados directamente mediante un cable cruzado. Ambos se conectan a la LAN en em0 y a una conexión WAN/Internet en em2 Las direcciones IP son las siguientes:
La política de red es que el cortafuegos fw1 sea el maestro.
Configuración de fw1:
! activa la función de anticipación y el "failover" de la interfaz de grupo
# sysctl -w net.inet.carp.preempt=1
! configuración de pfsync
# ifconfig em1 10.10.10.1 netmask 255.255.255.0
# ifconfig pfsync0 syncdev em1
# ifconfig pfsync0 up
! configuración de CARP en el lado de la LAN
# ifconfig carp1 create
# ifconfig carp1 vhid 1 carpdev em0 pass lanpasswd \
172.16.0.100 netmask 255.255.255.0
! configuración CARP en el lado de la WAN/Internet
# ifconfig carp2 create
# ifconfig carp2 vhid 2 carpdev em2 pass netpasswd \
192.0.2.100 netmask 255.255.255.0
|
Configuración de fw2:
! activa la función de anticipación y el "failover" de la interfaz de grupo
# sysctl -w net.inet.carp.preempt=1
! configuración de pfsync
# ifconfig em1 10.10.10.2 netmask 255.255.255.0
# ifconfig pfsync0 syncdev em1
# ifconfig pfsync0 up
! configuración de CARP en el lado de la LAN
# ifconfig carp1 create
# ifconfig carp1 vhid 1 carpdev em0 pass lanpasswd \
advskew 128 172.16.0.100 netmask 255.255.255.0
! configuración CARP en el lado de la WAN/Internet
# ifconfig carp2 create
# ifconfig carp2 vhid 2 carpdev em2 pass netpasswd \
advskew 128 192.0.2.100 netmask 255.255.255.0
|
Ejemplos:
Para forzar la conmutación de un determinado grupo de CARP, tumbe la interfaz carp(4) del nodo maestro. Esto causará que el nodo maestro se anuncie con un valor de advbase y advskew «infinito». El nodo o nodos de respaldo lo verán y de inmediato asumirán el papel del nodo maestro.
# ifconfig carp1 down
Una alternativa consiste en incrementar advskew a un valor superior que advskew en el nodo o nodos de respaldo. Esto causará una conmutación pero aún permite participar al nodo maestro en el grupo CARP.
Otro método de conmutación es ajustar el contador de degradación de CARP. El contador de degradación es una medida de lo «preparado» que está un nodo para convertirse en maestro del grupo CARP. Por ejemplo, mientras un nodo está en medio del proceso de arranque, es una mala idea convertirse en maestro CARP hasta que todas las interfaces hayan sido configuradas, todos los servicios de red se hayan iniciado, etc. Los nodos que anuncian un valor alto de degradación tendrán menos preferencia para pasar a nodo maestro.
Un contador de degradación se almacena en cada grupo de interfaces al que la interfaz CARP pertenece. Por omisión, todas las interfaces CARP son miembros del grupo de interfaces «carp». Puede verse el valor actual de un contador de degradación mediante ifconfig(8):
# ifconfig -g carp
carp: carp demote count 0
En este ejemplo, se muestra el contador asociado con el grupo de interfaces «carp». Cuando un nodo CARP se anuncia en la red, toma la suma de los contadores de degradación para cada grupo de interfaces al que pertenece la interfaz carp(4) y anuncia ese valor como su valor de degradación.
Considere ahora el siguiente ejemplo. Dos cortafuegos que utilizan CARP con las siguientes interfaces:
El objetivo consiste únicamente en conmutar los grupos carp1 y carp2 al cortafuegos secundario.
En primer lugar, asigne cada interfaz a un nuevo grupo, en este caso denominado «internal»:
# ifconfig carp1 group internal
# ifconfig carp2 group internal
# ifconfig internal
carp1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
carp: MASTER carpdev em0 vhid 1 advbase 1 advskew 100
groups: carp internal
inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255
carp2: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
carp: MASTER carpdev em1 vhid 2 advbase 1 advskew 100
groups: carp internal
inet 10.0.1.1 netmask 0xffffff00 broadcast 10.0.1.255
Ahora incremente el contador de degradación para el grupo «internal» por medio de ifconfig(8):
# ifconfig -g internal
internal: carp demote count 0
# ifconfig -g internal carpdemote 50
# ifconfig -g internal
internal: carp demote count 50
El cortafuegos ahora conmutará de forma elegante los grupos carp1 y carp2 hacia el otro cortafuegos del clúster, mientras todavía permanece como maestro de carp3 y carp4. Si el otro cortafuegos comienza a anunciarse con un valor de degradación superior a 50, o si deja de dar avisos, a continuación este cortafuegos tomará de nuevo el papel de maestro para carp1 carp2.
Para restablecer (fail back) el cortafuegos primario, revierta los cambios:
# ifconfig -g internal -carpdemote 50
# ifconfig -g internal
internal: carp demote count 0
Servicios de red como OpenBGPD y sasyncd(8) hacen uso del contador de degradación para garantizar que el cortafuegos no se convierta en maestro hasta que las sesiones BGP lleguen a establecerse y las SAs IPsec estén sincronizadas.
pass in on fxp0 inet proto tcp from any to carp0 port 22pero sustituir fxp0 por carp0 no funcionará como desea.
¡NO se olvide de autorizar proto carp y proto pfsync!
[Anterior: authpf: shell de usuario para pasarelas de autenticación] [Contenido] [Siguiente: Cortafuegos para una red doméstica o una oficina]