'snmp'에 해당되는 글 4건

  1. 2006.08.11 SNMP 개요
  2. 2006.08.07 MRTG (Multi Router Traffic Grapher)
  3. 2006.04.07 Net-SNMP 기본
  4. 2006.04.07 네트워크 이해 - [LAN] 네트워크관리시스템(NMS)
engineering/Network Eng.2006. 8. 11. 13:21

SNMP(Simple Network Management Protocol)

SNMP?

1970년대 후반 네트워크 장치인 연결 정보를 얻기 위한 일종의 관리 프로토콜인 ICMP(Internet Control Management Protocol)이 처음 사용되었다. 1989년 기존의 프로토콜 기능을 향상시킨 SNMP로 통합되었다.

SNMP 관리 구조

SNMP는 매니저와 에이전트의 구조로 이루어져 있다. SNMP 에이전트는 각 네트워크 장치에 장치된다. 그리고 정해 놓은 규격에 따라 장치의 정보를 수집하고 보관한다. SNMP 매니저는 에이전트와 독립적인 장소에 존재하며, 네트워크에 분포된 SNMP 에이전트의 정보를 수집해서 전체 네트워크를 관리한다.

SNMP 매니저를 정보를 수집하기 위해서 Request 메시지를 에이전트에 전송하고 에이전트는 Response 메시지를 사용해서 자신의 정보를 매니저에게 보낸다. 에이전트가 수집할 정보의 내용을 정해놓은 규격을 MIB(Management Information Base)이라고 한다.

SNMP 데이터 수집 방법

에이전트의 내용을 매니저에게 전달하는 방법은 폴링과 이벤트 리포팅의 두 가지 방법이 있다.

            Polling                              manager | --- request à | Agent

                                                                 | ß response -- |

            Event reporting                manager | ß-- trap ---- | Agent

Polling

요청에 응답

매니저가 에이전트에게 원하는 정보를 요구하면 에이전트는 매니저가 원하는 정보를 찾아서 응답한다. 간단하지만 트래픽을 많이 사용하는 단점이 있다.

Event reporting

특별한 이벤트가 발생했을 경우에 전송되며 트랩이라고 한다.

SNMP 변천사

1989년 처음 발표된 SNMP는 현재 ver.3까지 발표 되었다.

1.       SNMP

2.       SMP(Simple Management Protocol) : 성능향상

Secure SNMP : 보안기능 향상

3.       SNMPv2(party) : 위 두 가지를 통합

4.       SNMPv2c(Community) : 보안 기능 제거, SNMP 인증 방식으로 복귀

SNMPv2USM : User Security Model 추가

5.       SNMPv3

SNMPv3

모듈화로서 기존의 매니저/에이전트 패러다임을 SNMP 개체(entity)로 바꾼 것이다. 이것에 의하면 SNMP 개체는 구성된 모듈에 따라서 매니저가 될 수고 있고 에이전트가 될 수도 있다.

RMON(Remote Monitoring)의 경우 v1은 SNMP를, v2는 SNMPv2를 기반으로 정의되었고, 현재 가장 많이 사용하고 있는 버전은 SNMPv2c(community)이다.

SNMP 프로토콜 스택

SNMP는 TCP/IP 프로토콜 스택에서 응용계층의 프로토콜이다. SNMP 메시지를 전송하는 전송계층 프로토콜은 UDP를 사용한다. SNMP는 UDP의 161, 162 두 개의 포트를 통해서 메시지를 주고 받는다.

SNMP 메시지의 종류

SNMP에서 에이전트와 매니저가 주고 받는 메시지는 총 다섯 개이다.

메시지 종류

설명

Get-Request

에이전트가 관리하는 MIB에서 지정한 객체를 가져온다.

Get-Next-Request

에이전트가 관리하는 MIB에서 지정한 객체의 다음 객체의 값을 가지고 온다. 이것은 MIB항목에 테이블로 되어있는 경우에 사용한다

Set-Request

에이전트가 관리하는 MIB의 지정한 객체의 값을 설정한다.

Get-Response

매니저의 요청에 대한 결과를 되돌려 준다.

Trap

에이전트에 특별한 이벤트가 발생할 경우에 이를 매니저에게 알린다.

정상적인 요청/응답은 161번 포트, 트랩 메시지는 162번 포트를 사용한다.

SNMP 정보 관리 방법

SNMP는 이 기종의 시스템에서도 TCP/IP를 통해서 정보를 교환해야 하기 때문에, SNMP만의 독자적인 정보 관리 방법을 가지고 있다.

SMI(Structured Management Information)

SNMP MIB 들을 정의하기 위한 일반적인 구조이다.

MIB 객체들은 ASN.1 문법에 따라 정의되는데 각각의 객체들은 각각 이름과 표기 문법 다른 시스템으로 전송을 위한 인코딩 규칙 등을 가지고 있다. 이들은 서로 고유한 객체 식별자에 의해 구분된다.

MIB(Management Information Base)

MIB는 SNMP 관리 스키마로서 SNMP에서 관리하는 객체, MO(Managed Object)를 정의해 놓은 집단이다. MIB는 관리 객체를 정의하기 위해서 ITU-T에서 정의한다. ASN.1(Abstract Notation One)을 사용한다.

ASN.1은 객체를 설명하는 일종의 스크립트 언어이다. ASN.1으로 정의된 객체는 모두 트리 구조로 이루어져 있다.

O-ID(Object-Identifier)

OID는 MIB의 관리 객체(MO)를 지정하는 식별자(Primary Key)이다. OID는 계층구조에 따라 자신을 나타내는 번호와 이름을 가지고 있으며 부모이름도 알고 있다.

SNMP 데이터의 인코딩 방법

모든 SNMP 데이터는 인코딩 되어서 전송된다. 이것은 이 기종 시스템 사이의 데이터 독립성을 유지하기 위해서다. SNMP는 Basic Encoding Rules(BER)이라는 인코딩 방법을 사용하며 이것은 ITU-T의 X.209에 정의되어 있다.

모든 데이터는 TAG, LENGTH, VALUE 의 형식으로 인코딩 된다.

SNMP 보안 방법

네트워크 상에서 정보를 안전하게 관리하기 위해서는 컴과 네트워크의 보안이 보장되어야 한다.

SNMP는 community라는 일종의 패스워드를 사용하며, SNMP 메시지를 인증한다. 네트워크를 통해 전송되는 모든 메시지에 커뮤니티 값을 집어 넣어서 메시지 단위로 인증을 수행한다.

공개 커뮤니티 : public

관례적으로 에이전트가 공개하는 MO에 대해서는 커뮤니티 값을 public으로 설정해 놓는다. SNMP 매니저와 브라우저를 이용할 때 커뮤니티 값은 선정해 두지 않았는데, 에이전트에서 값을 가지고 왔다면, 그것은 커뮤니티 값이 public으로 설정되었기 때문이다.

접근정책 (Access policy)

SNMP는 접근하는 형태별로 다른 커뮤니티 값을 사용한다. 이러한 접근제어 방법은 SNMP MIB에 의한 접근과 SNMP 접근 모드의 관점으로 나뉜다.

MIB Access

SNMP Access

Mode

Category

Read-Only

Read-Write

Read-Only

Get, Trap 연산가능

Read-Write

Get, Trap 연산가능

Get, Set, Trap 연산가능

Write-Only

Get, Trap 연산이 가능하고 그 값은 구현에 따라 달라진다.

Get, Trap 연산이 가능하고 Get, Trap시의 값은 구현에 따라 달라진다.

Not-Access

사용불가

SNMP Trap

트랩은 에이전트에 특별한 이벤트나 사고가 발생하였을 때, 매니저의 요구가 없더라도 스스로 판단해서 매니저로 전송하는 일종의 리포트 매니저이다. 162번 포트 사용

SNMP 단점

폴링 방식을 사용하기 때문에 관리하는 객체가 늘어날수록 많은 대역폭과 매니저의 프로세서를 필요로 한다.

SNMPv2

SNMPv1의 단점이 네트워크 과부하 문제를 해결하고 관리자의 통신 방법을 확장했다. SNMPv2 메시지는 버전, 커뮤니티, PDU(Protocol Data Unit)로 구성된다.

GetBulk-Request

SNMPv1의 단점이 트래픽 부하를 해결하기 위해서 추가된 Request.

가져올 객체의 범위를 지정해서 한 메시지 안에 포함시키기에 트래픽 부하를 줄인다.

Posted by theYoungman
engineering/Network Eng.2006. 8. 7. 12:09
출처 블로그 > ~~랑쓰 이야기~~
원본 http://blog.naver.com/ilrang77/60002724994

들어가면서

    네트워크를 사용하는 사람이라면 자신의 네트워크의 트래픽이 얼마정도인지 확인해 보고 싶은 생각을 한번쯤은 해 봤을 것이다. 네트워크의 트래픽을 보여주는 유닉스 커맨드들이 있지만 수 많은 옵션들은 금방 초보들의 기를 꺾어 버리고 그 결과조차도 한눈에 파악하기가 쉽지 않다. 상용 Network Management툴들이 있지만 개인 사용자가 이런 고가의 툴들을 구입해서 사용하기는 힘들다. MRTG는 바로 이런 분들을 위한 S/W이다.

    MRTG는 네트워크 링크(대부분의 경우 라우터)의 트래픽을 모니터링하는 툴이다. MRTG는 실시간의 트래픽 정보를 그래프로 보여주는 html 페이지를 생성한다. 그래프는 GIF 화일에 저장되고 이 화일은 사용자가 지정하는 시간만큼의 단위로 리프레쉬된다.

    MRTG의 홈페이지는 http://ee-staff.ethz.ch/~oetiker/webtools/mrtg/mrtg.html이다. 필자의 능력이 부족해서인지 MRTG에 대한 자료는 많이 찾을 수 없었다. 혹시 한글 문서가 있지 않을까 해서 돌아다녀 봤지만 찾을 수가 없었다. 하지만 필요한 대부분의 정보는 MRTG의 홈페이지에서 얻을 수 있다. 이 문서에서는 MRTG 홈페이지의 내용을 기반으로 하여, 이 툴을 설치하고 운영해본 경험을 다루기로 한다.

    더 자세한 정보를 얻기 원한다면 MRTG 메일링 리스트에 가입하라. 가입하는 방법은 다음과 같다. 제목을 subscribe로 하여 mrtg-request@list.ee.ethz.ch나 mrtg-announce-request@list.ee.ethz.ch로 메일을 보내면 된다. 실수 없이 메일을 보냈다면 가입이 되었다는 회신이 올 것이다. 이후에 실제적인 포스팅을 할때에는 mrtg@list.ee.ethz.ch로 메일을 보내면 된다.

    MRTG가 생성하는 그래프의 예를 보려면 http://www.ee.ethz.ch/stats/mrtg에 가보라. MRTG는 Perl과 C로 작성되었으며 UNIX와 Windows NT 환경하에서 작동한다. 현재 많은 사이트에서 네트워크 트래픽을 측정하기 위해 MRTG를 사용하고 있다.  MRTG를 사용하는 사이트들의 리스트가 http://ee-staff.ethz.ch/~oetiker/webtools/mrtg/users.html에 있다. 물론 여기에 기록된 사이트가 다는 아닐 것이다. 필자의 시스템도 여기에 등록되어 있지 않으니까.

    MRTG란?

    MRTG는 SNMP를 사용하여 라우터에서 트래픽 정보를 가져오는 Perl script와, 트래픽 데이타 로그 기능과 네트워크 트래픽 정보를 그래프로 만들어주는 기능을 가지는 C 프로그램으로 구성된다. 이 그래프는 일반적인 웹 브라우져에서 볼 수 있는 html 화일에 넣어진다.
    MRTG는 라우터로부터 받은 모든 데이타의 로그를 유지할 수 있기 때문에, 일간은 물론 주간, 월간, 연간 트래픽 체크가 가능하다. 로그 화일은 자동으로 정리되며, 2년동안의 정보를 유지한다. 효율적인 자료구조를 사용하여 시간이 경과되어도 로그 화일의 크기는 증가하지 않는다. MRTG는 네트워크의 트래픽뿐만이 아니라 어떠한 SNMP 변수에 대해서도 모니터링이 가능하다. 심지어 외부 프로그램이 모니터하려는 데이타를 생성할 수 있기만 하다면, MRTG를 사용하여 실시간 그래프로 모니터링이 가능하다. MRTG의 이런 기능을 사용하여 시스템 부하, 로그인 되어 있는 세션, 모뎀의 가용도등을 체크하는 사람들이 있다. 또한 2개 이상의 데이타 소스를 하나의 그래프로 통합시킬 수도 있다.

    MRTG의 특징

    1. 대부분의 유닉스와 Windows NT 플랫폼에서 작동 가능하다.
    2. Perl을 사용함으로써 손쉽게 커스터마이즈 할 수 있다.
    3. 다른 SNMP 패키지를 설치할 필요가 없으며 SNMP 부분 전체가 Perl로 씌어 졌기 때문에
       이식성이 높다.
    4. 로그 화일의 크기가 증가하지 않는다.
    5. 반자동적인 설정 툴을 지원한다.
    6. 라우터 포트의 구성이 변경되었을 때, 이를 체크하여 사용자에게 경고 메일을 보내는
       기능이 있다.
    7. 속도가 필요한 부분은 C로 작성되었다.
    8. 그래프는 Thomas Boutell의 GD 라이브러리를 사용하여 GIF 파일로 생성된다.
    9. MRTG에 의해 생성되는 HTML 화일은 손쉽게 커스터마이즈 가능하다.
    10. MRTG는 GNU Public License를 따른다.

    MRTG 설치 방법

    1) 소프트웨어를 다운로드한다. MRTG의 최신버젼은http://ee-staff.ethz.ch/~oetiker/webtools/mrtg/pub/에 있다.

    2) 설치하려는 시스템에 GD 라이브러리가 없다면 http://www.boutell.com에서 GD 라이브러리를 다운로드한다.

    3) Perl 5.003 이상의 버젼이 설치하려는 시스템에 있어야 한다. 없다면
    http://www.perl.com/perl/info/software.html에서 다운로드 받는다.

    4) 자신의 시스템에 맞게 Makefile을 수정한다. 최소한 PERL 항목과 GD_LIB 항목은 변경해야 한다.

    5) rateup 실행 화일을 만들기 위해 make rateup을 실행한다.

    6) make substitute를 실행하여 MRTG의 perl 스크립트에 시스템의 perl 실행 화일의 패쓰를 삽입한다.

    7) MRTG가 웹페이지를 생성할 디렉토리를 정한 후, mrtg*.gif 화일들을 이 디렉토리에 카피한다. 이 화일들은 생성되어질 웹페이지에서 참조될 화일들이다. 필요할 때 쉽게 참조하기 위해 readme.html 화일도 이 디렉토리에 카피하는 것이 좋다.

    8) MRTG 배포판에 있는 그 외의 모든 화일들은 MRTG 실행 화일과 같은 디렉토리에 넣어 놓는다. 이 디렉토리는 어느 곳이어도 상관없다. 이 디렉토리에는 다음의 화일들이 반드시 있어야 한다 : BER.pm, SNMP_Session.pm, mrtg, rateup

    9) 자신의 mrtg.cfg 화일을 만든다. mrtg.cfg-dist 화일을 참조하라. 설명이 잘 되어있으므로 그렇게 어렵지는 않다. mrtg.cfg-dist 화일을 mrtg.cfg 화일로 복사한 후에 주석을 보면서 각 항목을 수정하면 된다. 라우터의 포트 할당을 알아내는 일이 cfg 화일을 만드는데 있어서 좀 힘든 부분인데, cfgmaker 툴을 사용하여 이를 해결할 수 있다. cfgmaker 툴은 mrtg.cfg 화일을 만드는데 필요한 라우터의 정보를 제공하는 툴이다. 사용 방법은 다음과 같다.

      cfgmaker <community>@<router-host-name or IP> | more

    라우터의 community name을 모른다면 public을 사용해보라. 그래도 안되면 라우터 관리자에게 문의하라. community이름이 틀리면 cfgmaker는 아무런 정보도 출력하지 않는다.

    10) MRTG 2.0 이전 버젼에서 업그레이드 하려면 convert 스크립트를 이전 버젼의 로그 화일에 적용시켜서 로그 화일의 포맷을 MRTG 2.0에서 사용 가능하도록 한다.

    11) MRTG 실행 화일이 있는 디렉토리에서 ./mrtg mrtg.cfg 를 실행시킨다. cfg 화일을 맞게 만들었다면 MRTG는 지정한 라우터에서 트래픽 데이타를 가져온다. 처음 MRTG를 실행시키면 로그 화일이 없다는 에러 메세지가 나온다. 신경쓸 것 없다. 에러 메세지가 안나올때까지 계속 실행시키면 된다. 필자의 경우 3번 정도 실행시켰다. 만약 에러 메세지가 계속 나온다면 이는 cfg 화일이 잘못 작성된 것이다.

    12) 일정 시간 간격으로 그래프를 업데이트 시키기 위해서 crontab 에 MRTG 를 넣는다. 매 5분마다 그래프를 업데이트 하려면 다음 항목을  crontab에 넣는다.
    *5**** <mrtg 실행 화일이 있는 디렉토리>/mrtg <mrtg.cfg가 있는 디렉토리>/mrtg.cfg
    crontab에 항목을 등록시키는 방법은 각 유닉스마다 조금씩 틀리다. 리눅스에서는  위의 내용을 파일로 만든 후 crontab[파일명]명령을 준다. crontab 내용을 확인하는 명령은 crontab-1이다.

    cfg 화일 작성에서의 팁

    많은 링크를 모니터링 하고자 한다면 개요 페이지를 만드는 것이 좋다. 이를 위해 indexmaker 스크립트가 있다. 이 스크립트를 사용하여 각각의 트래픽 상태 페이지를 가리키는 항목들을 그 내용으로 하는 웹페이지를 생성할 수 있다. 사용 방법은 다음과 같다. Indexmaker <mrtg.cfg> <regexp for router-names>
    좀 복잡하다고 생각하는 분들이 있을지 모르겠는데 필자도 그런 사람중의 하나이다.
    필자의 경우는 2개의 타겟에 대해 모니터링을 하고 있는데, 각 타겟에 대한 html file이 만들어지므로 이들 html화일에 대한 링크를 가지는 아주 짧은 html 화일을 손으로 만들어서 쓰고 있다. html 을 전혀 모르는 사람을 위해서 필자의 엄청난 overview 페이지를 아래에 쓴다.

      <html>
      <body>
      <a href="http://dove.hanjin.net/~kelpie/pozol.html"> pozol </a><br>
      <a href="http://dove.hanjin.net/~kelpie/bay.html"> bay (Internet connection point)</a>
      </body>
      </html>

    MRTG는 디폴트 5분 간격으로 그래프를 업데이트한다. 그런데 로컬 브라우져의 캐쉬나 프락시의 캐쉬를 사용함으로써 그래프가 업데이트되지 않을 수 있다. 만약 이런 불상사가 생긴다면 여기에 해결책이 있다. 단 이는 아파치 웹 서버를 사용할때에만 적용된다. 그 방법은 다음과 같다. mrtg.cfg 화일의 WriteExpire 키워드와 아파치 서버의 config화일의 MetaDir 키워드를 적절하게 셋팅한다. 이것저것 귀찮은 사람은 그냥 reload 버튼을 누르면 될 것이다. 필자의 웹 서버는 오라클 웹 서버이고, 웹 브라우져는 넷스케이프인데, 매 5분마다 페이지가 업데이트될때마다 자동으로 브라우져의 내용이 업데이트되었다.

    MRTG의 주 목적은 트래픽 모니터링이지만, SNMP 변수들을 관측하는데도 사용될 수 있다. 모뎀 뱅크의 상황, 서버의 부하, 인터페이스의 에러율 등을 MRTG를 이용하여 모니터링 할 수 있다. 더 자세히 알고 싶으신 분은 패키지에 포함된 mibhelp.txt와 contrib 디렉토리의 내용을 참조하도록 하라. 처음 부분에서 소개한 MRTG 메일링 리스트에 가입한다면 더 많은 정보를 얻을 수 있다. 많은 사람들이 이런 고급 활용들에 대해 질문하고 답하는 것을 볼 수 있다. SNMP 변수들을 관측하길 원한다면 SNMP에 대한 어느 정도의 지식이 있어야 가능할 것이라고 생각된다. 이 부분에 있어서는 본 원고의 주제에서 벗어나므로 더 이상 깊게 다루지 않겠다. SNMP에 대해 더 자세히 알고 싶은 분은 아무 TCP/IP책이나 조금만 시간을 내서 보면 될 것이다. SNMP의 개념은 전혀 어려울 것이 없다. 단지 수많은 변수들의 리스트가 있을 뿐이다. SNMP의 개념을 뒷 부분에서 간략하게 설명하겠다.

    필자의 시스템 상에서의 설치와 사용기

    이곳에서는 필자가 MRTG 패키지를 다운로드 받기에서부터 시작해서 사용하기까지의 실제 예를 적도록 하겠다. 사용 운영체제는 Solaris 2.5 이며 GD 라이브러리는 없었고, Perl은 5.003 이전 버젼이 깔려있어서 GD라이브러리, Perl 5.003 모두 설치해야 하는 상황이었다.
    참고로 필자는 설치시 루트 권한을 가졌음을 밝힌다. 필자의 시스템이 솔라리스라고 해서 MRTG가 솔라리스에서만 실행되는 것은 물론 아니다. 앞에서 밝혔듯이 MRTG는 대부분의 유닉스에서 운영할 수 있다. 구체적으로 어떤 플랫폼을 지원하는지에 대한 자료를 찾을 수는 없었다.(compile에 gcc를 사용한다.)

    1. MRTG source 패키지 다운로드

    2. GD 라이브러리 설치
    소스를 받아서 임시 디렉토리에서 압축을 푼 다음 컴파일한다.
    make를 실행시켰더니 이상없이 컴파일이 되었다.
    /usr/local/include에 gd란 디렉토리를 만든 후, 여기에 *.h 화일을 복사한다.
    /usr/local/lib 에 libgd.a 화일을 복사한다.

    3. Perl 5.003 설치
    Perl 홈 페이지에서 5.004_01소스를 가져다가 컴파일해보니 컴파일이 되지 않았다. 하는 수 없이 Perl 5.003의 Solaris 2.5 바이너리 화일을 가져다 설치했는데 이 파일은
    ftp://ftp.kreonet.re.kr/pub/Sun/binaries/sparc/perl5_003_
    SPARC_Solaris_2_5_pkg.tgz
    에서 가지고 왔다. 참고로 이 사이트에는 솔라리스용 바이너리들이 많이 있으니 솔라리스 사용자라면 기억해 둘 만한 곳이다. 바이너리 화일을 시스템에 설치하기는 무척 쉬웠다. 우선 임시 디텍토리에서 압축을 풀면 perl5란 디렉토리가 생긴다. ./perl5/root 디렉토리가 실제 시스템의 루트 디렉토리라고 생각하고 하위 디렉토리의 모든 화일들을 실제 시스템 디렉토리에 복사하면 된다. 아주 무식한 방법이다. 물론 이전 버젼의 Perl을 백업한 다음 모두 삭제한 후에 설치했다. 마지막으로 /usr/local/bin 디렉토리에서 ln -s perl perl5.003을 실행한다. (참고. 솔라리스의 pkgadd 명령을 사용해도 된다.)
    리눅스 사용자들은 배포판에서 perl 바이너리를 설치할 수 있고, 많은 사이트에 리눅스용 바이너리가 있으므로 perl 설치는 별 문제가 되지 않으리라 생각된다. 실제로 공개용 소프트웨어를 받아서 자신이 설치해 보기에는 리눅스가 가장 편한 플랫폼이라는 것이 필자의 지금까지의 경험에서 나오는 생각이다. (물론 반대하는 분들이 있을 수 있겠지만 그리 중요한 문제는 아니므로 항의 메일을 보내거나 하시지는 마세요.)

    4. MRTG 설치
    Makefile 수정 : #GD_INCLUDE=/usr/local/include/gd 라인에서 #을 뺀다
    GD_INCLUDE=gd1.2 라인의 앞부분에 #을 추가한다.
    #GD_LIB=/usr/local/lib 라인에서 #을 뺀다
    GD_LIB=gd1.2 라인의 앞 부분에 #을 추가한다.
    # PERL=/usr/local/bin/perl 라인에서 #을 뺀다
    PERL=/usr/local/gnu/bin/perl5 라인의 앞 부분에 #을 추가한다.
    make rateup을 실행시켜 rateup 실행 화일을 만든다.
    (음 에러메세지 하나 없이 한방에 되는군요)
    make substitute를 실행시킨다.
    MRTG가 웹 페이지를 생성할 디렉토리를 만든 후, 그 디렉토리에 *.gif, *.html, *.pm, mrtg, rateup 화일들을 복사한다. 나중에 참조할 수 있게끔 *.c, *.o 화일들을 제외하고는 모두 복사하는 것이 편하다. 필자의 시스템에는 웹 서버가 있으므로 아예 모든 화일들을 필자의 홈 디렉토리 밑의 public_html 디렉토리에 복사해 버렸다.

    5. cfg 화일 만들기
    mrtg.cfg-dist 화일을 mrtg.cfg 화일로 복사한다. 이 화일에는 주석이 아주 잘 되어 있으므로 cfg 화일을 만드는데 큰 어려움은 없을 것이다. 체크하려는 라우터의 포트를 알아야 하는데 이는 cfgmaker를 쓰면 알 수 있다. cfgmaker의 사용법과 라우터의 community를 알아내는 방법은 앞에서 설명했으므로 생략한다. cfg 화일에서 설정해야 할 것이 많은 것처럼 보이지만 실제로는 그렇지 않다. 단 몇 줄만 써 주면 지금까지 한 작업의 결과를 볼 수 있다. 필자의 cfg 화일을 예로써 아래에 적는다.

    WorkDir: /user/kelpie/public_html
    Target[bay]: 1:xxxxx@10.1.1.254
    RouterUptime[bay]: xxxxx@10.1.2.254
    MaxBytes[bay]: 16000
    Title[bay]: Traffic Analysis for bay
    PageTop[bay]: <H2>Traffic Analysis for our internet router (bay)</H2>
    AddHead[bay]: Base of Percentage computing = 128K
    WithPeak[bay]: m
    Supress[bay]: y
    XSize[bay]: 450
    YSize[bay]: 150
    Options[bay]: growright, bits
    Timezone[bay]: Japan

    라우터의 community와 IP는 회사의 보안을 위해서 실제 값을 쓰지 않았다. 괜히 똑같이 했는데 안된다고 불평하지 마시고 자신의 시스템의 맞는 값을 쓰시길 바란다.

    Target[bay] : 1:xxxxx@10.1.1.254 라인이 가장 중요한데, [bay] 부분은 체크하고자 하는 타켓에 대해 사용자가 주는 이름이다. bay란것은 필자가 체크하고자 하는 라우터의 포트에 붙인 이름이다. cfg 화일을 다 만든다음 MRTG를 실행시키면 그 결과가 bay.html에 들어간다. 이 웹 페이지를 참조할때는 필자의 경우 웹 서버가 같은 호스트상에 설치되어 있었으므로, 웹 브라우져에서 http://dove.hanjin.net/~kelpie/bay.html이라고 입력하면 된다. 이런 식이다. 자신의 홈 페이지를 가지고 있지 않으신 분은 일단 PC로 html 파일을 가지고 와서 웹 브라우저에서 보면 된다.

    그 다음 '1'은 체크대상 라우터의 포트 번호이다. 하나의 라우터는 여러개의 포트를 가진다. 보통 이더넷 포트와 시리얼 포트들로 구성된다. cfgmaker를 사용하여 체크하려는 포트의 번호를 알아낼 수 있다. cfgmaker의 출력 결과를 주의 깊게 들여다 보면 자신이 체크하려는 포트가 몇 번인지 알 수 있다. cfgmaker는 출력을 html문서의 포맷으로 화면에 보여준다. 그냥 화면에 보여지는 결과만으로도 충분히 내용을 파악할 수 있지만 출력 결과를 html화일로 리다이렉트하여 웹 브라우저에서 본다면 깨끗하게 볼 수 있다.

    그 다음 xxxxx은 체크하고자 하는 라우터의 community이다. 이 community가 틀리면 MRTG는 실행되지 않는다. 다음 숫자 부분이 라우터의 IP 주소이다. 다른 항목들에 대해서는 mrgt.cfg-dist 화일에 아주 잘 설명이 되어 있으므로 따로 설명하지 않겠다. mrtg.cfg-dist 화일과 위의 예를 참조한다면 쉽게 자신의 cfg 화일을 만들 수 있을 것이다.
    이로써 모든 준비 작업이 끝났다. community만 맞게 써 줬다면 MRTG는 분명히 라우터의 트래픽을 그린 출력물을 내어 놓는다. 이제 실행만 시키면 된다. 실행은 ./mrtg mrtg.cfg라고 치면 된다. MRTG를 처음 실행시켰다면 에러 메세지가 뜨는데 몇번(2-3번) 반복해서 실행시키면 된다.

    6. MRTG가 주기적으로 실행되도록 crontab에 등록한다. 등록 방법은 시스템마다 조금 틀리므로 알아서 하기 바란다. 아마 man cron, 또는 man crontab, 또는 man crond중의 하나로 사용법을 알 수 있을 것이다. 세가지 다 안되면 man -k cron으로 cron이란 말을 키워드로 하는 도움말 항목들을 볼 수 있다. 리눅스에서는 crontab[파일명] 이다. 미련한 방법인지 모르겠지만 이런 식으로 스스로 man페이지를 찾아가면서 하나하나 알아가는 것이 유닉스에 익숙해지는 한 방법이라고 생각한다.

    이로서 모든 것이 끝났다. 자신의 네트워크 트래픽을 그래프로 알기 쉽게 확인한다는 것은 필자에게 있어서는 아주 즐거운 경험이었다. 괜찮은 아이템이 있으면 다시 소개하도록 하겠다.

용어설명

    라우터(Router) : 서로 다른 네트워크를 연결해 주는 장비이다. 인터넷 IP 체계하에서 다른 주소대를 가지는 네트워크를 다른 네트워크라 한다. 예를 들면 203.245.11.xx 주소를 가지는 네트워크와 195.126.11.xx주소를 가지는 네트워크는 서로 다른 네트워크이다. 서로 다른 네트워크끼리 통신을 하기 위해서는 라우터가 필요하다. 이 설명은 지극히 단순화된 것이다.

    프락시(Proxy) : 프락시는 대행자라는 뜻을 가지고 있다. 총체적인 개념으로는 Telnet, FTP, HTTP, Gopher 등등 많은 응용에서 프락시를 사용할 수 있지만 가장 익숙한 것을 역시 HTTP프락시일 것이다. 프락시 서버는 보안 기능, 로그 기능, 프락시 연계 기능 등 다양한 기능을 가진다. 가장 유용하면서 대표적인 기능은 캐쉬기능이다. 많은 사람들이 프락시 서버를 사용한다고 할 때, 단 한사람이 어떤 사이트에서 정보를 가지고 왔다면 그 이후에는 다른 사람이 같은 사이트를 보고자 할 떄 그 사이트까지 가는 것이 아니라 프락시 서버에서 가져오므로 빠르게 Web을 사용할 수 있다.

    SNMP(Simple Network Management Protocol) : 네트워크사의 장치들로부터 네트워크에 대한 정보를 모으는 기능과, 장치들이 네트워크 관리 머쉰에게 자신의 문제점을 보고 할 수 있는 기능을 제공한다. SNMP 프로토콜은 Client/Server 모델을 기반으로 한다. 각각의 네트워크 장비들은 Agent라는 Server 모듈을 가진다. 이 Agent들은 자신의 네트워크 정보를 수집한다. Client는 보통 응용 프로그램이 된다. 이 프로그램이 운영되는 머쉰이 관리 머쉰이 되는 것이다. 이 Client를 Manager라 한다. Manager를 사용하여 네트워크 관리자는 네트워크 상의 Agent들에게 정보를 요구하고 취합하여 자신의 네트워크를 관리할 수 있다. 가능한 한 최대로 축약된 설명이므로 더 자세히 알고 싶으신 분은 TCP/IP 책을 참조하길 바란다.

참고자료

Posted by theYoungman
engineering/Network Eng.2006. 4. 7. 12:46

Net-SNMP

Contents

Net-SNMP Package

History of Net-SNMP

Applications of Net-SNMP

Trap Daemon

How to extend SNMP agents with Net-SNMP

Architecture of Net-SNMP Agent

Package

        An extensible agent

        An SNMP library

        tools to get or set information from SNMP agents

        tools to generate and handle SNMP traps

        a Tk/perl mib browser

History

        Originally based on the Carnegie Mellon University implementations

        University of California at Davis SNMP extends CMU-SNMP, calls UCD-SNMP

        UCD-SNMP moves to Net-SNMP in April, 2002 (Web sites also moves from www.ucd-snmp.net to www.net-snmp.net)

        Now, Net-SNMP 5.0.8 released

Application

        snmpcmd  [Common OPTIONS] AGENT [PARAMETERS]

        Common command line arguments

        Common OPTIONS

§         -c  community

§         -v 1 | 2c | 3

§         -r retries

§         -t timeout

        snmpget [COMMON OPTIONS] [-Cf] OID [OID]...

        SNMP application that uses the SNMP GET request to query for information on a network entity

        Ex) snmpget -c public localhost system.sysDescr.0

        Result) system.sysDescr.0 = Linux enterflex2.postech.ac.kr …

        snmpset [COMMON OPTIONS] OID TYPE VALUE

        SNMP application that uses the SNMP SET request to set information on a network entity

        Type: i (INTEGER), u (UNSIGNED), s (STRING)…

        ex)  snmpset -c private -v 1 localhost system.sysContact.0 s mjchoi@postech.ac.kr

        snmpwalk [APPLICATION OPTIONS] [COMMON OPTIONS] [OID]

        SNMP application that uses SNMP GETNEXT requests to query a network entity

        Retrieves lots of data, a part of MIB tree (subtree) at once

        Ex) snmpwalk -c public localhost system

        Result)      
  system.sysDescr.0 = …

                   system.sysObjectID.0 = …

                      system.sysUpTime.0 = …

        snmpstatus [COMMON OPTIONS]

        SNMP application that retrieves several important statistics from a network entity.

        The IP address of the entity. à sysDescr.0 / sysUpTime.0 /…

        Ex)  snmpstatus -c public -v 1 localhost

        Result) [127.0.0.1] à[Linux enterflex2 .postech . ac .kr 2.4.7-10 #1 Thu Sep 6 17 :27:27 EDT 2001 i386 ]…

        snmptranslate [OPTIONS] OID [OID]...

        Application that translates SNMP object identifier values from their symbolic (textual) forms into their numerical forms

        Ex) snmptranslate system.sysUpTime.0

        Result) .1.3.6.1.2.1.1.3.0

        snmptrap [COMMON OPTIONS] [-Ci] enterprise-oid agent generic-trap specific-trap uptime [OID TYPE VALUE]

        SNMP application that uses the SNMP TRAP operation to send information to a network manager 

        Definition)

TRAP-TEST-MIB DEFINITIONS ::= BEGIN

IMPORTS ucdExperimental FROM UCD-SNMP-MIB;

demotraps OBJECT IDENTIFIER ::= { ucdExperimental 990 }

demo-trap TRAP-TYPE

                      STATUS current

              ENTERPRISE demotraps

               VARIABLES { sysLocation }

               DESCRIPTION "This is just a demo"

               ::= 17

END

  Ex) snmptrap –v 1 -c public host TRAP-TEST-MIB::demotraps localhost 6 17 '' SNMPv2-MIB::sysLocation.0 s "Just here"

  Etc.

                          snmpgetnext: retrieving unknown indexed data.

                          snmpbulkwalk :uses SNMP GETBULK requests to query a network entity

                          snmptable: displaying table.

                          snmpnetstat: symbolically displays the values of various network-related information  retrieved  from  a remote system using the SNMP protocol

Trap Daemon

  snmptrapd [OPTIONS][LISTENING ADDRESSES]

                          SNMP application that receives and logs  SNMP TRAP

                          the default is to listen on UDP port 162

                          snmptrapd is displayed as follows

                          Result) 1999-11-12 23:26:07 localhost [127.0.0.1] TRAP-TEST-MIB::demotraps: Enterprise Specific Trap (demo-trap) Uptime: 1 day, 5:34:06 SNMPv2-MIB::sysLocation.0 = "Just here"


HOW To Extend

1.Define a private MIB: Example of Cluster MIB

2. Download net-snmp-5.0.8.tar.gz

3. Decompress the file in your home directory command: gtar xvfz net-snmp-5.0.8.tar.gz

4. Compile default SNMP agent

      cd net-snmp-5.0.8

      ./configure --prefix=“/usr/local/net-snmp”

      make

      make install

5. Install SNMP perl module for using mib2c

      cd net-snmp-5.0.8

      cd perl

      perl Makefile.PL -NET-SNMP-CONFIG=sh ../../net-snmp-config -NET-SNMP-IN-SOURCE=true 

      make

      make test

      make install

6. Compile the private MIB file using mib2c

        cd net-snmp-5.0.8

        cd local

        mkdir cluster

        copy the private mib in the current directory                           

ex) cp ~mjchoi/cluster.my ./cluster.my

        export MIBS=ALL

        MIBS=./cluster.my

        mib2c -c mib2c.scalar.conf generalInfo

        mib2c -c mib2c.scalar.conf currentStatus

        mib2c -c mib2c.array-user.conf loadBalancer

        mv generalInfo.* cluster

        mv currentStatus.* cluster

        mv loadBalancer.* cluster

        cp r cluster ../agent/mibgroup/.

8. Code the extension agent

(1) Header file: add necessary definitions C file

(1) Module definition: the code defining the contents of the MIB

     e.g. static oid      clusterName_oid[] = { 1, 3, 6, 1, 3, 1, 1, 1, 0 };

(2) Module initialization:

initialization before they can start providing the necessary information

    e.g. netsnmp_register_instance(netsnmp_create_handler_registration

                            ("clusterName",  do_clusterName, clusterName_oid,

                              OID_LENGTH(clusterName_oid), 

                              HANDLER_CAN_RWRITE));

(3) Variable handling: actually handles a request for a particular variable instance

    e.g.

char clusterName[NAME_LEN];

                     int *var_len;

  (4) Non-table-based modules:

the request handling routine is to retrieve any necessary scalar data

             e.g.

         switch (reqinfo->mode) {

           case MODE_GET:

             snmp_set_var_typed_value(requests->requestvb, ASN_OCTET_STR,

                                                         (u_char *) clusterName, var_len);

             break;

   

    }

(5) Simple tables: process a simple table with limited table index

e.g.

int serviceTable_handler(netsnmp_mib_handler *handler,

                    netsnmp_handler_registration *reginfo,

                    netsnmp_agent_request_info *reqinfo,

                    netsnmp_request_info *requests)  {

                           

                          switch (reqinfo->mode) {

                        case MODE_GET:

                                    switch (table_info->colnum) {

                                  case COLUMN_SRINDEX:

                               snmp_set_var_typed_value(var, ASN_INTEGER, );                                     

                                  break; 

                    

} (7) Set-able object: the handling of SNMPSET

e.g.

switch (reqinfo->mode) {

  

  case MODE_SET_ACTION:

       // XXX: perform the value change here

       if ( /* XXX: error? */ ) {

           netsnmp_set_request_error(reqinfo,

requests, error_msg.);

       }

       break;

  case MODE_SET_COMMIT:

       //  XXX: delete temporary storage

       if ( /* XXX: error? */ ) {

            netsnmp_set_request_error(reqinfo, requests,

                                     SNMP_ERR_COMMITFAILED);

       }

       break;

  }

                        

                          }

                            

}

(6) General tables: process a general table, which the maximum

           index is not determinable

           e.g.

              Init_{Name}_Entry();  // Perform any necessary initialization

              while (( index = Get_Next_{Name}_Entry() ) != EndMarker ) {

                  construct OID from vp->name and index

                  compare new OID and request

                  if valid {

                     save current data

                     if finished // exact match, or ordered table

                     break; // so don't look at any more entries

                  }

                

              }

          

9. Compile the MIB extension and generate SNMP daemon

        ./configure --with-mib-modules=cluster/generalInfo, cluster/currentStatus, cluster/loadBalancer”

        cd agent   

        make

        ./snmpd c config_file (ex) ./snmpd c /etc/snmp/snmpd.conf

        snmpd [OPTIONS] [LISTENING ADDRESSES]

        SNMP agent which binds to a port and awaits requests from SNMP management software.

        collects the requested information and/or performs the requested operations and returns the information to the sender.

        By default, snmpd listens for SNMP requests on  UDP port 161.

10.  Modify snmpd.conf for SNMP community

# First, map the community name

#               sec.name    source     community

com2sec  clusterUser  default       postech

# Second, map the security name into a group name:

#          groupName      securityModel  securityName

group clusterGroup              v1            clusterUser

# Third, create a view for us to let the group have rights to:

#          name        incl/excl          subtree               mask(optional)

view    mibview     included   .iso.org.dod.internet

# Finally, grant the group read-only access to the systemview view.

#             group context sec.model sec.level prefix read   write  notif

access  clusterGroup ""  any    noauth  exact  mibview  mibview none

Posted by theYoungman
engineering/Network Eng.2006. 4. 7. 12:32

1. NMS 란 무엇인가?

1.1 NMS의 정의

네트워크상의 전 장비들의 중앙 감시 체제를 구축하여 Monitoring, Planning 및 분석이 가능하여야 하며 관련 데이터를 보관하여 필요 즉시 활용 가능하게 하는 관리 시스템이다. 다시 말하면, NMS는 네트워크 관리자가 NMS제품을 사용하여 현재 운영되는 workstation으로부터 네트웍을 control and monitor할 수 있게 한다.

1.2 NMS가 하는 일

NMS(network Management System)는 전반에 걸친 정보를 수집 관리하는데 그 목적이 있다. 현재 많은 NMS상품들이 시중에 나와 있고 기본적으로 아래와 같은 공통점을 갖는다.

VENDER

상품

UB Network

NetDirector

IBM

Netview

Cisco

Ciscoworks

HP

Openview

Cabletron

Lanview

Synotics

Optivity

3COM

Viewbuilder

(1) 네트워크상의 전 장비들의 중앙 감시 체제를 구축하여 Monitoring, Planning 및 분석이 가능하여야 하며 관련 데이터를 보관하여 필요 즉시 활용 가능하여야 한다.
 
(2) SNMP Protocol을 관리Protocol로 사용하며 CMIP으로의 전환 방안이 제시되어야 한다.
 
(3) Ethernet및 FDDI네트워크에 접속되어있는 자원들을 관리할 수 있어야 한다.
 
(4) Graphic User Interface를 지향해야 한다.
 
(5) MIB-1, MIB-2및 타 Vendor Specific MIB을 지원할 수 있어야 한다.
 
(6) 보안성이 우수하고 관리가 용이해야 한다.

통상 NMS는 Workstation급에 Network관리자가 사용하기에 편한 곳에 설치하며 단위 Network에 복수 개의 NMS를 병행할 수도 있다. NMS구동은 SNPM에 의해 작동하며 SNMP(Single Network Management Protocol) System은 NMS, NMS Agent, MIB(Management Information Base) 3부분으로 이루어 진다. SNMP는 Network Device 즉, Routers, Bridges, Terminal Server, Host PC 등에 직접 Query하는 Transaction-Oriented Protocol이다.

NMS는 SNMP Agent에 정보를 의뢰함으로써 Device들을 감시 제어한다. SNMP Agent는 NMS의 요구에 응답하고 Network상의 관리 대상 장비에 존재하는 S/W이다. Agent에는 장비에 관한 정보인 MIB(Routing Table Counter, status indication 등)이 있으며 이들은 Agent에 대한 NMS의 Poll과 Query에 대한 응답으로 NMS에 보내지고 이들은 다시 DB에 저장된다.

본래 의미에서의 네트워크 관리 기능은 아직 사람에게 의지하고 있지만 최근에는 SNMP등의 규격화된 관리용 Protocol을 이용하는 제품이 출하되기 시작했다. 그러나 SNMP을 지원하고 있는 기기만 관리 대상이 되므로 이후 network에 접속되는 기기는 이와 같은 Protocol을 지원하는 추세가 가속화 되고 있다.

 

2. SNMP 프로토콜

2.1 기본 구성

위에서 말한 바와 같이 SNMP는 다음의 3부분으로 구성되어있다.

 1. 관리대상 (서비스 제공자, Agent)
 2. 네트워크 관리 Station(서비스 이용자, manager)
 3. 네트워크 관리 Protocol

SNMP의 기본관리구조는 그림 5.1과 같으며 서비스 제공자는 Agent로, 서비스 이용자는 Manager로 각각 불린다. 또 SNMP Protocol구성과 SNMP를 사용한 네트워크 관리방법은 그림 5.2와 같다.

SNMP는 IP (Internet Protocol)에서 작동하는 UDP(User datagram Protocol:커넥션형 트랜스포트 프로토콜)에 장치되어 있다. 따라서 SNMP통신을 하기 위해서는 Manager와 Agent모두에게 가IP Address가 필요하다.


<그림 5.1 SNMP의 기본적인 관리구조>


<그림 5.2 SNMP 프로토콜 구성과 SNMP를 사용한 네트워크 관리방법>

2.2 SNMP의 통신 방식

SNMP의 통신은 그림 5.3과 같다. SNMP를 사용한 통신은 SNMP Manager와 SNMP Agent사이에서 MIB(Management Information Base : 관리정보 베이스)를 기초로, 여러 명령어를 사용해서 네트워크를 관리한다.

● 기본 명령어와 동작

명령어

1. GET : 관리정보를 검색하는데 사용된다.
2. GET-NEXT : 관리정보를 연속해서 검색하는데 사용된다.
3. SET : 관리정보를 바꿔쓰는데 사용된다.
4. TRAP : 예외작동을 통지하는 경우에 사용된다.

동작

1. 변수 읽어들이기 : Agent가 가지고 있는 변수를 읽어들인다.
2. 변수 써 넣기 : Agent가 가지고 있는 변수를 바꿔 쓴다.
3. 트랩 : 예상치 못한 사태가 발생했음을 전한다.

이러한 명령어들은 모두 SNMP Manager측에서 발신되지만 SNMP Agent측에서는 장애 등의 예상치 못한 사태가 발생했을 때에만 SNMP Manager에게 trap명령을 통지하는 구조로 되어 있다. 또 SNMP Manager의 SNMP 애플리케이션에는 GUI와 SNMP Manager가 하나로 된 것과 따로 된 것이 있으므로 구입시 주의하여야 한다.


<그림 5.3 SNMP 통신 체제>

2.3 MIB (Management Information Base)

MIB는 SNMP에서 관리하는 정보의 데이터 베이스와 같은 것으로 (관리 항목의 정의 파일 및 표 등이 있는 것), 어떤 항목에 대하여 문의하면 어떤 대답이 되돌아올지를 각각 정해놓고 있다. MIB에는 다음의 세 종류가 있다.

1. MIB-1

MIB-1은 관리정보 베이스로 원래는 MIB라고 불렀으나 MIB의 확장판인 MIB-2가 발표됨에 따라 MIB-2와 구별하기 위해서 MIB-1이라 불리게 되었다.
MIB -1은 네트워크 관리에 필요한 최소한의 관리대상을 정의하고 있는데 그 object는 114개이다.

2. MIB-2

MIB-2는 MIB-1의 확장판으로 MIB-1의 모든 object들을 포함하여 총 171개의 object를 포함하고 있다. 현재 시장에서 제공되고 있는 대부분의 제품은 MIB-2를 지원하고 있다.

3. 확장 MIB

MIB-1, MIB-2에서는 규정되어 있지 않으나, Vendor가 가지고 있는 독자적 기능을 SNMP에서 관리할 수 있도록 정의한 관리 항목이다.

 

이상으로 근거리 통신망(LAN)의 전반적인 사항을 알아 보았다. 여기서는 데이터 통신의 기본 개념과 네트워킹의 기본, 네트워크 장비 및 인터네트워킹의 개요, 프로토콜, 네트워크 운영체제, 네트워크 관리 시스템 등에 대해 살펴 보았다. 이러한 근거리 통신망의 전반적인 사항은 뒤에서 배울 원거리 통신망의 기본이 된다.

Posted by theYoungman