A blogban leírtak a szerzők saját véleménye, és nem a munkáltatójuké.

CIM, CIM-XML, WS-Man, WMI, JMX, PerfCount, PowerShell…

Minden tavasszal, amikor van az Intelligens rendszerfelügyelet tárgyunk, a fenti technológiahalmaz előkerül, és megnézzük a változásokat, kicsit kalapálunk rajta, majd írunk róla mindenfélét.

Idén is sikerült nem kevés időt beleölni, de most már egyre jobban látszik az eredménye:) Egyrészt a módszerek nem gyerekcipőben járnak már (a kapcsolódó szabványok, protokollok többedik verziójánál tartunk), az eszközkészlet is kezd stabilizálódni (Powershell 2.0 végleges változat beépített távoli menedzsmenttel, a nyílt forráskódú megoldások is csomagkezelőből egyszerűen telepíthetőek sok platformon), és végre nem csak véletlenszerű blog bejegyzések megírására volt időnk, hanem részletes segédletek is elkészültek (100 oldalnál tartunk már!).

Valahogy úgy áll össze ez az egész technológiahalmaz, hogy szeretnénk, hogy ha egy flexibilis, skálázható, minél inkább autonóm módon működő [ide még rengeteg jelző meg buzzword berakható] informatikai rendszerünk lenne. Ehhez kell az, hogy az informatikai infrastruktúra menedzselt és részben önjáró legyen, ÉS, hogy az alkalmazásaink fel legyenek készítve arra, hogy jelentik az állapotukat, igény esetén új csomópontokra költöznek, stb.

Ennek a bemutatásához a következő segédletek készültek most:

Alapozás:

  • Kell majd modellezni a környezetünket és az alkalmazásainkat.
  • A lekérdezések és beavatkozások egy része általában valami szkript nyelven történik (azok egyszerűsége és dinamizmusa miatt), úgyhogy nem árt ismerni a Bash-t és a PowerShellt.

Technológiai keret:

  • Kell majd egy alap infrastruktúra, ami a rendszer és az alkalmazások beállításait és állapotát kezeli (konfigurációkezelés).
  • Van egy részletes, szabványos modellünk (CIM), ami leír nagyjából minden általános elemet. Ilyen modelleket tároló tárhelyek (CIMOM) elérésére van több protokollunk is (CIM-XML, WS-Management).
  • Windowson a CIMOM implementáció hozzá a WMI, amit lehet mindenféle módon elérni (PowerShell segítségével egész kényelmes). Távoli lekérdezéshez meg ott a WinRM (WS-Management implementáció). Vannak most már PowerShell cmdlet-ek is a winrm.cmd helyett, sőt, Windows 7 SP1-ben kijavították azt az idegesítő hibát, hogy a felhasználónév elé \ jelet rak automatikusan, így más platformot is egyszerű lekérdezni vele (lásd a segédlet példáit).
  • Linux esetén többféle CIMOM is van (OpenPegasus, SFCB). A CIM-XML lekérdezés működik stabilan. Az openwsman (WS-Management implementáció) is sokat javult szerintem, csomagban is elérhető. A wsmancli parancssori kliensben sikerült idén két hibát fogni (az egyik egy csúnya segfault, azt javították is már), meg az sfcc-ben a hibakezelés egy helyen elnyeli a hibaüzenetet, de azt is remélhetőleg javítják majd.


Felügyeletre tervezés:

  • Ha mindezt tudjuk, és az infrastruktúra is fel van készítve, akkor jöhet az alkalmazások felügyeleti információval való kiegészítése.
  • A segédlet egy konkrét, egyszerű mintapéldán végigvezetve bemutatja, hogy hogyan is lehet összegyűjteni, hogy mit kell az alkalmazásnak elérhetővé tennie kívülről, mit kell naplóznia. Az instrumentált, kommentezett példaalkalmazás el is érhető.
  • .NET platformon lehet az alkalmazáshoz WMI szolgáltatót (provider) készíteni. [Ehhez most elég részletes leírás készült, ami információt találtam meg az elmúlt években hibaként előjött, az belekerült. Pl. van egy rész a Publish/Revoke és a Callback regisztrációs módszer közötti különbségről, azt máshol eddig még nem szerepelt így összefoglalva szerintem]. Ezen kívül érdemes naplózni (az Enterprise Library Logging Application Block 5.0-ás verziója nagyon jó lett). Meg, ha már teljesítményjellemzőket is definiálunk, akkor azokat teljesítményszámlálóként könnyen elérhetővé tehetjük.
  • Java vonalon a felügyeletre a JMX használata az ajánlott módszer, ehhez is készült leírás meg példaalkalmazás.

Az egész megismerésére vannak házi feladatok, aki ki szeretné a fentieket próbálni a gyakorlatban, az próbálja megoldani valamelyiket;)

Hát, itt tartunk most, a félév hátralévő idejében még kis szolgáltatásbiztonság meg hibatűrés van/lesz, aztán virtualizáció és cloud.

1 230 362 GHz

Megérkezett pár új gép a laborunkba, és tegnap pont virtualizációs bemutató volt, úgyhogy gondoltam a végén összerakom a gépeket egy nagy ESXi fürtbe, jól mutat majd a nagy szám a fürt erőforrásainak összesítésénél. Hát, a végén ténlyeg elég jó érték jött ki:

1 230 362 GHz összes processzor erőforrás!! Azért ez már nem rossz, ezt már el lehetne kezdeni bérbeadni:) Memóriából is 5.459.526 van, itt sajnos mértékegység nem szerepel. Egyszer egy pillanatra volt olyan, hogy TB-ot rakott mögé, de azt sajnos nem sikerült elkapni. Mindegy, 5,5 millió még GB-ban sem rossz;)

Sajnos ez csak valami ideiglenes kiírási gond volt, a valós érték ez lett végül:

Azért egy egyszerű laborban a 139 GHz sem rossz, lehet majd mindenféle érdekes dolgot megnézni rajta (mint például ez).

VMware ESXi telepítő indítása hálózatról interaktív módban

Újra előkerült az ESXi+PXE téma, most egy másik szemszögből. Az alap szituáció az volt, hogy az egyik szervert újra kellett telepíteni, és nem volt kedvem CD-t keresni a legfrissebb ESXi telepítő kiírásához;-). Ha már van úgyis PXE rendszerünk, és a 4.1-es ESXi-be bekerült valami PXE támogatás a telepítőbe, akkor gondoltam kipróbálom. Kezdésnek akkor egy összefoglaló, hogy mire lehet hálózati bootot használni ESXi esetén, mert könnyű elkeveredni:

  • Futtatás: nem akarunk mondjuk lemezt rakni az ESXi gépekbe vagy nem akarjuk a helyi lemezeket tartalmát bántani, így hálózatról indítjuk el az ESXi-t. (Figyelem, ez nem azonos a SAN-ról bootolással, ott csak a lemez van távoli szerverben és annak a tartalmát érjük el blokkos eszköz szintjén hálózatról, de azon rajta vannak az ESXi partíciói. Itt pedig PXE és TFTP segítségével töltjük le az induláshoz szükséges fájlokat.)
    • Állapotmentes: mivel az ESXi in-memory fájlrendszert használ (lásd Architecture of VMware ESXi vagy ESXi 4.1 felépítése és partíciói), ezért meg lehet azt csinálni, hogy hálózatról betöltjük a boothoz szükséges fájlokat és a becsomagolt fájlrendszert, majd ezek után kapunk egy teljesen friss, beállításokkal nem rendelkező ESXi-t. Erről már írtam korábban, ez működik már régóta a laborban nálunk a néhány mérésnél.
    • Állapotot megtartó: mivel az ESXi-n alapvetően nagyon kevés beállítást kell elvégezni, és ezeket lehet távolról is, ezért meg lehet azt csinálni, hogy minden egyes újraindítás után egy friss ESXi indul a fenti megoldással, és utána mondjuk PowerCLI segítségével beállítunk rajta mindent. ESXi 3.5-höz készült ez a proof-of-concept megoldás (ami egy úgynevezett bábát [midwife] használ), 4.1 esetén ehhez csináltak egy virtual appliance-t (VMware Auto Deploy), ami végigvezeti a teljes procedúrát Perl scriptek segítésével. Az Auto Deployhoz kell a vCenter host profile funkciója, ez pedig csak az Enterprise Plus csomagban van, úgyhogy egyelőre nem tudtam kipróbálni:)
  • Telepítés: lehetőség van arra, hogy csak a telepítőt indítjuk el hálózatról (mert pl. nincs CD olvasó / remote management kártya a szerverben vagy messze van a gép [az admin lustaságától függ, hogy ez a messze a másik szobát vagy másik várost jelent:]), de utána helyi lemezre telepítjük a szervert, és következő újraindításkor az már onnan fut.
    • Interaktív telepítés: hálózatról indítjuk a telepítőt, de utána kézzel akarjuk végigkattintgatni. Ezt fogjuk mindjárt megnézni részletesebben.
    • Automatikus telepítés (scripted): nem akarunk beavatkozni a telepítésbe. Ehhez egy kickstart fájlt (ks.cfg) kell írni, ami a telepítés során és utána elvégzendő lépéseket leírja (a linuxos kickstart megoldást szabta testre a VMware). A menete le van írva az ESXi leírásában, és rengeteg blogbejegyzést is találni hozzá, lásd később.

Interaktív telepítés

Az ESXi setup guide 4. fejezetének harmadik része (PXE Booting the ESXi Installer) elég részletesen leírja, hogy milyen fájlokat kell felmásolni a CD-ről a PXE szerverre, mit kell hozzáadni a PXE menühöz. Ha ezeket megcsináljuk, akkor szépen el is indul a telepítő, megadhatunk minden fontos adatot, viszont a telepítés megkezdésekor ez a hibaüzenet fogad: “Unable to find the system image to install”.

Ha belegondolunk, ez teljesen jogos is, hisz a boothoz szükséges fájlok között (menu.c32, mboot.c32, vmkboot.gz, vmkernel.gz, sys.vgz, cim.vgz, ienviron.vgz, install.vgz), amiket felraktunk a PXE szerverre és az telepítendő gép letölt TFTP segítségével, nincs közte az imagedd.bz2, amiben a lemez képfájl van, amit majd fel kell rakni a cél gépre.

Ha Alt+F1 után belépünk a konzolra (felhasználó: root, a jelszó üres), akkor a telepítő logjában is csak ennyit látni:

Hol lehet megadni, hogy hol keresse a telepítő maradék részét? A setup guide-ban csak annyi van, hogy: “In an interactive installation, omit the ks= option.”, de így nem megy. Ha megadnánk a ks kapcsolóban a kickstart konfigurációs fájlt, ott az install kulcsszóval meg lehet adni egy URL-t, ahonnan letöltheti a maradékot. De ha megadjuk a ks-t, akkor teljesen automatikus telepítést kell végezni, olyat nem lehet, hogy csak a válaszok egy részét automatizáljuk.

A megoldás ebben a blog bejegyzésben volt: PXE boot VMware ESXi 4.1 and Manual Install.

then rename the imagedd.bz file to VMware-VMvisor-big-260247-x86_64.dd.bz2
mv imagedd.bz2 VMware-VMvisor-big-260247-x86_64.dd.bz2

Create a folder structure that ESXi installer looks for the system file in
mkdir –p usr/lib/vmware/installer/

Move the file to the correct location
mv VMware-VMvisor-big-260247-x86_64.dd.bz2 usr/lib/vmware/installer/

The installer is looking for a tar tgz file named image.tgz, so lets create one.
tar cvzf image.tgz usr/

Now that we have the file in the correct format and folder structure lets add it to the pxe append command.
append vmware/esx4.1/vmkboot.gz --- vmware/esx4.1/vmkernel.gz --- vmware/esx4.1/sys.vgz --- vmware/esx4.1/cim.vgz --- vmware/esx4.1/ienviron.vgz --- vmware/esx4.1/install.vgz --- vmware/esx4.1/image.tgz

Így már ezt is letölti TFTP-vel, és megy a telepítő interaktív módban.

Automatikus telepítés

Ha már volt teszt rendszer az interaktív telepítőre, akkor csak egy lépés volt a scripted módszert is kipróbálni. Ez ment gond nélkül, sok részletes leírás is van hozzá.

Annyi pontosítás csak, hogy:

  • Annyi kell pluszba, hogy egy web szerverre felrakjuk a ks.cfg fájlunkat, és megadjuk a PXE konfigurációban a ks boot opciót ennek az elérhetőségével.
  • A web szerverre ezen kívül csak az az imagedd.bz2 és az imagedd.md5 fájlokat kell felrakni.
  • Ha IIS-t használunk, akkor be kell még állítani az adott webhelyen a MIME típusokat, hogy a fenti fájlokat kiszolgálja. Általában *.* szokott lenni a javaslat a leírásokban, ennél egy fokkal igényesebb, ha csak a következőket adjuk meg:
    • *.bz2 – application/bzip2
    • *.md5 – text/plain
    • *.cfg – text/plain

Így már ment szépen az automatikus telepítés:

Hasznos leírások:

Így már sikerült az összes lehetséges PXE telepítés/futtatás opciót végigpróbálni, remélhetőleg most egy ideig nem lesz gond ezzel;-)

VMware Data Recovery – VSS application-consistent quiescing

Na, itt már a cím sem egyszerű:-). Szóval adott a VMware Data Recovery (VDR), ami futó virtuális gépekről készít mentéseket. Létrehoz egy pillantképet (snapshot) a virtuális géphez, lemásolja a virtuális lemezek tartalmát (inkrementális mentést végez, csak a megváltozott blokkokat másolja), majd a végén eldobja a pillanatképet.

  • Mi itt a gond? Az, hogy az operációs rendszer pufferelheti az írásokat, így lehet, hogy nincs minden változtatás kiírva még a lemezre, tehát nem konzisztens állapotot tárolunk. Ezért érdemes szólni a vendég OS-nek, hogy írjon ki mindent a lemezre, és egy ideig tartsa fel az I/O kéréseket (ezt hívják quiescingnek).
  • Mi a további gond? A futó alkalmazásaink sem tudják, hogy most épp egy mentés megy, így (i) ha ők is pufferelnek, akkor nem biztos, hogy ki van írva minden fontos adat a memóriából (pl. adatbáziskezelők vagy címtárak esetén lehet gond), (ii) nem tudják, hogy mentés zajlik, és ezért nem jönnek az I/O kérések, (iii) a mentés vége után nem értesülnek arról, hogy sikerült a mentés (az SQL Server pl. ilyenkor csonkíthatja a tranzakciós naplót).

(A problémáról kicsit részletesebben: Can your VM be restored? VMware and VSS — Part 1)

Ennek megfelelően a VDR különböző konzisztencia szinteket biztosíthat (hivatalos definíciót nem találtam ezekre, talán ez a legjobb: vDR and Quiescing Mechanisms):

  • Crash-consistent: legegyszerűbb, olyan állapotban van a fájlrendszer a mentésben, mintha kihúznánk a tápot a gépből. Írások elveszhetnek, az alkalmazások semmit nem tudnak arról, hogy mentés történik.
  • File-system consistent: az első feladatokat elvégzi, azaz fájlrendszer szintű írások nem lesznek függőben. De az alkalmazások még mindig nem értesülnek a mentésről.
  • Application-consistent: itt már az alkalmazás is értesül a mentés tényéről.

Hogyan lehet ezt megvalósítani? Windows alatt létezik a Volume Shadow Copy Services (VSS), ami pont ezt csinálja. Operációs rendszer szintű támogatás van arra, hogy a mentést végző eszköz értesítést küldjön, és az alkalmazások pedig saját providereket regisztrálhatnak be, ami a konzisztens állapotba hozást elvégzi. Egy rövid összefoglaló a VSS-ről: What is Windows VSS & why you should care, a részletes leírás a Techneten pedig: How Volume Shadow Copy Service Works.

Kezdetben a VMware egy SYNC driver nevű komponenst használt, ami fájlrendszer szintű konzisztenciát garantált, aztán megírták a saját VSS providerüket. Ennek is a különböző verziói még más és mást biztosítottak csak, az aktuális képességeket a VDR Admin Guide-ban lehet megtalálni (2010. július óta már tudja sok esetben az alkalmazás szintűt is, előtte még nem tudta, ezzel kapcsolatban volt elég sok blog bejegyzés).

Most már Windows Server 2008 R2 esetén is támogatott az alkalmazás szintű konzisztencia. Ehhez, ha nem vSphere 4.1-ben hoztuk létre, akkor a virtuális gép konfigurációs paramétereit módosítani kell, hozzá kell adni a disk.EnableUUID = true értéket (lásd admin guide).

Ezeket hozzá is adtam a virtuális gépeinkhez, azonban a VDR mentés így két gépen nem futott le, a tartományvezérlőn és az egyik fájlszerveren.

Fájlszerver

A pontos hiba ez volt a VMware Data Recovery naplójában:

Failed to create snapshot for server, error -3960 ( cannot quiesce virtual machine)

A másik hibajelzés pedig ez:

Cannot create a quiesced snapshot because the create snapshot operation exceeded the time limit for holding off I/O in the frozen virtual machine.

A fájlszerver eseménynaplójában ilyen hibák voltak még.

Log Name:      Application
Source:        VSS
Event ID:      12289
Level:         Error
Description:
Volume Shadow Copy Service error: Unexpected error DeviceIoControl(\\?\fdc#generic_floppy_drive#6&2bc13940&0&0#{53f5630d-b6bf-11d0-94f2-00a0c91efb8b} - 0000000000000448,0x00560000,0000000000000000,0,00000000003D8760,4096,[0]).  hr = 0x80070001, Incorrect function.
. 

Operation:
 Exposing Recovered Volumes
 Locating shadow-copy LUNs
 PostSnapshot Event
 Executing Asynchronous Operation

Context:
 Device: \\?\fdc#generic_floppy_drive#6&2bc13940&0&0#{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}
 Examining Detected Volume: Existing - \\?\fdc#generic_floppy_drive#6&2bc13940&0&0#{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}
 Execution Context: Provider
 Provider Name: VMware Snapshot Provider
 Provider Version: 1.0.0
 Provider ID: {564d7761-7265-2056-5353-2050726f7669}
 Current State: DoSnapshotSet

Meg ilyen:

Log Name:      System
Source:        VDS Basic Provider
Event ID:      1
Level:         Error
Description:
Unexpected failure. Error code: D@01010004

A kapcsolódó VMware KB cikkek és fórumbejegyzések, amik a fenti hibaüzenetekre előjöttek:

Az első cikk alapján elkezdtem nézni, hogy hol lehet a hiba, és a VSS írók listázásánál elő is került, hogy nem sikerült a shadow copy létrehozása (a beépített VSS writerek leírása itt van: In-Box VSS Writers):

C:\>vssadmin list writers
vssadmin 1.1 - Volume Shadow Copy Service administrative command-line tool
...

Writer name: 'FSRM Writer'
 Writer Id: {12ce4370-5bb7-4c58-a76a-e5d5097e3674}
 Writer Instance Id: {6a7e82ab-12e3-4c50-a3a6-cd0d11faca81}
 State: [8] Failed
 Last error: Inconsistent shadow copy

A KB cikkeket tovább nézve könnyű volt megtalálni a hiba okát: a virtuális gépen belül fel volt csatolva egy iSCSI kötet, ami nem támogatott, mert a VMware Snapshot Provider annak a helyes kezelését nem tudja garantálni. A további információként megadott VMware SAN System Design and Deployment Guide leírásban is csak ennyi van:

When performing a VMware snapshot, suspend, or resume operation on virtual machines, advanced administrator action or advanced integration is required to coordinate with iSCSI attached volumes to obtain true consistency.

Így megoldásként csak annyit tudtam tenni, hogy kikapcsolom a korábban hozzáadott disk.EnableUUID paramétert, így ezen a virtuális gépen csak fájlrendszer szintű konzisztencia biztosított.

(Megjegyzés: az első hibaüzenet téves hibának tűnik nekem, olyan gépen is láttam ilyet, ahol egyébként lefutott a mentés rendesen. Nem tudom mit akar a VMware a floppy meghajtóval kezdeni:)

Tartományvezérlő

A tartományvezérlőn már kicsit más üzenetek is megjelentek:

Log Name:      Application
Source:        VSS
Event ID:      8229
Level:         Warning
Description:
A VSS writer has rejected an event with error 0x800423f4, The writer experienced a non-transient error.  If the backup process is retried,
the error is likely to reoccur. Changes that the writer made to the writer components while handling the event will not be available to the requester.
Check the event log for related events from the application hosting the VSS writer. 

Operation:
 PostSnapshot Event

Context:
 Execution Context: Writer
 Writer Class Id: {b2014c9e-8711-4c5c-a5a9-3cf384484757}
 Writer Name: NTDS
 Writer Instance ID: {bd3013ea-0171-4b88-8836-e357e76cee7c}
 Command Line: C:\Windows\system32\lsass.exe
 Process ID: 405

Meg ez:

Log Name:      Application
Source:        ESENT
Event ID:      482
Level:         Error
Description:
lsass (405) An attempt to write to the file "\\?\Volume{19aa9060-18f9-11e0-b5dc-056056951ca5}\Windows\NTDS\edb.log" at ... failed after 0 seconds
with system error 19 (0x00000013): "The media is write protected. ". 
The write operation will fail with error -1032 (0xfffffbf8). 
If this error persists then the file may be damaged and may need to be restored from a previous backup.

Itt már az Active Directory címtár adatbázisa esetén volt gond. Mások is tapasztaltak ilyesmit:

Elég hosszú a javaslatok sora:

  • Újraindítás megoldotta problémát:)
  • Győződjünk meg, hogy legfrissebb verziójú VMware Tools van feltelepítve.
  • Ellenőrizzük, hogy a VMware Snapshot Provider szolgáltatás létezik-e és nincsen letiltva.
  • A VMDK leíróban szereplő disk UUID nem volt azonos azzal, amit a VMware Tools keresett (itt kézzel hackeltek utána valamit, de később úgy tűnt, hogy nem ez a gond).
  • Szedjük le, és rakjuk fel újra a VMware Tools csomagot, ez elég sok embernek megoldotta a problémát

Nekem ezek nem oldották meg, bár a kérdéses virtuális gép Server Core volt, a fenti bejegyzésekben viszont teljes szerver szerepelt. Azonban egyébként is van egyéb gond a DC ilyen típusú mentésével:

Ez a rész az érdekes:

“Active Directory does not support other methods to roll back the contents of Active Directory. In particular, Active Directory does not support any method that restores a “snapshot” of the operating system or the disk volume the operating system resides on. This kind of method causes a rollback in the update sequence number (USN) used to track changes in Active Directory. When a USN rollback occurs, the contents of the Active Directory databases on the improperly restored domain controller and its replication partners may be permanently inconsistent.”

Úgyhogy egyébként is nagyon észnél kell lenni tartományvezérlő visszaállításánál, tehát egyszerűbbnek tűnt, ha itt is visszakapcsolom a disk.EnableUUID paramétert, és alkalmazás szinten oldjuk meg a mentést (system state mentés készítése rendszeresen).

VMware Data Recovery – tapasztalatok

Végre volt egy kis időm ránézni a VMware Data Recovery-re (VDR), a VMware aktuális mentési megoldására (jelenleg az 1.2.0.1131-es verziónál tart). Elég jók a leírások hozzá (Evaluator’s Guide, Admin Guide és ne hagyjuk ki a FAQ-ot sem). Ezek alapján egy pár óra alatt összerakható egy teszt rendszer, vagy ha elég kicsi az infrastruktúránk, akkor akár be is lehet üzemelni.

A következő részekből áll:

  • Egy virtual appliance, ami egy CentOS 5.2-t tartalmaz. Van egy nagyon egyszerű konzolos és webes felülete is, ahol a hálózati beállításait lehet megadni. Az összes további műveletet távolról lehet elvégezni.
  • Egy plug-in, ami beépül a vSphere Clientbe. Innen lehet majd a további beállításokat megtenni, mentési feladatokat létrehozni és visszaállítani.
  • A virtual appliance-hez hozzá kell rendelni egy deduplication store-t, itt fogja a mentéseket tárolni.

A leírásból egy dolog nem volt elsőre világos, hogy a deduplication store-t hol tárolhatjuk, azt hogyan érdemes odaadni a VDR appliance-nek. A különböző leírások alapján a következő lehetőségek vannak:

  • VMDK: az appliance-hez hozzáadunk egy új lemezt, ezt fogja majd megformázni és mountolni. Ezt tárolhatjuk bármilyen datastore-on, tehát lehet helyi fizikai lemezen, SAN által kiajánlott VMFS kötet vagy akár NFS is.
  • Raw Device Mapping: RDM segítségével közvetlen fizikai lemezt is adhatunk az appliance-nek.
  • CIFS megosztás: az appliance beállítási felületén hozzáadhatunk egy CIFS megosztást is, bár ez a leírás szerint nem javasolt teljesítmény szempontok miatt.

Nekünk a mentést végző szerver NFS-en keresztül ajánl ki tárhelyet, így készült egy új megosztás, azt felcsatolta az ESX, és azon létrehoztunk egy nagy VMDK fájlt, amit megkapott a VDR. Arra kell csak figyelni, hogy SCSI (1:0) legyen a Virtual Device Node a lemez hozzáadásakor. Ezután azt meg lehet formázni a VMware Data Recovery felületén, és fel lehet csatolni, így már /SCSI-1:0/ néven látja, és megkezdhetjük a mentéseket.

A mentések során deduplikáció segítségével takarít meg tárhelyet, a FAQ pontosítja, hogy blokk szinten keres egyezéseket.

A mentésekből a teljes virtuális gépet lehet visszaállítani, lehet akár csak próbákat csinálni (restore rehersal). Van fájl szintű visszaállítás, ehhez a vendég gépben kell egy programot elindítani (FLR – file level restore).

A mentéseket saját formátumban tárolja, abból így ránézésre túl sok minden nem látszik (be lehet lépni az applience-be, és meg lehet nézni a /SCSI-1:0 könyvtár alatt).


Még egy teendő van a beállítások után, a windowsos gépeken kell módosítani, hogy alkalmazás szinten is konzisztens mentéseket tudjon készíteni. Erről szól (remélhetőleg:) majd a következő bejegyzés.

ESXi 4.1 PXE bootolása

(Ezt a cikket még Dani kezdte el írni ESXi 4.0-hoz, csak aztán végül nem lett befejezve. Most ESXi 4.1 kapcsán újra előjött a kérdés, úgyhogy leporoltam kicsit ezt a bejegyzést, és befejeztem — MZ)

Nos, már másfél éve ismert, hogy lehetséges ESXi 3.5-öt hálózatról bootolva is működtetni. A teljes leírás például itt található meg, talán ez a legteljesebb, legjobban összegyűjtött írás erről a témáról. Sőt a vSphere 4.1-ben már támogatottá is vált ez a megoldás.

Nálunk egy ennél egyszerűbb felállás van, itt nincs szükség a bábáskodó “midwife” szerverre, ami automatikusan fel is konfigurálja és VirtualCenter alá be is pattintja a feljövő hostokat.

Viszont mikor jó pár héttel ezelőtt nekiálltam összerakni a PXE bootos ESXi-t, meglepve tapasztaltam hogy nincs leírás 4.0-s verzióról. Nem nagy a különbség, a művelet nagyvonalakban megegyezik, csak néhány apróság változott, például az ESXi install image-ből kiszedendő fájlok listája. Fontos, hogy a pxelinux.0 verziója legyen legalább 3.82. Illetve pontosabban a 3.53 még biztosan nem jó, a 3.82-es már igen, a kettő között valahol javítottak egy hibát, ami megakadályozta, hogy a 44MB-os  sys.vgz-t tftp-vel hibátlanul letöltse.

(Innentől szerzőváltás:) Szóval ESXi 4.0-hoz már van rendes PXE leírás:

  • ESXi Installable and vCenter Server Setup Guide – a 4. fejezetben (“PXE Booting the ESXi Installer”) le van írva, hogy hogyan lehet PXE-vel indítani az ESXi telepítőt, és utána meg szkriptelt telepítést végrehajtatatni vele. Nekünk ez most nem kellett, de elrakjuk, később még jól fog jönni:)
  • PXE Booting VMware ESXi – ez pontosan azt írja le, ami nekünk kell, hogy hogyan lehet egy állapotmentes példányt futtatni az ESXi-ből PXE-ről bootolva.

Egyetlen gond van a második leírással, hogy ez 4.0-hoz van, 4.1 esetén (megint) kicsit mások a fájlnevek. Frisset nem találtam, csak egy ilyen fórumbejegyzést [EXSI 4.1 PXE run – (not installation)]. Itt nem teljesen jók a fájlnevek, a helyeseket viszont gyorsan ki lehet találni.

Tehát a következő fájlok kellenek nekünk:

cim.vgz
license.tgz
oem.tgz
sys.vgz
vmkboot.gz
vmkernel.gz

A license.tgz és az oem.tgz fájlok kivételével a többit ki tudjuk szedni az ISO-ból (pl. a 7-zip szépen megnyitja), a maradék kettő az imagedd.bz2 fájlban van. (Igazából mindkettő csak egy jobbára üres fájl betömörítve, de a biztonság kedvéért érdemes kiszedni őket a dd image-ből). A VMware leírásban említik, hogy Linux alatt ezt a mount segítségével megoldhatjuk, csak épp a pontos offsetet nem írják le:) Innen kinézhető:

mount /tmp/imagedd /mnt/image/ -o loop,offset=$((512*8224))

Ez azt a partíciót csatolja fel, amin a boot és beállítás fájlok vannak.

Innentől kezdve már csak fel kell ezeket másolni a TFTP szerverre, és hozzáadni PXE menühöz a leírásban megadott adatokat.

ESXi és vCenter 4.1 frissítés tanulságai

Most volt időnk 4.1-re frissíteni a vSphere környezetünket. A vSphere Upgrade Guide elég jól összefoglalja a lehetőségeket, és leírja a lépéseket. Az Upgrading ESX 4.0 to ESX 4.1 KB cikkben pedig még vannak videók is a frissítés menetéről.

Egy-két buktatóba azért belefutottunk.

Fájl feltöltés hiba

Első lépésként az egyik teszt ESXi 4.0-ás gépet akartuk 4.1-re frissíteni a VMware Update Manager (VUM) segítségével. Ehhez először az upgrade zip-et kell feltölteni a VUM-ba, azonban az a következő hibát dobta:

“Failed to import upgrade. Error was: File Upload Error”

A VUM log fájlokat a C:\ProgramData\VMware\VMware Update Manager\Logs könyvtárban találjuk, a kapcsolódó részlet ez volt:

[2010-08-23 17:11:12,963 pool-1-thread-2  ERROR 'com.vmware.updatemanager.fileupload.ImportWorker'] Import File, exception
AxisFault
 faultCode: ServerFaultCode
 faultSubcode:
 faultString: integrity.fault.HostUpgradeChecksumFailure
 faultActor:
 faultNode:
 faultDetail:
	{urn:integrity}HostUpgradeChecksumFailureFault:<reason>Invalid fault</reason>

Nem túl segítőkész:) Más is látott ilyet (Unable to create Update Baseline: HostUpgradeChecksumFailure). A gépet a vihostupdate CLI eszközzel sikerült frissíteni, nem az upgrade fájllal volt a gond végül, hanem azzal, hogy a 4.0-s VUM nem tudja a 4.1-es frissítést kezelni. Így tehát először a vCentert és az Update Managert kell frissíteni (mint ahogyan azt a leírásban is szerepel:)

AgentUpgradeChecker

A vCenter 4.1-es CD-van egy vCenter Agent Preupgrade Check Tool nevű eszköz, amivel a vCenterből a frissítés előtt le lehet ellenőrizni az ESX gépeket.

Itt csak arra kell figyelni, hogy Run as Administrator módban indítsuk el (helye: D:\vpx\agentupgradecheck\AgentUpgradeChekcer.exe).

Log fájla: C:\Users\user\AppData\Local\VMware\vpx\VMwareAgentUpgradeChecker-X-0000.log

“cbt loaded successfully” — majd utána semmi

Az egyik gépen jött elő (pont a HS22-es blade-en, ami ráadásul még fent is van a 4.1 hardver kompatibilitás listáján), az ESXi az újraindulás után a betöltés vége felé egyszerűen megállt a cbt loaded successfully kiírásnál. Ezután kéne tulajdonképpen a szolgáltatásait elindítani az alap meghajtók betöltése után, de nem történt semmi.

Túl sok információt nem találtam róla, csak ezt: After updating to ESXi 4.1, ESXi boot up hangs on “cbt loaded successfully”. Nekünk viszont szoftver linuxos iSCSI tárhelyünk van, ráadásul egy másik ESXi, ami egy teljesen más gyártójú gépen fut, gond nélkül elindult ugyanehhez a távoli tárhelyhez kapcsolódva.

Remélve, hogy tényleg itt is csak valami timeout gond lesz, megvártam, hogy elindul-e egyáltalán az ESXi, hogy legalább utána a logokat le lehessen szedni róla. 45 perc volt:) A /var/log/messages-ben utána ennyi szerepelt:

Aug 26 13:45:50 vmkernel: sysboot: Executing '/usr/sbin/esxupdate clearpending'
Aug 26 13:45:50 inetd[4922]: authd/tcp6: socket: Address family not supported by protocol
Aug 26 14:28:12 esxupdate: lock: DEBUG: Lock file /var/run/esxupdate.pid created with PID 492

Van egy szép kis 45 perces várakozás:) Szerencsére úgy néz ki, hogy tényleg csak a frissítés tartott eddig, következő újraindításra már szépen 2 perc alatt elindult.

A frissítésekkel kapcsolatos hibákat egyébként az esxupdate.log (/locker/db/esxupdate.log) fájlban érdemes keresni. Ennek az elérésére viszont csak azt találtam, hogy vagy bemegyünk CHEAT módban az ESXi-re közvetlenül a konzolról, vagy vCenterből lehet a File / Export / Export system logs résznél egy diagnostic bundle-t generáltatni az adott gépről, és akkor abban ez is benne van (csak ez nem túl gyors). Jó lenne azért a VI Clientbe kivezetni, vagy mondjuk PowerCLI-ből lekérdezhetővé tenni.

PS/2-es billentyűzet

Ez a négyből csak az egyik ESX-en jött elő: frissítés után nem működött az átkapcsoló PS/2-es billentyűzete. Más is látott ilyet (Is or will the keyboard issues with ESXi 4.1 get fixed?), megoldás egyelőre nincs, USB-s billentyűzetet kell rádugni:(

Update Manager vs. tanúsítványok

Ez már régi fájdalmam volt, most a frissítés kapcsán újfent előkerült. Az Update Manager és a vCenter is kap egy-egy self-signed tanúsítványt telepítéskor, amiben a VI Clientet futtató gépek természetesen nem bíznak meg, így mindig feldob egy figyelmeztető ablakot. Természetesen lehet permanensen mellőzni a figyelmeztetést, de a szép megoldás az lenne, ha hiteles (vagy legalábbis egy saját CA által kiállított) tanúsítványokra cserélnénk ezeket le.

A vCenter tanúsítványának lecseréléséhez van hivatalos leírás: Replacing VirtualCenter Server Certificates

Az Update Managerhez én ilyet nem találtam, ott ez a blog bejegyzés segít: VMware Update Manager (VUM) 4.0 SSL Certificates

Ez így már majdnem jó. Azonban az Update Manager telepítésénél ki kell választani, hogy milyen néven azonosítsák a VUM szervert a kliensek. Itt a szerver IP címeit vagy host nevét lehetne választani. Az Update Manager Admin Guide javaslata szerint adjunk meg IP címet, ami viszont azért lesz kevésbé jó, mert így természetesen a névre kiállított tanúsítványt nem fogja majd elfogadni az SSL kapcsolatnál. Lehetne a gép nevét választani, nekünk viszont úgy van beállítva, hogy a vCentert egy aliason keresztül érik a kliensek és az ESX-ek is (ami szerintem szerencsésebb, mint a gépnév használata, nem is beszélve arról, hogy ha valaki pl. alkalmazás szintű fürtözést használ, akkor csak ez működik). Viszont a GUI-n nem lehet saját értéket megadni, csak egy legördülő listából választani.

A megoldás az, hogy parancssorból kell telepíteni, és ott már meg lehet ilyeneket is adni: Performing a Command-Line Installation of VMware vCenter Update Manager

Így már egyedül az upgrade bundle feltöltésekor dobott figyelmeztető ablakot, mert ott mindenképpen IP alapján akar csatlakozni, de azt már nem találtam meg, honnan szedi (azért kellően rusnya bestia ez a vSphere, konfigurációs beállításokat szed a registryből, konfig fájlokból, ráadásul van egy saját LDAP példánya is, és van ami csak ott módosítható).

XMind és MindMapper közötti konverzió

Nálunk elég elterjedt mindenféle különböző mindmap editor alkalmazás, mindenkinek megvan a saját kedvence. Időnként gond van abból, hogy – természetesen – nem tudják egymás formátumait kezelni. A két leggyakrabban használt eszköz az XMind és a MindMapper.
Az egyetlen közös bennük az, hogy mindkettő tud text fájlba exportálni és abból importálni. Természetesen nem egyforma formátumban. 🙂

A Mindmapper ebből

ilyet csinál:

Foo
Bar
	baz
cuc
	mak
	maz

Sajnos az látszik, hogy a keresztreferencia nem kerül bele a szövegbe, de a struktúra tabulátorokkal megvan.

Mit csinál az XMind?

Ebből:

ez lesz:

Foo

1. Bar

1.1 baz

See Also: mak (referencia)

2. cuc

2.1 mak

See Also: baz (referencia)

2.2 maz

Itt megvan a referencia, de sajnos ezt nem fogjuk tudni átvinni a MindMapperbe. Néha a számozás előtt van egy A is.

Az XMind formátumból MindMapperre konvertálni pedig a következő sed kifejezéssel lehet:

sed sed 's/^A//g;s/[0-9]\+\./\t/g;s/\t[0-9]\+/\t/g;s/^See Also:.*//g;/^$/d' < bemenet.txt > kimenet.txt

Nyilván nem tökéletes, csak a szerkezetet viszi át, minden egyéb csillivilli lemarad, valamint, ha kézzel számozást teszünk a szövegbe, akkor az is tabulátorokká alakul. Viszont a lényeg – amivel általában a legtöbb munka van – átmegy.

AMT frissítés ASUS alaplapokon

Úgy néz ki, hogy ősszel megint lesz AMT-s mérés a laborban, úgyhogy nekiálltam összeszedni a doksikat, hogy mi is kell hozzá. Ekkor került elő a leírásaim közül egy tavaly őszi kis vicces történet logja. Figyelem, a korábbiakkal ellentétben ennek a vége fele kicsit “fikázós” hangvétele lesz. 🙂

Háttértörténet: BIOS frissítés PXE boottal

Szóba került, hogy frissíteni kéne a 224-es labor gépein a BIOS-t, valamint az AMT firmware-jét. Az AMT az Intelnek egy desktop gépek számára kifejlesztett távoli menedzsment megoldása, kb. olyan, mint az IPMI, csak teljesen más az interfésze. A lényeg, hogy van az alaplapon egy kis beágyazott processzor, ami standby módban is működik és a hálózatról megszólítható, mindenféle funky dolgokat lehet vele távolról csinálni függetlenül attól, hogy mi fut/nem fut a gépen. Ez a beágyazott CPU egy saját kis firmware-t futtat, ezt is időnként nem árt frissíteni.

A laborban elég vegyes a gép felhozatal, több generáció is képviselteti magát. Vannak Intel alaplapos Pentium4-esek, Lenovo gyártmányú Core2Duo processzoros gépek (ezek tudnak AMT 2.0-t), és van két ASUS alaplapos Core2Duo-s gép is, ezek a változatosság kedvéért AMT 3.0-t támogatnak.

BIOS frissítés 28 gépen nem vicces, ha kézzel kell csinálni.  Hogyan lehet “enterprise” módon sok gépet frissíteni? Hát nem floppy-val vagy pendrive-val körbemászkálva, hanem a kor követelményeinek megfelelően hálózatról bootolva.

A labor szerverén – a Shelobon – már amúgy is van PXE boot környezet. (Ha egyszer nagyon ráérek – ezek híres szavak 🙂 -, majd ebből is írok postot, hogy mi mindenre jó ez és hogyan kell csinálni.) Gondoltam megpróbálom ezzel a frissítést. Nem kell hozzá egyéb, mint leszedni a frissítő floppy image-ét, majd berakni a PXE boot szerveren a tftpboot könyvtárba. Ahhoz, hogy egy (egyébként bootolható) floppy image betöltődjön hálózatról, szükség van egy betöltést segítő modulra: ezt úgy hívják, hogy memdisk. A memdisk modult a syslinuxcsomagból lehet megszerezni. Valójában betölti a memóriába a teljes floppy image-et és emulál olyan BIOS hívásokat, amik normális esetben a floppy elérését lehetővé tennék. Egyébként ezzel a technikával nemcsak floppy, hanem nagyobb, merevlemez image-ek is indíthatók, pl Ghostot is indítottuk hasonló techinkával. A pxeboot.cfg fájlba a következő bejegyzést kell felvenni:

LABEL AMT-Updater
        kernel modules/memdisk
        append initrd=images/amt-updater/amtupdate-2.1.1032.image

A dörzsöltebb rendszeradminok előregondolkodnak (mint ahogy én most nem 🙂 ) és rögtön a defaultra rakják ezt a bejegyzést, így hálózati bootolásnál a boot menüben automatikusan ez indul. F12-vel be kell hálózatról bootoltatni a gépeket (ennyi a manuális rész) és a boot menüből automatikusan indul az image. Az AMT updater értelmesen van megcsinálva, ha a firmware verzióval kompatibilis fajta hardvert talál, akkor magától elindul a frissítés.

Ez szépen műkdött is a Lenovo gépekre, kevesebb, mint egy óra alatt megvolt minden, beleértve a memdisk modul kikeresését és a boot konfiguráció beállítását is. Idáig “Great Success”.

Viszont az ASUS-okkal meg voltam lőve…

Először is az ASUS oldalán nyoma sincs az alaplapjukhoz (P5E-VM DO) tartozó AMT firmware update-nek. Úgy láttam, hogy a Lenovo egy az egyben az Inteltől átvett firmware-t csomagolta be (nem meglepő, lévén hogy az Intel nem enged harmadik fél által gyártott firmware-t, csak a saját hivatalos cuccuk megy fel a gépekre). Egyetlen esélyként megpróbáltam a Lenovo oldaláról vadászni AMT3.0-s gépekhez firmware-t és azt rátolni az ASUS-okra.

Itt már kezdődtek a nehézségek…

Találtam AMT3-as firmware-eket: http://download.lenovo.com/pccbbs/thinkcentre_drivers/fw3.2.3.1037.txt és az fw3.2.3.1037.exe is él ugyanitt. Sőt találtam olyat is, hogy fw3.2.10.1041.exe. Ezek mind Windows alól indítható változatok, de nincs floppy image-ről frissítős megoldás, így a PXE boot most nem fog segíteni.

A fenti exe a következőt csinálja: Win alatt indítva a c:\Drivers\fw3.2.10.1041 könyvtárba kitömöríti magát. Ebből az érdekes komponens az FW1041.BIN, ebben van az image, amit fel kell tölteni a gépekre. Ezt jobban megvizslatva látható, hogy miért nincs floppyra másolós megoldás: 1,6MB-os az AMT3-as firmware fájl, ellenben az AMT2-es ~600kB-os méretével. 2.88-as floppy image ettől még lehetne persze… A gépeken nincs natív Windows, de most az update kedvéért kaptak egyet (ez önmagában nem egy kétperces meló, még ha kész image-ből húzom is rá a gépre). Végül a frissítés gond nélkül lefutott.

Most következett a BIOS…

A BIOS-ból 702-es (a weblap szerint Beta) BIOS van a gépeken, helyette lehetne akár 902-es is. A frissítés persze nem öncélú, igazából titkon abban reménykedtem (még ha semmi changelog nem is erősít meg ebben), hogy lesz egy olyan BIOS kiadás, amiben a Wake On LAN rendesen működik. Az Intel és a Lenovo meg tudta csinálni, hogy áram alá helyezés után az alaplapi hálózati kártya feléledjen és érzékeny legyen wake on lan csomagra. Az ASUS esetén ez csak nem akart összejönni pedig már minden kapcsolódó BIOS opciót végignéztem. Ezeket a gépeket ezért mindig kézzel kell bekapcsolni, a többi meg indul automatikusan.

Az ASUS a BIOS-hoz természetesen Windows-os update utility-t ad, ha már fenn van az AMT miatt úgyis egy natív Windows, akkor azzal kap egy kísérletet.

Annak ellenére, hogy így mindent a “gyárilag elképzelt” módon csináltam, korántsem volt egyszerű a művelet. Lássuk tehát a lépéssort:

  • Ha van az embernek kéznél pendrive-ja, arra rá lehet másolni a Windows-os setup utilityből kivadászott .BIN-t, majd az ASUS(TM) EZ FLASH2(R)-rel megcsinálni a BIOS-ból indítható frissítést. Most éppen nem volt kéznél pendrive, bár – mint az kikövetkeztethető – sokat nem nyertem volna vele.
  • Windows alá fel kell rakni a komplett ASUS updater utility-t. Ehhez ezt először le kell tölteni.
  • Élvezetes, amikor 10kB/s-el töltődik egy 8MB-os fájl és ez 54%-nál elakad.
  • Van persze egy “download manageres” opció, ehhez viszont külön telepíteni kell az AKAMAI spyware download manager alkalmazást, és persze a böngészőben ActiveX-et, ilyen-olyan plugineket, meg minden egyéb biztonsági antipatternt engedélyezni. Az gépre rakott WinXP “eldobós” jellegére való tekintettel ezt most bevállaltam, de egy komolyabb helyen a rendszeradmin kb. itt mondaná azt, hogy NEM!
  • Az ASUS Updater telepítése utáni indítás során kb. 1 percig nem csinál semmit a gép, majd ezután jelenik meg az ablak. Semmi visszajelzés nincs, látszik, hogy a gépben és a szoftver helyességében vakon bízó türelmes embereknek készült.
  • Jelentem az ASUS Updater ocsmányul néz ki, erre sajnos nincs szebb kifejezés. Hogy lehetett ilyen kevés funkcióhoz egy ilyen komplikált ronda GUI-t csinálni?asus updater utility
  • Válasszuk a BIOS letöltését!
  • A mirror választásnál ügyeljünk rá, hogy ne az Auto Select gombot nyomjuk meg, hanem kézzel az asus.com.tw-t válasszuk az (egyébként 3 elemű) mirror listából! Ez azért fontos, mert a másik két mirroron csak 2007 előtti, tehát a 0702-esnél régebbi BIOS verziók vannak. 🙂 Figyelni kell arra is, hogy ez ftp-n megy, még szerencse, hogy a 224-es labor hálózatából a tűzfalon az ftp ki van engedve.
  • Ez idáig még csak letöltötte a kiválasztott könyvtárba a fájlt, kézzel ki kell választani, hogy most update BIOS from file következik.
  • Megint jön egy hosszadalmasabb várakozás, eközben szokás szerint semmi ablak nincs a képernyőn. Egy processzor magot 100%-ra terhel a Winflash.exe. Innen látjuk, hogy most már egy másik alkalmazás fut, bár sikerült ezt is tökéletesen álcázni az ocsmány átlátszó, lyukas stílusú ablakdekorációval.
  • Szépen mutatja, hogy mi van a BIOS-ban, mi van az Image-ben, minden OK, mehet a Flash gomb.
  • Újabb várás 100%-ra pörgetett procival, nagy sokára megjelenik a 0% az Erasing Flash bitkolbász. Majd egyszercsak BANG! Error, could not erase flash. Hát ez nem hangzik jól, de nagyon nem!
  • Kis utánanyomozás… kiderül, hogy:
  1. A SERVICE_MODE jumpert át kell tenni 1-2-ről 2-3-as pozícióba. Igen, jól értettük, tehát ki kell nyitni gépet, enélkül nem megy! Még szerencse, hogy nincs a gépház garanciálisan plombálva.
  2. A memóriamodult az 1A foglalatból ki kell venni. o_O Hogy mivan?! Mondjuk sejtem, hogy mi lehet mögötte, az 1A memória-foglaltban az SPD EEPROM-ot sikerült az I2C buszon ugyanarra a címre rakni, amit a BIOS Flash eepromja is használ. Ez azért megintcsak erősen antipattern hardvertervezésre utal.
  • Indítás, erre mi fogad: CPU FAN FAIL
  • CPU ventilátort gyorsan ellenőrzöm, a gépbe piszkálás során került-e valami az útjába… nem, a ventilátor tökéletesen működik.
  • BIOS update procedúra ismétlés következik, ezúttal már sikerül
  • Persze a CMOS Setup beállításokat törölte. Bár ez elvileg egy checkbox-szal kikapcsolható lett volna, de kikapcsolásnál nagyon jajjogott, hogy ez mennyire nem javasolt.
  • Végül reboot, BIOS-t újra beállítom. A Hardware Monitor szekcióba belépni veszélyes, kb 1 percig nem lesz reszponzív a gép (a hülye animált csík – minek ilyen a BIOS-ba – persze mozog közben a képernyő tetején), ekkor látható, hogy sem a CPU hőmérőt sem CPU ventilátort nem tudja leolvasni.
  • Persze nem kellett volna megijedni, utána vissza kell rakni a jumpert a helyére és megint működni fognak a hardver szenzorok.
  • Gépet visszadobozolom.
  • Kipróbálom és szomorúan konstatálom, hogy a hideg indítás után nem működő a wake on lan problémáját továbbra sem oldották meg. De nem baj vigasztaljon minket, hogy az új BIOS sokkal kompatibilisebb az Overclockers’ DDR2-1200-as Super Low Latency Platinum Edition memóriával, valamint az Ai Overclocking feature is számos új funkcióval gazdagodott. 🙂

Amint láthattuk ez egy szuper enterprise megoldás. Két gép esetén bőven több munka volt vele, mint a Lenovo frissítőjével végigcsinálva az egész laborban. Mi lenne, ha az egész labor ilyen gépekből állna? Leplombált gyári gépházzal? Ebbe jobb nem belegondolni… A tanulság mindenesetre az, hogy az otthoni használatra szánt desktop alaplapok nem feltétlenül olyan szempontok figyelembevételével készülnek, ami akár egy 30 darabos géppark értelmes karbantartására alkalmassá tenné őket.

IPSec VPN Windows 2008 RRAS és Linux között

A hallgatói VPN idáig PPTP alapon ment, ám időközben a labort és hallgatói virtuális gépek hálózatát kiszolgáló Saruman szervert nyugdíjaztuk, a rajta futó Win2003 Serverrel együtt, helyét most Win2008 R2 Server vette át. Ezzel kezdődött a bonyodalom, mert a régi jól bevált PPTP VPN az új RRAS (Routing and Remote Access Service, ez felelős Windows alatt többek között a VPN szerver-oldali szolgáltatásért) változattal már nem ment olyan simán. Sőt egyáltalán nem akart menni.

Hogy megérthessük, hogy pontosan mi is változott, először egy kis “VPNológia”

Kicsit leegyszerűsítve a legtöbb VPN megoldásnak 3 része van: fej, tor, potroh

  • Autentikációs protokoll – ez hitelesíti a becsatlakozó klienst, ellenőrzi a felhasználónevet, jelszót, illetve ezzel hitelesítheti a kliens a szerver is.
  • Kulccsere protokoll – egy közös titkosító kulcsban itt állapodik meg a két fél, valamint egyéb kapcsolati paramétereket is egyeztetnek, például IP címet.
  • Forgalomtovábbító (tunneling) protokoll – a tényleges forgalmat ez viszi át, előfeltétele, hogy legyen közös kulcs.

Néhány fajta VPN megoldásnál ezek nem különülnek el, nincs mindenféle kombinációs lehetőség, mindegyikből egyféle van. Ilyen “három-az-egyben” csomagot kapunk pl. az OpenVPN és a Microsoft új SSL alapú VPN protokollja, az SSTP esetében. A PPTP és az IPSec viszont nem ilyen.

A PPTP a kapcsolat paraméter egyeztetést valamint a kapcsolat állapotkövetését végzi csak el, a forgalom GRE (General Routing Encapsulation) protokoll felett zajlik, ahol ráadasul még többféle opció is van a titkosításra, tömörítésre; jelenleg az MPPE és az MPPC használható ezekre a feladatokra.

Az IPSec szerepét tekintve talán leginkább a GRE-hez hasonlítható, önmagában csak a forgalomtovábbításért felelős. A hiányzó funkciókat más protokollokkal kell megoldani, vagy fixen kiosztott kulcsokkal kézzel két oldalon felhúzni a kapcsolatot. Az IPSec esetén a kulcs és konfigurációs adatok egyeztetésére találták ki az IKEv1 és IKEv2 (Internet Key Exchange) protokollokat.

Nem esett még szó a hitelesítésről: IPSec és PPTP esetén az autentikációra MSCHAP, MSCHAPv2, EAP-MSCHAPv2, EAP-MD5, EAP-TLS, LEAP, PEAP, PAP és más hasonló protokollok választhatók. Ezek közül jónéhány idejétmúlt és nagyon nem biztonságos. Biztonságosnak tekintik ma a PEAP, EAP-MSCHAPv2 és EAP-TLS-t.

És akkor most a bonyodalom

Az új RRAS szerverben alapértelmezetten letiltották azokat a hitelesítési protokollokat, amikről időközben kiderült, hogy nem biztonságosak. Vissza lehetne ugyan kapcsolni őket, de nyilvánvaló, hogy ez a megoldás nem volt az ínyünkre. A probléma főként a Linuxot futtató klienseket érinti, WinXP SP3 támogatja a PPTP újabb hitelesítési módjait, Vista és Win 7 pedig már az SSTP-t is.

Linux alatt jelenleg a PPTP kliens viszont csak a nem biztonságos autentikációs módszereket valósítja meg. PEAP és EAP-MSCHAPv2 támogatás jelenleg nincs, EAP-TLS is csak külön patch formájában érhető el. Ráadásul ez utóbbi a klienseket is tanúsítvány alapján azonosítaná, minden felhasználónak személyi tanúsítványt osztani pedig nem kellemes feladat.

Második lehetőségként felmerült az SSTP, mint a Microsoft “PPTP-t leváltó következő generációs VPN” rendszere.  Jelenleg nem ismeretes Linux alatt használható SSTP implementáció, de még olyan projektet sem találtam amely ennek implementálását tűzte volna ki célul.

Kizárásos alapon marad az IPSec

Megmondom őszintén elsőre eléggé fáztam tőle, mert a kluccsere és autentikációs protokollok, valamint opcionálisan implementálható (és emiatt eléggé következetlenül támogatott) lehetőségek dzsungelében egy jó adag szenvedés kinézett nekem. Az IPSec sosem arról volt híres, hogy egyszerű lenne összelőni. Másrészt az IKEv2 fő előnye pont az, hogy rengeteg korábban opcionális vagy le nem rögzített részletet kötelezően előírtak, így – elviekben – két IKEv2 implementációnak garantáltan képesnek kell lennie együttműködésre. Persze ilyet sokszor hallottunk már…

A Windows Server 2008 R2-ben található RRAS támogat IPSec + IKEv2 + EAP-MSCHAPv2 kombinációt. Linux alatt két nyílt forrású projekt valósítja meg többé-kevésbé ezt a kombinációt az Openswan és a StrongSwan. Én az utóbbival álltam neki, igazából nem tudom, hogy az Openswannal is működne-e, a leírások alapján az IKEv2 ott kevésbé van készen.

StrongSwan IPSec konfigurálása

Viszonylag sokat kerestem kész leírást arról, hogy Win2008, mint VPN szerver és StrongSwan, mint kliens között hogyan kell IPSec-et beállítani, de meglepő módon ilyet sehol nem találtam. Reményre adott okot, hogy a fordított felállás: StrongSwan, mint szerver és Windows 7, mint kliens dokumentáltan működik. Létezik mintakonfiguráció EAP-MSCHAP-V2 autentikáció használatára is, ebből indultam el, néhány paramétert azonban így is ki kellett találni.

A Strongswan telepítését most balladai homályban hagyom, ki-ki kedvenc disztribúciójához keresse ki, hogy hogyan kell, legrosszabb esetben fordítsa forrásból (én is így tettem).

Alapvetően három konfigurációs fájlt kell szerkeszteni:

  • /etc/strongswan.conf
  • /etc/ipsec.conf
  • /etc/ipsec.secrets

A /etc/strongswan.conf tartalma elvileg alapértelmezetten jó kell hogy legyen:

charon {
        # number of worker threads in charon
        threads = 16

        # plugins to load in charon
        # load = curl aes des sha1 md5 md4 sha2 pem pkcs1 hmac gmp random pubkey xcbc x509 stroke kernel-netlink fips-prf eap-mschapv2 eap-identity updown socket-default

        plugins {

                sql {
                        # loglevel to log into sql database
                        loglevel = -1

                        # URI to the database
                        # database = sqlite:///path/to/file.db
                        # database = mysql://user:password@localhost/database
                }
        }
}

pluto {
        # plugins to load in pluto
        # load = aes des sha1 md5 sha2 hmac gmp random pubkey
}

libstrongswan {
        #  set to no, the DH exponent size is optimized
        #  dh_exponent_ansi_x9_42 = no
}

A lényeg, hogy legyen benne charon rész (Charon a kódneve az IKEv2 démonnak, Pluto az IKEv1-esnek), valamint arra figyeljünk, hogy a load= maradjon kikommentezve, a mintakonfiguráció itt ugyanis hibás! Ha nincs megadva load=, akkor magától betölti az összes szükséges modult, ha viszont van és kihagyunk valami lényegeset a listából, akkor a logban például ilyen hibaüzeneteket kapunk:
charon: 14[NET] no socket implementation registered, receiving failed

A konkrét kapcsolat beállítása a /etc/ipsec.conf fájlban történik:

# ipsec.conf - strongSwan IPsec configuration file
# basic configuration

config setup
        # plutodebug=all
        # crlcheckinterval=600
        # strictcrlpolicy=yes
        # cachecrls=yes
        # nat_traversal=yes
        # charonstart=no
        plutostart=no

# Add connections here.

conn %default
        ikelifetime=60m
        keylife=20m
        rekeymargin=3m
        keyingtries=1
        keyexchange=ikev2

conn studentvpn
        leftfirewall=yes
        leftauth=eap
        eap_identity=<felhasználó neve>
        right=<szerver IP címe>
        rightauth=pubkey
        rightid="<Subject fully qualified name a szerver tanúsítványából>"
        rightsubnet=<a VPN kapcsolatra kiosztott IP alhálózat>
        auto=add
        leftsourceip=%config

A lényeges beállítások ezek:

  • keyexchange=ikev2 – nem kell hozzá sok magyarázat, kiválasztja az IKEv2 protokollt
  • auto=add – ez egy kapcsolatra megadja, hogy az ipsec démon indításakor (ami normális esetben init scriptből történik) csak töltse be a konfigurációt, de ne indítsa el a kapcsolatot automatikusan.
  • left* – ez a helyi végpont beállításait jelöli
    • leftfirewall=yes – ha van tűzfal a gépen, akkor adja hozzá az IPSec kapcsolathoz szükséges szabályt. Elvileg lehetne ezt saját tűzfalmódosító shell scripttel is csinálni, ilyenkor a saját scriptet leftup és leftdown paraméternél lehet megadni. Ha nincs tűzfal, akkor is hagyhatjuk engedélyezve.
    • leftauth=eap – a kliens EAP protokollal próbálja a szerver felé hitelesíteni magát. Az EAP olyan okos, hogy ezen belül a két végpont le tudja egyeztetni a közösen használt autentikációs eljárást, így automatikusan megegyeznek, hogy EAP-MSCHAPv2-t fognak használni. Ezt egyébként kézzel is meg lehetne adni: eap=mschapv2.
    • leftsourceip=%config – megmondja, hogy az IKE konfiguráció egyeztetési fázisban a kliens kérjen IP címet a szervertől. Ez egy nagyon kritikus beállítás, sajnos sehol nem írják le, hogy RRAS elvárja, hogy a kliens IP-t kérjen, különben hibajelzéssel bontja a kapcsolatot. Enélkül kliens oldalon ilyen (sokatmondó) hibaüzenetet kapunk: AUTH payload missing, ebből nem volt egyszerű visszanyomozni, hogy valójában mi is a probléma.
  • right* – ez a távoli végponthoz tartozó beállításokat jelenti
    • right= – itt kell megadni a szerver IP címét.
    • rightauth=pubkey – ez most aleftauth fordított irányban, az itt megadott módon próbálja hitelesíteni a kliens a szervert. A pubkey azt jelenti, hogy tanúsítvánnyal megadott nyilvános kulcsú hitelesítést használ. A tanúsítványt majd később telepíteni kell.
    • rightid= – ez lényegében csak egy string, amit a szerver elküld a kliensnek, a kliens pedig ellenőrzi, hogy azt kapta-e, amit elvárt. Ennél persze bonyolultabb a hozzátartozó magyarázat, viszont a sok inkompatibilis megvalósítás miatt a Strongswan alatt bármire beállíthatjuk. Ha nem jól állítjuk be vagy egyáltalán nem állítjuk be (alapértelmezetten a kapcsolat nevét ill. IP címét használja), akkor a kliens nem fog kapcsolódni. Szintén elég nehéz feladat volt azt kitalálni, hogy a Win2008 RRAS szervere mit küld el ID gyanánt, lévén hogy ez a beállítás ott kézzel nem állítható. Végülis a Microsoft viszonylag logikusan a szerverre beállított tanúsítványból a Subject fully quailified name mezőt választotta, annak tartalmát kell ide beírni, idézőjelek között.
    • rightsubnet= – igazából opcionális, ezzel megadható, hogy milyen IP alhálózatot érhetünk el a VPN kapcsolaton keresztül. Enélkül is működött, feltehetően arra való, hogy felülbírálhassuk amit a paraméteregyeztetés során kapna a másik végponttól.
  • eap_identity= – a felhasználónevet itt adjuk meg, nem szabad semmi idézőjelet használni. Érdekesség, hogy bár az RRAS szervert futtató gép nem Active Directory tartományvezérlő, de tartományi tag, és a felhasználókat az AD-ből hitelesíti, mégsem kell a felhasználónévnél megadni a tartomány nevét.

Hátra van még a jelszó elhelyezése a /etc/ipsec.secrets fájlban:

# /etc/ipsec.secrets - strongSwan IPsec secrets file
username : EAP "password"

Végül pedig telepíteni kell a szerver tanúsítványát aláíró főtanúsítványt (Certification Authority Certificate), ha nem valamelyik hiteles tanúsítványszolgáltató által kiadott tanúsítványt használunk. Egyszerűen be kell másolni a fájlt a /etc/ipsec.d/cacerts könyvtárba, DER és PEM formátumban is elfogadja, így konvertálni sem kell.

Összefoglalva a mintakonfigurációkban eddig le nem írt beállítások ezek voltak:

  • load=-t ne adjunk meg
  • leftsourceip=%config legyen
  • rightid= a szerver tanúsítványából a subject mező legyen

A kapcsolat felépítéséhez a következőket kell tenni:

IPSec démon indítása (akár lehet automatikusan init scriptből minden bootoláskor):

sudo /etc/rc.d/ipsec start

Kapcsolat indítása:

sudo ipsec up studentvpn

Ha jól sikerült, akkor a sok konzolra írt log üzenet végén, valami ilyesmit látunk:

installing DNS server 10.40.1.10 to /etc/resolv.conf
installing new virtual IP 10.40.210.2

Viszont hiába keressük, nem látjuk ennek semmi nyomát az ifconfig illetve route parancsok kimenetében. Normális esetben az ember azt várná, hogy egy VPN kapcsolat kiépülésekor megjelenik egy új hálózati interfész, pl.: PPTP VPN esetén ppp0 vagy OpenVPN-nél tun0 és ez veszi fel a megfelelő IP címet. Itt nincs semmiféle ipsec0 vagy hasonló interfész. Pedig a kapcsolat működik.

Régebben még valóban úgy működött az IPSec Linux alatt, ahogy imént írtam, most azonban az IPSec tunnelen keresztül elérhető IP címet az a hálózati interfész veszi fel, amelyiken keresztül megy a forgalom, pl eth0. Viszont ifconfiggal az eth0 esetén sem látjuk a VPN-en keresztül kiosztott IP címet, ugyanis az IPSec esetén egy transzformáción (ESP-be csomagolás, titkosítás) esik át a forgalom; az ilyen módon beállított IP végpontot pedig egy külön táblázat tárolja a kernelben. Az ifconfig, route és egyéb “hagyományos” linuxos hálózati konfigurációs eszközök ezt nem támogatják és nem is fogják támogatni, helyette itt az idő átszokni az új parancsra: ip.

Az ip addr list parancs kimenetén látjuk az eth0-hoz rendelt második IP címet és hasonlóképpen az útvonalválasztási szabályt az ip route show table 220 paranccsal nézhetjük meg.

A kapcsolat (IPSec szóhasználatban SA, azaz Security Association) állapota így is lekérdezhető:

sudo ipsec statusall

Végül a kapcsolat bontása:

sudo ipsec down studentvpn

Slusszpoén:

Az IPSec NAT-T (NAT traversal) üzemmódja IKEv2 esetén már nem opcionális, hanem kötelezően megvalósítandó elem, így elvileg a NAT-oló routerek mögül is gond nélkül működhet IPSec VPN. Ez esetben ugyanis nem ESP datagramokat használ közvetlenül IP felett, hanem UDP-be ágyazza be az ESP-t (persze némi teljesítményvesztés árán), így a NAT-oló eszközök számára is emészthető lesz a forgalom.

Én ennél egy még sokkal elvetemültebb módon teszteltem: egy OpenVPN tunnel fölött húztam fel az IPSec tunnelt és NAT-T üzemmódban ez minden további nélkül működött is. 🙂