Seluruh bab di section ini bercerita tentang mesin yang sudah menyala: SSH, transfer file, remote desktop, semuanya menuntut target yang hidup. Padahal ada satu langkah yang lebih dini lagi — menyalakan mesin itu sendiri dari jarak jauh. Wake-on-LAN (WoL) adalah standar yang membuat kartu jaringan tetap berjaga saat komputer “mati”, lalu membangunkan mesinnya begitu paket khusus tiba: magic packet. Bab ini membedah rantai prasyaratnya (BIOS, NIC, kabel), struktur byte magic packet yang kita bangkitkan sendiri dengan skrip bash, cara mengaktifkan WoL dari Linux dengan ethtool, sampai alur kerja bangunkan-server-lalu-SSH yang melengkapi seluruh section.
Rantai Prasyarat: BIOS, NIC, dan Kabel #
WoL bukan fitur Linux semata, dan justru itu sumber kebingungannya: jalur dayanya harus tetap hidup ketika sistem operasi sudah mati. Alurnya begini: saat komputer dimatikan, PSU tetap memberi daya standby ke motherboard; NIC memakai daya itu untuk terus menyimak kabel; begitu pola magic packet untuk alamatnya tiba, NIC menarik sinyal wake yang menyuruh motherboard menyalakan mesin. Karena rantainya panjang, gagalnya bisa di mana saja — dan prasyaratnya wajib dicek berurutan:
- BIOS/UEFI: opsi bernama Wake on LAN, Power On by PCI-E, atau semacamnya harus aktif; sebagian BIOS menyembunyikannya di bawah menu power management.
- NIC yang mendukung: hampir semua ethernet modern mendukung, tetapi dukungannya harus diaktifkan juga dari sisi sistem operasi.
- Kabel ethernet: WoL klasik hanya bekerja lewat kabel. WiFi mati total saat mesin tidur; varian Wake on Wireless LAN ada tetapi jarang dan tidak seandal kabel.
- Daya standby: kabel listrik harus tetap terpasang dan (di laptop) baterai mencukupi — banyak laptop memutus daya NIC saat tidur demi hemat baterai.
Anatomi Magic Packet #
Magic packet sengaja dibuat sederhana supaya NIC bisa mendeteksinya tanpa CPU menyala: 6 byte 0xff sebagai pembuka, diikuti alamat MAC target yang diulang 16 kali — total 102 byte. Paket ini biasanya dikirim sebagai broadcast UDP ke port 7 atau 9, karena mesin yang sedang tidur tidak punya alamat IP yang bisa dituju. NIC tidak memelintasi isi jaringan; ia hanya mencocokkan pola byte itu terhadap MAC-nya sendiri. Skrip berikut membangkitkan magic packet dari MAC fiktif server-kantor lalu membedahnya:
mac="02:00:5c:12:34:56"
paket=""
for i in 1 2 3 4 5 6; do
paket="${paket}\xff"
done
i=0
while [ $i -lt 16 ]; do
for b in ${mac//:/ }; do
paket="${paket}\\x$b"
done
i=$((i+1))
done
printf '%b' "$paket" > magic.bin
echo "ukuran: $(stat -c %s magic.bin) byte"
od -A d -t x1 magic.bin | head -4Output yang Dihasilkan:
ukuran: 102 byte
0000000 ff ff ff ff ff ff 02 00 5c 12 34 56 02 00 5c 12
0000016 34 56 02 00 5c 12 34 56 02 00 5c 12 34 56 02 00
0000032 5c 12 34 56 02 00 5c 12 34 56 02 00 5c 12 34 56
0000048 02 00 5c 12 34 56 02 00 5c 12 34 56 02 00 5c 12for i in 1 2 3 4 5 6: enam byte pembuka ditumpuk sebagai teks\xff— pola sinkronisasi yang dicari NIC.while [ $i -lt 16 ]: alamat MAC diulang tepat 16 kali; kurang dari itu, NIC menolak membangunkan mesin.${mac//:/ }: substitusi bash mengganti semua titik dua dengan spasi sehinggafor b in ...berjalan per byte —02,00,5c, dan seterusnya.\\x$b: tiap byte ditulis sebagai escape heksadesimal; backslash ganda agar tanda\-nya bertahan sebagai teks.printf '%b': format%bmenyuruh printf menafsirkan escape pada argumennya — teks\xffmenjadi byte sungguhanff, dan\x02menjadi byte02.od -A d -t x1: mencetak isi berkas sebagai heksadesimal per byte dengan offset desimal;head -4memotong 64 byte pertama agar strukturnya terbaca.
Hasilnya persis spesifikasi: enam ff berjajar di awal, lalu 02 00 5c 12 34 56 berulang sampai baris keempat pun masih mengulanginya — dan ukuran berkas 102 byte, tepat 6 + (16 × 6). Alat wakeonlan di mesin nyata melakukan hal yang sama lalu mengirimkannya lewat UDP; kita berhenti di berkas karena sandbox tidak punya jaringan target.
Memvalidasi Alamat MAC Sebelum Mengirim #
Magic packet hanya sevalid alamat yang tertulis di dalamnya: satu digit salah, dan paket membangunkan mesin lain — atau tidak membangunkan apa pun. MAC ditulis sebagai enam pasang digit heksadesimal yang dipisah titik dua, dan datang dari berbagai sumber dengan gaya berbeda: output ip link memakai huruf kecil, sebagian alat pelapor memakai huruf besar, sebagian lagi memakai tanda hubung. Fungsi berikut memeriksa bentuknya dengan dua lapis:
validasi_mac() {
mac="$1"
case "$mac" in
??:??:??:??:??:??) ;;
*) printf '%-20s TIDAK VALID: formatnya bukan 6 kelompok dipisah titik dua\n' "$mac"; return 1 ;;
esac
if printf '%s' "$mac" | grep -qE '^([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}$'; then
printf '%-20s VALID -> dinormalkan: %s\n' "$mac" "$(printf '%s' "$mac" | tr 'A-F' 'a-f')"
else
printf '%-20s TIDAK VALID: ada kelompok di luar heksadesimal\n' "$mac"
return 1
fi
}
validasi_mac 02-00-5c-12-34-56
validasi_mac 02:00:5c:12:34
validasi_mac 02:00:5g:12:34:56
validasi_mac 02:00:5C:12:34:56Output yang Dihasilkan:
02-00-5c-12-34-56 TIDAK VALID: formatnya bukan 6 kelompok dipisah titik dua
02:00:5c:12:34 TIDAK VALID: formatnya bukan 6 kelompok dipisah titik dua
02:00:5g:12:34:56 TIDAK VALID: ada kelompok di luar heksadesimal
02:00:5C:12:34:56 VALID -> dinormalkan: 02:00:5c:12:34:56case "$mac" in ??:??:??:??:??:??): lapis pertama memeriksa bentuk kasar — lima titik dua dengan dua karakter di tiap sela; pola shell ini cepat dan menangkap format tanda hubung maupun kelompok yang kurang.grep -qE '^([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}$': lapis kedua memeriksa isinya — tiap kelompok wajib dua digit heksadesimal, dijepit jangkar^dan$.tr 'A-F' 'a-f': MAC yang lolos dinormalkan ke huruf kecil — bentuk yang dipakaiip link, sehingga pembandingan selanjutnya tidak rewel soal kapital.
Mengaktifkan WoL dari Sisi Linux #
BIOS yang ramah biasanya sudah menyalakan WoL, tetapi kernel Linux kerap mematikannya ulang saat driver ethernetnya dimuat. Alat untuk menghidupkannya kembali adalah ethtool, dan statusnya pun dibaca dari sana. Perintah berikut dijalankan sebagai root di mesin sungguhan — di sandbox latihan kita hanya membedah bentuknya:
ethtool eth0 | grep Wake-on
ethtool -s eth0 wol gBaris pertama membaca status: kolom Wake-on menampilkan flag yang didukung dan flag yang aktif. Baris kedua mengesetnya: wol g berarti mesin dibangunkan oleh magic packet — g adalah flag ethtool untuk MagicPacket; nilai d (disabled) mematikan WoL, p membangunkan lewat aktivitas PHY. Berikut contoh tampilan hasil pembacaan setelah pengaktifan:
Supports Wake-on: pumbg
Wake-on: gBaris Supports Wake-on mendaftar kemampuan NIC — p, u, m, b, g — sedangkan Wake-on: g menegaskan bahwa hanya magic packet yang saat ini sanggup membangunkannya. Selain ethtool, status yang sama terbaca dari sysfs lewat berkas /sys/class/net/eth0/device/power/wakeup yang berisi enabled atau disabled; mengubahnya juga butuh root. Satu jebakan praktis: setelan ethtool hilang saat reboot, sehingga pengaktifannya perlu diotomasi — lewat rule udev, unit systemd kecil, atau penyimpanan permanen di NetworkManager (nmcli connection modify dengan properti 802-3-ethernet.wake-on-lan magic).
Kebutuhan root dan kegagalan setelah reboot adalah dua alasan WoL paling sering “tiba-tiba tidak jalan”. Setelah ethtool sehat, pengiriman tinggal memakai wakeonlan (script perl yang ringan) atau etherwake (butuh root):
wakeonlan 02:00:5c:12:34:56
etherwake -i eth0 02:00:5c:12:34:56Alur Kerja: Bangunkan Server Sebelum Menyambung #
Dengan semua bagian di tempatnya, WoL menyatu dengan ilmu section ini sebagai satu alur: bangunkan mesin, tunggu hidup, baru SSH. Daftar MAC biasanya disimpan per mesin — di sinilah validasi dari tadi dipakai. Skrip berikut membaca daftar mesin fiktif, mencari MAC untuk host yang diminta, lalu melaporkan paket yang akan dikirim:
cat > daftar-mesin.txt <<'DAFTAR'
server-kantor 02:00:5c:12:34:56
backup 02:00:5c:99:aa:01
pi-arsip 02:00:5c:aa:bb:cc
DAFTAR
bangunkan() {
host=$1
mac=$(awk -v h="$host" '$1 == h {print $2}' daftar-mesin.txt)
if [ -z "$mac" ]; then
printf '%-13s dilewati: tidak ada di daftar\n' "$host"
return 1
fi
printf '%-13s magic packet 102 byte untuk %s -> 192.0.2.255\n' "$host" "$mac"
}
bangunkan printer-lama
bangunkan backup
bangunkan server-kantorOutput yang Dihasilkan:
printer-lama dilewati: tidak ada di daftar
backup magic packet 102 byte untuk 02:00:5c:99:aa:01 -> 192.0.2.255
server-kantor magic packet 102 byte untuk 02:00:5c:12:34:56 -> 192.0.2.255awk -v h="$host" '$1 == h {print $2}': mencari baris yang kolom pertamanya sama dengan nama host, lalu mengambil kolom keduanya — MAC address milik mesin itu.[ -z "$mac" ]: mesin yang tidak terdaftar ditolak lebih dulu; pesanawkkosong berarti nama host salah ketik, bukan mesin yang tidak bisa dibangunkan.192.0.2.255: alamat broadcast subnet dokumentasi tempat packet dikirim; pada jaringan kantor, broadcast dihitung dari subnet masing-masing.bangunkan printer-lama: pemanggilan pertama sengaja gagal untuk menunjukkan penolakannya — nama yang tidak ada di daftar tidak boleh menghentikan pemanggilan berikutnya.
Pada mesin nyata, baris laporan itu digantikan wakeonlan "$mac" sungguhan. Setelah paket terkirim, mesin butuh waktu boot — biasanya 30 detik sampai beberapa menit — dan penunggunya cukup di loop: ping ke mesin sampai dijawab, lalu ssh masuk seperti biasa. Catat MAC ke daftar saat mesin masih sehat: kolom ether pada ip link show eth0 adalah sumber resminya, dan daftar yang dikumpulkan saat darurat jauh lebih sering salah.
Menyalakan satu mesin dari jauh adalah trik yang menyenangkan; mengelola armada yang menyala-mati sendiri adalah pekerjaan yang berbeda. Chapter penutup section ini menyusun kotak alatnya: loop SSH untuk beberapa mesin, Ansible untuk armada, serial console dan IPMI untuk mesin yang bahkan tidak bisa boot — jaringan pengelolaan yang bekerja bahkan saat sistem operasinya sedang tidak ada.
Referensi lanjut: ethtool(8)
untuk opsi wol dan cara membacanya, wakeonlan(1)
untuk skrip pengirimnya, serta etherwake(8)
untuk alternatif yang butuh root.