Portál AbcLinuxu, 19. dubna 2024 14:32

Wake on LAN přes internet a vzdálený boot management

14. 5. 2009 | Zdeněk Zámečník
Články - Wake on LAN přes internet a vzdálený boot management  

Máte doma nebo někde v kanceláři počítač, na který se občas potřebujete vzdáleně připojit, ale nechcete jej nechávat trvale zapnutý jen proto, abyste jej využili párkrát do týdně nebo dokonce jednou do měsíce? Důvodů může být více - úspora energie, eliminace hluku, prodloužení životnosti komponent apod. Článek se dále zaměřuje na boot management, který by mohl být doslova spásou pro některé administrátory.

Úvodem

Když jsem řešil zálohování několika menších serverů s důležitými daty, rozhodl jsem se, že zálohovat budu domů. Koupil jsem pro tento účel malý nanoITX, aby zabíral málo místa, měl nízkou spotřebu a byl tichý. První dva předpoklady splnil, bohužel ale neoplýval takovou tichostí, jakou jsem si představoval. To mne vedlo k tomu, abych vyřešil, jak vzdáleně PC spouštět, aby běželo opravdu jen, když je to třeba.

Teorie WOL přes internet

Základním předpokladem je mít síťovou kartu podporující WOL (Wake on LAN) a popř. mít tuto funkci zapnutou v BIOSu. Někoho možná překvapí, že v systému je třeba tuto funkci ještě zvlášť aktivovat. To lze provést nástrojem ethtool.

Pokud ve výpisu při provedení příkazu ethtool eth1 položka Wake-on ukazuje písmeno d, znamená to, že je funkce vypnuta. WOL má několik verzí. Které z nich vaše síťová karta podporuje, najdete pod položkou Supports Wake-on. WOL se potom tedy aktivuje například příkazem ethtool -s eth1 wol g. Nutno podotknout, že po restartu se toto nastavení ztratí, je tedy dobré tento příkaz provádět vždy při spouštění systému.

A pokud chcete mít opravdu přehled, doporučuji to provádět v souboru /etc/network/interfaces (/etc/network/interfaces - konfigurace síťových rozhraní):

allow-hotplug eth1
iface eth1 inet dhcp
	post-up ethtool -s eth1 wol g

Nyní si poznamenejte MAC adresu síťové karty; zjistit ji můžete například příkazem ip addr show eth1, popř. ifconfig eth1, který je již několik let označen jako zastaralý. Počítač vypněte a na jiném ve stejné síti zadejte do konzole příkaz wakeonlan 00:30:1b:bb:20:ab. Pokud jste vše udělali správně, tak by se vypnutý počítač měl probudit.

Teď nám tedy jde počítač probouzet v lokální síti, jak to ale vyřešit přes internet? Utilita wakeonlan má parametr -i, který slouží k zadání IP adresy, takže příkaz wakeonlan -i 177.177.177.177 00:30:1b:bb:20:ab by se měl postarat o doručení magických paketů na správné místo. Ti bystřejší ale namítnou, že paket dorazit nemůže, protože vypnutý počítač zkrátka nemá aktivní síťovou kartu s danou IP adresou. A já jim dávám za pravdu.

Jak tohle vyřešit? Magické pakety WOL běhají ve výchozím nastavení na UDP portu 9, takže nejprve potřebujeme router s veřejnou IP adresou ze kterého tento port přesměrujeme na vnitřní adresu našeho PC. Aby router věděl, kam pakety posílat, i když bude PC vypnuté, je třeba na routeru nastavit statický ARP záznam. A to je právě klíčková myšlenka. Tolik k nastínění problematiky.

Stručné představení routerboardu Mikrotik

Routerboardy Mikrotik jsou v dnešní době velmi známé, nicméně pro jistotu tyto produkty obecně představím. Jedná se v podstatě o miniaturní PC s procesory SPARC nebo PowerPC o různých frekvencích. Ty nejlevnější z nich stojí okolo tisícikoruny a nemívají koprocesor. Za přibližně dvojnásobnou cenu lze koupit mnohem lepší model disponující rychlejším procesorem (např. 680 MHz), koprocesorem a třeba i slotem na microSD kartu. Obvykle jsou vybaveny operační pamětí 16-64 MB a flash pamětí pro systém 32-256 MB. Pro nás je důležitý fakt, že jsou routerboardy vybaveny sériovým portem, který lze využít pro více účelů.

rb433

Výrobce do routerboardů v ceně dodává vlastní operační systém RouterOS, který se trochu podobá Cisco systémům. Avšak jejich správa je možná kromě terminálu i utilitou Winbox, která jejich konfiguraci dělá velmi jednoduchou. To je jeden z důvodů, proč jsou tak populární. Winbox je určen pro systém Windows, nicméně funguje spolehlivě snad pod všemi verzemi Wine, což zveřejňuje i sám výrobce v dokumentaci. RouterOS má více verzí a neliší se pouze klasickým číslováním jako např. 3.20, ale také úrovněmi - levely. Jedná se vlastně o licencovaný systém a podle toho, jakou licenci si koupíte (Level 3-6), tak je vybaven funkcemi. Přičemž při koupi Mikrotiku již v ceně získáváte jednu z těchto licencí.

Úvodní nastavení routerboardu pomocí Winboxu

Nastavení je jednoduché, ale pro jistotu jej projdu od okamžiku, kdy Mikrotik rozbalíte:

  1. Připojte Mikrotik do LAN a spusťte si na počítači Winbox.
  2. Stiskem tlačítka [...] zahájíte vyhledávání routerboardu v síti, po jeho nalezení vyberte MAC adresu nalezeného zařízení.
  3. V levém menu zvolte IP>Addresses a nastavte si např. na ether1 veřejnou IP a na ether2 vnitřní IP.
  4. V levém menu zvolte IP>Firewall a přejděte na kartu NAT. Klepněte na červené plus a vyplňte položky: Poté přejděte na kartu Action a zde nastavte: kde 192.168.1.100 je vnitřní IP vašeho PC, které chcete probouzet.
  5. Zbývá nastavit statický ARP. To se provede v menu IP>ARP, kde klepnutím na červené plus přidáme další nový záznam. Zadáme vnitřní IP adresu PC, jeho MAC adresu a rozhraní, na které je připojen

Nyní již můžete zkusit probudit PC vzdáleně přes internet dříve zmíněným příkazem wakeonlan -i 177.177.177.177 00:30:1b:bb:20:ab, kde 177.177.177.177 nahradíte vámi používanou veřejnou adresou a 00:30:1b:bb:20:ab MAC adresou PC, které chcete zapnout.

Sériová konzole a její nastavení v systému

Někteří z vás už možná slyšeli o možnosti připojení na terminál pomocí sériového portu (nejčastěji RS232), což má vícero výhod. Jedna z nich je ta, že nepotřebujete monitor a klávesnici, ale pouze propojíte sériový port s jiným počítačem a pak se na něj terminálem připojíte. Také se často využívá ve vývoji a ladění kernelu. Ptáte se proč? Vtip je v tom, že máte k dispozici např. výpis obrazovky při vypínání i po úplném vypnutí PC. Zkrátka, co jednou přes sériový port přijmete, už vám jen tak z obrazovky nezmizí.

Než se pustíme do samotné konfigurace, uvedu zde tabulku znázorňující zapojení kabelu k propojení sériových portů, který v drtivé většině případů naleznete pod názvem null modem cable. Kabel lze koupit i hotový, jen si jej nepleťte s prodlužovacím kabelem tohoto rozhraní. Null modem kabel poznáte v první řadě podle jeho konektorů - na obou koncích musí být 9pinová samice nazývaná CANON9/F. Není to však fakt, který vám zaručí, že se jedná o kabel, který potřebujeme. Níže uvedená tabulka vystihuje zapojení kabelu, kde A zastupuje konektor na jedné straně a B na straně druhé.

A     B
3 <-> 2
2 <-> 3
7 <-> 8
8 <-> 7
5 <-> 5
6 <-> 4
1 <-> 4
4 <-> 1
4 <-> 6
null modem

Kabel máme, co teď? Nejprve nastavíme systém tak, aby provozoval terminál také na sériovém portu. V Debianu se to provádí v souboru /etc/inittab. Prakticky kamkoli v tomto souboru stačí vložit tento řádek:

T0:23:respawn:/sbin/getty -L ttyS0 115200 xterm-color

Tímto jsme nastavili, aby se program getty spouštěl na sériovém portu a komunikoval rychlostí 115200 kbps. Pokud máte hodně dlouhý sériový kabel, doporučuji nastavit nižší rychlost pro eliminaci chyb v přenosu. Přístavek xterm-color, jak již název napovídá, zajistí to, aby vám v terminálu fungovaly barvičky. Tímto jsme dokončili konfiguraci na straně PC. Proveďte restart a pustíme se do konfigurace Mikrotika.

Konfigurace a zacházení se sériovým portem v RouterOS

Nastavení sériového portu na Mikrotiku už však nelze "naklikat" prostřednictvím Winboxu; bude třeba zabrousit do jeho terminálu. Respektive se domnívám, že "naklikat" to lze ve vybavenějších verzích RouterOS, jako jsou Level 5 nebo 6, nemám to však ověřeno. Kdo má jeden z těchto levelů, budu rád, když se podělí o zkušenosti v diskuzi. Rozhodně není na škodu vědět, že lze tento systém ovládat i textově.

Nejdříve se připojme na Mikrotik pomocí SSH nebo alternativně Winboxem, kde je v menu k nalezení položka New terminal. Proveďte následující příkazy, jejichž význam si vysvětlíme níže.

/port set serial0 baud-rate=115200 data-bits=8 parity=none stop-bits=1
/user add name=console password=tajneheslo group=read
/special-login add user=console port=serial0

První příkaz se postaral o konfiguraci sériového portu, zde nastavte stejné hodnoty, jako jste provedli v PC. Další příkazy vytvoří uživatele console s daným heslem a poslední příkaz zajistí to, aby byl terminál tohoto uživatele přesměrován na sériový port.

Teď už stačí jen propojit sériový port Mikrotiku s portem PC a jsme připraveni se připojit na konzoli PC právě přes tento port. Stačí se připojit na SSH Mikrotiku např. takto: ssh console@177.177.177.177, kde za zavináčem nahraďte adresu IP adresou vašeho Mikrotika. Jestliže jste se drželi všech kroků, zobrazí se vám terminál běžící na PC.

GRUB a sériová konzole

Pomalu se blížíme k závěru, zbývá nastavit GRUB, abychom byli schopni na dálku zvolit, jaký systém nebo kernel nabootovat. Editujte si soubor /boot/grub/menu.lst a na jeho začátek přidejte tyto dvě řádky:

serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1
terminal --timeout=3 console serial

Ty se postarají o zobrazení menu GRUBu.

Abychom ještě viděli výpis bootu kernelu, je třeba v jejich definici na konec řádky kernel přidat console=ttyS0,115200n8 console=tty0. Příklad vydá za tisíc slov:

title           Debian GNU/Linux, kernel 2.6.26-8-amd64
root            (hd0,0)
kernel          /vmlinuz-2.6.26-8-amd64 root=/dev/sda2 ro console=ttyS0,115200n8 console=tty0
initrd          /initrd.img-2.6.26-8-amd64

Gratuluji! Pokud se teď připojíte jako uživatel console na ssh Mikrotika a restartujete ovládané PC, uvidíte vše, co se odehrává v systému (tedy až na POST testy BIOSu), a můžete jej i pomocí klávesnice ovládat úplně stejně jako kdybyste seděli přímo u obrazovky daného počítače.

Závěr

Na závěr jsem si dovolil zveřejnit jednoduchý bashový skript, který používám pro rychlejší ovládání. Prakticky provádí zapínání a vypínání vzdáleného stroje, přičemž při zapínání mne rovnou připojí na jeho terminál. Při připojení na Mikrotik budete vždy vyzvání k zadání nastaveného hesla, což doporučuji vyřešit použitím nezaheslovaných SSH klíčů, abyste nepromeškali menu GRUBu. RouterOS umí tyto klíče bezproblémově používat. Je více způsobů, jak je do něj nahrát, ale to už je mimo rámec tohoto článku, proto vás odkáži na wiki tohoto produktu Use SSH to execute commands (DSA key login).

Nyní už ale slibovaný skript:

#!/bin/bash
ip_address="177.177.177.177"
mac_address="00:30:1b:bb:20:ab"
ssh_port=222
ping_timeout=2

Ping_Host()
{
  if ping -c 1 -w $ping_timeout $1 &>/dev/null ; then echo 1; else echo 0; fi
}

if [ $(Ping_Host $ip_address) -eq 1 ]; then
  echo -n "Remote system is running. Do you want to shut it down? (y/n)"
  read haltit
  if [ "$haltit" == "y" ]; then ssh -p $ssh_port root@$ip_address "halt"; else exit; fi
else
  echo "Trying to wake up remote system..."
  wakeonlan -i $ip_address $mac_address
  echo "Waiting for remote system availability."
  echo "Connecting to remote console..."
  sleep 2
  ssh -p $ssh_port console@$ip_address
fi

Další články z této rubriky

PowerDNS – přívětivý a jednoduchý DNS server
Bootování ze sítě: pxelinux a kořenový adresář na NFS
Těžký život Do Not Track
OpenAFS – servery
Architektura IPv6 – konfigurace adres a objevování sousedů (2)

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.