검색 엔진의 방문이 늘어나고 있군...

Posted
Filed under 프로그램과 명령어/관리와 유지보수
참조 원문 : Linux Backup Server: Remote Wakeup, Automatic Shutdown
관련 글 : HOWTO: Set your system up for Wake On LAN (WOL)

  WoL은 Wake on Lan의 약자로서 브로드캐스트를 통해 매직 패킷이라고 불리는 예약된 패킷을 보내 특정 MAC의 NIC를 사용하는 컴퓨터를 부팅시키는 기능입니다. 경우에 따라서는 상당히 유용하게 쓰일 수 있고 특히 우리나라의 경우 공유기가 많이 사용되는데 이 공유기에서 WoL을 지원(매직 패킷을 보내는 기능)하는 경우가 많습니다. 이걸 이용하면 외부에서 집의 공유기로 접속하여 내부 네트워크의 컴퓨터(보통 자신의 PC)를 부팅시킨 후 원격 데스크탑이나 기타 프로그램을 이용해 자신의 컴퓨터를 이용할 수 있습니다.

  먼저 BIOS에서 WoL을 지원해야 하는데 왠만한 구형이 아닌 이상은 대부분 지원을 하기 때문에 걱정은 없지만 기본적으로 기능이 활성화되어 있지 않다는 것이 문제입니다. 따라서 자신의 메인보드 매뉴얼을 참조하여 기능을 먼저 활성화시켜야 합니다.

  이제 리눅스에서 아래의 명렁어로 NIC의 WoL 기능을 사용할 수 있는지, 그리고 기능이 활성화되어 있는지 확인합니다. 참고로 실행에는 루트 권한이 필요합니다.
$ sudo ethtool eth0 | grep -i wake-on
    Supports Wake-on: g
    Wake-on: d
  'Supports Wake-on'에서 g는 'Wake on MagicPacket'으로 이 NIC는 WoL 기능을 지원한다는 뜻입니다. 다음으로 'Wake-on'인데 d는 'Disabled'로 현재 비활성화된 상태입니다. 즉, NIC가 지원은 하지만 비활성화 상태입니다. 아래는 WoL 기능을 활성화시키고 확인하는 것을 보여주고 있습니다.
$ sudo ethtool -s eth0 wol g
$ sudo ethtool eth0 | grep -i wake-on
    Supports Wake-on: g
    Wake-on: g
  'Supports Wake-on'과 'Wake-on'에 모두 g가 있으면 해당 PC를 대상으로 WoL을 사용할 준비가 완료된 겁니다. 아래의 명령어로 NIC의 MAC 주소를 알아냅니다.
$ ifconfig eth0 | grep -i hwaddr
eth0      Link encap:Ethernet  HWaddr 00:25:11:75:dc:91 
  이제 컴퓨터를 끈 후 같은 네트워크에 있는 다른 리눅스 머신에서 아래와 같이 명령어를 사용하면 WoL을 사용하여 컴퓨터를 부팅시킬 수 있습니다.
$ wakeonlan -p 8 00:25:11:75:dc:91
  '-p 8' 옵션은 매직 패킷을 UDP 포트 8번으로 보내라는 옵션입니다. 디폴트로 보내는 포트는 UDP 9번인데 테스트용 포트로서 패킷이 그냥 폐기되는 경우가 많기 때문에 아무거나 다른 포트 번호를 향해 보내는 것이 좋습니다. 이왕이면 8번처럼 아무 서비스에도 안 쓰이는 번호에 보내는 것이 더 좋으며 대표적인 서비스의 포트 번호들은 /etc/services 파일에 있으므로 해당 파일을 참조해 안 쓰이는 UDP 포트를 사용하도록 합니다.

  이제 다 끝난 것처럼 보이지만 부팅을 하는 과정에서 이 설정이 다시 초기화되기 때문에 부팅과 관련된 스크립트를 약간 손봐서 앞서 했던 설정을 자동화시킬 필요가 있습니다. 레드햇 계열의 배포판일 경우에는 /etc/rc.local 파일에 아래와 같은 내용을 추가하여 부팅할 때마다 WoL을 활성화시킬 수 있습니다.
# Setup WOL for next boot
stat_busy "Setting WOL to Active"
/usr/sbin/ethtool -s eth0 wol g
stat_done
  데비안 계열의 배포판이라면 /etc/network/interfaces 파일에서 WoL을 사용할 NIC가 적힌 줄(예: iface eth0 inet dhcp)의 아래 부분에 다음의 내용을 추가하여 인터페이스가 올라간 후(대표적으로 부팅 시)와 내려간 후(대표적으로 종료 시)마다 WoL을 활성화시킬 수 있습니다.
post-up /usr/sbin/ethtool -s $IFACE wol g
post-down /usr/sbin/ethtool -s $IFACE wol g
  그래도 안 되는 경우가 있는데 그 중 한 해결책으로 저의 경우 우분투 9.10의 환경에서 /etc/network/interfaces 파일에 아래와 같이 드라이버에 wake up flag를 enabled로 설정해줬습니다.
post-up echo enabled > /sys/class/net/eth0/device/power/wakeup
post-down echo enabled > /sys/class/net/eth0/device/power/wakeup
  이와 관련된 내용은 http://lowtek.ca/roo/2009/wake-on-lan/ 에서 좀 더 자세히 보실 수 있습니다.

2010/12/13 14:31 2010/12/13 14:31
Posted
Filed under 프로그램과 명령어/커맨드 라인 트릭
참조 원문 : Using lsof to Find Open Files
관련 글 : 특정 포트를 열고 있는 프로세스 찾기

  lsof는 "list open files"의 약자로 특정 프로그램이 사용 중인 파일 또는 열려 있는 네트워크 포트를 알 수 있는 유틸리티입니다. 루트킷이나 IRC 봇을 처리할 때도 유용합니다.

  lsof를 그냥 실행하면 사용 중인 모든 파일(네트워크 소켓, 파이프,특수 파일 포함)을 보여줍니다. 이 명령어로 파일을 사용할 때 쓴 명령어, PID, 사용자, 파일 디스크립터, 종류, 크기, 이름을 알 수 있습니다. 특정 프로세스가 사용 중인 파일만 보려면 -p 옵션과 프로세스의 PID를 적고 특정 사용자가 열고 있는 파일만 보려면 -u 옵션과 사용자명(또는 UID)을 적습니다. 만약 어떤 프로세스나 사용자가 사용 중인 파일들을 결과에서 제외하고 싶다면 프로세스ID나 사용자명 바로 앞에 ^ 문자를 붙이면 됩니다. 참고로 lsof의 실행에는 루트 권한이 필요합니다.
lsof -p 프로세스PID  : 해당 프로세스가 사용 중인 파일 목록 출력
lsof -u 유저명       : 해당 유저가 사용 중인 파일 목록 출력
lsof -u ^유저명      : 목록 중 해당 유저가 사용 중인 파일 제외
  네트워크를 통해 사용 중인 파일은 -i 옵션으로 볼 수 있습니다. 이것으로 사용 중인 파일과 소켓, 프로토콜, 호스트명 등을 알 수 있습니다. 추가로 IP 버전(IPv4는 -i4 옵션, IPv6는 -i6 옵션), 프로토콜(UDP와 TCP 옵션), 호스트명, 포트(콜론 문자 뒤에 포트번호) 같은 것을 적어 검색 결과를 좁힐 수 있습니다. 기본적으로 lsof는 결과를 출력할 때 IP의 도메인을 조회하여 번역한 후 출력하지만 -n 옵션을 사용하면 조회를 하지 않고 출력하여 실행 시간을 단축할 수 있습니다.

  "그리고"의 의미로 -a 옵션을 사용할 수 있습니다. 예를 들어 특정 사용자가 사용 중인 네트워크 소켓(TCP와 UDP 소켓)만 보려면 다음과 같이 명령어를 사용하면 됩니다.
lsof -u 유저명 -a -i


2010/12/13 09:46 2010/12/13 09:46
Posted
Filed under 쉘 스크립트
참조 원문 : Linux: Using Remote Wakeup (Wake on LAN)
관련 글 : [시스템] 리눅스에서 WoL 작동시키기

  뭐, 가치가 있는 포스팅인지 모르겠으나 재미있어 보여서 일단 질러봅니다. 대략 아래와 같은 시나리오입니다.

  "재택 근무자들을 위해 WoL용 리눅스 서버를 만들려고 한다. 재택 근무자들은 이 서버를 통해 회사에 있는 자신의 컴퓨터를 부팅할 수 있다. 재택 근무자들은 리눅스에 대해 모르기 때문에 당신은 Putty 같은 클라이언트 프로그램과 그에 맞는 접속 세션 정보가 담긴 파일을 제공하여 쉽게 서버로 접속할 수 있게 해야 한다. 재택 근무자들이 서버에 접속 후 'wol'이라는 이름의 스크립트를 실행하여 원하는 컴퓨터를 킬 수 있게 할 것이다."

  뭐, 별도로 서버를 하나 세워야 한다는 측면에서 이미 상당히 의미 없어보이는 시나리오지만 어쨌든 아이디어 자체는 재미있어 보입니다. 일단 이 일을 실현할 'wol'이라는 스크립트 파일의 내용은 아래와 같습니다.
#!/bin/bash
clear
wolmenu="wol.menu"
woldata="wol.data"
wolloc="`dirname \"$0\"`/"
if [ ! -f $wolloc$wolmenu ]
then
     echo Cannot find my menu file. My files should be in $wolloc.
     elif [ ! -f $wolloc$woldata ]
     then
          echo Cannot find my data file. My files should be in $wolloc.
     else
          cat $wolloc$wolmenu
          echo;echo Type the number of the PC to awaken or c to cancel and press Enter:
          read n
          case $n in
               c) exit;
               ;;
               C) exit;
               ;;
               *) echo Waking up `grep ^$n $wolloc$wolmenu`.;
               ipsubnet=`grep ^$n $wolloc$woldata|cut -d ' ' -f 3`;
               hwaddress=`grep ^$n $wolloc$woldata|cut -d ' ' -f 2`;
               echo The command running is - wakeonlan -i $ipsubnet $hwaddress;
               wakeonlan -i $ipsubnet $hwaddress;
               ;;
     esac
fi
  작가 스스로도 시인했듯이 스크립트가 상당히 허접합니다. 입력 값 검사 같은 루틴이 전혀 없고 WoL이 성공했는지 핑 같은 것으로 검사하는 루틴도 없습니다. 뭐, 그건 넘어가자고 하니 넘어갑시다.

  스크립트를 살짝쿵 훑어봤다면 wol.menu와 wol.data라는 파일이 별도로 사용된다는 것을 알 수 있습니다. 이름에서도 알 수 있지만 wol.menu 파일은 이 wol이라는 스크립트를 실행했을 때 메뉴로 출력할 일반 텍스트 파일이라는 것을 알 수 있습니다. 대충 내용은 아래와 같이 작성하면 되겠죠.
Number PC Name             HW Address         IP Address
====== =================== ================== ================
1      ACCOUNTING          00:11:22:33:44:50  192.168.1.10
2      FINANCE             00:11:22:33:44:51  192.168.1.11
3      MANAGER             00:11:22:33:44:52  192.168.1.12
  wol.data 파일은 실제 WoL의 대상이 될 머신의 MAC 주소와 해당 서브넷의 브로드캐스트 주소를 담을 파일입니다. 내용은 아래와 같은 형식입니다.
1 00:11:22:33:44:50 192.168.1.255
2 00:11:22:33:44:51 192.168.1.255
3 00:11:22:33:44:52 192.168.1.255
  스크립트 파일의 내용을 봤을 때 대충 어떻게 돌아가는지 바로 파악이 되실겁니다. 출력된 메뉴를 보고 번호를 누르면 wol.data 파일에서 해당 번호를 찾아 대상 서브넷의 대상 MAC 주소를 향해 매직 패킷을 날리는 것이죠. 좀 개조하면 wol.data 파일이 필요 없겠군요. 브로드캐스트 주소 때문에 많이 개조해야 할라나...



  이거 말고도 아래와 같은 시나리오도 있군요.

  "월요일~금요일에 한하여 06:30에 특정 컴퓨터들이 켜지게 만들고 싶다. 출근해서 부팅하기 귀찮거든."

  ...좀 어이없지만 어쨌든 아이디어는 재미있습니다. 켜지게 만들려는 컴퓨터들이 있는 서브넷에 항상 켜 있는 리눅스 컴퓨터가 있다면 cron에 아래와 같은 엔트리를 집어넣어 쉽게 위 시나리오를 해결할 수 있습니다.
30 6 * * 1-5 wakeonlan -i 192.168.1.255 -f /home/user/scripts/autowol.data
  물론 IP는 적절히 자신의 서브넷에 맞는 브로드캐스트 주소로 적절히 고쳐야겠죠? 안타깝지만 여기서도 별도의 파일을 사용해야 합니다. 위에서 autowol.data라는 파일을 사용하고 있는데 WoL의 대상 MAC 주소를 담고 있는 파일로 내용은 아래와 같습니다.
00:11:22:33:44:50
00:11:22:33:44:51
00:11:22:33:44:52
00:11:22:33:44:53
00:11:22:33:44:54

  지금까지 쓸데없어 보이는 WoL 스크립트 예제에 대해 살펴봤습니다. 근데 또 모르죠. 설마 이런 스크립트가 필요한 날이 언젠가 올지도...

2010/10/29 20:08 2010/10/29 20:08