컴퓨터를 배우자!

유용한 네트워크 명령어와 툴

이경희330 2006. 3. 19. 00:24
중소기업의 전산 관리자는 프로그램 개발, 서버, 네트워크, 보안 등의 멀티플레이 업무를 맡고 있다. 이렇게 다양한 업무를 맡고 있다 보니 전문 지식의 부족함에서 비롯되는 관리상의 어려움이 많다. 하지만 효율적으로 네트워크 구성이 됐다면 전산 시스템 통합 관리나 서버 운영에 많은 도움이 된다.

앞으로 3회에 걸쳐서 VPN 장비 활용과 네트워크 명령어의 활용, 자신의 회사에 맞는 네트워크 구성에 대해 알아보면서 시스템 관리의 고민을 해소하기 바란다. 이번 글에서는 시스템 관리자가 꼭 알아야 할 네트워크 테크닉에 대해 알아보자.

유용한 네트워크 명령어와 툴

ping
상대방과 통신을 하는 장비인 라우터, 스위치, 서버, 컴퓨터에는 외부통신용 NIC 카드가 내장되어 있으며, IP 주소를 할당해서 사용하고 있다. ping(packet internet groper)은 상대방 컴퓨터, 네트워크 장비, 서버 장비까지 통신이 잘 되는지를 확인하는 명령이다.

예를 들면 팀장 컴퓨터의 IP 주소를 알아 두었다가 퇴근했는지 알고 싶다면 ping 명령을 이용해 확인할 수 있다. 팀장이 컴퓨터를 끄고 퇴근했다면 ‘Request timed out’이라고 나오며, 아직 퇴근하지 않고 인터넷을 사용 중이라면 ‘Reply from 203.10.5.10: bytes=32time<10ms TTL=128’이라고 나올 것이다.

그럼 ‘Request timed out’이라고 나오면 어떤 원인들이 있을까? 그 원인을 알아보면 케이블 연결이 잘못되어 있거나, 상대방 컴퓨터 IP 주소가 잘못되었거나, 상대방 컴퓨터가 꺼져 있거나, 상대방 컴퓨터가 인터넷 연결이 안 되어 있는 경우이다.

C:Windows> ping 203.10.5.10
Request timed out.                                         => 팀장 컴퓨터가 응답이 없음
Reply from 203.10.5.10: bytes=32 time<10ms TTL=128   => 팀장 컴퓨터가 응답이 있음

ping 명령의 TTL(Time To Live) 값은 어떤 OS를 사용하는지도 알 수가 있다. 유닉스 계열은 255, 윈도우 계열은 128부터 TTL 값이 라우터를 지날 때마다 1씩 감소하므로 TTL이 200번대이면 유닉스이고, TTL이 100번대이면 윈도우 계열이라고 생각하면 된다. <화면 1>을 보면 야후는 TTL이 200번대로 유닉스 계열을 사용 중이고 msshop.co.kr 사이트는 TTL이 100번대로 윈도우 계열을 사용하고 있다고 추측할 수 있다.

<화면 1> TTL을 통해 운영체제를 알 수 있는 사례

<표 1> ping 명령 옵션 설명

tracert
인터넷은 접속하려는 상대편 컴퓨터(서버)와 직접적으로 연결되어 있지 않고 중간 중간에 네트워크 장비를 거쳐 접속이 된다. tracert(trace route)는 최종 목적지 컴퓨터(서버)까지 중간에 거치는 여러 개의 라우터에 대한 경로 및 응답속도를 표시해 준다.

갑자기 특정 사이트나 서버와 접속이 늦어진 경우에 tracert 명령으로 내부 네트워크가 느린지, 회선 구간이 느린지, 사이트 서버에서 느린지를 확인해 볼 수 있다. 또한 전용회선 관리나 장애 복구시에도 많이 사용한다. <화면 2>를 보면 외부망의 특정 구간에서 속도가 늦다는 것을 알 수 있다.

<화면 2> 외부망의 특정 구간에서 속도가 늦어지는 모습

<표 2> tracert 명령 옵션 설명

nbtstat
회사 내에 많은 컴퓨터가 있다 보면 IP 주소 충돌 경고 메시지가 발생한다. 보통 DHCP를 이용해 IP를 관리하는 곳에서는 잘 발생하지 않지만 고정으로 IP 주소를 설정하는 네트워크 환경에서 하나의 IP 주소를 두 대의 컴퓨터에 입력하게 되면 충돌 메시지가 발생을 하며 네트워크 통신이 안 된다.

이럴 때 충돌되는 컴퓨터를 찾을 때 유용한 명령이 nbtstat(NetBIOS over TCP/IP state) 명령어로 NetBIOS가 사용하는 통계 및 이름 정보를 표시한다. IP 주소 충돌 메시지가 발생하면 컴퓨터를 끄고 다른 컴퓨터에서 nbtstat 명령으로 중복된 IP 주소를 입력해 컴퓨터 이름을 확인한 후에 충돌되는 컴퓨터의 IP 주소를 바꿔주면 된다. <화면 3>은 충돌되는 IP 사용자 ‘SUMA-COM2’를 찾은 후 IP 주소를 변경토록 하면 된다.

<화면 3> 충돌되는 IP 사용자

<표 3> nbtstat 명령 옵션 설명

netstat
웹으로 프로그램을 개발할 때 외부에서 통신이 안 되면 사용 포트를 확인할 때가 있다. 또한 내 컴퓨터에 트로이 목마가 설치되어 정보를 빼낼 수가 있는지를 확인하는 유용한 명령이 ‘Netstat ?an | more(Netstat - network stats)’로, 현재 서비스를 대기하고 있는 ‘LISTENING’된 정보들과 TCP 통신을 하는 서비스의 연결상태를 도메인 정보 없이 보여준다. ESTABLISHED는 다른 컴퓨터와 서로 연결된 상태이고, CLOSED는 연결이 완전히 종료된 것을 나타내며 TIME-WAIT은 연결은 종료되었지만 당분간 소켓을 열어놓은 상태이다

<화면 4> netstat -an | more 명령

<화면 5>와 같이 내 컴퓨터의 사용 포트를 확인해 불필요한 포트를 사용하고 있다면 외부 해킹이나 트로이 목마로 의심할 필요가 있다. 윈도우 NetBIOS는 TCP 포트 139를 통해 다양한 정보를 넘겨주는 API를 갖고 있는데, 보안에 취약해 인증되지 않은 사용자가 아이디/패스워드 인증 없이 원격지 서버의 정보를 가져갈 수 있다.

<화면 5> TCP 445번 포트로 접속한 상태

또한 웜 바이러스, 케이블 불량, 스위치 허브 포트 불량으로 인해 데이터 송수신 속도가 늦거나 할 때 ‘Netstat ?e 10’ 명령으로 10초의 주기로 이더넷 인터페이스의 데이터 송수신을 계속 보여주게 함으로써 웜 바이러스로 트래픽이 증가하는지 확인할 수가 있다.

<화면 6> netstat -e 명령

<표 4> netstat 명령 옵션 설명

route
방화벽 장비나 서버 장비에 NIC 카드를 여러 개 설치할 경우에는 route 명령을 이용해 패킷이 전달되는 경로를 확인하거나 지정할 수 있다. 192.168.1.0 네트워크의 트래픽을 192.168.0.10으로 전달하고자 한다면 ‘route add’ 명령을 사용하며, ‘route print’ 명령으로 라우팅 테이블을 확인한다.

c:> route add  192.168.1.0  mask 255.255.255.0  192.168.0.10
c:> route print

 
(Usage : ROUTE [add | delete | print] [MASK netmask] [gateway] [METRIC metric])
<표 5> route 명령 옵션 설명

UTP 테스터
네트워크가 안될 때 물리적인 케이블을 먼저 점검해봐야 한다. UTP 케이블은 사무실 의자 등에 눌리면서 UTP 케이블 내부선이 끊어지거나, RJ-45 잭 부분의 접촉 불량이 종종 발생하지만 육안으로는 확인하기가 어렵다. 이럴 때는 UTP 테스터기를 이용해 RJ-45잭을 연결한 후에 4쌍의 케이블의 연결에 결함이 잘 해결되었는지, 선이 서로 바뀌지 않았는지를 LED 램프로 확인할 수 있다.

UTP 케이블의 연결 선 구조를 보면 스트레이트(Straight)와 크로스(Cross)로 나뉠 수 있다. 스트레이트 케이블은 스위치 장비와 컴퓨터에 연결시에 사용하며, 테스트 방법은 스트레이트 케이블 양쪽 RJ-45을 UTP 테스터 마스터(Master)와 슬레이브(Slave)에 연결한 후 각 표시 램프가 1, 2, 3, 4번순으로 점등되면 정상이다.

크로스 케이블은 컴퓨터와 컴퓨터를 연결하거나 스위치 장비와 스위치 장비를 연결할 때 사용하며 Master와 Slave의 각 표시 램프가 1, 2, 3, 4순으로 점등되고 Slave의 표시램프가 1, 3, 2, 4순으로 점등되면 정상이다. Master LED 램프가 녹색이고 slave LED 램프가 적색이면 케이블 연결이 잘못된 것이고, Master와 Slave에 불이 모두 안 들어오면 케이블 내부의 단선이다

VNC
프로그램이나 네트워크에 이상이 생겼을 때 원거리를 이동해서 조치할 시간이 없거나, 전화 통화로 조치를 하려고 해도 상대방이 컴퓨터 초보로 조치에 어려움이 있다면 어떻게 해야 할까? 이때는 리모트로 원격으로 상대방 컴퓨터나 서버 혹은 네트워크 장비에 접속해 네트워크 환경설정이나 개발된 프로그램을 다시 설치할 때 유용한 것이 VNC(Virtual Netwark Computing) 유틸리티이다.

<그림 1> 원격으로 장애를 조치하는 경우

VNC 프로그램은 www.realvnc.com 사이트에 접속해 무료로 다운받을 수 있으며 서버용과 클라이언트용 두 개의 프로그램이 필요하다. 원격 제어할 컴퓨터(내 컴퓨터)에는 VNC 뷰 프로그램을 설치하고, 원격 제어를 받을 컴퓨터(상대방 컴퓨터)에는 VNC 서버 프로그램을 설치하면 된다.

접속 방법은 원격 제어를 받을 컴퓨터(상대방 컴퓨터)에 VNC 서버를 실행한 후에 VNC 접속 IP 주소를 확인한다. 그다음 원격 제어를 할 컴퓨터(내 컴퓨터)에 VNC 뷰를 설치한 후에 상대방 VNC 접속 IP 주소를 입력하면 된다. 이때부터는 내 컴퓨터에서 상대방 컴퓨터를 원격으로 조정할 수 있어서 개발된 프로그램을 다시 설치하거나 환경을 확인할 수가 있다.

<화면 7> VNC 서버 접속 화면(좌)와 VNC 뷰 접속 화면(우)

만약 상대방 컴퓨터가 IP 공유기나 방화벽 장비로 인해서 VNC 접속이 안될 시는 VNC에서 사용하는 포트인 5800, 5900번을 IP 공유기나 방화벽에서 열어야 접속이 된다. 방화벽에서는 보안 룰에 VNC 사용 포트를 오픈 등록해야 접속이 가능하고, IP 공유기에서는 포트 포워딩(혹은 버추얼 서버) 기능을 이용해 VNC에서 사용하는 5800포트에 대해서 원격 제어할 컴퓨터(내 컴퓨터)로 포워딩하게 설정하면 된다.

<화면 8> IP 공유기에서 VNC 사용 포트 포워딩 설정 화면

 
VNC 원격 제어를 통한 상대방 컴퓨터의 바탕화면 모습
<화면 9> VNC 접속 후의 원격 제어 화면

이더리얼
회사 내의 유해 트래픽(웜 바이러스, 불법 P2P 자료)로 인해서 속도가 늦어진다면 어떤 P2P에 누가 접속을 하는지 알아야 차단할 수가 있다. 또한 특정 서버의 애플리케이션을 사용하다가 사용자가 접속이 느리다고 장애신고가 들어오면 프로그램 개발자와 서버 관리자와 네트워크 관리자가 모여서 어디에서 문제가 있는지 파악을 해보지만 마땅한 조치를 못하는 수가 많다.

나중에는 제조업체에 연락하고 많은 시간을 소모해 찾아보면 네트워크에서 패킷 손실이 발생하거나, SQL 쿼리가 잘못되거나, 서버의 부하 증가란 사실을 알 수 있다. 이런 원인을 쉽게 찾을 수 있는 유용한 툴이 패킷분석기로 ‘서버에서 패킷을 늦게 보내는지’ 아니면 ‘서버에서 패킷을 보냈는데 회선불량으로 패킷을 몇 번씩 재전송하면서 늦어지는 것인지’ 혹은 ‘클라이언트 PC에서 NIC카드 불량으로 응답을 못해서 늦는 것인지’ 등의 원인파악을 그래픽 환경에서 보여준다. 이더리얼(Ethereal)은 무료이고 설치가 쉬운 장점이 있다.

<그림 2> 패킷분석기 이더리얼 개념

설치를 위해서는 WinPcap과 이더리얼 두 개의 프로그램이 필요하며, 먼저 winpcap.polito.it에 가서 WinPcap를 다운받은 후 설치를 한다. 그 후 ethereal.com에서 이더리얼을 다운받은 후 설치하면 된다. 설치가 쉬우나 주의할 점은 WinPcap를 먼저 설치한 후에 이더리얼을 설치해야 한다.

<화면 10> 이더리얼과 WinPcap 다운받는 모습

이더리얼의 설정에서 ‘CAPTURE’ 옵션이 가장 중요하다. 먼저 NIC 카드의 종류를 선택한다. ‘Capture Filter’는 캡처된 파일을 별도의 파일로 저장할 때 사용하며, ‘Name Resolution’은 패킷을 분석할 때 하드웨어 어드레스, IP 주소, 포트 번호에 대해서 이름 해석을 할지를 선택한다. ‘Display Option’은 캡처된 파일을 실시간으로 보여줄지 아니면 캡처가 끝난 다음 보여줄지를 선택한다.

<화면 11> 이더리얼의 설정

이더리얼의 주 화면을 보면 3개의 구분 화면으로 나뉜다. 상위 화면은 캡처된 패킷들이 보이고, 중간 화면은 상위 화면에서 선택된 패킷 내용에 대해서 사용자가 알아볼 수 있도록 계층 구조로 표현했고, 하단 화면은 패킷의 실제 데이터 내용을 16진수로 표시한다. 웹 서버 접속시의 ID 및 패스워드 등 패킷 정보가 보여서 해킹도 가능하니 나쁜 목적으로 사용하기 말기를 바란다.

<화면 12> 이더리얼로 캡처된 결과

웜 바이러스, 불법 P2P 자료 업 다운 등으로 특정 컴퓨터에서 많은 트래픽을 발생할 때 ‘Endpoint’ 옵션을 이용하면 어떤 IP 주소에서 송신 및 수신 트래픽량을 표시하므로 쉽게 찾을 수 있다(<화면 13> 참조).

<화면 13> ‘Endpoint’ 옵션을 통해 트래픽량

MRTG
인터넷 속도가 늦어서 회선 증설이 필요할 때 어느 시간대에 어느 정도나 사용하고 있는지에 대한 트래픽 현황과 그래프가 나오면 제안서를 작성할 때도 좋고 설득하기도 쉬울 것이다. 이때 필요한 툴이 MRTG(Mutli Router Traffic Grapher)이다. MRTG는 펄(Perl)과 C 언어로 구성되어 있고, 유닉스와 윈도우에서 동작한다. 트래픽 체크를 일, 주, 월, 년간으로 그래픽으로 보여주므로 시간대별 트래픽 분석을 할 수 있는 좋은 분석 도구이다. 네트워크 장비 인터페이스별 트래픽 분석, CPU나 메모리 사용률 분석 등에 사용되고 있다.

<화면 14> 일자별 트래픽 분석

MRTG 구성과 동작 원리를 보면 모니터링 대상인 장비에 에이전트(Agent)가 구동되어야 하며, MRTG가 설치된 서버에서는 MRTG 프로그램과 웹 서버를 설정해 에이전트에서 오는 로그파일을 수치화하고 HTML 형태로 만들게 된다. 환경 설정에 따라 몇 분 주기로 정보를 주고받아 일주일, 한달치의 트래픽이나 CPU 사용율이 그래프 형식으로 만들어지게 된다.

MRTG는 펄과 C를 기본으로 동작하므로 리눅스는 필요한 perl이 설치가 되어 있으나, 윈도우에서는 펄 설치가 안 된 경우가 많다. 그래서 윈도우 사용자 설치방법은
www.ActiveState.com에서 active perl을 다운받아 설치한 후에 www.mrtg.org에서 MRTG를 설치해야 한다(MRTG의 자세한 활용은 www.mrtg.co.kr을 참조하기 바란다).

MRTG 환경 설정을 위해서는 cfgmaker, mrtg, indexmaker의 3개의 실행파일이 필요하다. cfgmaker는 mrtg가 구동되기 위한 config 파일을 만든다. MRTG는 5분마다 config 파일을 참조해 필요한 SNMP을 요청해 그래프나 로그를 만듭니다. 5분마다 MRTG가 실행되면서 트래픽을 그리고 싶다면 MRTG.CFG 파일에 ‘RunAsDaemon: yes’  ‘Interval: 5M’을 입력하면 된다.

<화면 15> MRTG 환경

네트워크에 대한 관심이 해법
지금까지 시스템 관리자나 프로그래머가 알아야 할 네트워크 명령과 툴의 활용에 대해서 알아봤다. 서버나 네트워크에 대한 지식이 없이 프로그램 개발을 하게 되면 프로그램 생명주기가 짧을 수밖에 없다. 이 글로 자신이 네트워크에 대해 자신이 어느 정도 관심을 기울이고 있는가를 생각해 봤기를 기대한다.


라우터 장비에서 유해 트래픽을 어떻게 예방할까?
요즘 회사마다 웜 바이러스가 유포되면서 순간적인 폭주 트래픽이 발생하고, 사용자의 P2P 다운 등으로 네트워크 속도가 느려지는 등 서버나 네트워크 관리자의 수난기라고 할 수 있다. 이런 유해 트래픽에 대해서 라우터 장비에서 어떻게 예방을 하는지 알아보도록 하겠다.

사용 중에 네트워크 속도가 늦어지면 먼저 라우터의 CPU 사용율을 확인한다. <화면 1>의 사례는 시스코 라우터에서는 ‘sh process cpu’ 명령으로 확인을 한 결과이다. CPU 수치에서 앞의 10%는 메인 CPU의 사용율이고 뒤의 4%는 캐시 사용률을 표시한다. DOS 공격이나 웜 바이러스 활동시에는 회선 트래픽이 폭주해 멈추거나 라우터 CPU율이 90% 이상으로 올라가서 사용자가 사용할 수가 없다.

<화면 1> sh process cpu 명령 화면

라우터 CPU가 평상시보다 대폭 증가한 경우에는 세부적으로 프로토콜별 사용량을 확인해야 한다. 특정 서비스(포트)가 사용량이 비정상적으로 증가하면 웜 바이러스로 의심하고 aceess-list 명령으로 비정상적으로 유포되는 포트를 차단한다.

<화면 2> sh interface 명령 화면

access-list로 웜 바이러스가 유포되는 서비스(포트)를 막은 후 원인이 되는 해당 컴퓨터를 찾아야 한다. 이더리얼과 netstat 명령을 알고 있으면 해당 컴퓨터를 찾는데 많은 도움이 된다.