Raspberry Pi

Raspberry Pi 3로 WOL 패킷 전송

LimeLee 2019. 12. 24. 10:48

하루종일 데탑을 켜놓기엔 전기세 아깝고 하루종일 돌아가고 있는 라즈베리 파이 서버를 이용해서 WOL을 구현하면 어떨까 싶어 환경을 만들었다.

 

참고로 라즈베리파이에 외부접근이 이미 설정되어 있는 전제 하에 작성된 글이다.

오직 WOL을 위해 라즈베리파이를 사서 OS도 올리고 포트포워딩도해주고 원격접속 설정도 해줄 거라면 iptime 공유기나 팀뷰어 등 유명한 기업들에서 이런 기능을 이미 지원하고 있기 때문에 그 쪽을 이용하는 것이 용이하다.

 


 

WOL은 Wake On Lan으로 특수한 매직 패킷으로 원격에서 부팅하는 기술이다.

워낙 유명한 기술이기 때문에 팀뷰어나 iptime에서 기능을 다 지원하고 있다.

 

팀뷰어와 iptime이 지원하는 WOL의 형태는 다음과 같다. 

 

팀뷰어의 경우 외부의 어느 포트와 원격 부팅할 내부 PC의 어느 포트를 포트 포워딩해서 연결한 외부 포트에 매직 패킷을 날리는 형태로 지원한다.

 

iptime의 경우는 디폴트 설정으로는 iptime 관리자 페이지는 내부에서만 접속이 가능한데 이를 외부에서도 접속 가능하게 외부 IP를 할당한다. 관련 모바일 앱으로 해당 IP에 접근한 뒤 iptime 관리자 페이지에서 있는 WOL 기능으로 원격부팅을 한다.

 

 

위의 두 경우는 공유기와 내부PC 둘 중 하나를 외부접속이 가능하도록 포트를 열어놓아야한다는 점에서 보안상으로 꺼려진다. (대체로 불특정 다수에 대한 공격이 많으므로 높은 권한의 사용자 계정을 유추하기 쉽거나 디폴트로 설정해놓지 않으면 대체로 뚫릴 위험은 없을 것이다.)

그래서 ssh 보안키로 접속하게 환경을 만들어 놓은데다가 외부접속이 가능하도록 열어놓은 Raspberry Pi 서버를 이용한다. 

 

Raspberry Pi 서버 쉘에서 wakeonlan 패킷을 원격부팅하고 싶은 PC의 맥 주소로 전송하여 부팅을 한다.

이를 그림으로 표현하면 아래와 같다. 

 

 

외부 PC에서 22번 포트로 Raspberry Pi 서버에 접근한다. ssh로 접근하기 때문에 내부 서버의 쉘을 사용 가능하다.

내부 서버에서 내부 PC의 맥주소로 매직 패킷을 전송한다. 이렇게 되면 내부 PC의 포트를 외부로 열지 않아도 원격에서 부팅하는 것이 가능하다.

 

WOL 패킷을 전송하고 받기 위해서는 내부 PC와 라즈베리 파이 서버 양쪽의 설정을 건들여야 한다.

 

1. Raspberry Pi 서버 


(1) wakeonlan 설치

sudo apt-get install wakeonlan

 

 

 

2. 내부 PC


PC는 윈도우 10을 기준으로 한다.

 

(1) 랜카드 설정 1

장치 관리자 (devmgmt.msc) > 네트워크 어댑터 > 랜카드 속성 > 드라이버 > 드라이버 업데이트

드라이버가 최신이라면 넘어가도 된다. 전원 관리 탭, 고급 탭에서 WOL 설정이 없는 사람만 하면 된다.

 

(2) 랜카드 설정 2

장치 관리자 (devmgmt.msc) > 네트워크 어댑터 > 랜카드 속성 > 전원 관리 > 전원을 절약하기 위해 ... 끌 수 있음(A) 체크 해제

(3) 랜카드 설정 3

장치 관리자 (devmgmt.msc) > 네트워크 어댑터 > 랜카드 속성 > 고급 > 매직 패킷 웨이크 온, 웨이크 온 랜 종료, 패턴 일치 웨이크 온 > 사용(온)

드라이버를 업데이트한 직후 디폴트로 모두 사용(온)되어 있었지만 만약 설정을 다 한 후 WOL 동작이 안한다면 사용으로 되어있는지 재 확인 해준다.

 

(4) 전원 설정

 

설정 > 전원 및 절전 > 추가 전원 설정 > 전원 단추 작동 설정 > 현재 사용할 수 없는 설정 변경 > 빠른 시작 켜기(권장) 체크 해제

(5) BIOS 설정

BIOS 진입 > Advance > APM > Power On By PCIE > Enabled

bios 별로 진입 방법은 다르지만 PCIE로 전원을 켜는 설정을 사용으로 변경하면 된다.

 

 

위 설정이 전부 끝났다면 cmd 창에서 ipconfig /all 을 통해 랜카드의 맥 주소를 확인할 수 있다.

맥 주소를 기억한 뒤 Raspberry Pi 서버에 붙어 아래와 같은 명령어를 사용하여 부팅 가능하다.

wakeonlan xx:xx:xx:xx:xx:xx