WOL: Wake-On-Lan GNU/Linux alatt
2009. October 29. - 11:03 | szerző: jonci

Sokszor hasznos lehet, ha távolról fel tudjuk ébreszteni az alvó/kikapcsolt számítógépünket. Ahhoz, hogy működjön, több feltételnek is teljesülnie kell, ezeket vesszük át a továbbiakban.

Érdemes megjegyezni még az elején, hogy legalább ATX-es vagy BTX-es rendszert használjuk. Az AT-s esetén a teljes áramtalanítás miatt nem megoldható a felélesztés. Valamint érdemes még tudni, hogy az áramszünet által áramtalanított ATX-es/BTX-es számítógépek jelentős részénél nem működik a WOL addig, amíg legalább egyszer nem indítjuk el, majd állítjuk le őket szoftveresen.

WOL funkció engedélyezése

Első lépésként engedélyezni kell a BIOS-ban, hogy a hálózati kártyára érkező Wake-Up üzenetekkel fel lehessen kelteni a számítógépet (például: Wake-up from LAN, stb.), vagy ennek hiányában a PCI, PCI-X vagy PCe foglalatba rakott kártyával (például: Wake-up from PCI card, stb.). Alaplapra integrált kártya esetén a használt BUSZ (PCI, PCI-X, stb.) a mérvadó.

Miután ezzel végeztünk, állítsuk be a kliens gépünket! Kezdésként telepítsük fel az ethtool csomagot (Debian/Ubuntu alatt: sudo apt-get install ethtool), aminek használatával megnézhetjük, hogy a hálózati kártyánk támogatja-e a Wake-On-Lan funkció.

Például az eth0 interfész lekérdezéséhez adjuk ki az alábbi parancsot:

root@bash# ethtool eth0
Settings for eth0:
        Supported ports: [ MII ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Advertised auto-negotiation: Yes
        Speed: 1000Mb/s
        Duplex: Full
        Port: MII
        PHYAD: 1
        Transceiver: external
        Auto-negotiation: on
        Supports Wake-on: g          <-- támogatott funkciók
        Wake-on: d                   <-- jelenleg beállított funkció
        Link detected: yes
root@bash#

Látható, hogy a kártya támogatja a “g” funkciót, de jelenleg “d” állapotban van, azaz disabled.

Számos funkció létezik, de természetesen nem minden hálózati kártya támogatja az összeset:

p Felébresztés fizikai aktivitással
u Felébresztés unicast üzenettel
m Felébresztés multicast üzenettel
b Felébresztés broadcast üzenettel
a Felébresztés ARP-vel
g Felébresztés MagicPacket küldéssel
s Felébresztés jelszóval védett (SecureOn) MagicPacket küldésével
d Kikapcsolás (nincs felébresztés).
Ez az opció töröl minden korábbi beállítást a felébresztéssel kapcsolatban.

Driver függő, hogy a gép elindulása során a hálózati kártya milyen állapotba kerül. Ha a driver nem támogatja az előző állapot visszaállítását, úgy előfordulhat, hogy minden rendszerinduláskor kikapcsolt állapotba kerül a WOL funkció. Ebben az esetben érdemes lehet a /etc/rc.local fájlban (A rendszer elindulási folyamata) elhelyezni a alábbi for-ciklust:

for i in `cat /proc/net/dev|sed 1,3d|awk -F ':' '{print $1}'`
do
       ethtool ${i}
          |grep 'Supports Wake-on:'
          |awk '{print "ethtool -s '${i}' wol "$3}'
done

Ezzel a megoldással a rendszer automatikusan bekapcsolja a WOL funkció(ka)t induláskor.

Felébresztés MagicPacket csomag küldésével

Számtalan program létezik, ami képes WOL üzenet küldésére, mi most csak kettőt nézünk meg.

A ‘etherwake’ program használata

Az etherwake program teljesen ki tudja elégíteni az igényeket. Képes jelszavas MagicPacket üzenetet is küldeni, valamint a kimenő interfészt is megadhatjuk, ami jól jöhet több hálózati kártya esetén.

Használat:

etherwake [-i <iface>] [-p aa:bb:cc:dd[:ee:ff]] 00:11:22:33:44:55

Példával élve: ha az eth0 az internet felé néz, az eth1 pedig a belső hálózat felé, akkor nem jelszavas WOL üzenet küldést az alábbi módon tehetjük meg, ha 01:23:45:67:89:ab a célgép MAC címe:

root@bash# etherwake -i eth1 01:23:45:67:89:ab
root@bash#

A ‘wakeonlan’ program használata

Másik hasznos program a wakeonlan. Nem tud jelszavas csomagot küldeni, de nem nagy hiányossága, mert amúgy sem támogatják széles körben az eszközök, viszont állítható a cél portszáma. A másik különbség, hogy nem lehet megadni a kimenő interfészt, csak a cél gép IP-címét.

wakeonlan [-i IP_cím] [-p port] [MAC_cím]

Az előző példát használva:

root@bash# wakeonlan 01:23:45:67:89:ab
Sending magic packet to 255.255.255.255:9 with 01:23:45:67:89:ab
root@bash#

Előbbi példa IP-címmel (feltételezve, hogy a gép a 10.20.30.40-es IP-címet használja):

root@bash# wakeonlan -i 10.20.30.40 01:23:45:67:89:ab
Sending magic packet to 10.20.30.40:9 with 01:23:45:67:89:ab
root@bash#

Megfelelő ARP tábla esetén működik, de ha a cél gép MAC-címe kikerül az ARP táblából, előfordulhat, hogy rossz interfészen megy ki a csomag.

Ellenőrizzük az ARP táblát:

root@bash# arp -v | grep 10.20.30.40
10.20.30.40              ether   01:23:45:67:89:ab   C                   eth1
root@bash#

Ha nem kapunk vissza üzenetet, akkor az adott gép MAC-címe nem létezik az ARP táblában. Vegyük fel, majd mehet is a MagicPacket üzenet:

root@bash# arp --set 10.20.30.40 01:23:45:67:89:ab
root@bash# wakeonlan 01:23:45:67:89:ab
Sending magic packet to 255.255.255.255:9 with 01:23:45:67:89:ab
root@bash#

A hálózati eszközök nagy része a 9-es porton várja a WOL üzenetet, de nem mindegyik. Gyakori lehet még a 7-es port használata is. Ha nem akarunk tippelni, küldhetjük az üzenetet egy for-ciklussal is:

root@bash# for i in 7 9
do
   wakeonlan -p $i -i 10.20.30.40 01:23:45:67:89:ab
done
Sending magic packet to 10.20.30.40:7 with 01:23:45:67:89:ab
Sending magic packet to 10.20.30.40:9 with 01:23:45:67:89:ab
root@bash#
Email This Post Email This Post Print This Post Print This Post
 
1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...

2 válasz a “WOL: Wake-On-Lan GNU/Linux alatt” cikkhez

  1. roti says:

    Hello!

    Ezt a részt:

    ethtool ${i}
    |grep ‘Supports Wake-on:’
    |awk ‘{print “ethtool -s ‘${i}’ wol “$3}’

    ` -k közé kell tenni hogy lefusson:

    `ethtool ${i}
    |grep ‘Supports Wake-on:’
    |awk ‘{print “ethtool -s ‘${i}’ wol “$3}’`

  2. jonci says:

    Hali,

    csak akkor kellene ` ` jelek közé tenni vagy $() közé, ha úgy szeretném lefuttatni, ha a kimenetével szeretnék valamit kezdeni. Lásd a for ciklust:

    for i in `cat /proc/net/dev|sed 1,3d|awk -F ‘:’ ‘{print $1}’`

    itt a cat-os parancs azért van ` ` jelek között, mert a parancs kimenete lesz felhasználva, azaz a kapott eredményen fog végig lépdesni a for ciklus.

Szólj hozzá!