WOL(wake-on-lan)은 굳이 전원 버튼을 누르지 않더라도 네트워크 신호를 통해 PC를 부팅하는 기능이다.
이 기능을 사용하려면 메인보드와 공유기에서 해당 기능이 지원되어야 한다.
요즘 나오는 메인보드와 공유기는 대체로 가능하지만, 구형 제품의 경우 지원되지 않을 가능성도 있기 때문에 반드시 제조사를 통해 확인해봐야 한다.
하드웨어 확인
메인보드(랜카드) 드라이버 설정
우선 메인보드에서 지원되는지와 WOL을 위한 설정을 위해서는 장치관리자로 진입한다.
내 PC를 마우스 오른쪽으로 클릭한 후 속성을 선택하면 우측의 관련 설정란에 장치관리자가 있다.
장치관리자 진입 후 네트워크 어댑터 항목을 확인해보면 내 메인보드에 맞는 랜정보가 나온다.
위 사진에서는 맨위의 Intel(R) Ethernet Connection (2) I219-V가 바로 우리가 찾고자하는 부분이다.
더블클릭한 후 고급탭으로 가보면 여러 가지 설정하는 부분이 나오는데, 여기서 찾아야할 부분은 wake on~, 매직패킷 등이 들어간 단어를 찾아야 한다.
참 이 부분은 몇 년이 지나도 불만인게, 메인보드 제조사마다 용어를 다 다르게 사용한다.
해당 부분의 값을 활성화됨으로 두면 드라이버 설정은 끝이다.
바이오스(BIOS) 설정
위와 마찬가지로 바이오스 설정 역시 메인보드 제조사별로 다르기 때문에 자세히 찾아봐야 한다.
처음 컴퓨터를 켤 때, 화면에 설정에 진입하기 위한 키 안내가 나오는데, 화면이 넘어가기 전에 해당 키를 눌러 바이오스 설정 화면에 진입해야 한다.
진입이 완료되면 전원 설정 관련 항목을 찾는다. (보통은 power management) 마찬가지로 power on, wake up, wol 등의 키워드로 항목을 찾아 활성화한다. (커서를 옮기면 자세한 설명이 나오므로 크게 어렵지 않다.)
활성화가 완료되면 저장 후 재부팅한다.
공유기 설정
WOL은 랜카드를 통해 PC를 켜라는 매직 패킷이 오는 것을 감지하기 때문에 당연히 포트포워딩이 필수이다.
iptime 공유기의 경우 고급 설정 - 특수기능 - WOL 기능이 있다.
여기서 MAC 주소에 WOL로 부팅할 PC의 MAC 주소만 넣으면 끝난다.
만일 공유기에 WOL 기능이라는 항목이 없을 경우, 포트포워딩으로 직접 입력해도 된다.
TCP 포트 9번으로 설정하면 된다. 단, 포트포워딩이기 때문에 MAC 주소대신 내부 IP주소가 들어간다.
WOL 검증
이제 정상 동작하는지 확인해볼 차례다.
라즈베리파이에 원격 접속을 통해 코드를 직접 작성하고 바로 테스트할 것이다.
더 나아가, 어떤 장치에서든 내 서버에 접속해서 특정 명령을 내린다면 PC가 켜지도록 하는 것이 목표이다.
VSCode를 이용해 라즈베리파이에 접속하자.
경로는 아파치 서버에서 접속하기 쉽도록 아래 경로로 설정했다.
/var/www/html/wol
wol.py라는 파일을 새로 만들어 아래 내용을 작성해보자.
import struct
import socket
mac = "XX-XX-XX-XX-XX-XX"
host = '192.168.0.0'
addrs = mac.split("-")
hw_addr = struct.pack("BBBBBB", int(addrs[0], 16), int(addrs[1], 16), int(addrs[2], 16), int(addrs[3], 16), int(addrs[4], 16), int(addrs[5], 16))
magic = b"\xff" * 6 + hw_addr * 16
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.sendto(magic, (host, 9))
s.close()
print("wol success.")
mac 항목은 마찬가지로 WOL설정할 PC의 MAC 주소이다. XX대신 자신의 주소에 맞게 수정하면 된다.
host 역시 마찬가지로 수정한 다음 저장한다.
PC의 MAC 주소를 확인하는 방법은 커멘드 창을 실행해서 아래 명령을 입력한다.
ipconfig -all
중간의 물리적 주소에 MAC 주소가 출력된다.
매직패킷은 0xff로 이루어진 6개의 바이트와 맥주소를 바이트로 변환해서 16번이 반복된 패킷이다.
때문에 magic변수에 위와 같이 작성한 것이다.
다음으로 패킷이 정상적으로 받아지는지 확인할 차례이다.
WOL설정할 PC에서 wireshark를 설치한다.
https://www.wireshark.org/#download
Wireshark · Go Deep.
What is SharkFest? SharkFest™, launched in 2008, is a series of annual educational conferences staged in various parts of the globe and focused on sharing knowledge, experience and best practices among the Wireshark® developer and user communities. Shar
www.wireshark.org
간단하게는 네트워크 패킷 캡쳐부터 usb 통신 데이터 캡쳐까지 아주 다양한 기능이 갖춰진 프로그램이다.
가급적 Installer 설치를 권장한다.
설치를 완료하고 실행하면 중단의 Capture 항목이 있고 아래에 선택할 수 있는 항목이 있는데 자신의 네트워크 어댑터에 맞는 항목으로 선택한 후 더블 클릭 한다.
만일 모르겠다면 한 5초에서 10초정도 기다려본 후 Adapter for loopback traffic capture를 제외하고 그래프에 변동이 있는 것을 선택하면 된다.
선택하고나면 바로 캡쳐가 시작되는데, 바로 어마어마한 양의 패킷이 캡쳐되는 것을 볼 수 있다.
캡쳐되는 패킷 항목들 위에 display filter가 있는데, 이 부분에 wol이라고 입력해보자.
캡쳐되는 수많은 패킷 중 wol 패킷만 보여준다.
display filter위에 파란색의 상어 지느러미 아이콘과 그 옆에 빨간색 네모의 정지 버튼이 있는데, 정지 버튼이 활성화된 상태라면 현재 캡쳐 중이라는 것이다.
캡쳐를 시작한 후 아까 작성한 VSCode에서 바로 아래 터미널 창을 이용해서 wol.py를 실행해보자.
python wol.py
파이썬2와 파이썬3이 같이 설치되어있다면 python3 wol.py를 입력하면 된다.
이런식으로 한개의 패킷이 캡쳐되고 아래에 설명이 나오면 패킷 전송은 성공한 것이다.
아이폰에서 WOL 보내기
아이폰에서 WOL 패킷을 보내기 위해서는 위의 wol.py와 같은 스크립트 언어가 필요하지만, 우리에게는 라즈베리파이 서버가 있으므로 이쪽을 이용해보자.
다시 VSCode로 돌아와 wol/ 폴더에 index.php라는 파일을 생성, 아래 코드를 입력한다.
<?php
$result = "";
exec("python3 wol.py", $result);
$result = implode("\n", $result)."\n";
echo $result;
?>
php는 서버용 언어기 때문에, 클라이언트가 위 페이지를 방문하면, 서버는 위 내용을 수행한다.
exec를 이용해 파이썬 코드를 실행하게 했으니, 쉽게 말해 아이폰이든 안드로이드든 위 페이지를 방문하면 python3 wol.py 명령이 실행되고 PC가 켜지는 것이다.
단 이 부분을 사파리로 수행할 경우, 사파리 특성상 방문 페이지 목록들이 새로 고침될 때마다 PC가 켜질 수 있으므로 다른 방법으로 코드를 실행하도록 하자.
https://support.apple.com/ko-kr/guide/shortcuts/welcome/ios
단축어 사용 설명서
support.apple.com
아이폰의 단축어라는 기능을 이용할 것이다.
둘러보면 알겠지만 꽤 유용하게 쓸 수 있는 앱이다. 특정 조건이 만족된다면 특정 기능을 실행하는 등 나도 아주 잘 쓰고 있는 앱이고 아이폰을 좀 더 스마트하게 쓸 수 있는 방법이라고 할 수 있겠다.
우선 단축어 앱을 실행하고 우측 상단의 + 버튼을 눌러 새로운 단축어를 만들어보자.
가운데 동작 추가를 클릭하고 검색하는 곳에 텍스트를 검색하면 많은 결과가 나온다.
전부 다른 동작을 지원하지만 일단 우리가 할 것은 텍스트이므로 텍스트를 클릭한다.
그런 다음 라즈베리파이의 url 주소와 wol의 경로까지 포함해 적어준다.
예를 들어 호스팅 주소가 naver.com이라면 http://naver.com/wol이 되는 것이다.
다음으로 다시 검색하는 부분에 url을 입력하고 추가해준다.
그러면 키보드 위에 자동으로 변수를 선택할 수 있도록 뜨는데, 여기서 우리가 텍스트 박스에 url을 입력했으므로
맨 앞의 텍스트를 선택한다. 이러면 우리가 입력한 텍스트가 url형식으로 변수형이 바뀌는 것이다.
마지막으로 검색창 아래에서 우측의 앱을 선택하고 사파리를 선택하자.
중간의 웹 페이지 콘텐츠 가져오기를 선택하면 그 위에 추가한 url이 자동으로 연결된다.
이러면 단축어 구성은 끝났다. 마지막으로 상단의 설정 버튼을 눌러보면 홈 화면에 추가할 수도 있고 공유시트 등 다양한 곳에서 활용이 가능하다.
동작 불량
WOL이 정상적으로 되지 않는다면 우선 처음부터 안되는지, 되다가 안되는지 확인이 필요하다.
당연히 되다가 안됐다면 본인이 어떤 행위를 한 뒤로 발생한 문제인지 생각해보자.
보통은 여기서 몇 가지 원인을 추측할 수 있다.
- 윈도우즈 업데이트
- 공유기 혹은 PC 설정 초기화
윈도우즈 업데이트는 정말 간혹가다가 설정을 마음대로 바꾸기 때문에 꽤 답답한 부분 중 하나이다.
그 중 빠른 시작 설정이 WOL에 영향을 미치는데, Windows 10 기준으로 설명하자면
설정 - 시스템 - 전원 및 절전 - 추가 전원 설정 - 전원 단추 작동 설정 - 빠른 시작 켜기를 끄면 된다.
2번의 내용 중에는 PC의 IP가 바꼈다던지의 가능성이 있기 때문에 가급적 고정 IP로 설정할 것을 추천한다.
위에서 설명한 검증 방법 중 wireshark를 이용하면 패킷이 PC까지 오는지에 대한 확인은 가능하기 때문에, 여부에 따라 해결하면 될 것이다.
'라즈베리파이' 카테고리의 다른 글
라즈베리파이 - SWAP 메모리 (0) | 2022.08.04 |
---|---|
라즈베리파이 - HTTPS 우회 (0) | 2022.08.04 |
라즈베리파이 - FTP 서버 설치 (0) | 2022.08.04 |
라즈베리파이 - 외장하드 연결 (0) | 2022.08.04 |
라즈베리파이 - MariaDB 설치 (0) | 2022.08.04 |