서론

구성한 NAS 서버가 아이들시 30W, 사용 시 60W 정도의 전력을 소모하는데 대부분 아이들 상태일 것이지만 30W가 계속 켜져있으면 무시할 만한 수준의 전력 소모도 아니고, 또 계속 집에 컴퓨터가 켜져 있는 것도 신경쓰이기 때문에 필요할 때마다 외부에서도 전원을 킬 수 있도록 NAS 서버에 WOL을 구성하려 한다. WOL"Wake-on-LAN"의 약자로, 컴퓨터를 네트워크 장치를 활용하여 원격으로 켜는 기술이다. WOL을 위해서는

  1. 네트워크 어댑터 WOL 기능 지원 여부
  2. BIOS 설정(ErP/Power On By PCI-E/Wake on Lan)
  3. 공유기 설정
  4. OS(linux/windows) WOL 설정

을 확인하여 주면 된다.

1. 네트워크 어댑터 WOL 기능 지원 여부

최근 나오는 랜카드들은 거의 기본적으로 WOL기능을 활용하고 있기에 크게 신경쓰지 않아도 된다.

2. BIOS 설정

메인보드 제조사마다 다르지만 Asus기준으로 ErPPower On By PCI-E 옵션 두가지를 체크해주면 된다. ErP의 옵션이 활성화 되있을 경우, 대기 전력 소모를 줄이기 위해서 컴퓨터가 일부 하드웨어들을 비활성화시킬 수 있는데, 네트워크 어댑터는 매직패킷 수신을 위해서 항상 대기하고 있어야 하기 때문에, ErP 옵션이 비활성화 되어야, 항상 컴퓨터가 매직패킷 수신을 위해서 대기할 수 있는 상태를 유지할 수 있다. 다만 ErP옵션이 활성화 되었을 경우 다른 부품들, 특히 LED가 안 꺼질 수도 있는 상황이 발생할 수 있다.(상당히 거슬림) Power On By PCI-E/Wake on Lan옵션의 경우, WOL을 사용하기 위해서 활성화하여야 한다. Asus 메인보드 설정 과정의 경우 아래 링크 참고

3. 공유기 설정

공유기도 마찬가지로 제조사마다 설정이 다르다. 설정해주어야 할 것은 크게 두가지인데 첫번째로 WOL을 사용할 PC의 IP를 고정으로 할당하여 주어야 하며, 외부망에서 WOL을 활용하고자 할 경우 포트포워딩을 해주어야 한다.

DHCP(Dynamic Host Configuration Protocol)서버(공유기)는 네트워크에 연결된 장치들에게 자동으로 IP주소를 할당(임대)하여 주는데 따로 설정하지 않으면, 임의로 IP주소를 할당하고 연결이 끊어질 경우 주소를 회수하여 간다. 공유기 설정에서 MAC주소를 통해서 내부 IP주소를 고정적으로 할당할 수 있으며, 필자가 사용하는 LG U+ 공유기에서는 DHCP 고정할당이라는 메뉴가 존재하여 MAC 주소만 기입하여 주면 원하는 IP를 고정적으로 할당할 수 있다.

내부망에서만 활용할 경우에는 크게 상관이 없지만, WOL을 구성하려는 대부분의 사람들은 집 밖의 환경에서 컴퓨터를 켜기 위함이 대부분일 것이다. WOL은 기본적으로 9번 포트에 UDP를 활용하여 매직 패킷을 전송한다. 따라서 포트포워딩 시에는 외부 포트를 7777등으로 임의로 설정 후, WOL을 사용하고자 하는 컴퓨터의 9번포트를 UDP로 연결해주면 될 것이다.

가정에서 사용하는 공유기 IP의 경우 대부분 유동 IP 방식이기 때문에, 외부에서 편하게 사용하기 위해서는 DDNS가 필요할 수도 있다. DDNS"Dynamic Domain Name System"의 약자로, 유동 IP 도메인 이름과 동적으로 연결하는 시스템으로, 공유기에서 지원하는 DDNS를 활용하는 것도 방법이다. LG U+ 공유기에서는 세가지 DDNS 사이트를 지원하며, 그 중에 무료인 freedns를 활용하여 DDNS를 구성하였다.

매직패킷

매직 패킷은 특수한 패턴으로 구성된 패킷으로 FF FF FF FF FF FF뒤에 깨우고자 하는 대상 컴퓨터의 맥주소가 16번 반복되는 형태이다. 만약 01:23:45:67:89:AB가 맥주소라면,

FF FF FF FF FF FF 01 23 45 67 89 AB 01 23 45 67 89 AB ...

처럼 매직 패킷이 구성되게 된다. 사실 매직패킷구조를 몰랐을 때에는, 괜히 포트를 외부망에 개방하는 것이 걸렸는데, WOL포트를 통해서 할 수 있는 것은 매직 패킷보내는 것 뿐인데 외부인이 매직 패킷을 보낼 이유도 없고, 맥주소를 모르면서 부르트포스를 시도할 한가할 사람도 없을 것이며, 만에 하나 켜저도 전기 소비 조금 더 되고 아무 피해 없을 것이다…

4. linux에서 WOL 설정

linux환경에서 WOL을 설정하는 방법은 window보다 간단하다.

  1. 먼저 네트워크 어댑터의 interface 명을 확인한다.
    root@ksyu0508:~# sudo lshw -C network
      *-network                 
        description: Ethernet interface
        product: RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
        vendor: Realtek Semiconductor Co., Ltd.
        physical id: 0
        bus info: pci@0000:03:00.0
        logical name: {interface 명}
        version: 09
        serial: {MAC 주소}
        size: 1Gbit/s
        capacity: 1Gbit/s
        width: 64 bits
        clock: 33MHz
        capabilities: pm msi pciexpress msix vpd bus_master cap_list ethernet physical tp mii 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation
        configuration: autonegotiation=on broadcast=yes driver=r8169 driverversion=6.5.11-4-pve duplex=full firmware=rtl8168f-1_0.0.5 06/18/12 latency=0 link=yes multicast=yes port=twisted pair speed=1Gbit/s
        resources: irq:16 ioport:e000(size=256) memory:f0004000-f0004fff memory:f0000000-f0003fff
    

다음 명령으를 통해서 현재 WOL이 설정되어 있는지 확인할 수 있다. 상태가 d로 표시될 경우 WOL이 비활성화 된 상태이며, g로 표시되어야 활성화 된 것이다.

  • WOL 비활성화 상태:
    root@ksyu0508:~# ethtool {interface 명} | grep Wake-on
          Supports Wake-on: pumbg
          Wake-on: d
    
  • WOL 활성화 상태:
    root@ksyu0508:~# ethtool {interface 명} | grep Wake-on
          Supports Wake-on: pumbg
          Wake-on: g
    

아래 명령어를 통해서 WOL을 활성화 시킬 수 있다. 다만 일회성이고 재부팅 되면 다시 d로 돌아오기 때문에 다른 방법을 통해서 명령어가 컴퓨터 부팅시마다 계속 실행되게 해주어야 한다.

root@ksyu0508:~# ethtool -s {interface 명} wol g
  1. linux의 스케줄러인 cron을 활용하여 서버가 부팅될 때마다 위 명령어를 실행시켜 줄 수 있다. cron 설정 파일을 연 다음,
root@ksyu0508:~# crontab -e

아래 내용을 추가하여 주면 된다. ethtool 경로의 경우 자신의 환경에 맞게 넣어주면 된다. cron에서 @reboot로 실행 시 $PATH가 불러진 상태가 아니기 때문에 절대 경로로 넣어주어야 한다.

@reboot /sbin/ethtool -s {interface 명} wol g

아래 사이트에서 방법을 참고하였으며, cron을 활용한 방법 이외에도 다양한 방법들이 소개되어 있으니 참고하면 좋을 것 같다.

테스트

설정이 완료되었다면, 공유기에서 제공하는 WOL 기능이나, linux의 wakeonlan패키지 활용하거나, Wake On Lan 어플을 통해서 WOL 매직 패킷을 전송할 수 있다.

# sudo apt-get install wakeonlan
# wakeonlan <MAC-Address>

후기

WOL 기능을 활용할 수 없는 환경에서는 메인보드의 Restore AC Power Loss 옵션을 활용하여(메인보드 사마다 다를 수 있음) 스마트 플러그와 조합하면 간단하게 원경 부팅을 시도할 수 있다. 스마트 플러그를 이용한 원경 부팅 환경도 사용해 보았는데, 장점이라 한다면 WOL은 외부망에서 시도할 경우 포트개방, WOL관련 설정, 포트포워딩 등의 작업을 직접 수행해야하지만, 스마트플러그의 경우 자체적으로 제공해주는 앱에서 외부망 내부망 상관 없이 접근할 수 있기 때문에 상대적으로 간편하게 구성할 수 있으며 대기전력을 아예 0W로 만들어 버릴 수 있다. 이는 매직패킷을 수신하기 위해서 항상 랜카드에 최소한의 전력을 인가하여 대기시켜야만 하는 WOL 설정과는 대비되는 장점이라 할 수 있다. 단점도 소소하게 존재하는데, 전력을 아예 끊어버리기 때문에, 메인보드 수은 전지가 조금씩 소모되어 메인보드 설정이 날아갈 수도 있다는 약간의 리스크가 존재한다(방전되기 전에 컴퓨터 교체할 확률이 더 높음). 또, 전력이 끊켜도 PC 파워에는 일정 시간 전류가 남아있기 때문에, PC를 끄자마자 다시 켜기 위해서는 완전 방전을 위해서 조금 기다려주어야 한다. 이게 PC 상태를 바로 확인할 수 없는 외부 환경에서는 PC 종료하는 도중에 깜빡한게 떠올릴 경우 은근히 거슬리는 상황이 발생한다. 결과적으로는 본인의 상황에 맞추어서 원격 부팅 환경을 구현하면 좋을 것이다.