Homserver Wol

1. 목적

이 문서는 2011년형 맥북프로를 홈서버로 활용하며, 시스템 팬소음과 전력 소모를 줄이기 위해 필요할 때만 Wake-on-LAN(WOL)으로 깨우고, 사용하지 않을 땐 suspend(절전) 모드로 대기시키는 방법을 정리.

홈서버는 K3s 클러스터의 control-plane + worker 역할을 동시에 수행하고 있으며, suspend 전후에도 컨테이너나 서비스가 잘 유지되도록 구성되어 있음.

2. Wake-on-LAN 및 Suspend 개요

Wake-on-LAN(WOL)이란?

Wake-on-LAN은 꺼져 있는(또는 절전 중인) 컴퓨터를 네트워크를 통해 깨우는 기술이다. LAN 포트를 통해 **특정 패턴의 “매직 패킷(Magic Packet)”**을 수신하면, 시스템 전원이 켜지거나 suspend 상태에서 복귀.

Suspend와 Reboot의 차이점 및 과정 비교

항목 Suspend Reboot
메모리(RAM) 상태 유지됨 (내용 보존) 초기화됨 (모든 프로세스 종료)
CPU/디바이스 전원 대부분 꺼짐 완전 꺼졌다 켜짐
디스크/네트워크 등 장치 정지 또는 전력 차단됨, resume 시 재초기화 완전 재탑재 및 재시작
커널 그대로 유지됨 다시 로딩됨
속도 빠름 (수 초 내 복귀) 상대적으로 느림
목적 절전, 빠른 복귀 시스템 리셋, 안정화 목적

Suspend 동작 순서 (시스템 전원 관리 기준)

  1. systemctl suspend 명령 또는 전원 버튼 등으로 suspend 요청
  2. systemd가 /lib/systemd/system-sleep/ 아래 스크립트들을 호출하며 사전 작업 수행 (pre 단계)
  3. 네트워크 인터페이스, 디스크, USB 등의 장치가 suspend 모드로 전환됨
  4. RAM에만 전력 공급되며, 나머지 장치는 대부분 전원 차단
  5. 시스템은 S3 sleep 상태로 진입하며 거의 모든 동작이 멈춤

Resume (복귀) 동작 순서

  1. 키보드, 마우스, Wake-on-LAN 등으로 시스템 깨움
  2. BIOS/UEFI가 resume 루틴 수행 (일부 장치는 cold-reset 수준으로 초기화)
  3. systemd가 /lib/systemd/system-sleep/의 post 스크립트 실행
  4. 사용자 프로세스 및 시스템 서비스 재개
  5. 네트워크 인터페이스, 드라이버 등 재초기화 필요 → WOL 등 수동 설정 복원이 필요함

📝 왜 sleep 이후 스크립트 위치가 /lib/systemd/system-sleep/인가요?

suspend는 단순한 서비스가 아니라 시스템 전원 관리 이벤트입니다. 일반적인 서비스 유닛처럼 After=suspend.target으로 처리되지 않고, 커널이 sleep 상태로 진입하거나 복귀할 때 systemd가 자동으로 이 디렉토리(/lib/systemd/system-sleep/) 아래 있는 스크립트를 실행합니다.

이 스크립트들은 $1=pre / post 인자를 받으며, suspend 전(pre) 또는 복귀 후(post)에 실행됩니다. 따라서 resume 후 WOL 설정을 복원하려면 반드시 여기에 위치해야 합니다.

3. 구성 방법

3.1. WOL 설정 스크립트 작성

  • 재시작 되어도 자동으로 WOL 설정 적용 스크립트 작성
sudo nano /usr/local/bin/wol-enable.sh
#!/bin/bash
# 네트워크 장치에 WOL(Magic Packet)을 허용
ethtool -s enp2s0f0 wol g

# suspend 상태에서 NIC가 시스템을 깨울 수 있도록 허용
echo enabled > /sys/class/net/enp2s0f0/device/power/wakeup
sudo chmod +x /usr/local/bin/wol-enable.sh

3.2. systemd 서비스로 자동 실행 설정

  • 재시작후 위에서 작성한 스크립트가 자동 실행 되도록 systemd 서비스 파일 작성
sudo nano /etc/systemd/system/wol-enable.service
[Unit]
Description=Enable Wake-on-LAN and Power Wakeup for enp2s0f0
After=network-online.target
Wants=network-online.target

[Service]
Type=oneshot
ExecStartPre=/bin/sleep 10   # 네트워크 인터페이스가 완전히 올라오길 기다림
ExecStart=/usr/local/bin/wol-enable.sh
RemainAfterExit=true
User=root

[Install]
WantedBy=multi-user.target
  • systemd 서비스 등록 및 설정 적용 테스트
sudo systemctl daemon-reload
sudo systemctl enable wol-enable.service
sudo systemctl start wol-enable.service

3.3. suspend 복귀 후 설정 자동 복원

  • suspend 이후 네트워크 인터페이스 관련 모듈이 재 로도되면서 WOL 설정 초기화 되어 WOL 미작동 방지를 위해 suspend 이후 WOL 설정이 재 적용 되도록 스크립트 작성
sudo nano /lib/systemd/system-sleep/network-resume.sh
#!/bin/bash

case $1/$2 in
  post/*)
    logger "[WOL] Resuming network interface and restoring WOL settings"

    # 인터페이스 종료 및 드라이버 언로드/재로드
    ip link set enp2s0f0 down
    modprobe -r r8169
    modprobe r8169
    ip link set enp2s0f0 up

    # 네트워크 서비스 재시작
    systemctl restart systemd-networkd

    # 네트워크가 정상 복구되도록 약간의 시간 대기
    sleep 3

    # WOL 설정 재적용
    ethtool -s enp2s0f0 wol g
    echo enabled > /sys/class/net/enp2s0f0/device/power/wakeup
    ;;
esac
  • 실행권한 부여
sudo chmod +x /lib/systemd/system-sleep/network-resume.sh

3.4. 공유기 브로드캐스트 제한 시 중계서버 구성

일부 공유기는보안상의 이유로 **브로드캐스트 패킷(Magic Packet)**이 내부 네트워크로 전달되는 것을 막는다. 이 경우 외부에서 홈서버를 깨우기 위해 중계서버를 이용한 구조가 필요

중계서버 구성 예시:

  • 외부에서 WOL 요청 → 중계서버에 HTTPS 요청
  • 중계서버가 홈 네트워크 내부에서 매직 패킷을 브로드캐스트로 전송
wakeonlan -i 192.168.0.255 <MAC주소>

네트워크 도식:

[노트북/폰] → 인터넷 → [중계서버] → LAN → [홈서버(MacBook)]
                       ↘ 브로드캐스트 (UDP 9포트)

중계서버는 Raspberry Pi, VPS, DDNS 연동 장비 등으로 구성 가능하며, WOL 요청을 HTTP로 받아 내부에서 실행.

4. 구성 중 문제와 해결 방안

문제 원인 해결 방법
Wake-on: d, wakeup: disabled로 되돌아감 suspend 후 NIC가 초기화되면서 설정 사라짐 /lib/systemd/system-sleep/에 resume 시 설정 복원 스크립트 추가
ethtool 설정이 적용되지 않음 인터페이스가 아직 올라오지 않음 ExecStartPre=/bin/sleep 10 또는 스크립트 내부 sleep 추가
resume 후 NIC가 죽어있음 오래된 NIC 드라이버(r8169)가 제대로 resume 처리 못함 modprobe -r 후 modprobe로 수동 초기화
suspend 중 K3s 서비스 연결 끊김 NIC 전원 차단으로 클러스터 연결 해제 resume 후 K3s와 containerd 자동 복구됨. 단 kubectl get nodes 시 잠시 NotReady 상태일 수 있음
공유기에서 WOL 브로드캐스트 차단 공유기 설정 상 외부 → LAN 브로드캐스트 불가 중계서버를 통해 LAN 내부에서 직접 매직 패킷 송신

이 구성을 통해 오래된 맥북에서도 효율적인 홈서버 운영이 가능하며, 필요할 때만 깨워 사용하는 이상적인 절전 환경을 구현할 수 있음.

igotoo

igotoo