본문 바로가기

IPAM, IP 주소 관리 자동화 스크립트 개발 사례

알찬IT 2025. 4. 16.
반응형

현재 필자가 근무중인 회사에서는 IP관리를 스크립트를 개발하여 IP가 추가되거나 삭제 혹은 사용하지 않는 IP를 자동 관리하고 있습니다. 다양한 공개된 오픈소스를 활용하여 IP를 자동화 관리하는 방법을 소개해드리도록 하겠습니다. 인프라 관리 측면에서 실무에 조금이라도 도움이 되었으면 합니다.

 

IP 관리를 자동화하기 위한 주요 팁

 

IPAM-IP-관리-자동화
IPAM IP 관리 자동화 개발 사례

 

현재 저희 회사는 112개의 VLAN, 각 VLAN이 c 클래스로 운영되는 구조 하에 총 24,892개의 IP를 할당받아 관리하고 있습니다. 이러한 환경에서 사용 중인 IP의 갯수는 현재 10,385개이며, 이는 계속해서 증가하는 추세를 보이고 있습니다.

 

IPAM(IP 주소 관리 툴)에 대해서는 여러 가지 오픈소스 솔루션이 존재하지만, 대부분 비슷한 기능을 가지고 있어 큰 차이점을 발견하기 어렵습니다. 개인적인 경험에서는 이들 솔루션이 모두 만족스럽지 않아서, 결국 필요에 맞추어 아래 방법으로 직접 개발하여 사용하는 중입니다.

 

IP 관리 자동화의 주요 핵심 포인트

 

매일 특정 포트 및 ICMP를 체크하기 위해 98개 IP 대역을 대상으로 masscan을 실행하고, 활성화된 IP와 비활성화된 IP를 파싱하여 파일로 저장합니다. 이 파일은 filebeat로 수집되며, logstash를 통해 grok으로 파싱된 후, Elasticsearch에 저장됩니다. 마지막으로, Grafana 대시보드를 통해 시각화됩니다.

 

- masscan인 nmap 보다 스캔속도나 처리 속도가 빠름 (옵션에 따라 차이는 있음)

 

예: 모든 VLAN에 대한 특정 포트 스캔

 

for i in ${VLAN}

  do

     SUBNET=`echo $i | awk -F " " '{print $1}'`

   /usr/bin/masscan -p8080,3389,8234,22,80,25,443 ${SUBNET} --rate 10000 >  $DIR/temp.txt    

   (port 는 임의로 예를 든 것임)

 
    grep "open" $DIR/temp.txt | awk -F " " '{print $2,$6}' | /usr/bin/sort -u >> $DIR/log/${DAY}-masscan.log

 
 done

 

 

아래와 같은 grok 패턴을 만들어 데이터를 매칭하고, Elastic에 넣기 전에 파싱합니다.

 

`cat sample.list` (패턴을 정의한 파일 검사)

 

IPAM (%{WORD:HOSTNAME} %{IP:IPADDRESS} %{IP:SUBNET} %{WORD:STATUS})

 

 

logstash.conf

 

filter {
 
 if [type] == "ipam" {
   grok {
            patterns_dir => "/data/pattern/ipam"
            match => [ "message", "%{IPAM}" ]
    }
  }
 
}

 

IP 리스트를 자동으로 파싱하는 방법에 대한 팁

 

  • SampleFile01  :  salt-run manage.alived show_ipv4=True --out=txt  --out-file=ipaddress.txt   +   masscan 활용한 script 결과물 file
  • SampleFile02 :   112개 c클래스 대역별 IP 1~254 까지의 파일 

 

위에 언급된 두 개의 파일을 비교할 때, 각 파일의 두 번째 필드를 기준으로 공백으로 구분된 데이터를 분석해야 합니다. 비교 과정에서는 중복되는 항목을 제거하고, 각 파일에서 고유한 데이터를 추출해야 합니다. 이 작업을 수행하려면 각 파일의 내용을 순차적으로 읽어 들인 후, 두 번째 필드를 기준으로 데이터를 추출합니다.

 

그러고 나면 추출된 필드 값을 기존의 데이터 구조에 저장하여 중복 여부를 확인할 수 있습니다. 최종적으로 중복이 아닌 고유한 값을 식별하여 새로운 목록으로 정리한 결과를 출력할 수 있습니다. 이 과정은 두 파일의 데이터를 합병하면서 동시에 중복성을 제거하며 고유성만 발현시키는 효과가 있게 됩니다.

 

awk 'NR==FNR{c[$2]++;next};c[$2] == 0' SampleFile01 SampleFile02

 

예를들어 약 10,000줄 이상의 데이터를 비교한 결과를 도출하는 데 1초도 걸리지 않습니다.

 

실제 비교 결과는 다음과 같이 출력 됩니다.

 

  • SampleFile01 : none 119.40.30.88 119.40.30.0 OFF
  • SampleFile02 : ZONEA001-HV-VM 10.20.10.8 10.20.10.0 ON

 

IP-관리-화면
IP 관리 화면

 

이와 같이 slatstack 와 bash script, Grafana 등 오픈소스를 이용하여 지속적으로 신경써야 하는 IP 관리에 대한 노동력을 대폭 효율적으로 줄일수 있으며, 자동화를 통해 서버나 인프라 장비의 노드 수(IP 수)가 얼마나 증가되고 감소되었는지 한눈에 쉽게 확인도 가능합니다.

 

반응형

댓글