OpenBSD aktiivne/passiivne tulemüürilahendus

Allikas: Kuutõrvaja

Sissejuhatus

OpenBSD aktiivne/passiivne tulemüürilahendus koosneb kahest samasuguste omadustega tulemüüridena ettevalmistatud arvutist, kusjuures

  • igal ajahetkel toimub liiklus läbi ühe või teise, vastavalt nimetatakse ühte aktiivseks ja teist passiivseks
  • liiklust saab ümber lülitada, ümberlülitus toimub sekundite jooksul ning nt läbi tulemüüri käivad TCP ühendused säilivad

Alltoodud joonisel on kujutatud arvutitest kalake ja tuvike koosnev aktiive/passiivne tulemüürilahendus, lisaks on näidatud ära tulemüüriga kohtvõrgu poolt kokku puutuv töökohaarvuti ning avaliku võrgu poolt internetiühenduse teenusepakkuja ruuter. Kui nö sel kuul on aktiivne kalake ja passiivne tuvike, siis pöördudes töökohaarvutist avalikus võrgus asuva www.loomaaed.tartu.ee veebikoha poole käib liiklus läbi kalakese, tuvikesest ei käi liiklust üldse läbi.

               www.loomaaed.tartu.ee
                                       |
    
                                   avalik võrk
 
                                       |
                                      _|_
                                     |   |
                                     |___| isp ruuter
                                       |
                                       |
                  ---|-----------------|----------------------|---
                     |                                        |
                     |                                        |
                    _|_                                      _|_  
                   |   | kalake                      tuvike |   | 
                   |   |                                    |   |
                   |___|                                    |___| 
                     |                                        |   
                     |                                        |          
                     |                                        |
                  ---|-----------------|----------------------|---
                                       |
                                     --|--------------------------------|-----
                                                                        |
                                                                       _|_
                                    kohtvõrk                          |   |  töökoht
                                                                      |___|

Aktiivne/passiive lahendus

  • ei paku suuremat jõudlust
  • pakub paremat käideldavust selles mõttes, et ühe tulemüüri riknemisel lülitub automaatselt asemele teine
  • tõstab kaudselt turvalisust kuivõrd ühe tulemüüri uuendamine ei sega teenuse pakkumist ja vajadusel saab viimati töötanule tagasi lülituda st tulemüüri tarkvarauuendusi (ja muidu muudatusi) tehakse parema meelega

Aktiivse/passiivse lahenduse tööpõhimõte

Mainime meeldetuletuseks, et nö tavalisel juhul toimub ethernet'is st praktiliselt ühe subneti piires osaliste vahel andmevahetus kasutades mac aadresse. Kusjuures ühe arvuti (00:03:47:9b:76:56, 172.16.0.254) esmakordsel pöördumisel teise (00:02:55:ee:1a:58, 172.16.0.250) poole teise arvuti IP aadressi järgi tehakse ARP (Address Resolution Protocol) protokolli abil esmalt kindlaks teise arvuti mac aadress. Näiteks kuulates esimesel arvutil ühes aknas võrku pealt ning öeldes samal ajal 'ping 172.16.0.250' paistab selline liiklus võrgus

 # tcpdump -nettti fxp2 arp or icmp                           
 tcpdump: listening on fxp2, link-type EN10MB
 Jun 23 11:45:41.144188 00:03:47:9b:76:56 ff:ff:ff:ff:ff:ff 0806 42: arp who-has 172.16.0.250 tell 172.16.0.254
 Jun 23 11:45:41.144304 00:02:55:ee:1a:58 00:03:47:9b:76:56 0806 60: arp reply 172.16.0.250 is-at 00:02:55:ee:1a:58
 Jun 23 11:45:41.144320 00:03:47:9b:76:56 00:02:55:ee:1a:58 0800 98: 172.16.0.254 > 172.16.0.250: icmp: echo request
 Jun 23 11:45:41.144601 00:02:55:ee:1a:58 00:03:47:9b:76:56 0800 98: 172.16.0.250 > 172.16.0.254: icmp: echo reply
  • esimene pakett on arp broadcast, mis jõuab selle subneti kõigi arvutiteni
  • broadcastile vastab vaid see arvuti, mille ip aadress on 172.16.0.250, et ta mac aadress on 00:02:55:ee:1a:58
  • edasi kasutatakse suhtlemiseks mac aadresse ja andmevahetus toimub otse; pöörduja salvestab ip aadressi ja mac aadressi seose oma arp cache'is, mille sisu saab vaadata käsuga 'arp -na' ning sealt sissekandeid eemaldada käsuga 'arp -d ip.aa.dre.ss'

Tänapäeval on lokaalsed subnetid reeglina lülitatud võrgud (ingl. k. switched networks) ja arp broadcast jõuab kõigi switchi portideni, kuid edasist konkreetsete mac aadresside vahel toimuvat liiklust vahendab lüliti (ingl. k. switch) ainult oma kahe vastava pordi vahel. See on võimalik kuna lüliti jälgib oma portidesse sisenevate etherneti frame'ide src mac aadresse ja seostab need mac aadressid konkreetsete portidega; ja kasutab sedasi õpitut järgnevalt sisenevaid pakette nende dst mac aadresside järgi sobivatesse portidesse suunates. Tavaliselt vastab ühele pordile üks mac aadress, kuid ühele pordile võib vastata ka mitu mac aadressi. Näiteks on mitu mac aadressi trunk pordil, samuti mode access pordil kui seal taga töötavad Xen virtuaalsed arvutid

 cisco-lüliti-promp# show mac-address-table | inc 401
 401    7010.0000.1088    DYNAMIC     Gi0/4
 401    7010.0000.1090    DYNAMIC     Gi0/4
 401    7010.0000.1092    DYNAMIC     Gi0/4
 401    7010.0000.1094    DYNAMIC     Gi0/4

Akviine/passiivne tulemüürilahendus põhineb CARP (Common Address Redundancy Protocol) protokolli kasutamisel, mis võimaldab ühe subneti piires mitmele arvutile lisada ühe ühise virtuaalse mac aadressi ja ühe (või mitu) ühise virtuaalse ip aadressi, kuid igal ajahetkel vastab kõnealustest arvutitest vaid üks neile virtuaalsetele aadressidele.

Jättes korraks kõrvale aktiivse/passiive tulemüüri küsimuse kirjeldame CARP protokolli tööd ühes subnetis paiknevate arvutitega. Skeemil on kujutatud kolme arvutit nende füüsilistele seadmetele vastavate mac aadresside ja nö tavaliste ip aadressidega. CARP protokolli kasutamisel on arvutitel kalake ja tuvike lisaks nende füüsiliste võrguseadmete mac aadressidele ja nö päris ip aadressidel veel juurde lisandunud virtuaalne mac aadress 00:00:5e:00:01:01 ning virtuaalne ip aadress 10.0.0.254

                    ___                       ___         
                   |   | kalake       tuvike |   | 
         10.0.0.11 |___| MASTER        SLAVE |___| 10.0.0.12
 00:e0:4c:02:89:18   |                         |   00:c0:26:27:4d:fe
        10.0.0.254   |                         |   10.0.0.254
 00:00:5e:00:01:01   |                         |   00:00:5e:00:01:01
                     |                         |   
                 ----|-------------------------|--------------|----
                                                              |  
                                                             _|_  10.0.0.15
                                                            |   | 00:0c:42:07:1a:45
                                                            |___| töökoht

CARP protokolli kasutamise abil tagatakse, et igal ajahetkel vastab ainult üks arvuti ühisele ip aadressile 10.0.0.254 esitatud ARP päringule mac aadressiga 00:00:5e:00:01:01 kusjuures edasise andmevahetuse src mac aadressina kasutab see arvuti oma füüsilise seadme mac aadressi. Näiteks öeldes töökoht arvutist

 # ping 10.0.0.254

ning jälgides kalakeses ja tuvikeses võrku näeb sellist liiklust

 kalake# tcpdump -nettti fxp0 arp or icmp  
 Apr 14 02:55:24.752338 00:0c:42:07:1a:45 ff:ff:ff:ff:ff:ff 0806 60: arp who-has 10.0.0.254 tell 10.0.0.15
 Apr 14 02:55:24.752369 00:00:5e:00:01:01 00:0c:42:07:1a:45 0806 60: arp reply 10.0.0.254 is-at 00:00:5e:00:01:01
 Apr 14 02:55:24.752447 00:0c:42:07:1a:45 00:00:5e:00:01:01 0800 98: 10.0.0.15 > 10.0.0.254: icmp: echo request (DF)
 Apr 14 02:55:24.752476 00:e0:4c:02:89:18 00:0c:42:07:1a:45 0800 98: 10.0.0.254 > 10.0.0.15: icmp: echo reply (DF)
 tuvike# tcpdump -nettti em0 arp or icmp  
 tcpdump: listening on em0, link-type EN10MB
 Jun 23 13:03:09.016254 00:0c:42:07:1a:45 ff:ff:ff:ff:ff:ff 0806 60: arp who-has 10.0.0.254 tell 10.0.0.15

Parasjagu päringutele vastavat arvutit nimetatakse MASTER'iks (ingl. k. peremees) ning teist SLAVE'iks (ingl. k. ori).

CARP protokoll tagab igale osalisele omistatud nn kaalu abil, et igal ajahetkel peetakse ainult ühte osalist MASTERiks. Alguses osalised saadavad välja samas ethernetis CARP sõnumeid ning kõik peale kõige kõrgema kaaluga (arvuliselt kõige väiksem) saatja jäävad vait ning võrku jääb saatma sõnumeid vaid MASTER (carp kasutab vrrp protokolli numbrit 112 kuna IANA seltsimehed keeldusid carp'i registreerimast)

 # tcpdump -nettti fxp0 proto 112
 tcpdump: listening on fxp0, link-type EN10MB
 Apr 14 03:04:38.497365 00:00:5e:00:01:01 01:00:5e:00:00:12 0800 70: CARPv2-advertise 36: vhid=1 advbase=1 advskew=0 demote=0 (DF) [tos 0x10]
 Apr 14 03:04:39.507378 00:00:5e:00:01:01 01:00:5e:00:00:12 0800 70: CARPv2-advertise 36: vhid=1 advbase=1 advskew=0 demote=0 (DF) [tos 0x10]

Kui juhtub nii, et SLAVE enam ei näe neid sõnumeid, nt põhjusel, et MASTERil on toiteplokk katki läinud ja arvuti seisma jäänud või MASTERi kaal, mille määrab advbase ja advskew väärtus on langenud alla SLAVE'i enda kaalu, siis asub sõnumeid saatma SLAVE ja tulemusena on tekkinud uus MASTER

 # tcpdump -nettti fxp0 proto 112
 Jun 23 13:16:48.772571 00:00:5e:00:01:01 01:00:5e:00:00:12 0800 70: CARPv2-advertise 36: vhid=1 advbase=1 advskew=128 demote=0 (DF) [tos 0x10]
 Jun 23 13:16:50.282573 00:00:5e:00:01:01 01:00:5e:00:00:12 0800 70: CARPv2-advertise 36: vhid=1 advbase=1 advskew=128 demote=0 (DF) [tos 0x10]

Eelpool mainisime, et lüliti seostab sisemiselt oma portidega sealt sisenenud pakettide src mac aadresse. Kuna MASTER saadab regulaarselt (vaikimisi kord sekundis) carp pakette ühise src aadressiga 00:00:5e:00:01:01, siis on nii tagatud, et lüliti on seostanud sisemiselt MASTERile vastava füüsilise pordiga virtuaalse mac aadressi.

Tulemüüri puhul on osalevatel arvutitel mitu füüsilist võrgukaarti, samasse subnetti kuuluvate seadmete eristamiseks teistest kasutatakse CARP gruppe. Ühist virtuaalset mac ja ip aadressi omavad seadmed moodustavad CARP grupi, mida identifitseerib vhid parammeetri väärtus. Eeltoodud näidetes oli see väärtus 1.

Aktiivse/passiivse tulemüürilahenduse seadistamine

Seadistame vastavalt sellisele skeemile aktiivse/passiivse tulemüürilahendusena tööle hakkavad kaks arvutit, kummalgi on kaks võrgukaarti

                                   avalik võrk
 
                                       |
                                      _|_
                                     |   |
                                     |___| isp ruuter
                                       |   ip: 192.168.1.253, võrgu 10.0.0.0/24 gw: 192.168.1.254
                                       |
                  ---|-----------------|----------------------|---
                     |   tulemüüri avalik ip: 192.168.1.254   |
                     |      avalik mac: 00:00:5e:00:01:02     |
                     |       carp vhid: 2                     |
      192.168.1.11  _|_  rl0, carp2              rl0, carp2  _|_  192.168.1.12
 00:03:47:e0:1d:1c |   | kalake                      tuvike |   | 00:0e:0c:ba:4b:28
                   |   | MASTER                       SLAVE |   |
         10.0.0.11 |___| fxp0, carp1             em0, carp1 |___| 10.0.0.12
 00:e0:4c:02:89:18   |                                        |   00:c0:26:27:4d:fe
                     |                                        |          
                     |     tulemüüri sisemine ip 10.0.0.254   |
                     |      sisemine mac: 00:00:5e:00:01:01   |
                     |         carp vhid: 1
                  ---|-----------------|----------------------|------------------------
                                       |
                                     --|--------------------------------|-----
                                                                        |
                                                                       _|_  ip: 10.0.0.15, gw: 10.0.0.254
                                    kohtvõrk                          |   | töökoht
                                                                      |___|

CARP tugi on OpenBSD tuumas ja selle sisselülitamiseks tuleb seada sysctl parameeter, mingit deemonit ei ole

 net.inet.carp.allow=1

Arvutite võrk on seadistatud tavapäraselt, kuid lisaks on tekitatud spetsiifilised nn carp seadmed. Selleks tuleb öelda kalakeses

 # ifconfig carp1 create
 # ifconfig carp1 vhid 1 carpdev fxp0 pass lanpasswd 10.0.0.254 netmask 255.255.255.0
 # ifconfig carp2 create
 # ifconfig carp2 vhid 2 carpdev rl0 pass lanpasswd 192.168.1.254 netmask 255.255.255.0

ning tuvikeses

 # ifconfig carp1 create
 # ifconfig carp1 vhid 1 carpdev em0 pass lanpasswd advskew 128 10.0.0.254 netmask 255.255.255.0
 # ifconfig carp2 create
 # ifconfig carp2 vhid 2 carpdev rl0 pass lanpasswd advskew 128 192.168.1.254 netmask 255.255.255.0
  • tuvike on SLAVE ja seetõttu on seal advskew väärtus suurem, kalake on MASTER ja advskew vaikeväärtus on 0
  • carp pakettide vahetamisel nõutakse osalistelt autentimist, parool ('lanpasswd' antud juhul) peab olema kõigil carp grupi osalistel seadetel samasugune
  • vhid peab olema kõigil carp grupi seadmeetel samasugune, lubatud väärtused on 1-255
  • carp seadmete nimed on kujul carpN, tingimata ei pea, aga halduse teeb lihtsamaks kui valitud number langeb kokku vhid väärtuse ja nt vastava füüsilise seadme vlan numbriga
  • ip aadress ja netmask peab oleva kõigil carp grupi seadmetel samasugune

Pange tähele, et tuvikeses on lisatud "advskew 128", mis tähendab, et normaalses olekus on kalake teenust pakkuv arvuti ehk MASTER.

Tulemusena on näha selline ifconfig väljund kalakeses

 carp1: flags=8803<UP,BROADCAST,SIMPLEX,MULTICAST> mtu 1500
        lladdr 00:00:5e:00:01:01
        carp: MASTER carpdev fxp0 vhid 1 advbase 1 advskew 0
        groups: carp
        inet6 fe80::200:5eff:fe00:101%carp1 prefixlen 64 scopeid 0x9
        inet 10.0.0.254 netmask 0xffffff00 broadcast 10.0.0.255

ning selline tuvikeses

 carp1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        lladdr 00:00:5e:00:01:01
        carp: BACKUP carpdev em0 vhid 1 advbase 1 advskew 128
        groups: carp
        inet6 fe80::200:5eff:fe00:101%carp1 prefixlen 64 scopeid 0x7
        inet 10.0.0.254 netmask 0xffffff00 broadcast 10.0.0.255

ning sarnaselt seadmed carp2 mõlemas arvutis. Kusjuures virtuaalsed mac aadressid ei ole juhuslike väärtustega vaid sõltuvad vhid numbrist; 'groups: carp' käib ifconfig grupi, mitte carp grupi kohta.

Selleks, et peale arvuti alglaadimist sarnased seadmed tekkiksid peavad olema arvutites vastavalt sellised failid moodustatud

 kalake# cat /etc/hostname.carp1                                                                                                                                  
 inet 10.0.0.254 255.255.255.0 10.0.0.255 vhid 1 carpdev fxp0 pass lanpasswd
 kalake# cat /etc/hostname.carp2                                                                                                 
 inet 192.168.1.254 255.255.255.0 192.168.1.255 vhid 2 carpdev rl0 pass lanpasswd

ja

 tuvike# cat /etc/hostname.carp1
 inet 10.0.0.254 255.255.255.0 192.168.1.255 advskew 128 vhid 1 carpdev em0 pass lanpasswd
 tuvike# cat /etc/hostname.carp2
 inet 192.168.1.254 255.255.255.0 192.168.1.255 advskew 128 vhid 2 carpdev rl0 pass lanpasswd

Paketifiltri seadistamine iseärasused

CARP kasutamisel peab arvestama, et liiklus käib siiski CARP seadmetele vastavate füüsiliste seadmete kaudu, st füüsilisele seadmele rakendatud pass ja block reeglid töötavad ka CARP liikluse jaoks (nii CARP protokolli kui virtuaalsete aadressidega seotud liiklus). Sama kehtib ka tcpdump abil võrgu pealt kuulamise kohta.

Seda milline osaline parasjagu teenust pakub kontrollitakse CARP protokolli abil, arusaadavalt peab siis paketifilter lubaba läbi vastavat liiklust, näiteks

 pass quick on $ext_if proto carp

Paketifiltris saab kasutada CARP seadme nime ja füüsilise seadme nime kohtades, kus see lahendatakse aadressiks, kuid peab arvestama, milliseks aadressiks see lahendub. Lisaks antispoof reegel ei pruugi toimida ootuspäraselt.

Sihtpunkti ip aadressi mõttes saadetakse carp paketid multicast aadressile 224.0.0.18. Töötavas carp lahenduses jälgides paketifiltri olekuid on kirjas sellised olekud aktiivses tulemüüri õlas (paketid väljuvad arvutist)

 all carp 192.168.1.11 -> 224.0.0.18       SINGLE:NO_TRAFFIC
 all carp 10.0.0.11 -> 224.0.0.18       SINGLE:NO_TRAFFIC

ja sellised mitteaktiivses (paketid sisenevad arvutisse)

 all carp 224.0.0.18 <- 192.168.1.11       NO_TRAFFIC:SINGLE
 all carp 224.0.0.18 <- 10.0.0.11       NO_TRAFFIC:SINGLE

Sedasi paketifiltri järgi on ka hea teha kindlaks, milline füüsiline tulemüür parasjagu pakette välja saadab.

Teenuste seadistamise iseärasused

Teenuste seadistamise puhul on mõnus see, et teenusega seotud ip aadress on arvutil kogu aeg olemas ja sellele saab teenuse ära bindida. Ning kui madalas kihis töötava CARP protokolli tegevuse tulemusena hakkavad paketid laekuma, siis algabki teenindamine.

Arvuti füüsilise seadme ip aadressi on haldustegevuste jaoks hea kasutada, aga tulemüüri teenuse seisukohalt ei ole see vajalik ja võib omistamata jätta. Siinjuures peab siiski arvestama, et jätkuks ligipääs üle võrgu halduseks ka SLAVE'ile kui ei kasutata nt serial konsooli.

Kui tulemüürides asub ka muidu teenuseid (nt nimeserver või spamd), siis peab tagama muude vahenditega, et vastavad andmed oleksid sisulises osas sobivas seisundis, CARP sellega ei tegele. Samuti ei anna CARP üle tulemüürist algavaid või sinna lõppevaid ühendusi.

Haldamine

Tulemüüri puhul on tavaliselt vajalik, et kui ühe carp seadme MASTER lülitub ümber, et siis lülituksid kõik ümber, seda tagab sysctl väärtuse seadistamine

 net.inet.carp.preempt=1

Kui selles arvutis, mis parasjagu tegeleb teenuse pakkumisega on tarvis teha hooldustööd, siis kasutajate ümbersuunamiseks teisele arvutile on mitu võimalust

  • seada MASTERis kõigi carp seadmete advskew suuremaks BACKUP'i omast (olgu see 100), tõenäoliselt on abiks kasutada skripti või for tsüklit
 # ifconfig carp1 advskew 120
 # ifconfig carp2 advskew 120

Sel juhul jääb endine MASTER osalema carp lülituses, aga BACKUP'i rollis; endine BACKUP lülitatakse aga MASTERiks.

  • öelda MASTERis kõigile carp seadmetele down
 # ifconfig carp1 down
 # ifconfig carp2 down

Ja hooldustöö lõppemisel jällegi up

 # ifconfig carp1 up
 # ifconfig carp2 up
  • muuta ifconfig carp grupi demote (ingl. k. madalamale ametikohale viima) väärtust, mida suurem see väärtus on, seda ebatõenäolisemalt on vastavasse gruppi kuuluvad seadmed MASTER'id, vaikimisi on väärtus null; NB kuivõrg toimetatakse ifconfig grupiga kuhu kuuluvad vaikimisi kõik carp seadmed, siis piisab ühest käsust
 # ifconfig -g carp carpdemote 50

Ning tagasi viimiseks

 # ifconfig -g carp -carpdemote 50
  • öelda MASTERi mõnele carp seadmele vastavale füüsilisele seadmele down, seejuures toimub automaatselt carp grupi seadmete demote counteri suurendamine, millega omakorda kaasneb advskew väärtuse 240 kasutamine
 # ifconfig rl0 down

ja hööldustöö lõpul

 # ifconfig rl0 up

Kui aktiivne tulemüür peatada (öelda halt) või kaabli eemaldamise teel võrgust lahti ühendada, siis SLAVE ei näe enam carp pakette ning asub MASTER'iks.

Kusjuures, kui carp'i tehakse üle vlan seadmete, siis carp'i ümberlülituseks ei sobi öelda vlan seadmele destroy, tuleb öelda samuti down.

Paketifiltri olekutabeli sünkroniseerimine kahe füüsilise arvuti vahel

Lülitades CARP protokolli abil liiklust ühest tulemüürist teise on küll võrguühendus märkimisväärse katkestuseta pidevalt iseenesest olemas, aga läbi tulemüüri käinud tcp sessioonid lähevad katki. tcp ühenduste säilimiseks saab kasutada pfsync protokolli, mis hoiab passiivse tulemüüri paketifiltri olekutabelit sünkroonis aktiivse tulemüüri omaga ning sedasi jäävad peale MASTERi vahetust sessioonid alles.

pfsync tugi on OpenBSD tuumas, mingit deemonit ei ole vaja käivitada, kasutamiseks tuleb kaks arvutit omavahel soovitavalt ainult selleks mõeldud võrgukaarte pidi kaabliga ühendada (vanemate võrgukaartide puhul tuleb kasutada risti keerupaari, kaasaaegsed võrgukaardid töötavad ka otse kaabliga) näiteks selliselt nagu skeemil kujutatud

                                   avalik võrk
                   
                                       |
                                       |
                  ---|-----------------|----------------------|---
                     |   tulemüüri avalik ip: 192.168.1.254   |
                     |                                        |
                     |                                        |
      192.168.1.11  _|_                                      _|_  192.168.1.12
                   |   | kalake     pfsync           tuvike |   | 
                   |   |------------------------------------|   |
         10.0.0.11 |___|  172.16.0.11           172.16.0.12 |___| 10.0.0.12
                     |                                        |   
                     |                                        |          
                     |     tulemüüri sisemine ip 10.0.0.254   |
                     |                                        |
                  ---|-----------------|----------------------|------------------------
                                       |
                                       |
                    
                                    kohtvõrk

ja seadistada pfsync seadmed öeldes kalakeses

 # ifconfig fxp1 172.16.0.11 netmask 255.255.255.0
 # ifconfig pfsync0 syncdev fxp1
 # ifconfig pfsync0 up

ning tuvikeses

 # ifconfig em1 172.16.0.12 netmask 255.255.255.0
 # ifconfig pfsync0 syncdev em1
 # ifconfig pfsync0 up

Selliselt moodustatud pfsync seadmete vahel toimub andmeavahetus üle multicasti

 pfsync0: flags=41<UP,RUNNING> mtu 1460
       pfsync: syncdev: em1 syncpeer: 224.0.0.240 maxupd: 128
       groups: carp pfsync

Kui see pole soovitav, saab seadistada parameetri syncpeer abil andmevahetuse ka üle unicast, näidates teise poole ip aadressi mõlemas osalises

 # ifconfig pfsync0 syncdev fxp1 syncpeer 172.16.0.12

Ja tulemusena tekkiv seade on selline

 pfsync0: flags=41<UP,RUNNING> mtu 1460
       pfsync: syncdev: fxp1 syncpeer: 172.16.0.12 maxupd: 128
       groups: carp pfsync

Selleks, et alglaadimisel pfsync seadistataks, etulb lisaks tavapärasel moel võrguseadmete seadistamisele moodustada kummaski arvutis fail /etc/hostname.pfsync0, kalakeses

 up syncdev fxp1

ja tuvikeses

 up syncdev em1

Lisaks on tarvis paketifiltriga lubada läbi mõlemas arvutis vastavat liiklust, näiteks reaga

 pass on em1 proto pfsync

pfsync seadmete ühendamiseks saab kasutada ka üle vastavate seadmete moodustatud ipsec kanalit.

Aktiivne/aktiivne tulemüürilahendus

Lisaks aktiivne/passiivne tulemüürilahndusele on võimalik seadistada käima tulemüürilahendus nii, et kõiki osalevaid tulemüüre läbi mingi osa liiklusest. Nii saab tulemüürilahendust skaleerida arvutite juurdelisamise teel vastuseks võrgusõlme läbivale suurenenud liiklusele.

A/A lahenduse juures on väga oluline kuidas praktiliselt saavutatakse kõigi osalevate tulemüüridele liikluse kättesaadavaks tegemine, selleks on kolm võimalust

  • multicast - tulemüüri virtuaalne mac aadress on multicast aadress algusega 01:00:5e
  • unicast - tulemüüri virtuaalne mac aadress on VRRP jaoks IANA poolt reserveeritud 00:00:5e algusega aadress
  • ip-stealth - tulemüüri virtuaalne mac aadress on VRRP jaoks IANA poolt reserveeritud 00:00:5e algusega aadress, kusjuures, tulemüür ei kirjuta väljuvatele pakettidele src mac aadressiks kunagi seda aadressi

A/A lahenduse juures tuleb tähele panna, et aadressteisendus puhul on vaja proovimise teel valida kasutamiseks sobivad aadressid, et ühe tulemüüri kaudu läbi läinud pakettide vastuseid siseneksid läbi sama tulemüüri. Vastasel korral süsteem ei toimi.

multicast

Multicast on OpenBSD CARP IP-loadbalancing vaikerezhiim ja hostname.carp0 failis kasutatakse parameetri balancing juurest väärtust ip, nt selliselt

 # cat /etc/hostname.carp0
 inet 192.168.1.254 255.255.255.0 192.168.1.255 carpnodes 1:100,2:0 balancing ip pass lanpasswd1 carpdev bge0

Seejuures tuleb arvestada, et mõnedel võrguseadmetel võib olla raskusi multicast mac ja unicast ip aadressi komplekti kasutamisega.

unicast

Unicast puhul tuleb hostname.carp0 failis kasutada parameetri balancing juurest väärtust ip-unicast, nt selliselt

 # cat /etc/hostname.carp0
 inet 192.168.1.254 255.255.255.0 192.168.1.255 carpnodes 1:100,2:0 balancing ip pass lanpasswd1 carpdev bge0

See sobib kasutamiseks kui võrguseadmetena kasutatakse hub'i, nt VMware virtual switchid töötavad sellise seadistusega. Väidetavalt on võimalik nn manageeritav switch efektiivselt hubina seadistada, kuid kuidas seda praktiliselt teha ei ole teada.

ip-stealth

IP-põhise aktiivne/aktiivne tulemüürilahenduse seadistamiseks ip-stealth juhtumil peavad olema ühes arvutis failid

 # cat /etc/hostname.carp0
 inet 192.168.1.254 255.255.255.0 192.168.1.255 carpnodes 1:100,2:0 balancing ip-stealth pass lanpasswd1 carpdev bge0
 # cat /etc/hostname.carp1
 inet 10.0.0.254 255.255.255.0 10.0.0.255 carpnodes 3:100,4:0 balancing ip-stealth pass lanpasswd2 carpdev bge1

ja teises arvutis failid

 # cat /etc/hostname.carp0
 inet 192.168.1.254 255.255.255.0 192.168.1.255 carpnodes 1:0,2:100 balancing ip-stealth pass lanpassw1 carpdev bge0
 # cat /etc/hostname.carp1
 inet 10.0.0.254 255.255.255.0 10.0.0.255 carpnodes 3:0,4:100 balancing ip-stealth pass lanpassw2 carpdev bge1

Tulemusena moodustuvad sellised carp seadmed, esimesse arvutisse

 carp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
         lladdr 00:00:5e:00:01:01
         carp: carpdev bge0 advbase 1 balancing ip-stealth
               state BACKUP vhid 1 advskew 100
               state MASTER vhid 2 advskew 0
         groups: carp
         inet6 fe80::200:5eff:fe00:101%carp0 prefixlen 64 scopeid 0xa
         inet 192.168.1.254 netmask 0xfffffff0 broadcast 192.168.1.255
 carp1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
         lladdr 00:00:5e:00:01:03
         carp: carpdev bge1 advbase 1 balancing ip-stealth
               state BACKUP vhid 3 advskew 100
               state MASTER vhid 4 advskew 0
         groups: carp
         inet6 fe80::200:5eff:fe00:103%carp1 prefixlen 64 scopeid 0x8
         inet 10.0.0.254 netmask 0xffffffe0 broadcast 10.0.0.255

ning teise arvutisse

 carp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
         lladdr 00:00:5e:00:01:01
         carp: carpdev bge0 advbase 1 balancing ip-stealth
               state MASTER vhid 1 advskew 0
               state BACKUP vhid 2 advskew 100
         groups: carp
         inet6 fe80::200:5eff:fe00:101%carp0 prefixlen 64 scopeid 0xa
         inet 192.168.1.254 netmask 0xfffffff0 broadcast 192.168.1.255
 carp1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
         lladdr 00:00:5e:00:01:03
         carp: carpdev bge1 advbase 1 balancing ip-stealth
               state MASTER vhid 3 advskew 0
               state BACKUP vhid 4 advskew 100
         groups: carp
         inet6 fe80::200:5eff:fe00:103%carp1 prefixlen 64 scopeid 0x8
         inet 10.0.0.254 netmask 0xffffffe0 broadcast 10.0.0.255

IP-stealth juhtumile on iseloomulik, et kuigi tulemüüri abil internetti kättesaadavaks tehtud serveri arp tableis on kirjas seos tulemüüri virtuaalse mac aadressi ning tema virtuaalse ip vahel, siis samal ajal switch ei tea, millise switchi pordi taga asub virtuaalsele mac aadressile vastavad tulemüüride füüsilised võrguinterfaceid. Tulemusena saadab switch pakette switch kõigisse portidesse. Arvuti teab virt mac ja virt ip seose teada arp päringuga.

Märkused

  • CARP seadme võib moodustada füüsilise seadme asemel ka vlan võrguseadmele
  • CARP seadmel võib olla mitu ip aadressi, neid omistatakse nii nagu tavalisele seadmele, nt käsuga (seejuures tuleb jälgida, et mõlemad õlad oleksid aliaste osas identsed, muidu hakkavad mõlemad masteriteks vms ja võrk muutub ennustamatuks)
 # ifconfig carp1 alias 192.168.1.9 netmask 255.255.255.0
 # ifconfig carp1 alias 192.168.1.8 netmask 255.255.255.0
  • ifstated programmi abil saab korraldada vastavalt sellele, kas arvuti omandas MASTERi või BACKUPi oleku automaatselt programmide käivitamist; mõne programmi, nt bgpd ja ospfd seadistusfailist on võimalik programmi käitumist kontrollida vastavalt carp seadme olekule
  • spamd võimaldab /var/sb/spamd andmebaase sünkroniseerida
  • CARP skeemis võib osaleda ka rohkem kui kaks osalist ning töötada erinevatel riistvaralistel platvormidel, nt kolme puhul võiks tulemüüri puhul realiseerida aktiivne/passiivne/passiivne lahenduse
  • CARP protokoll võimaldab tekitada ka aktiivne/aktiive lahenduse, mida kirjeldatakse carp manuaalis, kuid see eeldab lähedalolevate võrguseadmete (nt lülitete) tähelepanelikumat seadistamist või vähemalt kontrollimist kuidas nad sel puhul käituvad
  • kui CARP seadmele vastaval füüsilisel seadmel on ip aadress ning carp seadmel samuti, siis tulemüürist endast selle füüsilise seadme kaudu väljuvate pakettide src aadressiks on füüsilise seadme aadress; kui füüsilisele seadmele ei ole ip aadressi seadistatud, siis tulemüürist endast vastava füüsilise seadme kaudu väljuvate pakettide src aadressiks on carp seadme aadress; kui carp seadmel on mitu aadressi (alias't), siis neist esimene; sel põhjusel on vahel kaval tulemüüri füüsilistele teenust pakkuvatele liidestele endile mitte aadresse omistada
  • carp seadmetele on soovitav seadistada /32 netmaskiga ip aadress

tabled

Programmiga tabled saab muuta paketifiltri tabelite sisu. Tabelite sisu saab muuta ka pfctl programmiga, kuid tabled võimaldab töötada üle võrgu. Näiteks on tabled abil sobiv hoida mitme tulemüüri tabeleid sünkroonis või propageerida haldusarvutist muudatusi tulemüüridesse.

tabled saab paigaldada paketist öeldes

 # pkg_add tabled

ning moodustada fifo öeldes

 # mkfifo /var/run/tabled.sock

Selles arvutis kus tabelid asuvad st tulemüüris peab töötama programm tabled deemon, mille tööd kontrollib seadistusfail /etc/tabled.conf. Näiteks sellise sisuga

 log-facility=daemon
 socket=/var/run/tabled.sock
 listen=192.168.10.254:50000
 secret=salasona

on määratud muu hulgas, et tabled ootab korraldusi võrgusoketil 192.168.10.254:50000 ning klient peab kasutama salasõna 'salasona'.

Tabeli sisu muutmiseks tuleb pöörduda serveri soketisse programmi tablec abil. Näiteks öeldes

 # tablec -s salasona -h 192.168.10.254:50000 -t tp -c add -f /tmp/addr.txt

lisatakse tableisse tp failis /tmp/addr.txt sisalduvad ip aadressid.

Kustutamiseks tuleb kasutada -c crl suvandit.

Tundub, et lisada ja eemaldada saab ip aadresse mitte võrke.

Tabeli tp sisu kopeerimiseks ühest arvutist teisse sobib öelda näiteks

 # pfctl -Ts -t tp | awk {'print $1'} | tablec -s salasona -h 192.168.10.254:50000 -t tp -c add -f -

awk on vajalik pfctl väljundist ridade eest tühikute eemaldamiseks.

Probleemid

Kahe aktiivne/passiivne lülituses tulemüüri kasutamisel on pisut ebaselge kuidas on otstarbekas (või mis kaalutlustel tuleks valik teha) lülitada ühe tulemüüri hoolduseks liiklus teisele tulemüürile, üldiselt soovitatakse kasutada kas demote counterit või adskew väärtuse muutmist. Tundub, et kui mõlemat kombineeritult kasutada, siis on võimalik carp seadmed omajagu ära eksitada.

  • Kaks arvutit vahetavad nö normaalsel juhtumil selliseid carp sõnumeid, tundub, et wireshark väljundis on väljal
 Priority: 100 (Default priority for a backup VRRP router)

kirjas, et sõnumi on väljastanud advskew väärtusega 100 töötav arvuti.

Carp-vrrp-1.gif

  • Kui mõlema osaleva arvuti advskew väärtused on üle 240 (mida saab saavutada nt selliselt, et öelda suurendada demote counteri väärtus ühel õlal 20'le ja seejärel teisel 25'le), siis demote counteri puhul vahetatakse selliseid carp sõnumeid, tundub, et wireshark väljundis on väljal
 Auth Type: Unknown (15)

kirjas, et sõnumi on väljastanud demote counteri väärtusega 15 töötav arvuti.

Carp-vrrp-2.gif

  • Eksitamine toimub aga selliselt, et kui mõlemal arvutil on demote counteri väärtused mingid positiivsed arvud, tuleb seadistada väiksema demote counteri arvuga arvuti mõnele carp seadmele suurem advskew väärtus kui teisel sealjuures peab see olema üle 240. Nt selliselt väljundilt on näha, et mõlemad osalised saadavad välja carp pakette ja ei suuda leppida kokku kumb on master: üks väljastab kuna tal on demote väiksem kui teisel; teine väljastab kuna tal on advskew väiksem kui teisel
 # tcpdump -ni vlan11  
 tcpdump: listening on vlan11, link-type EN10MB
 20:47:08.977266 CARPv2-advertise 36: vhid=11 advbase=1 advskew=240 demote=25 (DF) [tos 0x10]
 20:47:10.927270 CARPv2-advertise 36: vhid=11 advbase=1 advskew=240 demote=25 (DF) [tos 0x10]
 20:47:10.929330 CARPv2-advertise 36: vhid=11 advbase=1 advskew=245 demote=20 (DF) [tos 0x10]
 20:47:10.929331 arp who-has 172.16.11.42 tell 172.16.11.42
 20:47:12.877274 CARPv2-advertise 36: vhid=11 advbase=1 advskew=240 demote=25 (DF) [tos 0x10]
 20:47:14.827279 CARPv2-advertise 36: vhid=11 advbase=1 advskew=240 demote=25 (DF) [tos 0x10]
 20:47:14.829327 CARPv2-advertise 36: vhid=11 advbase=1 advskew=245 demote=20 (DF) [tos 0x10]
 20:47:14.829328 arp who-has 172.16.11.42 tell 172.16.11.42
  • balancing režiimide vahel valimisel muutub mõnel juhul virtuaalse võrguseadme virtuaalne mac aadress, sellisel juhul on ümbruse võimalik uut mac aadressi õpetada arping programmi abil, nt selliselt
 # arping -i em1 -p -s 00:00:5e:00:01:0d -S 192.168.0.203 192.168.0.92

kus

  • -i em1 - võrguseade mille subnetis õpetamine toimub
  • -p - promisc režiim mis on vajalik selleks, kui õpetada füüsilisele seadmele mitte vastavat ip aadressi
  • -s ja -S vastavalt uus mac ja ip aadressi seos, mida õpetatakse 192.168.0.92 arvutile

Kasulikud lisamaterjalid