[Vorige: Authpf: Gebruiker-Shell voor Authentiserende
Gateways]
[Inhoud]
[Volgende: Firewall voor Thuis of Klein Kantoor]
PF: Firewall Redundantie met CARP en pfsync
Inhoudsopgave
Inleiding tot CARP
CARP is het Common Address Redundancy Protocol.
De hoofdbedoeling ervan is om meerdere hosts op hetzelfde netwerksegment
toe te laten een IP adres te delen.
CARP is een veilig, vrij alternatief voor het
Virtual Router Redundancy
Protocol en het
Hot Standby Router
Protocol.
CARP werkt door een groep hosts op hetzelfde netwerksegment toe te laten
een IP adres te delen.
Deze groep van hosts wordt een "redundantiegroep" genoemd.
Aan de redundantiegroep wordt een IP adres toegekend dat tussen de
groepsleden gedeeld wordt.
Binnen de groep wordt één host tot "master" benoemd en de rest tot
"backups".
De master host is degene die momenteel het gedeelde IP "bezit"; hij
antwoordt op gelijk welk verkeer of ARP aanvragen die ernaar gericht zijn.
Elke host kan tot meer dan één redundantiegroep tegelijk behoren.
Een veel voorkomend gebruik voor CARP is het aanmaken van een groep van
redundante firewalls.
Het virtuele IP dat toegekend wordt aan de redundantiegroep wordt op client
machines als de standaard gateway geconfigureerd.
Wanneer de master firewall een storing krijgt of offline genomen wordt,
zal het IP naar één van de backup firewalls bewegen en de dienst zal
ongestoord verdergaan.
CARP ondersteunt IPv4 en IPv6.
CARP Werking
De master host in de groep zendt regelmatig aankondigingen naar het lokale
netwerk zodat de backup hosts weten dat hij nog steeds leeft.
Als de backup hosts geen aankondiging vanwege de master horen gedurende een
ingestelde periode, dan zal één van hen de plichten van de master overnemen
(welke backup host het ook is die de laagst geconfigureerde advbase
en advskew waarden heeft).
Het is mogelijk dat meerdere CARP groepen bestaan op hetzelfde
netwerksegment.
CARP aankondigingen bevatten de Virtual Host ID die groepsleden toelaat
om te identificeren tot welke redundantiegroep de aankondiging behoort.
Om te voorkomen dat een kwaadwillige gebruiker op het netwerksegment
CARP aankondigingen zou vervalsen, kan elke groep geconfigureerd worden met
een wachtwoord.
Elk CARP pakket dat naar de groep gezonden wordt, wordt dan beschermd door
een SHA1 HMAC.
Aangezien CARP zijn eigen protocol is, moet het een expliciete pass regel
hebben in filterregelsets:
pass out on $carp_dev proto carp keep state
$carp_dev is de fysische interface waarover CARP communiceert.
CARP Configureren
Elke redundantiegroep wordt vertegenwoordigd door een
carp(4) virtuele netwerkinterface. Als zodanig wordt CARP geconfigureerd
met
ifconfig(8).
ifconfig carpN create
ifconfig carpN vhid vhid [pass password]
[carpdev carpdev] \
[advbase advbase] [advskew advskew]
[state state] ipaddress
mask
- carpN
- De naam van de carp(4) virtuele interface waarbij N een geheel
getal is dat het nummer van de interface voorstelt (bv. carp10).
- vhid
- De Virtual Host ID. Dit is een uniek getal dat gebruikt wordt om de
redundantiegroep te identificeren naar andere knooppunten op het netwerk toe.
Aanvaardbare waarden gaan van 1 tot 255.
- password
- Het authenticatiewachtwoord om te gebruiken bij het praten met andere
CARP-enabled hosts in deze redundantiegroep.
Dit moet hetzelfde zijn bij alle leden van de groep.
- carpdev
- Deze optionele parameter specificeert de fysische netwerkinterface
die toebehoort aan deze redundantiegroep.
Standaard zal CARP proberen te bepalen welke interface te gebruiken door
een fysische interface te zoeken die in hetzelfde subnet zit als de
ipaddress en mask combinatie gegeven aan de carp(4)
interface.
- advbase
- Deze optionele parameter specificeert hoe vaak, in seconden, aan te
kondigen dat we een lid van de redundantiegroep zijn.
De standaardwaarde is 1 seconde.
Aanvaardbare waarden gaan van 1 tot 255.
- advskew
- Deze optionele parameter specificeert hoeveel de
advbase te verdraaien bij het zenden van CARP aankondigingen.
Door advbase te manipuleren kan de master CARP host gekozen
worden.
Hoe hoger het getal, hoe minder voorkeur de host krijgt bij het
kiezen van een master.
De standaardwaarde is 0.
Aanvaardbare waarden gaan van 1 tot 254.
- state
- Dwing carp(4) interface in een bepaalde toestand. Geldige toestanden zijn
init, backup en master.
- ipaddress
- Dit is het gedeelde IP adres dat toegekend is aan de redundantiegroep.
Dit adres hoeft niet in hetzelfde subnet te zitten als het IP adres op de
fysische interface (indien aanwezig).
Dit adres moet echter hetzelfde zijn op alle hosts in de groep.
- mask
- Het subnet mask van het gedeelde IP.
Verder kan CARP gedrag geregeld worden via
sysctl(8).
- net.inet.carp.allow
- Aanvaard binnenkomende CARP pakketten of niet. Standaardwaarde is 1 (ja).
- net.inet.carp.preempt
- Laat hosts binnen een redundantiegroep die een betere advbase
en advskew hebben, toe om de plaats van master in te nemen.
Bovendien schakelt deze optie ook het falen over alle interfaces in wanneer
één interface down gaat.
Als één fysische CARP-enabled interface down gaat, zal CARP advskew
op 240 zetten op alle andere CARP-enabled interfaces, en doet daarbij in
essentie failover van zichzelf.
Deze optie is standaard 0 (uitgeschakeld).
- net.inet.carp.log
- Log slechte CARP pakketten. Standaardwaarde is 0 (uitgeschakeld).
- net.inet.carp.arpbalance
- Verdeel de belasting van verkeer tussen meerdere hosts in de
redundantiegroep.
Standaardwaarde is 0 (uitgeschakeld).
Zie
carp(4) voor meer informatie.
CARP Voorbeeld
Een voorbeeld CARP configuratie.
# sysctl -w net.inet.carp.allow=1
# ifconfig carp1 create
# ifconfig carp1 vhid 1 pass mekmitasdigoat carpdev em0 \
advskew 100 10.0.0.1 255.255.255.0
Dit stelt het volgende in:
- Schakelt ontvangst van CARP pakketten in (dit is de standaard instelling).
- Maakt een carp(4) interface, carp1, aan.
- Configureert carp1 voor virtuele host #1, schakelt een wachtwoord
in, stelt em0 in als de interface die behoort tot de groep, en
maakt deze host tot backup wegens de advskew van 100
(natuurlijk in de veronderstelling dat de master ingesteld is met een
advskew van minder dan 100).
Het gedeelde IP toegekend aan deze groep is 10.0.0.1/255.255.255.0.
Het uitvoeren van ifconfig op carp1 toont de toestand van de
interface.
# ifconfig carp1
carp1: flags=8802<UP,BROADCAST,SIMPLEX,MULTICAST> mtu 1500
carp: BACKUP carpdev em0 vhid 1 advbase 1
advskew 100
inet 10.0.0.1 netmask 0xffffff00 broadcast
10.0.0.255
Inleiding tot pfsync
De
pfsync(4) netwerkinterface legt bepaalde veranderingen bloot die gedaan
werden aan de
pf(4) toestandstabel.
Door deze device te monitoren met
tcpdump(8), kunnen veranderingen aan de toestandstabel in real time
geobserveerd worden.
Bovendien kan de pfsync(4) interface deze toestandsveranderingsboodschappen
naar buiten op het netwerk sturen zodat andere knooppunten die PF draaien
de veranderingen in hun eigen toestandstabel kunnen samensmelten.
pfsync(4) kan eveneens op het netwerk luisteren naar binnenkomende
boodschappen.
pfsync Werking
Standaard zendt of ontvangt pfsync(4) geen toestandstabel updates op het
netwerk; updates kunnen echter nog steeds gemonitord worden met tcpdump(8)
of andere zulke tools op de lokale machine.
Wanneer pfsync(4) ingesteld is om updates te zenden en te ontvangen op het
netwerk, is het standaard gedrag om updates te multicasten naar buiten op
het lokale netwerk.
Alle updates worden zonder authenticatie gestuurd.
De beste algemene praktijk is ofwel:
- Verbind de twee knooppunten die updates zullen uitwisselen rug-aan-rug
met een crossover kabel en gebruik die interface als de
syncdev (zie hieronder).
- Gebruik de syncpeer ifconfig(8) optie (zie hieronder) zodat
updates rechtstreeks naar de peer geünicast worden, configureer vervolgens
ipsec(4)
tussen de hosts om het pfsync(4) verkeer te beveiligen.
Wanneer updates verzonden en ontvangen worden op het netwerk, moeten pfsync
pakketten doorgelaten worden in de filterregelset:
pass on $sync_if proto pfsync
$sync_if is de fysische interface waarover pfsync(4) communiceert.
pfsync Configureren
Aangezien pfsync(4) een virtuele netwerkinterface is, wordt het geconfigureerd
met
ifconfig(8).
ifconfig pfsyncN syncdev syncdev [syncpeer
syncpeer]
- pfsyncN
- De naam van de pfsync(4) interface. pfsync0 bestaat
standaard bij gebruik van de GENERIC kernel.
- syncdev
- De naam van de fysische interface gebruikt om pfsync updates uit te zenden.
- syncpeer
- Deze optionele parameter specificeert het IP adres van een host waarmee
pfsync updates uitwisselt.
Standaard worden pfsync updates gemulticast op het lokale netwerk.
Deze optie heft dat gedrag op en unicast in de plaats de update naar de
gespecificeerde syncpeer.
pfsync Voorbeeld
Een voorbeeld pfsync configuratie.
# ifconfig pfsync0 syncdev em1
Dit schakelt pfsync in op de em1 interface.
Buitengaande updates zullen gemulticast worden op het netwerk, wat gelijk
welke andere host die pfsync draait, toelaat ze te ontvangen.
CARP en pfsync Combineren voor Failover
Door de functionaliteiten van CARP en pfsync te combineren, kan een groep
van twee of meer firewalls gebruikt worden om een hoogst beschikbare, volledig
redundante firewall cluster te creëren.
- CARP:
- Zorgt voor de automatische failover van één firewall naar een andere.
- pfsync:
- Synchroniseert de toestandstabel tussen al de firewalls.
Bij een failover kan verkeer ononderbroken doorheen de nieuwe master
firewall stromen.
Een voorbeeldscenario.
Twee firewalls, fw1 en fw2.
+----| WAN/Internet |----+
| |
em2| |em2
+-----+ +-----+
| fw1 |-em1----------em1-| fw2 |
+-----+ +-----+
em0| |em0
| |
---+------Gedeelde LAN------+---
De firewalls zijn rug-aan-rug verbonden met een crossover kabel op
em1.
Beide zijn verbonden met de LAN op em0 en met een WAN/Internet
verbinding op em2.
IP adressen zijn als volgt:
- fw1 em0: 172.16.0.1
- fw1 em1: 10.10.10.1
- fw1 em2: 192.0.2.1
- fw2 em0: 172.16.0.2
- fw2 em1: 10.10.10.2
- fw2 em2: 192.0.2.2
- LAN gedeeld IP: 172.16.0.100
- WAN/Internet gedeeld IP: 192.0.2.100
Het netwerkbeleid is dat fw1 bij voorkeur master zal zijn.
Configureer fw1:
! schakel "preemption" en groep interface failover in
# sysctl -w net.inet.carp.preempt=1
! configureer pfsync
# ifconfig em1 10.10.10.1 netmask 255.255.255.0
# ifconfig pfsync0 syncdev em1
# ifconfig pfsync0 up
! configureer CARP aan de LAN zijde
# ifconfig carp1 create
# ifconfig carp1 vhid 1 carpdev em0 pass lanpasswd \
172.16.0.100 255.255.255.0
! configureer CARP aan de WAN/Internet zijde
# ifconfig carp2 create
# ifconfig carp2 vhid 2 carpdev em2 pass netpasswd \
192.0.2.100 255.255.255.0
|
Configureer fw2:
! schakel "preemption" en groep interface failover in
# sysctl -w net.inet.carp.preempt=1
! configureer pfsync
# ifconfig em1 10.10.10.2 netmask 255.255.255.0
# ifconfig pfsync0 syncdev em1
# ifconfig pfsync0 up
! configureer CARP aan de LAN zijde
# ifconfig carp1 create
# ifconfig carp1 vhid 1 carpdev em0 pass lanpasswd \
advskew 128 172.16.0.100 255.255.255.0
! configureer CARP aan de WAN/Internet zijde
# ifconfig carp2 create
# ifconfig carp2 vhid 2 carpdev em2 pass netpasswd \
advskew 128 192.0.2.100 255.255.255.0
|
Werkingsproblemen
Een aantal veel voorkomende werkingsproblemen ondervonden met CARP/pfsync.
CARP en pfsync Configureren tijdens het Booten
Aangezien carp(4) en pfsync(4) allebei types van netwerkinterfaces zijn,
kunnen ze bij het booten geconfigureerd worden door een
hostname.if(5) bestand aan te maken.
Het
netstart opstartscript zal de interface aanmaken en configureren.
Voorbeelden:
- /etc/hostname.carp1
-
inet 172.16.0.100 255.255.255.0 172.16.0.255 vhid 1 carpdev em0 \
pass lanpasswd
- /etc/hostname.pfsync0
-
up syncdev em1
Failover van de Master Dwingen
Er kunnen momenten zijn wanneer het nodig is met opzet failover te doen of
het master knooppunt opzij te zetten.
Voorbeelden zijn het laten down gaan van het master knooppunt voor onderhoud
of voor het oplossen van een probleem.
Het doel hier is om elegant verkeer te failoveren naar één van de backup
hosts zodat gebruikers geen enkel effect merken.
Om failover te doen, schakelt u de carp(4) interface uit op het master
knooppunt.
Dit zal ertoe leiden dat de master zichzelf aankondigt met een "oneindige"
advbase en advskew.
De backup host(s) zal (zullen) dit zien en onmiddellijk de rol van master
overnemen.
# ifconfig carp1 down
Regelset Tips
Filter de fysische interface.
Voor wat PF betreft, komt netwerkverkeer van de fysische
interface, niet van de CARP virtuele interface (bv. carp0).
Schrijf uw regelsets dus dienovereenkomstig.
Vergeet niet dat een interface-naam in PF ofwel de naam van een fysische
interface ofwel een adres geassocieerd met die interface kan zijn.
Deze regel zou bijvoorbeeld juist kunnen zijn:
pass in on fxp0 inet proto tcp from any to carp0 port 22
maar de fxp0 vervangen door carp0 zou niet werken zoals
u wenst.
Vergeet NIET proto carp en proto pfsync
door te laten!
Andere Referenties
Bekijk alstublieft deze andere bronnen voor meer informatie:
[Vorige: Authpf: Gebruiker-Shell voor Authentiserende
Gateways]
[Inhoud]
[Volgende: Firewall voor Thuis of Klein Kantoor]
www@openbsd.org
$OpenBSD: carp.html,v 1.8 2006/05/01 09:48:11 jufi Exp $