SunRay – zdroje

Zajímavé stránky zabývající se terminálovým řešením od SUNu – SunRay.

http://www.sun.com/software/sdis/index.xml
http://wiki.sun-rays.org/index.php/General_Info
http://www.sun-rays.org/
http://wiki.sun-rays.org/
http://wwwcip.informatik.uni-erlangen.de/~simigern/sunray-debian/index.html
http://www.math.uni-leipzig.de/~hellmund/sunray.shtml
http://www.leonerd.org.uk/sunray/
http://blogs.sun.com/ThinGuy/
http://blogs.sun.com/ThinkThin/
http://www.samag.com/documents/s=1323/sam0110l/0110l.htm
http://blogs.sun.com/ThinGuy/entry/sun_ray_bandwidth

Solaris 10 – SMF tahák

Pokud jste se už setkali se Solarisem verze 10, určitě jste si všimli změn proti starším verzím, které prodělal. Jednou z nejvýraznějších změn je postupné upouštění od klasického systému init scriptů a jejich nahrazení sadou „divných“ nástrojů – SMF (Service Management Facility).

Procházím zápisky co mám k Solarisu a narazil jsem na takový jednoduchý tahák, který jsem si udělal když jsem se připravoval na certifikaci. Doufám, že se neurazíte, že ho sem strčím 🙂

OBP

  • Ukacenaý boot: boot -m verbose
  • Single režim: boot -m milestone=1
    (dřív to bylo boot -s)

svcs

výpis všech služeb a jejich stavu

  • -x -detailni vypis
  • -p -vypise procesy, ktere patri dane sluzbe
  • -d -vypise dalsi sluzby, ktere na dane sluzbe zavisi
  • -D -vypise na ktere sluzbe zavisi
  • -l -detailni popis sluzby
  • -H -o state,fmri

svcadm

ovladani sluzeb

  • enable – enable and online service
  • disable – disable and offline service
  • restart – restart specified service
  • refresh – re-read service configuration
  • mark – set maintenance state
  • clear – clear maintenance state
  • milestone – advance to a service milestone

svcprop

vypis parametru sluzby, hlavne pro skripty

svccfg

  • archive > /root/backup.xml – vypíše stav všech služeb, vhodné pro archivaci
  • apply /root/nove.xml – natažení nové konfigurace

inetadm

inetd sluzby

stav sluzeb

  • degraded – The service is running, but something is wrong, or its capacities are limited in some way.
  • disabled – The service has been disabled and is not running.
  • legacy_run – A legacy rc.X script has been started by the system, and is running. We’ll talk more about legacy services later.
  • maintenance – The instance has encountered some sort of error, and it needs to be repaired by an administrator.
  • offline – The service is enabled, but not running yet, usually because a service it depends on is not online yet.
  • online – The service is both enabled and running successfully.
  • uninitialized – svc.startd has not yet read this service’s
  • configuration.

Přidání nové služby

  • /lib/svc/method/ – tady v tom adresáři je třeba vyrobit shell skript, který startuje a stopuje službu
  • /var/svc/manifest/application/ – ke skriptu je třeba udělat odpovídající xml, který naimportujeme do systému: svccfg -v import /var/svc/manifest/application/neco.xml
  • no a pak jen omrkneme jestli funguje: svcs -vx neco

Příklad použití

  • stare: /etc/init.d/sshd stop
  • nove: svcadm disable -t network/ssh:default
  • stare: /etc/init.d/sshd start
  • nove: svcadm enable -t network/ssh:default
  • stare: /etc/init.d/sshd stop; /etc/init.d/sshd start
  • nove: svcadm restart network/ssh:default
  • stare: kill -HUP `cat /var/run/sshd.pid`
  • nove: svcadm refresh network/ssh:default

Oficiální dokumentace

http://docs.sun.com/app/docs/doc/817-1985/6mhm8o5rh?a=view

    * inetadm(1M)
    * inetconv(1M)
    * inetd(1M)
    * kernel(1M)
    * smf(5)
    * smf_bootstrap(5)
    * smf_method(5)
    * svc.startd(1M)
    * svcadm(1M)
    * svccfg(1M)
    * svcprop(1)
    * svcs(1)

Skrytí cizích procesů před uživatelem

Na serverech s Linuxem jsem si zvykl používat grsecurity patch. Pomocí grsecuity patche je možné zlepšit zabezpečení systému, patch také umí nastavit práva na adresář /proc tak, že neprivilegovaný uživatel vidí jen své procesy. Tato funkce se mi docela líbí i na pracovní stanici, protože přináší trochu víc soukromí pokud počítač používá víc lidí najednou. Doma mám stroj se Solarisem a tuto featuru jsem si chtěl nastavit i na něm. Následující text je platný pro Solaris 10, je jedno jestli jde o platformu SPARC nebo x86.

Pokud si jako běžný uživatel vypíšete seznam procesů na počítači například pomocí příkazu ps -ef, uvidíte všechny procesy všech ostatních uživatelů. V Solarisu 10 je možné nastavit oprávnění procesů v systému no a toho využijeme i v tomto případě.

V souboru /etc/security/policy.conf je třeba odkomentovat řádek s PRIV_DEFAULT a doplnit do tvaru

PRIV_DEFAULT=basic,!proc_info

. Po této úpravě uvidíte jako běžný uživatel pouze své procesy, jako root samozřejmě vidíte všechno.

tsunami@draslik:~$ id
uid=100(tsunami) gid=100(users)
tsunami@draslik:~$ ps -efa
     UID   PID  PPID   C    STIME TTY         TIME CMD
 tsunami   762   754   0 18:15:21 pts/3       0:00 bash
 tsunami   752   749   0 18:15:19 ?           0:00 /usr/lib/ssh/sshd
 tsunami   754   752   0 18:15:19 pts/3       0:00 -bash
 tsunami   772   762   0 18:25:15 pts/3       0:00 ps -efa

Popis volby proc_info získáte pomocí příkazu ppriv:

root@draslik:~# ppriv -l -v proc_info
proc_info
        Allows a process to examine the status of processes other
        than those it can send signals to.  Processes which cannot
        be examined cannot be seen in /proc and appear not to exist.

Nastavení provedené v souboru /etc/security/policy.conf je globální. Pokud potřebujete upravit nastavení pro jednotlivé uživatele, použijte soubor /etc/user_attr.

Odkazy na zdroje dalších informací:

Instalační server pro Solaris x86 na SPARC stroji

  • instalační server – Solaris 10, SPARC
  • instalovaný stroj – Solaris 10, x86

Nainstalujte poslední verzi JET. Pokud máte možnost, tak z EISCD jinak použijte verzi stažitelnou ze stránek SUNu.

Přidáme EISCD do JET:

Pokud máte přístup k EISCD, tak je přidáme do JETu

  • z prvního EISCD spustíme install/copy-cd2sun.sh
  • z dalších spustíme install/add-cd2sun.sh
  • pak z adresáře /sun spustíme /opt/jet/bin/copy_eiscd

Přidání Solarisu 10 x86 do JET

Pro přidání Solarisu pro x86 platformu do JET, který běří na SPARC platformě potřebujeme už jeden nainstalovaný x86 stroj se Solarisem. Z něj si přečteme první instalační CD x86 Solarisu.

Z nainstalovaného Solarisu x86 si vyexportujte adresáře s CD přes NFS:

  • v souboru /etc/dfs/dfstab:
  • share -F nfs -o ro,anon=0 /cdrom/cdrom0/s0
  • share -F nfs -o ro,anon=0 /cdrom/cdrom0/s2
  • a restartujte NFS server
  • na SPARC serveru s JET:
    • cd /net/x86-server/cdrom/cdrom0/s2
    • ./add_to_install_server

    První řádek z /opt/jet/Products/base_config/solaris/make_dhcp spustíme jako root:

    dhcpconfig -D -r SUNWfiles -p /var/tmp

    do /opt/jet/etc/jumpstart.conf dopište/změňte

    JS_DHCP_VENDOR="i86pc"
    JS_CLIENT_MANAGEMENT="dhcp bootp"

    Pokud chcete přidat dhcp pro další počítače na platformě SPARC, je třeba provést zápis ve stylu:

    JS_DHCP_VENDOR="i86pc SUNW,UltraAX-i2"

    ten divnej identifikátor získáte z příkazu uname -i spuštěném na daném stroji.

    Cestu /opt/jet/bin pridame uzivateli root do PATH

    Vlastní instalace

    Přidání šablony pro našeho klienta

    make_template -f -A i86pc -E 00:0d:60:5f:2b:0a jmeno-klienta

    Vyrobil jsem si výchozí šablonu s názvem sablona, použiju ji pak takhle:

    make_template -T sablona -f -A i86pc -O 10 -E 0:9:3d:12:f8:8e HOSTNAME eiscd

    Editace šablony

    vi /opt/jet/Templates/jmeno-klienta

    nastavím IP adresu klienta:

    base_config_sysidcfg_ip_address=

    případně zruším/nastavím přesměrování na seriový port:

    base_config_x86_console=““

    vyrobení klienta:

    make_client -F jmeno-klienta

    x86 stroj umí většinou bootovat pomocí PXE ze sítě. SPARC masiny je pro boot z dhcp potřeba bootovat pomocí:

    boot net:dhcp - install

    Instalace Solarisu 10 na V20z (vzdáleně):

    • Přihlásíme se na v20z do SP
    • získáme MAC adresu:
      platform get mac
    • nastavíme přesměrování seriové konzole
      platform set console -s sp -e -S 9600
      platform console
  • přihlásíme se podruhé do SP na v20z a zapneme ji
    platform set power state on
  • v konzoli si zvolíme boot ze sítě
  • pokud instalujeme na vytvořený RAID, může se na V20z stát, že solaris uvidí jen první 4 GB disku, potom je dobré z příkazového řádku instalátoru provést
    raidctl -d c1t0d0

    tím se raid zruší, pak provedeme reboot a znovu spustíme instalaci bootem ze sítě

  • až po nainstalování Solarisu se vytvoří RAID1 pomocí příkazu:
    raidctl -c c1t0d0 c1t1d0
  • instalace končí v okamžiku, kdys e na obrazovce objeví něco jako:
    JumpStart is complete @ Sat Oct  1 15:46:34 MEST 2005
  • heslo na uživatele root je root
  • Někdy je po instalaci potřeba přegenrovat klíče k ssh pomocí příkazu:
    /lib/svc/method/sshd -c
  • nahodíme ssh:
    svcadm clear ssh
    svcadm restart ssh
  • vytvoříme RAID1 na integrovaném řadiči:
    # raidctl -c c1t0d0 c1t1d0
    	# raidctl
    RAID            RAID            RAID            Disk
    Volume          Status          Disk            Status
    ------------------------------------------------------
    c1t0d0          RESYNCING       c1t0d0          OK
                                    c1t1d0          OK
  • vyčištění serveru od starých šablon:
    sh /tftboot/rm.XXXXXXXXX
    		dhtadm -D -m NAZEVSABLONY
                    pntadm -D NAZEVSABLONY 179.100.1.0
  • případně promazání /etc/hosts a /etc/ethers
  • stav DHCP overime prikazy
    dhtadm -P
    pntadm -P 192.168.1.0
  • stav JETu
    ls /opt/jet/Templates/
    ls /opt/jet/Clients/
  • Obnova path_to_inst v Solarisu

    Při velké změně hardware (třeba výměna FC-AL disků, ze kterých bootujete) se může v Solarisu stát, že nenabootujete. Velmi často to je způsobené neaktuálním soubourem /etc/path_to_inst. Způsob jak obnovit tento souboru je relativně snadný, jen si to chce párkrát zkusit 🙂

    Solaris 10

    1. Nabootujeme do single režimu z CD nebo sítě.
    2. přimountujeme root filesystem do /a
      • mount /dev/dsk/c1t0d0s0 /a
    3. Zazálohujeme starý soubour
      • mv /a/etc/path_to_inst /a/etc/path_to_inst-BAK
    4. Vygenerujeme nový path_to_inst a potřebná zařízení
      • devfsadm -C -r /a -p /a/etc/path_to_inst
    5. umount /a; reboot

    Solaris 8, 9

    V Solarisu 8 a 9 je obnova snadnější, stačí /etc/path_to_inst smazat a nabootovat s parametrem -ar, -a způsobí, se vás zeptá na pár věcí a jednou z nich je i to jestli chcete vytvořit nový /etc/path_to_inst. -r přegeneruje záznamy v /dev/ a /devices/.

    Pokud máte disky ze kterých bootujete zrcadlený pomocí SDS nebo jiné potvory, tak bacha na mazání /etc/path_to_inst, je dobré nejdřív rozbít mirror, provést změny a znovu mirror spojit

    Solaris 10 a zóny

    O Solarisu jste už určitě slyšeli, je to UNIX z dílny SUN Microsystems a funguje na platformě SPARC a x86/x86_64. Spolu s novou verzí tohoto operačního systému (verze 10, vyšla oficiálně na začátku 2005) nám firma SUN Microsystems připravila i některá zajímavá vylepšení jako je nástroj dtrace, SMF nebo třeba podporu pro zóny. Tento článek je právě o konfiguraci a používání zón v Solarisu 10 případně OpenSolarisu.

    Zóny jsou jakousi abstraktní vrstvou operačního systému umožňující spouštění různých aplikací ve svém vlastním prostředí na společném hardware. Procesy jsou uzavřené v zóně a nemůžou ji nijak „opustit“ a případně ohrozit jiné zóny. Procesy v zóně také nemají přístup k hardware.

    Máme dva druhy zón. Globální zóna, může být pouze jedna a je to vlastní bežící operační systém. Dále máme lokální zóny (non-global zone), kterých je možné v globální zóně provozovat až 8192. Počet lokálních zón je limitován použitým hardwarem. Minimální nároky na jednu lokální zónu jsou 40MiB RAM a 320MiB volného prostoru na pevném disku. Každá zóna má oddělený systém uživatelských účtů (samostatný /etc/passwd a pod.), samostatný souborový systém, vlastní nastavení sítě a přidělené systémové prostředky. Lokální zóna je vlastně takový virtuální počítač, lze ji zapnout, vypnout, restartovat a překonfigurovat nezávisle na dalších zónách.

    Použitý hardware

    Instalaci popisovanou v článku jsem prováděl na počítači Ultra 10 s procesorem UltraSPARC IIi 440MHz a 384 MiB RAM. Solaris pro x86 podporuje zóny úplně stejně jako varianta pro SPARC, takže si to mlžete zkusit i sami na svém počítači. Pokud nechcete instalovat Solaris přímo na pevný disk, lze použít například virtuální stroj VMWare, ale doporučuji nějakou poslední verzi. Pro VMWare je dostupná zkušební licence na 30 dní. Pro Solaris doporučuji minimálně 256MiB RAM, ale pokud můžete, dejte mu víc, zvlášť v grafickém prostředí je to znát.

    Informace o použitém operačním systému:

    root@draslik:~# uname -a
    SunOS draslik 5.10 Generic_118822-02 sun4u sparc SUNW,Ultra-5_10

    Informace o nastavení sítě systému, ve kterém budeme vytvářet zónu.

    root@draslik:~# ifconfig -a
    lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
            inet 127.0.0.1 netmask ff000000
    hme0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
            inet 192.168.0.14 netmask ffffff00 broadcast 192.168.0.255
            ether 8:0:20:c6:8e:9f

    Nastavení zóny

    Vytvoříme si adresář /zones do kterého budeme zóny umisťovat. V adresáři /zones je třeba zajistit dostatek místa, zónu lze udělat třeba 500MiB velikou nebo může mít také několik GiB.

    Ověříme v jakém stavu jsou zóny v systému, všechny si vypíšeme:

    root@draslik:~# zoneadm list -vc
      ID NAME             STATUS         PATH
       0 global           running        /

    Jak je vidět z výpisu, v systému existuje jen jedna globální zóna a to vlastní operační systém.

    Zóna, kterou si tu vytvoříme jako vzorovou se jmenuje appserv (poběží v ní aplikační server). K nastavení parametrů zóny slouží program zonecfg.

    Příkaz create -b slouží k vytvoření čisté konfigurace bez předvoleb. Pokud nepoužijete parametr -b, tak se vytvoří zóna, kde budou některé adresáře sdílené s hlavním OS. Zónu umístíme do adresáře /zones/appserv/ a nastavíme autoboot.

    Další krok je přiřazení síťového rozhraní. Na mém počítači se síťovka jmenuje hme0. Na x86 počítačích to bude pravděpodobně pcn0, přesný název zjistíte z výpisu ifconfig -a. Zóna může síťové rozhraní sdílet s nějakou jinou zónou nebo ho může mít pouze pro sebe.

    Rozhodl jsem se, že adresáře /opt/sfw a /platform můžu v zóně appserv sdílet s globální zónou. V zóně appserv jsou sdílené adresáře přístupné pouze pro čtení.

    Nakonec zkontrolujeme parametry zóny, uložíme a ještě si vypíšeme celou konfiguraci. Stiskem ctrl-d ukončíme práci.

    Pokud potřebujete založit více zón, je možné sepsat všechny příkazy do souborů a ty pak zpracovat například ve skriptu pomocí zoneadm -f soubor-s-prikazy.

    root@draslik:~# zonecfg -z appserv
    zonecfg:appserv> create -b
    zonecfg:appserv> set zonepath=/zones/appserv
    zonecfg:appserv> set autoboot=true          
    zonecfg:appserv> add net          
    zonecfg:appserv:net> set address=192.168.0.100
    zonecfg:appserv:net> set physical=hme0        
    zonecfg:appserv:net> end              
    zonecfg:appserv> add inherit-pkg-dir
    zonecfg:appserv:inherit-pkg-dir> set dir=/opt/sfw
    zonecfg:appserv:inherit-pkg-dir> end             
    zonecfg:appserv> add inherit-pkg-dir
    zonecfg:appserv:inherit-pkg-dir> set dir=/platform
    zonecfg:appserv:inherit-pkg-dir> end              
    zonecfg:appserv> verify
    zonecfg:appserv> commit
    zonecfg:appserv> info  
    zonepath: /zones/appserv
    autoboot: true
    pool: 
    inherit-pkg-dir:
            dir: /opt/sfw
    inherit-pkg-dir:
            dir: /platform
    net:
            address: 192.168.0.100
            physical: hme0
    zonecfg:appserv> ^d
    

    Instalace zóny

    Zóna je nakonfigurovaná a připravená k instalaci:

    root@draslik:~# zoneadm list -vc
      ID NAME             STATUS         PATH
       0 global           running        /
       - appserv          configured     /zones/appserv

    Provedeme instalaci zóny, v závislosti na nastavení a rychlosti počítače to může trvat až půl hodiny.

    root@draslik:~# zoneadm -z appserv install

    Programem zoneadm můžete zónu také odinstalovat (uninstall), restartovat (reboot) nebo třeba nabootovat (boot)

    Boot a první připojení do zóny

    Zónu po nainstalování porpvé nastartujeme.

    root@draslik:~# zoneadm -z appserv boot

    První připojení do zóny slouží k jejímu nastavení, nastavuje se typ terminálu, časová zóna a heslo roota zóny. Nastavením vás provede sada textových dialogů. Pro připojení do lokální zóny z globální se používá program zlogin s parametrem -C v interaktivním režimu pro práci na konzoli.

    zlogin -C appserv

    „Proklikáme“ se přes základní nastavovací dialogy, přihlásíme se do zóny a vytvoříme si uživatele abysme se mohli připojit přes ssh (nebo si povolíme přihlášení roota v konfiguraci ssh).

    Pokud se k zóně přihlásíte klasickým způsobem přes zlogin, tak ve výchozí konfiguraci se ze zloginu dostane pomocí kombinace kláves ~. (vlnovka a tečka), v případě, že jste přihlášeni na server přes ssh, je třeba zmáčknout ~ dvakrát, první stisk totiž odchytí ssh.

    root@draslik:~# zlogin -C appserv
    [Connected to zone 'appserv' console]
    
    appserv console login: ~.
    [Connection to zone 'appserv' console closed]
    

    Také si vlnovku můžete přemapovat třeba na zavináč pomocí parametru -e.

    zlogin -C -e\@ appserv
    

    Zlogin umí pracovat i v neinteraktivním režimu, například se tak dá velmi jednoduše zóna korektně vypnout.

    
    zlogin appserv shutdown -y -i0 -g0
    

    Informace o stavu zóny

    Z globální zóny můžete získat informace o procesech v jednotlivých lokálních zónách. Pro výpis všech procesů v počítači a také pro informace o celkové spotřebě paměti a procesorového času jednotlivých zón lze použít příkaz

    prstat -Z

    Samozřejmě si můžete vypsat pouze procesy konkrétní zóny pomocí příkazu ps -fz nazev-zony přápadně použít prstaz -z nazev-zony.
    Do jednotlivých zón je možné vstoupit i na úrovni filesystému z globální zóny, stačí když se podíváte do adresáře /zones/nazev_zony/root/.

    Pro porovnání s normálním stavem ukážu jak vypadá konfigurace sítě v zóně global při nabootované zóně:

    root@draslik:~# ifconfig -a
    lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
            inet 127.0.0.1 netmask ff000000 
    lo0:1: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
            zone appserv
            inet 127.0.0.1 netmask ff000000 
    hme0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
            inet 192.168.0.14 netmask ffffff00 broadcast 192.168.0.255
            ether 8:0:20:c6:8e:9f 
    hme0:1: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
            zone appserv
            inet 192.168.0.100 netmask ffffff00 broadcast 192.168.0.255
    

    takto vypadá to samé nastavení při pohledu z lokální zóny appserv:

    bash-3.00# ifconfig -a
    lo0:1: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
            inet 127.0.0.1 netmask ff000000 
    hme0:1: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
            inet 192.168.0.100 netmask ffffff00 broadcast 192.168.0.255
    

    Zóny umístěné na NFS

    Na testovacím počítači jsem neměl dostatek místa na disku, tak jsem se rozhodl umístit zónu na NFS. Má to některé výhody. Použitá Ultra 10 je relativně pomalý počítač ohledně přístupu k disku (je v ní ATA33 disk) a tak 100Mbps síť bude docela dobrou náhradou za tento disk.

    Zóny zatím nejde umístit přímo na NFS, zóna se odmítne nainstalovat. Proto jsem použil jednoduchou fintu.

    NFS jsem namountoval do adresáře /.zones/

    Vytvořil jsem si pomocí programu dd na NFS serveru 10GiB soubor.

    dd if=/dev/null of=/.zones/zony.img bs=1k count=1 seek=10485760

    Na tomto souboru jsem vyrobil souborový systém.

    newfs /.zones/zony.img

    a tentou soubor jsem namountoval do adresáře /zones/

    mount `lofiadm -a /.zones/zony.img` /zones

    Výpis připojenného souboru:

    root@draslik:/# df -h /.zones /zones
    Filesystem             size   used  avail capacity  Mounted on
    tsunami:/export/hosts/draslik
                          10.0G   4.3G   5.7G    43%    /.zones
    /dev/lofi/1            9.8G   3.0G   6.7G    31%    /zones
    

    Potom je možné normálně nainstalovat zónu a přitom ji mít na NFS.

    Něco na závěr

    Škoda, že zóny nejdou používat i v Linuxu. Myslím, že chroot je docela dobrá věc, ale bohužel není tak propracovaný jako systém zón na Solarisu. User Mode Linux je zase složitější na správu a také má větší HW nároky, na druhou stranu je UML samostatně běžící jádro pod neprivilegovaným uživatelem a to zóny v Solarisu neumožňují.

    Systém zón a jejich snadná správa je ideální pro vývojáře, kdy mohou různé vývojářské týmy efektivně sdílet jeden server aniž by se navzájem ovlivňovaly. Zóny také umožňují lepší zabezpečení systémů, kde na jednom serveru běží více služeb a potřebujete je nějak navzájem izolovat.

    Další informace:

    System Administration Guide: Solaris Containers-Resource Management and Solaris Zones
    BigAdmin System Administration Portal – Solaris Zones

    Článek vyšel 19.9.2005 na Abclinuxu.cz

    Network Failover

    Párkrát jsem se setkal s požadavkem připojení serveru pomocí dvou síťových karet kvůli zabezpečení proti výpadku trasy připojení. Varianta kterou zde popíšu pro Solaris i Linux počítá s jednou veřejnou IP adresou pro server.

    Solaris

    Minimálně od Solarisu 8 je možné celkem jednoduše nastavit network failover. Postup je následující:

    Potřebujeme celkem 3 IP adresy pro server ze stejné sítě. Jedna je klasické IP, se kterou normálně komunikuje okolní svět a zbývající 2 jsou pro síťovky. Obě síťovky je třeba přiřadit do stejné skupiny, u mě to je skupina production.

    Záznam v /etc/hosts:

    192.168.10.100   server
    192.168.10.101   server-dummy0
    192.168.10.102   server-dummy1
    

    /etc/hostname.bge0

    server-dummy0 netmask + broadcast + \
    group production deprecated -failover up \
    addif server netmask + broadcast +failover up
    

    /etc/hostname.bge1

    server-dummy1 netmask + broadcast + \
    group production deprecated -failover standby up
    

    Při vytažení kabelu se vlogu objeví záznam programu in.pathd, který se o faiover stará.

    Linux

    V Linuxu je spojení více rozhraní do jednoho také docela jednoduché. Je třeba podpora v jádře (zřejmě většina distribucí podporuje, modul bonding, nainstalovaný program ifenslave a pár změn v konfiguraci. Popis, který zde uvedu je platný pro RdeHat a Fedoru. Samozřejmě lze spojit více rozhraní i v jiných distribucích, ale zřejmě to nebude tak jednoduché. V počítači máme 2 síťovky a naše IP adresa je 192.168.1.11.

    Do /etc/modprobe.conf přidejte řádek s alias bond0 bonding.

    /etc/sysconfig/network-scripts/ifcfg-eth0

    DEVICE=eth0
    ONBOOT=yes
    USERCTL=no
    MASTER=bond0
    SLAVE=yes
    BOOTPROTO=none
    

    /etc/sysconfig/network-scripts/ifcfg-eth1

    DEVICE=eth1
    ONBOOT=yes
    USERCTL=no
    MASTER=bond0
    SLAVE=yes
    BOOTPROTO=none
    

    /etc/sysconfig/network-scripts/ifcfg-bond0

    DEVICE=bond0
    IPADDR=192.168.0.11
    NETMASK=255.255.255.0
    NETWORK=192.168.0.0
    GATEWAY=192.168.0.1
    BROADCAST=192.168.0.255
    ONBOOT=yes
    BOOTPROTO=none
    USERCTL=no
    

    Po restartu sítě (/etc/init.d/network restart) byste měli vidět výpis ifconfig -a podobný tomu mému.

    bond0     Link encap:Ethernet  HWaddr 00:40:63:D9:7E:DC  
              inet addr:192.168.0.11  Bcast:192.168.0.255  Mask:255.255.255.0
              inet6 addr: fe80::240:63ff:fed9:7edc/64 Scope:Link
              UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
              RX packets:550490 errors:0 dropped:0 overruns:0 frame:0
              TX packets:799690 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0 
              RX bytes:484539138 (462.0 MiB)  TX bytes:649697037 (619.5 MiB)
    
    eth0      Link encap:Ethernet  HWaddr 00:40:63:D9:7E:DC  
              inet addr:192.168.0.11  Bcast:192.168.0.255  Mask:255.255.255.0
              inet6 addr: fe80::240:63ff:fed9:7edc/64 Scope:Link
              UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
              RX packets:278604 errors:0 dropped:0 overruns:0 frame:0
              TX packets:399819 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:244748673 (233.4 MiB)  TX bytes:324785741 (309.7 MiB)
              Interrupt:10 Base address:0x2000 
    
    eth1      Link encap:Ethernet  HWaddr 00:40:63:D9:7E:DC  
              inet addr:192.168.0.11  Bcast:192.168.0.255  Mask:255.255.255.0
              inet6 addr: fe80::240:63ff:fed9:7edc/64 Scope:Link
              UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
              RX packets:271887 errors:0 dropped:0 overruns:0 frame:0
              TX packets:399872 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:239790531 (228.6 MiB)  TX bytes:324911410 (309.8 MiB)
              Interrupt:11 Base address:0x4000 
    

    Podrobnější dokumentace k nastavení bondingu je u zdrojáků jádra.