티스토리 뷰

Server/EtcServer

Net-Snmp

Jacob_baek 2012. 5. 2. 19:54


Net-SNMP 구조

1. Server

- SNMP Manager :

- SNMP Application : 서버 관리자에게 관리를 위한 명령 제공


2. Client

- SNMP Agent : Manager에게 장비 정보 전달 및 명령을 전달받는 역할 수행

- SNMP MIB : 


Manager

1. 정의


2. 동작방식

- Polling

  - SNMP Manager가 GetRequest-PDU 생성 및 전송

    애플리케이션과 사용자의 요청에 대한 MIB 객체의 이름을 포함한 메시지를 생성 및 에이전트로  

    전송한다.

  - SNMP Agent에서 GetRequest-PDU 수신 및 처리

    메시지에 담겨 있는 MIB 객체명의 목록을 살펴보고 실제 구현하고 있는 MIB 객체인지 확인하고     각 변수의 값을 읽어들인다.

  - SNMP Agent에서 Response-PDU 생성 및 전송

    요청된 MIB 객체의 값과 에러코드 등을 포함한 메시지를 생성 및 전송한다.

  - SNMP Manager가 Response-PDU 수신 및 처리 

    에이전트로 부터 전달받은 메시지를 처리한다.

    (예. 우체국)

- interrupt 

  - Manager가 요청하지 않았음에도 Agent가 전송하는 방식

    (예. 전화기)


3. SMI(Structure of Management Information)

장비간 호환성을 위해 장비의 특성을 일관성 있게 규정


4. MIB(Management Information Base) 

장비의 현재 동작에 관한 정보와 장비를 제어하는 데 사용되는 각종 변수가 존재한다. 

이러한 변수를 MIB객체라고 하고 SMI 데이터 설명 언어를 통해 정의하게 되어 있다.


Agent 

1. 정의

snmpd 는 SNMP Agent 이다.

Net-SNMP를 사용하여 에이전트로 부터 관리정보를 전달받는 부분에 대한 기술을 하였다.


2. 범위

에이전트를 통해 다음과 같은 정보수집 및 작업등을 수행할 수 있다.


3. 설치 방법

[컴파일방식]

snmp 에이전트를 실제 구동할 장비에 맞게 컴파일 한다.

configure 수행시 아래의 옵션을 참고하여 컴파일 할 수 있다.


--with-default 

--with-mib-modules 

...


아래 링크를 참고하여 configure 단계에서 module를 추가할 수 있다.

http://net-snmp.sourceforge.net/docs/README.agent-mibs.html


다음과 같은 모듈을 추가하여 사용할 수 있다.

mibII snmpv3mibs ucd_snmp agent_mibs agentx notification target utilities host 등등..


예로 실제 설정한 configure가 아래와 같다.

[참고사항]

Extra_Configure_Flags = --sysconfdir=/etc \

  --with-install-prefix=$(DSTROOT) \

  --with-default-snmp-version=2 \

  --with-persistent-directory=/var/db/net-snmp \

  --with-defaults \

  --without-rpm \

  --with-mib-modules="host ucd-snmp/diskio ucd-snmp/loadave" \

  --disable==static \

  --enable-ipv6 \

※ 참고사이트

http://www.opensource.apple.com/source/net_snmp/net_snmp-127/Makefile

위와 같은 예를 참고하여 configure 이 가능하고 컴파일단계를 수행할 수 있다.



※ 임베디드 장비의 경우 snmp agent를 사용시 다음과 같은 옵션을 통해 컴파일 한다.

이유는 

--with-out-mib-modules

--enable-mini-agent

: 구동되는 모듈(

--with-mib-modules : 특정 모듈을 포함시킬수 있는 옵션(mini-agent로 하더라도 필요시 관련된 모듈을 포함시킬수 있다.)


mib module을 추가할때는 관련 모듈을 mib 파일내에서 키워드로 찾아낼수 있다. 

최상위로 존재하는 mib을 찾아사용하면 된다.



아래 링크에 관련 내용이 존재한다.

http://net-snmp.sourceforge.net/wiki/index.php/FAQ:Compiling_06



4. 설정

net-snmp-config


5. 동작방식

- SNMP 에이전트가 구동되면서 MIB를 초기화하고 

- 매니저로부터 Get-Request 가 에이전트로 전달된다.

- 에이전트는 Get-Request의 OID를 검사하고 관련된 콜백함수를 호출한다.


위 내용은 아래내용 참고하여 작성함(출처가 불분명..)

① init_mib() : 구현한 MIB를 초기화한다. 관리 객체인 MO(Managed Object)를 콜백 함수에 등록하고(이 부분은 mib2c가 해준다.), snmpd.conf 설정 파일을 사용해서, MO에 값을 지정할 경우, 해당 부분을 연결해준다.

② SNMP 에이전트를 시작한다.

③ 매니저에서 Request가 들어온다. 에이전트는 Request의 OID를 검사해서 해당 콜백 함수를 호출한다. 
    에이전트는 Request의 헤더를 검사한다( header_check() 함수). 구체적으로 하는 일은 Request-OID가, 실제 콜백 함수에 등록된 MO중에 있는지 검사한다. 헤더를 검사하는 이유는, Request-OID와 MO의 OID가 다를 수 있기 때문이다 (GetNext-Request의 경   우). 직접 MO 값을 가져오는 함수에 들어갈 때는, 반드시 에이전트에 존재하는 OID 값만 사용할 수 있다.

④ Magic-Number를 통해서 실제 MO로 이동한다( switch-case() 문을 사용한다). 테이블의 경우 MO로 이동하고, MO의 해당 인스턴스로도 이동해야 한다.

⑤ 해당 MO의 값을 write한다.

⑥ Write한 값을 Response 메시지에 담아서 매니저로 되돌린다.


위와 같은 동작원리를 가진다.


6. snmpd.conf

에이전트 구동에 필요한 설정을 한다.

접근제어 및 특정정보(시스템, 프로세스 등..)에 대한 설정을 할 수 있다.

com2sec public default public

group public v1 public

group public v2c public

group public usm public 

access

disk /    ### 디스크 용량에 대한 OID를 제공한다.(.1.3.6.1.4.1.2021.9)


※ 위에 정의된 OID는 mib 관련 사이트(http://www.simpleweb.org/) 검사하여 확인하였다.


7. Access Control

RFC 2275에 정의된 VACM(View-Based Access Control Model)을 지원한다.

com2sec, group, access, view, (rocommunity, rwcommunity, rouser, rwuser)등의 지시어를 사용할 수 있다.


com2sec 은 소스/커뮤니티 쌍으로 이루어진 보안 이름이다.


group 지시자는 보안-모델/보안이름으로 구성된다. MODEL은 v1, v2c, usrm중에 하나다.

- group NAME MODEL SECURITY

 

특정 mib이 default 디렉토리에 존재함에도 snmpwalk를 통한 쿼리가 실패하는 경우가 있다. 이경우는 snmpd.conf의 view 권한을 추가해주어야 한다.

추가하고자 하는 권한을 snmpd.conf에 추가한다. 아래와 같이 .1을 추가한 경우 모든 mib의 정보를 snmp 쿼리로 확인할수 있다.

 

view systemview included .1


8. snmpd 실행 옵션

snmpd 에이전트 구동에 관련된 내용을 기술한다.


다음과 같은 수행 옵션을 통해 Log(디버그)를 상세히 확인할 수 있다.

-D : 상세디버그를 출력할 수 있다.

-d : 헥사값으로 snmp 패킷을 덤프해 볼 수 있다.

-a : request에 대한 디버그를 출력한다.(실제 한줄만 출력됨. 그다지 의미가 있는 디버그는 아닐듯..)

-V : request에 대한 패킷덤프 내용을 출력한다.

-Lf : 디버그를 남길 경로와 파일명을 지정할 수 있다.

※ 허나 mib에 관련된 에러 메세지는 발생하지 않는다. 이부분은 좀더 확인이 필요할듯...


9. snmp utils

 commands name

 description 

 snmptranslate

 MIB 트리에 관해 learning 수행 

 snmpget

 호스트로부터 data를 가져온다.

 snmpwalk

 한번에 많은 데이터를 가져온다. 

 snmpset

 write 명령을 수행한다. 

 snmptrap trap(event)를 보내고 받는다. 


참고사이트

http://prettymonkey02.tistory.com/380

http://ecos.sourceware.org/docs-3.0/ref/net-snmp-agent-manpages-snmpd.conf.html

http://net-snmp.sourceforge.net/docs/man/snmpd.examples.html

http://blog.naver.com/PostView.nhn?blogId=sjyoon111&logNo=120157885008

http://docstore.mik.ua/orelly/networking_2ndEd/snmp/appf_02.htm

http://net-snmp.sourceforge.net/


※ 영문자료 오역이나 잘못된 내용이 존재할수 있습니다. 수정이 필요할 경우 문제제기를 해주시면 그에 대한 부분을 재작성토록 하겠습니다. 또한 출처가 불명확해 밝히지 못한 경우도 있을수 있으므로 발견시 댓글 남겨주시면 수정토록 하겠습니다.

'Server > EtcServer' 카테고리의 다른 글

Graylog  (0) 2017.10.12
jenkins with scp plugin  (0) 2013.01.30
wiki engine  (0) 2013.01.04
install vmplayer in ubuntu  (0) 2012.08.06
OpenLDAP  (0) 2012.05.08
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함