iPad 단축어와 pfSense API으로 더 편리한 WOL 만들어보기

 

 

 

pfSense에는 다른 공유기, 라우터와 마찬가지로 Wake-On-Lan(WOL) 기능을 제공합니다.

라우터라는 장비의 특성상 외부망과 연결이 되어있지 않기 때문에 외부에서 WOL를 사용하기 위해서는 VPN을 사용해 내부망으로 접근해야 합니다. ipTIME 등과 같은 회사는 외부에서도 WOL을 사용할 수 있도록 제공해 주는 경우도 있는데 pfSense는 별도로 제공해 주는 기능이 없습니다.

 

WOL으로 컴퓨터 켜는 과정을 요약하면,

1. VPN으로 내부망 접속하기

2. WOL 앱이나 pfSense 관리자 페이지에 들어가서 WOL 실행하기

3. 다시 VPN을 꺼서 내부망에서 나가기

이런 번거로운 과정을 WOL 사용할 때마다 반복해야 합니다.

 

iPad의 단축어 기능과 pfSense의 써드파티 API 플러그인을 사용해 이 과정을 편리하게 만들어보겠습니다.

pfSense API

pfSense 공식으로 지원하지는 않지만 써드파티를 사용해 API를 만들어줄 수 있습니다. 

https://github.com/jaredhendrickson13/pfsense-api

 

GitHub - jaredhendrickson13/pfsense-api: The missing REST and GraphQL API package for pfSense

The missing REST and GraphQL API package for pfSense - jaredhendrickson13/pfsense-api

github.com

 

위 써드파티 패키지를 사용했는데, GitHub README를 확인하면 설치 과정을 상세하게 확인할 수 있습니다.

설치과정을 간략하게 요약하면,

 

`pkg-static add https://github.com/jaredhendrickson13/pfsense-api/releases/latest/download/pfSense-2.7.2-pkg-RESTAPI.pkg` 명령어를 사용해 패키지를 설치하고 API를 열여 줄 수 있습니다.

명령어 입력은 pfSense 메뉴 > Diagnostics > Command Prompt에서 입력할 수 있습니다.

 

REST API 메뉴

 

설치가 완료되면 System 메뉴에서 REST API 메뉴를 추가로 확인할 수 있습니다. 이후 REST API 메뉴에서 Enable 체크박스를 체크해 주면 pfSense API를 사용할 수 있게 됩니다.

 

여러 API들이 있는데 저희가 필요한 API는 WOL에 관련된 API이기 때문에 다른 API는 따로 다루지 않겠습니다.

API가 외부망으로 노출되면 매우 민감하니까 내부망에서만 사용하길 권장합니다!!

iPad 단축어

iPad OS(또는 iOS)에는 단축어라는 기능을 제공합니다. 단어 뜻 그대로 특정 행위에 대한 단축 기능을 만들어주는데, 이 중에는 VPN 연결 & 연결 해제 기능과 API 요청을 보내주는 기능이 있습니다. 이 두 가지 기능과 pfSense API를 사용해서 WOL 단축어를 만들어보겠습니다.

 

iPad 단축어 만들기

 

위 사진대로 단축어를 만들어주면 저희가 원하던 WOL 단축어를 만들 수 있습니다. 위에서부터 보면,

1. 먼저 실수로 WOL 단축어를 누르는 일을 방지하기 위해 처음 사용 시 다이얼로그를 표시합니다.

2. 이후 VPN으로 내부망에 접속하고 

3. pfSense API 주소로 AJAX 요청을 보냅니다.

4. API로 요청을 보내면 응답 결과를 반환해 주는데 이를 그대로 iPad에 표시해 주면 성공 여부를 확인할 수 있습니다.

5. 마지막으로 연결했던 VPN을 다시 끊어줍니다.

 

API 요청하기

 

이 중 pfSense API 요청 부분에 대해서 더 다뤄보겠습니다.

WOL API는 `POST http://<host>/api/v2/services/wake_on_lan/send` 으로 요청하면 됩니다. 이때 인증 정보를 헤더로 함께 넘겨줘야 하는데 특별한 설정을 하지 않았다면 Basic Authentication 방식을 사용해 주면 됩니다.

`username:password` 형태의 내용을 base64로 인코딩하여 Authorization 헤더에 넘겨주면 됩니다.

최종적인 모습은 `Authorization: Basic Zm9vOmJhcg==` 와 같은 형태가 됩니다. (예시로 작성한 내용이며 실제 pfSense의 계정을 활용하여 base64로 인코딩해야 합니다.)

 

pfSense API 추가 인증 방식

 

또는 JWT, Key 방식으로도 인증이 가능합니다. 해당 내용은 여기서 다루지 않으며 pfSense의 REST API 메뉴에 들어가면 인증 방식을 선택할 수 있습니다.

 

추가로 JSON의 형태로 Body Message를 전달해줘야 합니다. `interface` 키에는 특별한 경우가 아니라면 `lan` 값을 넘겨주면 되고 `mac_addr` 키에는 WOL으로 켤 컴퓨터의 MAC 주소를 전달하면 됩니다.

마무리

여기까지 해주면 모든 작업이 끝났습니다.

이제 WOL를 쓸 때마다 VPN을 연결하고, 관리자 페이지에 들어갈 필요 없이 편리하게 단축어 한 번만 눌러주면 WOL을 쓸 수 있습니다.

단축어의 경우 위젯 형태로 추가도 가능합니다.

'개발 > HomeLab' 카테고리의 다른 글

시놀로지 NAS를 멋지게 모니터링 해보기  (0) 2024.08.18
pfSense 와 함께 인터넷 사용하기  (0) 2022.01.10