Hlavní navigace

Vysoce dostupný firewall s Keepalived

Michal Filka 13. 11. 2007

V minulém článku byla představena motivace pro návrh vysoce dostupného firewallu na Linuxu. Zároveň byly předloženy dva problémy, se kterými bude potřeba se vypořádat. Nyní se tedy začneme zabývat jedním z možných řešení pro operační systém Linux. Dnes použijeme program Keepalived, který implementuje VRRP.

Více strojů jako jeden – rychlá odpověď

Pokročilého uživatele by mělo uspokojit, pokud prozradím, že pro řešení tohoto problému byl použit program keepalived. Toto je vše, co je nezbytně potřeba. Jak a co nakonfigurovat, je možné zjistit s pomocí Google.

Více strojů jako jeden – podrobněji

Tento problém lze vyřešit pomocí programu keepalived. Ten je open-source implementací protokolu VRRP, což je protokol definovaný v RFC 3768. Ačkoli je definice volně dostupná, protokol je patentován firmou Cisco.

VRRP pracuje tak, že definuje takzvaný virtuální router. Protokol byl navržen v souvislosti se zvýšením dostupnosti gatewayí, resp. routerů – odtud tedy označení. Tento virtuální router je dostupný pomocí virtuální IP adresy (VIP) a virtuální MAC adresy (VMAC). Virtualni router je identifikován číslem od 0 do 255 tak, aby bylo možné na jedné lokální síti definovat více virtuálních routerů.

Pomocí tohoto identifikátoru se do virtuálního routeru „vkládají“ fyzické stroje. Protokol VRRP se pak postará o to, aby si fyzické stroje předávaly VIP a VMAC a tím přebíraly funkcionalitu routeru. Zároveň se VRRP stará o detekci dostupnosti strojů ve virtuálním routeru – periodickým rozesíláním vrrp advertisement paketů.

Konfigurace

Keepalived se standardně konfiguruje pomocí souboru keepalived.conf, který je umístěn v /etc/keepalived/. Zajímavými položkami konfiguračního souboru jsou:

  1. definice instance VRRP,
  2. definice skupiny instancí,
  3. definice skriptů.

Dále popíšu ty části, které jsou zajímavé pro potřeby implementace vysoce dostupného firewallu. V hranatých závorkách budu uvádět jména atributů z konfiguračního souboru.

Definice instance [ vrrp_instance <name>] slouží pro konfiguraci jednoho virtuálního zařízení. Součástí konfigurace je definice VIP, která se má předávat. Ta je stejná na všech fyzických strojích v daném virtuálním routeru.

Dále definujeme, které fyzické zařízení [ interface] (například eth0) – a tím i fyzická ip adresa – na daném stroji bude zúčastněna v předávání virtuální adresy – tj. toho, na kterém zařízení fyzického stroje je možné očekávat VIP v případě, že je tento stroj ve stavu MASTER – pro virtuální router s daným id [ virtual_router_id].

Další položkou je definice stavu [ state] a definice priority [priority]. State může nabývat dvou hodnot – MASTER a BACKUP. Stroj, který je ve stavu MASTER, je pak držitelem virtuální adresy. Stav uvedený v konfiguračním souboru říká, v jakém stavu vzhledem k VRRP se má stroj po spuštění nacházet.

Toto nastavení je však (alespoň v keepalived) pouze informativní, protože každý stroj vkládaný do virtuálního routeru automaticky vyvolá proces volby MASTER, který je založen na prioritě. Status MASTER pak získá stroj s nejvyšší prioritou. Kdyby náhodou i priority byly stejné, použijí se v rozhodování IP adresy fyzických strojů. Tudíž je možné v konfiguraci každého fyzického stroje s klidným svědomím definovat stav MASTER a máme zaručeno, že se protokol postará o deterministickou volbu jednoho z členů virtuálního routeru, přes který následně poteče provoz.

Definice skupiny instancí umožňuje synchronizovat více instancí. Mějme například instance VI_1 a VI_2, které implementují virtuální adresy VIP1 a VIP2. Pokud jedna z těchto instancí zaznamená výpadek a tedy dojde na této instanci k přepnutí ze stavu MASTER do stavu BACKUP, pak nám sdružení do skupiny zaručí, že k přepnutí stavu dojde i na druhé instanci (obecně na všech). Toto je důležité právě při implementaci virtuálního routeru, který vždy má alespoň dvě rozhraní (vnitřní a vnější), které je potřeba přepnout současně, aby vnější i vnitřní virtuální adresy byly vždy na stejném fyzickém stroji.

Definice skriptů je v případě implementace vysoce dostupného firewallu klíčová. Keepalived umožňuje definovat skripty, které mají být spuštěny v okamžiku, kdy dojde k přepnutí mezi stavy, případně k nějaké chybě. Této vlastnosti bude využito k vydání příkazu pro synchronizaci conntrack tabulek.

Závěrem

Na závěr je nutné poznamenat, že implementace VRRP v keepalived nedodržuje zcela standard. Konkrétně se jedná o to, že standard vyžaduje definici virtuální MAC adresy. Keepalived ale používá MAC adresu zařízení, se kterým je v daném okamžiku svázána VIP. To je možné díky tomu, že v obou případech je nutné po přenesení adresy na jiný fyzický stroj vyslat ARP Gratuitous, aby si switche aktualizovaly své tabulky a je tedy jedno, zda se používá VMAC nebo fyzická MAC.

Nyní je tedy zřejmé, jak zařídit, aby více fyzických strojů v IP síti mohlo vypadat jako jeden. To, co bylo popsáno, doposud zcela postačuje například pro implementaci vysoce dostupného routeru. Příště si řekneme, jak synchronizovat conntrack tabulky, což je poslední nezbytnou věcí, kterou zbývá vyřešit při implementaci vysoce dostupného firewallu.

Našli jste v článku chybu?

16. 11. 2007 21:19

PSIkappa (neregistrovaný)
Hmm, netusim ake ma autor skusenosti s HA, ale toto fakt nestaci, hlavne pokial robi connection tracking - cize statefull firewall, tak si skutocne potrebuje medzi nodami prehadzovat aj statusy spojeni.
Takze pre zaujemcov odporucam hladat ct_sync.

16. 11. 2007 13:55

mig (neregistrovaný)
Nemyslím si, že za tento mizerný článek (a též jeho první díl) může jen neschopný pisálek. Možná je autor dobrý odborník, ale rozhodně ne publicista. Ale pokud redakce takovouto slátaninu uveřejní, hovoří to o úrovni roota, který jde ke dnu jako Titanic.
Před pár dny jsem vyplňoval anketu roota, kde jsem byl jen mírně kritický (vyjadřoval jsem se k tomu, že se stává root bulvárem - měl jsem na mysli především úroveň diskusí). Po tomto článku říkám: probuďte se!
Ještě k honorářům: pokud byc…
DigiZone.cz: Česká televize mění schéma ČT :D

Česká televize mění schéma ČT :D

120na80.cz: Rakovina oka. Jak ji poznáte?

Rakovina oka. Jak ji poznáte?

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Lupa.cz: Google měl výpadek, nejel Gmail ani YouTube

Google měl výpadek, nejel Gmail ani YouTube

Lupa.cz: Slevové šílenství je tu. Kde nakoupit na Black Friday?

Slevové šílenství je tu. Kde nakoupit na Black Friday?

DigiZone.cz: ČT má dalšího zástupce v EBU

ČT má dalšího zástupce v EBU

Vitalia.cz: To není kašel! Správná diagnóza zachrání život

To není kašel! Správná diagnóza zachrání život

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Lupa.cz: Není sleva jako sleva. Jak obchodům nenaletět?

Není sleva jako sleva. Jak obchodům nenaletět?

Podnikatel.cz: Na poslední chvíli šokuje vyjímkami v EET

Na poslední chvíli šokuje vyjímkami v EET

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

DigiZone.cz: NG natáčí v Praze seriál o Einsteinovi

NG natáčí v Praze seriál o Einsteinovi

Podnikatel.cz: Prodává přes internet. Kdy platí zdravotko?

Prodává přes internet. Kdy platí zdravotko?

DigiZone.cz: Sony KD-55XD8005 s Android 6.0

Sony KD-55XD8005 s Android 6.0

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

Vitalia.cz: Tesco: Chudá rodina si koupí levné polské kuře

Tesco: Chudá rodina si koupí levné polské kuře