Út. Čvc 14th, 2026
Tučňák Tux s úsměvem, postavička animovaná ztělesňující logo operačního systému Linux, který vznikl díky disertační práci Linuse Torvaldse.

Tento návod se týká desktopových pc, běžících na ubuntu-server 24.04 LTS, nad kterými následně může běžet např. KVM VM s Windows. Pokud plánujete stejné řešení pro servery, předpokládám, že tam budete mít mnohem komplexnější síťovou konfiguraci plnou bridgů, vlan, bondingů atd… O tom možná někdy příště, dnes je to desktopová záležitost.

Stroje mohou mít více síťových rozhraní, proto tímto příkazem zjistíme síťové karty, které jsou ve stavu UP a začínají buď na enp, nebo eth nebo eno:

ip addr sh|egrep "enp|eno|eth"|grep UP

Výstup v mém případě:

3: enp8s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000

Jednorázové povolení Wake On Lan (pokud nechcete mít Wake on Lan zapnutý trvale)

Ověření aktuálního stavu, kde jde vidět, že je to zakázáno:

ethtool enp8s0

Z celého výstupu nás zajímají jen tyto řádky:

    Supports Wake-on: pumbg
    Wake-on: d
    Link detected: yes

Wake-on: d znamená disabled, zakázané.

Povolíme to příkazem:

ethtool -s enp8s0 wol g

příkaz nevrátí nic, ale když dáme znovu ethtool enp8s0 uvidíme na konci tento výstup:

    Supports Wake-on: pumbg
    Wake-on: g
    Link detected: yes

Pokud byste měli doma v síti počítač, který byste chtěli vzbudit při pingu, nebo zavolání SSH tak možnost „u“ při jakémkoliv unicast packetu vzbudí počítač. Tedy ping, ale i ssh nebo jakýkoliv unicast packet, mířící na tento stroj. Nejčastěji se ale pro vzbuzení počítače (Wake on Lan, dále jen WoL) používá právě Magic Packet k tomu určený.

Netplan

Na ubuntu-server 24.04 LTS je defaultní cesta pro síťovou konfiguraci v /etc/netplan/50-cloud-init.yaml


network:
  version: 2
  ethernets:
    enp8s0:
      dhcp4: true
      wakeonlan: true

A to je vše. Pozor na správné odsazení wakeonlan: true je na stejné úrovni, jako dhcp4: true.
Tohle nastavení má jednu zásadní nevýhodu. Pokud máte síťovou kartu ve stroji v pci-express 1x pozici úplně někde na dně počítače a předtím vám nějaká karta umře (třeba USB řadič navíc, nebo grafická karta, přičemž třeba počítač stále nabootuje s integrovanou grafikou), tak už počítač nevzbudíte a dost možná si ani nechytne IP adresu, což je škoda.
Na druhou stranu např. v prostředí, kde máte všude port securitu na každém portu na switchi, který má nastavenou pouze jednu konkrétní MAC adresu, tak jste schopni v případě nutnosti vyměnit celý počítač za „náhradní“, nebo pokud vám umře základní deska, vyměníte základní desku, ale MAC adresa zůstává stejná díky síťové kartě v pci-express 1x. A když ponecháte síťovou kartu na portu, ke kterému patří, stroj se vždy bez ohledu na jeho konfiguraci dostane do internetu. Samozřejmě musíte počítat s tím, že když vložíte síťovou kartu do jakéhokoliv jiného počítače, nemusí to být vždy enp8s0, ale třeba enp5s0 atd… Ale důležité je, že je to snadno řešitelné.
Další možnost řešení je stanovit macadress a nastavit tak na pevno MAC adresu tomu rozhraní, nicméně to v některých prostředí nemusí být řešitelné u stovek stejných počítačů. To byste museli ansiblem získat mac adresu, zkontrolovat ji dle nějakého seznamu povolených mac adress (protože některé stroje mohou mít i několik síťových rozhranní a s tím se váže i několik mac adres) a následně ji vložit do souboru.

Úprava netplan yaml konfigurace ansiblem

Toto je ukázka z funkčního ansible-playbooku, který byl skutečně otestován a udělal přesně to, co vidíte ve vypsaném netplan konfiguráku výše:

  ---
- name: Ansible netplan network wakeonlan
  hosts: stroje
  gather_facts: true
  become: true

  vars:
    wol_ignore_interfaces:
      - lo
      - virbr0

  tasks:
    - name: Get list of all network interfaces
      ansible.builtin.shell: "ip -o link show | awk -F': ' '{print $2}'"
      register: all_interfaces
      changed_when: false

    - name: Filter out ignored interfaces
      ansible.builtin.set_fact:
        target_interfaces: "{{ all_interfaces.stdout_lines | difference(wol_ignore_interfaces) }}"

    - name: Find Netplan configuration file
      ansible.builtin.find:
        paths: /etc/netplan
        patterns: "*.yaml"
      register: netplan_files

    - name: Add wakeonlan true to each ethernet interface
      ansible.builtin.lineinfile:
        path: "{{ item.path }}"
        # Hledá, zda řádek 'wakeonlan: true' již existuje
        regexp: '^\s*wakeonlan: true'
        # Pokud ho najde, neudělá nic. Pokud ne, vloží ho za řádek s 'dhcp4: true'.
        insertafter: '^\s*dhcp4: true'
        line: '      wakeonlan: true'
      loop: "{{ netplan_files.files }}"
      loop_control:
        label: "{{ item.path }}"
      when: item.path is defined and item.path is not none

    - name: Verify Wake-on-LAN setting using ethtool
      ansible.builtin.command: "ethtool {{ item }}"
      register: wol_status
      loop: "{{ target_interfaces }}"
      changed_when: false

    - name: Show WOL status for all target interfaces
      ansible.builtin.debug:
        msg: "Interface {{ item.item }} - {{ item.stdout_lines | select('search', 'Wake-on') | first }}"
      loop: "{{ wol_status.results }}"
      loop_control:
        label: "{{ item.item }}"
    - name: get ethtool -s enp8s0 wol g
      become: true
      shell: |
             ethtool -s enp8s0 wol g

Úžasnost ansiblu tkví v tom, že ho můžete do nekonečna ladit a vylepšovat. Mohl jsem tam na konci místo enp8s0 řešit aktivní rozhraní a vložit to tam v proměnné. Ale pokud máte unifikované stroje, tak si ušetříte trošku námahy, když víte, že všechny síťové karty budou mít vždy enp8s0.

Další cesty

Když dáte googlit po internetu nejrůznější řešení, tak se často budete setkávat s tím, že si někdo přes systemd vytvoří skript, kterým při každém spuštění systému zavolá jednorázový příkaz

ethtool -s enp8s0 wol g

a protože pokaždé takový stroj bude startovat se stejným skriptem, tak se takto jednorázově, ale cyklicky při každém spuštění stroj sám nastaví, aby Magic Packety přijímal. zdroj2 zdroj3

Další cesty vedou skrze nmcli a cesta /etc/systemd/network/ u mě na ubuntu-server 24.04 LTS naprosto nefungovala.

Jedno uvědomění na závěr

Pokud nastavíte jen ten netplan a hned vypnete stroj, už ho stejně nezapnete, pokud jste předtím nedali příkaz:
ethtool -s enp8s0 wol g

nebo nedali netplan apply, nicméně pokud jste na vzdálené konzoli přes ssh, můžete být odstřiženi od stroje.
Reboot je účinné řešení, pokud už máte nastavený netplan správně a vše správně odsazené, jak to být má tak po rebootu už stroj půjde vzbudit ok a nehrozí, že se stroj zasekne ve fázi, kdy se na něj nedá připojit.
zdroj zdroj2 zdroj3 zdroj4

Avatar

By Miro

Hardwaru a počítačům se věnuji již od roku 2003. Za tu dobu jsem poskládal stovky počítačů, opravil tisíce počítačů a vyřešil nespočetně problémů, vad a chyb, se kterými se setkávali uživatelé. Od roku 2005 se zabývám servery, nejen těmi herními, v roce 2007 jsem se začal věnovat Valve Source SDK level designu. Dnes spravuji v jedné osobě cca 100 serverů/diskových polí na univerzitě, řeším IT v malých, středních i mezinárodních firmách tak, aby firmy ušetřily nemalé částky při zlepšení kvality a soustředím se na snižování nákladů na IT od licencí až po hardware, software, provádím konsolidace a Quality Assurance za DevOps v on-premise i v cloudových prostředích, které firmám šetří rovněž nemalé peníze. Z velkých firem jsem měl příležitost s dalšími kolegy řešit správu 8000 serverů po celé západní Evropě s vysokou mírou automatizace a poznávání nejrůznějších evropských pracovních mentalit. Dále jsem řešil hybridní cloud ve velké firmě, orientované na trhy střední a východní Evropy. Posledních několik let se věnuji Devops pro velké zákazníky v Azure cloudu, spravuji kubernetes (AKS), Gitlab a soustřeďuji se na využití AI pro praktické účely.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

2 + 8 =