종료 직후 웨이크 패킷을 보내면 PC가 다시 켜지지만, 다음 날 아침 같은 명령은 아무 효과가 없습니다. VPN 설정은 바뀐 것이 없고 포트 포워딩도 여전히 올바른 주소를 가리킵니다. 차이는 시간입니다. 라우터의 이웃 테이블이 잠든 기계를 잊어버려 프레임에 넣을 MAC 주소가 없어진 것입니다. 터널이 아니라 이 만료가 VPN을 통한 Wake-on-LAN 실패의 대부분을 설명합니다.

첫 번째 깨우기는 되고 다음은 안 된다

라우터는 이웃 테이블에서 목적지를 찾아 사설 주소로 프레임을 전달합니다. 기계가 켜져 있는 동안에는 ARP에 응답하므로 매핑이 신선하게 유지됩니다. 전원이 꺼지면 아무도 응답하지 않고 몇 분 뒤 항목이 만료되며, IP와 포트 포워딩이 유효해도 그 주소로 가는 이후 프레임은 버려집니다.

패턴을 보면 어떤 실패인지 알 수 있습니다. 전혀 되지 않는 깨우기는 전달 문제입니다: 포트가 다르거나 목적지가 다르거나, LAN에 도달하기 전에 패킷을 버리는 방화벽이 있는 경우입니다. 한 번 되고 나서 몇 시간씩 실패하면 이웃 항목 문제입니다. DHCP 임대가 바뀔 때까지 되면 주소 지정 문제이며 예약으로 해결됩니다.

ARP를 건드리기 전에 주소가 안정적인지 확인하세요. 임대가 만료된 뒤 잠든 기계가 새 주소를 받으면, 옛 주소에 고정한 이웃 항목은 영구적이면서 동시에 쓸모없게 됩니다. 먼저 DHCP 예약을 설정해 주소가 재부팅 후에도 유지되게 하세요.

매직 패킷이 네트워크에 요구하는 것

페이로드는 단순합니다. 0xFF 바이트 여섯 개 뒤에 대상 MAC 주소가 열여섯 번 반복되는 102바이트이며, 보통 UDP 포트 9로 전송됩니다. 평면 LAN에서는 브로드캐스트로 나가고 모든 포트가 이를 받으며, 꺼진 네트워크 카드가 자기 주소를 인식합니다.

VPN을 지나면 패킷은 사설 주소로 가는 유니캐스트 또는 서브넷으로 향하는 지정 브로드캐스트로 라우터에 도착합니다. 유니캐스트의 경우 라우터는 프레임을 LAN에 올리기 전에 목적지를 MAC 주소로 해석해야 하며, 호스트가 잠든 동안 바로 그 해석이 실패합니다.

일부 도구는 9가 아니라 포트 7로 보내고, 일부 장비는 지정 브로드캐스트를 기본적으로 차단합니다. 이는 전달 실패이지 ARP 실패가 아니므로 이웃 테이블을 바꾸기 전에 목적지와 포트를 확인하세요.

잠든 호스트로 가는 세 가지 경로

프레임을 LAN에 올리는 실용적인 방법은 세 가지이며, 올바른 선택은 무엇을 통제할 수 있는지에 달려 있습니다.

MethodWhat it needsWhere it breaks
Subnet-directed broadcastA wake tool that accepts a broadcast address and a router that forwards itBroadcast filtering, or a tool that only takes a MAC
Helper on the LANAn always-on host such as the VPN serverNo suitable host, or the host cannot reach the target VLAN
Permanent neighbour entryRouter shell access and the target MACNIC replacement or address change

상시 호스트가 있으면 그것을 고르세요. 링크에서 브로드캐스트하므로 라우터 예외가 필요 없습니다. 라우터가 이미 허용하고 웨이크 도구가 주소를 받아들이면 지정 브로드캐스트를 고르세요. 둘 다 없고 라우터에서 명령을 실행할 수 있으면 정적 항목을 고르세요.

이들은 서로 배타적이지 않습니다. 영구 항목은 유니캐스트 경로도 잠든 상태를 넘기게 해 주며, VPN 클라이언트가 특정 주소로만 보낼 수 있을 때 유용합니다.

이웃 항목을 영구로 만드세요

Linux 셸이 있는 라우터에서는 명령 하나로 매핑을 고정합니다. 여기 값은 예시 LAN의 것이므로 자신의 값으로 바꿔야 합니다:

ip neigh replace 192.168.50.23 lladdr 3c:7c:3f:12:9a:4e dev br0 nud permanent
ip neigh show dev br0 | grep 192.168.50.23

이 nud permanent 상태는 ARP 타임아웃을 넘겨 항목을 유지하고 기계가 꺼져 있는 동안 전달에 사용합니다. 두 번째 명령은 항목이 존재함을 증명하고 그것이 속한 인터페이스를 보여 주며, 게스트 브리지나 별도 VLAN이 있는 라우터에서는 이것이 중요합니다.

펌웨어가 제공하는 어떤 훅으로든 재부팅 후에도 유지하세요: /jffs/scripts 의 스크립트, 게이트웨이 역할을 하는 Linux 서버의 systemd oneshot 유닛, systemd-networkd의 Neighbor= stanza, 또는 로컬 도구가 읽는 /etc/ethers 의 항목입니다. 셸에 입력한 명령은 다음 재시작 때 사라지며, 작동하던 수정이 갑자기 멈춘 것처럼 보이는 가장 흔한 이유입니다.

외부에서 시험하고 언제 제거할지 아세요

기계를 잠들게 하고 최소 십 분을 기다리세요. 어떤 동적 항목이든 만료되기에 충분합니다. 그다음 VPN 클라이언트에서 깨우기 요청을 보내고 라우터의 양쪽을 관찰하세요:

tcpdump -ni tun0 udp port 9
tcpdump -ni br0 ether proto 0x0806 or udp port 9

첫 번째 캡처는 패킷이 터널에서 도착했음을 증명하고, 두 번째는 라우터가 LAN에 프레임을 올렸음을 증명합니다. 유효한 매직 패킷은 MAC이 반복된 102바이트로 나타나므로 길이와 목적지를 함께 확인하세요. 프레임이 LAN 브리지를 떠났는데도 기계가 꺼져 있으면 남은 문제는 장치에 있습니다. 빠른 시작, 깊은 잠자기, 또는 네트워크 카드 전원을 끊는 BIOS 설정입니다.

네트워크 카드가 바뀌면 항목을 제거하고, 기계를 다른 주소로 옮기면 갱신하세요. 영구 매핑은 의도적인 예외이며, 아무도 기억하지 못하는 예외가 바로 앞으로의 노트북이 퇴역한 데스크톱용 프레임을 받게 되는 경로입니다.

관련 글