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 동작 순서 (시스템 전원 관리 기준)
- systemctl suspend 명령 또는 전원 버튼 등으로 suspend 요청
- systemd가 /lib/systemd/system-sleep/ 아래 스크립트들을 호출하며 사전 작업 수행 (pre 단계)
- 네트워크 인터페이스, 디스크, USB 등의 장치가 suspend 모드로 전환됨
- RAM에만 전력 공급되며, 나머지 장치는 대부분 전원 차단
- 시스템은 S3 sleep 상태로 진입하며 거의 모든 동작이 멈춤
Resume (복귀) 동작 순서
- 키보드, 마우스, Wake-on-LAN 등으로 시스템 깨움
- BIOS/UEFI가 resume 루틴 수행 (일부 장치는 cold-reset 수준으로 초기화)
- systemd가 /lib/systemd/system-sleep/의 post 스크립트 실행
- 사용자 프로세스 및 시스템 서비스 재개
- 네트워크 인터페이스, 드라이버 등 재초기화 필요 → 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 내부에서 직접 매직 패킷 송신 |
이 구성을 통해 오래된 맥북에서도 효율적인 홈서버 운영이 가능하며, 필요할 때만 깨워 사용하는 이상적인 절전 환경을 구현할 수 있음.