phpIPAM 소개

1. phpIPAM 개요

1. phpIPAM 정의

  • phpIPAM은 오픈소스 기반의 웹 IP 주소 관리(IP Address Management, IPAM) 애플리케이션
  • 네트워크 주소 공간을 관리하기 위해 설계되었으며, IP 주소의 할당, 추적, 회수 등 전체 라이프사이클을 관리하는 중앙 집중식 플랫폼을 제공
  • IPv4 및 IPv6 주소 체계를 모두 지원하며, 직관적인 웹 인터페이스를 통해 복잡한 네트워크 자원(IP 주소, 서브넷, VLAN 등)을 시각적이고 체계적으로 관리 가능
  • PHP 언어로 개발되었고, 백엔드 데이터베이스로 MySQL 또는 MariaDB를 사용하며, 일반적인 LAMP/LEMP 스택 환경에서 구동


2. 개발 배경 및 필요성

  • 개발 배경
    • 전통적으로 IP 주소 관리를 위해 공유 스프레드시트(Spreadsheet)나 텍스트 문서를 활용
    • 초기에는 스프레드시트 관리가 간단하지만, 네트워크 규모가 확장됨에 따라 다양한 문제점이 발생
  • 필요성
    • 데이터 무결성 문제
      • 여러 관리자가 동시에 문서를 수정할 경우 데이터 충돌이 발생하거나, 실수로 중요한 정보를 삭제 또는 잘못 기입할 위험 존재
    • 협업의 어려움
      • 누가, 언제, 어떤 IP를 할당했는지에 대한 변경 이력 추적의 어려움
      • 특정 IP의 담당자나 할당 목적을 파악하는 데 불필요한 시간 소요
    • 자동화의 부재
      • 서버 프로비저닝, 클라우드 환경 구성 등 최신 IT 인프라 자동화 워크플로우와 연동이 불가함.
      • 모든 IP 할당 과정이 수작업으로 이루어져야 하므로 효율성이 크게 저하
    • 가시성 부족
      • 전체 IP 주소 공간의 사용 현황, 남은 IP 개수, 서브넷의 파편화 상태 등을 한눈에 파악하기 어려움.
      • 장기적인 네트워크 확장 계획을 수립하는 데 걸림돌


3. phpIPAM의 주요 기능

  • 중앙 집중화 (Centralization)

    • 파편화된 IP 관리 정보를 단일 데이터베이스로 통합해 모든 네트워크 관리자가 일관된 최신 정보에 접근 가능

    • 정보의 사일로(Silo)화를 방지하고 데이터 신뢰성을 보장

  • 개방성 및 유연성 (Openness & Flexibility)

    • 오픈소스 프로젝트로서 누구나 소스 코드를 확인하고 필요에 따라 수정하거나 기능 확장 가능

    • 사용자 정의 필드, 유연한 섹션/서브넷 구조 등을 지원해 다양한 조직의 독특한 관리 요구사항 수용 가능

  • 자동화 지원 (Automation Ready)

    • 강력한 RESTful API를 제공하여 단순 반복적인 IP 관리 작업을 자동화할 수 있도록 설계

  • 사용자 친화성 (User-Friendliness)

    • 네트워크 개념을 잘 모르는 사용자도 사용할 수 있도록 시각적이고 직관적인 웹 인터페이스를 제공하는 데 중점


4. 주요 사용자 및 대상 환경

  • 소규모 및 중소기업 (SMB)

    • 수십, 수백 개의 IP를 관리하는 환경에서 엑셀을 대체해 체계적인 IP 관리 체계를 저비용으로 구축

  • 대규모 엔터프라이즈

    • 수천, 수만 개의 IP 주소를 사용하는 복잡한 기업 네트워크 환경에서 부서별, 용도별로 IP 공간을 분리하고 권한을 위임하여 효율적으로 관리

    • Active Directory 등 기존 시스템과의 연동을 통해 통합적인 관리가 가능

  • 인터넷 서비스 제공자 (ISP) 및 데이터 센터

    • 고객사별로 IP 블록을 할당하고 VLAN, VRF와 연계하여 관리해야 하는 복잡한 요구사항에 대응 가능

  • 교육 및 연구 기관

    • 다양한 연구 프로젝트와 학내망의 IP 자원을 효율적으로 관리하고, IP 요청 및 승인 절차를 간소화하는 데 활용 가능

2. 설치 및 시스템 아키텍처

1. 시스템 요구사항

  • 운영체제 (Operating System)

    • Linux (Debian, Ubuntu, CentOS 등)

    • Windows 등

  • 웹 서버 (Web Server)

    • Apache2

    • Nginx

  • 데이터베이스 (Database)

    • MySQL 5.6 이상

    • MariaDB 10.0 이상.

  • PHP: PHP 7.2 이상 버전이 필요하며, 아래의 필수 확장 모듈이 설치 및 활성화되어야 한다.

    • php-mysql 또는 php-mysqlnd: MySQL 데이터베이스 연결

    • php-curl: API 통신 및 외부 연동

    • php-gd: 그래픽 및 차트 생성

    • php-ldap: LDAP/AD 인증 연동

    • php-xml, php-sockets, php-mbstring


2. 기술 아키텍처 상세

phpIPAM은 전형적인 3계층 웹 아키텍처(3-Tier Architecture)를 따른다.

  • 2.1. 프레젠테이션 계층 (Presentation Layer - Frontend)

    • 사용자가 직접 상호작용하는 웹 인터페이스 부분

    • HTML5, CSS3, JavaScript로 구성되며, 특히 jQuery와 Bootstrap 프레임워크를 기반으로 하여 반응형 웹 디자인 구현

    • 데스크톱, 태블릿, 모바일 등 다양한 디바이스에서 일관된 사용자 경험 제공

    • 서브넷 사용 현황 그래프, IP 목록 등 동적인 데이터 표시는 AJAX 호출을 통해 백엔드와 비동기적으로 통신하여 처리

  • 2.2. 애플리케이션 계층 (Application Layer - Backend)

    • 시스템의 핵심 비즈니스 로직을 처리하는 부분

    • PHP로 작성되었으며, 사용자의 요청을 받아 데이터를 처리하고 데이터베이스와 상호작용

    • MVC(Model-View-Controller) 패턴과 유사한 구조로 코드가 구성되어 있어 기능별 모듈화로 존재

    • IP 주소 계산, 서브넷 분할, 사용자 인증, API 요청 처리 등의 로직이 수행

    • config.php 파일을 통해 데이터베이스 연결 정보, 인증 방식 등 시스템의 주요 설정 관리

  • 2.3. 데이터 계층 (Data Layer - Database)

    • 모든 영구 데이터를 저장하고 관리하는 부분

    • 데이터의 일관성과 무결성을 보장하기 위해 정규화된 스키마로 설계됨

    • 주요 테이블 스키마 예시

      • ipaddresses: 개별 IP 주소 정보, 상태, 호스트명, 설명 등을 저장

      • subnets: 서브넷 정보(네트워크 주소, CIDR), 설명, VLAN ID 등을 저장. masterSubnetId 필드를 통해 계층 구조를 구현

      • sections: 서브넷들을 그룹화하는 최상위 논리 단위

      • vlans: VLAN 번호, 이름, 설명 등 VLAN 정보를 저장

      • devices: 스위치, 라우터, 서버 등 네트워크 장비 정보를 저장

      • users, groups: 사용자 및 그룹, 권한 정보를 관리


3. 설치 절차 개요

phpIPAM 설치는 크게 자동 설치와 수동 설치로 나뉜다.

  • 3.1. 자동 설치 (권장)

    1. git을 사용하여 공식 GitHub 저장소에서 최신 소스 코드를 복제(Clone)

      git clone https://github.com/phpipam/phpipam.git /var/www/phpipam
      
      

    2. 복제된 디렉토리로 이동해 서브모듈 초기화

      cd /var/www/phpipam
      git submodule update --init --recursive
       
      웹 브라우저를 통해 http://<서버주소>/phpipam에 접속하면 자동 설치 마법사가 실행
    3. 설치 마법사의 안내에 따라 데이터베이스 종류 선택, 연결 정보(사용자, 비밀번호, DB 이름) 입력 등을 진행하면 자동으로 필요한 테이블을 생성하고 기본 설정 완료


  • 3.2. 수동 설치

    1. 웹 서버(Apache/Nginx)에 phpIPAM을 위한 가상 호스트(Virtual Host)를 설정하고, DocumentRoot를 phpIPAM 소스코드 디렉토리로 지정 (URL 재작성이 가능하도록 설정 추가)

    2. MySQL/MariaDB에 접속하여 phpIPAM이 사용할 데이터베이스와 전용 사용자를 생성하고, 해당 데이터베이스에 대한 모든 권한 부여

    3. 소스코드 내의 config.dist.php 파일을 config.php로 복사

    4. config.php 파일을 열어 define('DB_USER', '...');, define('DB_PASS', '...'); 등 데이터베이스 연결 정보 수동 입력

    5. 제공되는 SCHEMA.sql 파일을 사용해 데이터베이스에 테이블 구조 임포트

    6. 웹 브라우저로 접속하여 관리자 계정 설정 및 로그인 확인

3. 핵심 기능 정리

1. 섹션 및 서브넷 관리

  • IP 주소 공간을 논리적이고 계층적인 구조로 관리
  • 1.1. 계층적 구조

    • 섹션 (Sections)

      • 가장 상위의 논리적 분류 단위

      • 각 섹션은 독립적인 권한 설정을 가질 수 있음

      • 예시) 본사 데이터센터, 지사 네트워크, 고객사 네트워크, IPv6 주소공간 등과 같이 물리적 위치, 관리 주체, IP 버전 등 큰 기준으로 네트워크 분리 가능
    • 서브넷 (Subnets)

      • 각 섹션 아래에 실제 IP 서브넷 생성

      • 서브넷은 다른 서브넷 안에 중첩(Nesting)이 가능해 더 상세한 계층 구조로 만들수 있음.

      • 예시) 10.10.0.0/16 서브넷 아래에 10.10.1.0/24(서버망), 10.10.2.0/24(업무망) 등을 자식 서브넷으로 구성 가능

  • 1.2. 서브넷 분할 및 병합

    • 분할 (Splitting)

      • 관리자는 특정 서브넷을 더 작은 단위의 여러 서브넷으로 자동 분할 가능

      • 예시) /24 서브넷을 4개의 /26 서브넷으로 나누는 작업을 클릭 몇 번으로 수행

    • 병합 (Merging/Supernetting)

      • 분할된 여러 개의 연속적인 서브넷을 다시 하나의 큰 상위 서브넷(Supernet)으로 통합하는 기능 지원

  • 1.3. 시각적 대시보드

    • 각 서브넷의 상세 페이지에서는 해당 서브넷의 사용 현황을 시각적인 막대그래프로 보여줌

    • 전체 IP 중 사용 중(Used), 예약됨(Reserved), 미사용(Free) 상태의 비율 파악 가능

    • 해당 서브넷에 속한 IP 주소 목록이 표 형태로 제공되며, 각 IP의 상태(Online/Offline), DNS 호스트명, MAC 주소 등의 정보 확인 가능


2. IP 주소 관리

  • 2.1. IP 상태 관리

    • Online/Offline

      • 자동 스캔 기능에 의해 결정되는 실제 네트워크상의 활성 상태를 나타냄

      • 마지막 Ping 응답 시간 기록

    • Used

      • 관리자가 수동으로 사용 중으로 설정한 상태

    • Reserved

      • 특정 목적을 위해 IP를 예약해둔 상태로, 다른 관리자가 실수로 할당하는 것을 방지

    • DHCP

      • DHCP 서버에 의해 동적으로 할당되는 IP 대역임을 표시

  • 2.2. 사용자 정의 필드 (Custom Fields)

    • 기본적으로 제공되는 필드(호스트명, 설명, MAC 주소 등) 외에 조직의 관리 정책에 필요한 추가적인 정보 기록

    • 예시) 자산 관리 번호, 서비스 담당자, 물리적 위치, 티켓 번호 등의 필드를 직접 생성해 IP 주소마다 해당 정보 입력 가능

  • 2.3. IP 이력 추적 (Changelog)

    • 모든 IP 주소와 서브넷에 대한 변경 사항(생성, 수정, 삭제)은 자동 로그 기록

    • 누가, 언제, 어떤 값을 어떻게 변경했는지 상세한 이력 조회 가능


3. 검색 및 스캔 자동화

  • 3.1. 강력한 검색 엔진

    • phpIPAM 상단의 검색창은 시스템에 등록된 거의 모든 정보를 대상으로 검색 수행

    • IP 주소, 서브넷(CIDR 표기법), 호스트명, 설명, VLAN ID, MAC 주소는 물론, 사용자가 직접 추가한 커스텀 필드의 내용까지 검색 가능

  • 3.2. 스캔 에이전트 (Scan Agent)

    • phpIPAM은 네트워크상의 IP 상태를 자동으로 확인하기 위해 스캔 기능 내장

    • 스캔 방식

      • Ping Scan

        • ICMP Echo Request를 보내 호스트의 활성 상태(Online/Offline) 확인

      • DNS Scan

        • IP 주소에 대한 역방향 DNS 조회(PTR record)를 통해 호스트명 자동으로 업데이트

    • 분산 스캐닝

      • 본사와 지사처럼 물리적으로 분리된 여러 네트워크를 관리하는 경우, 각 네트워크에 별도의 스캔 에이전트를 설치 운영 가능

      • 각 에이전트는 담당 네트워크만 스캔한 후, 그 결과를 중앙 phpIPAM 서버로 전송

      • 스캔 작업은 cron을 통해 주기적으로 실행되도록 설정한다.


고급 기능 및 확장

1. 네트워크 인프라 관리

  • 1.1. VLAN 및 VLAN 도메인

    • VLAN 관리

      • L2 네트워크 세그먼트인 VLAN 정보 관리

      • VLAN 번호, 이름, 설명을 등록하고, 각 서브넷이 어떤 VLAN에 속하는지 매핑 가능

    • VLAN 도메인 (L2 Domains)

      • 물리적으로 다른 네트워크 스위치 그룹이지만 동일한 VLAN ID를 사용하는 경우, 이를 'VLAN 도메인'이라는 논리적 그룹으로 묶어 관리 가능

      • 예시) 데이터센터 A 스위치 그룹, 데이터센터 B 스위치 그룹 등으로 도메인을 나누면, 동일한 VLAN 100이라도 각 도메인 내에서 독립적으로 관리되어 혼선 방지

  • 1.2. VRF (Virtual Routing and Forwarding)

    • 주로 대규모 네트워크나 MPLS 환경에서 사용되는 VRF 지원

      • VRF는 하나의 물리적 라우터에서 여러 개의 독립적인 가상 라우팅 테이블을 운영하는 기술로, 이를 통해 서로 다른 고객사나 부서가 동일한 IP 주소 대역을 충돌 없이 사용 가능

    • phpIPAM에서는 VRF를 생성하고, 각 서브넷이 어떤 VRF에 속하는지 지정해 중첩되는 IP 공간 체계적 관리 가능

  • 1.3. NAT (Network Address Translation)

    • NAT 기능을 사용하여 내부(Private) IP 주소와 외부(Public) IP 주소 간의 변환 관계를 기록하고 관리

    • 특정 서비스의 NAT 규칙을 phpIPAM에 등록해두면, 내부 IP만 알고 있어도 어떤 외부 IP와 포트로 서비스되는지 쉽게 파악 가능


2. 사용자 인증 및 권한 제어

  • 2.1. 로컬 인증

    • phpIPAM 자체 데이터베이스에 사용자 계정을 생성하고 관리하는 가장 기본적인 방식

    • 관리자는 사용자별로 비밀번호 정책을 설정하고, 2단계 인증(2FA)을 활성화하여 보안 강화 가능

  • 2.2. 외부 인증 연동

    • 기업 환경에서 널리 사용되는 외부 인증 시스템과 통합해 계정 관리를 일원화 가능

    • LDAP / Active Directory

      • 조직의 AD/LDAP 서버와 연동하여 기존 사내 계정으로 phpIPAM에 로그인할 수 있음

      • 서버 정보, Base DN, 계정 속성 등을 설정해 연동

    • SAML2

      • Okta, ADFS 등 SAML2 기반의 SSO(Single Sign-On) 솔루션과 통합해 로그인 환경 구축 가능

  • 2.3. 그룹 기반 권한 관리

    • 사용자를 네트워크 관리자, 서버팀, 개발팀 등 역할 기반의 그룹으로 묶어 관리 가능

    • 권한 수준

      • No access: 접근 불가

      • Read: 읽기 전용

      • Read/Write: 읽기 및 쓰기

      • Admin: 해당 객체에 대한 모든 관리 권한

    • 권한 적용 범위

      • 권한은 특정 섹션, 서브넷, VLAN 등 세부적인 객체 단위로 부여 가능

      • 예시)  서버팀 그룹에게는 데이터센터 섹션 내의 서버용 서브넷에 대해서만 Read/Write 권한을 부여하고, 다른 서브넷은 볼 수 없게 설정 가능


3. IP 요청 모듈 (IP Request Module)

  • 워크플로우

    • 일반 사용자(개발자, 시스템 담당자 등)는 웹 인터페이스를 통해 필요한 IP 개수, 사용 목적, 원하는 서브넷 등을 명시해 IP 할당 요청 가능

  • 관리자 승인

    • 요청이 접수되면 지정된 네트워크 관리자에게 이메일 알림 발송

    • 관리자는 요청 내용을 검토한 후, 클릭 한 번으로 적절한 IP를 할당하고 요청을 승인하거나 반려 가능

  • 사용자 편의성

    • 사용자는 자신이 요청한 IP 목록과 할당 상태를 대시보드에서 직접 확인 가능


5. 자동화 API 연동 및 커뮤니티

1. RESTful API

  • 1.1. API 개요 및 인증

    • phpIPAM의 거의 모든 기능(읽기, 생성, 수정, 삭제)은 RESTful API를 통해 제어 가능

    • API는 JSON 형식으로 데이터 교환

    • 활성화

      • 관리자 설정 메뉴에서 API를 활성화해야 사용 가능

    • 인증

      • API를 사용하기 위해서는 먼저 관리자가 앱(App)을 생성하고 고유한 App IDApp Secret 발급이 필요

      • 위 정보를 바탕으로 인증 토큰(Token)을 획득한 후, 모든 API 요청 헤더에 토큰을 포함시켜야 함

  • 1.2. 주요 엔드포인트(Endpoint) 활용 예시

    • 사용 가능한 다음 IP 주소 가져오기

      • 특정 서브넷에서 할당되지 않은 첫 번째 IP 주소를 찾아 반환

      • 서버 프로비저닝 자동화에 사용

      • 예시) POST /api/{app_id}/subnets/{subnetId}/first_free/

    • IP 주소 정보 수정하기

      • 특정 IP의 호스트명, 설명, 소유자 등의 정보 업데이트

      • 예시) PATCH /api/{app_id}/addresses/{addressId}/

    • 새로운 서브넷 생성하기

      • 특정 섹션 아래에 새로운 서브넷 생성

      • 예시) POST /api/{app_id}/subnets/

    • cURL을 이용한 API 호출 예시 (다음 IP 가져오기)

      # 1. 인증 토큰 요청
      TOKEN=$(curl -s -X POST --user "AppId:AppSecret" https://phpipam.example.com/api/my_app/user/ | jq -r '.data.token')
      
      # 2. 토큰을 사용하여 API 호출
      curl -s -X POST -H "token: $TOKEN" https://phpipam.example.com/api/my_app/subnets/10/first_free/

2. 자동화 도구와의 통합

  • 2.1. Ansible

    • 공식 Ansible Collection(community.phpipam) 또는 커뮤니티에서 개발한 모듈을 사용하여 Playbook 내에서 phpIPAM과 상호 작용 가능

    • 가상 머신을 생성하는 작업 이전에 phpIPAM 모듈을 호출하여 IP를 할당받고, 그 결과를 변수로 저장해 네트워크 설정에 동적으로 사용하는 시나리오 가능

  • 2.2. Terraform

    • Terraform Provider for phpIPAM을 사용하여 인프라를 코드로 정의(IaC)할 때 IP 주소 동적 할당 가능

    • phpipam_first_free_address와 같은 리소스를 정의하면, terraform apply 시점에 phpIPAM API를 호출하여 IP를 할당받고, 생성될 VM이나 네트워크 인터페이스의 IP 주소 속성에 그 값을 전달


3. 외부 시스템 연동 사례

  • 모니터링 시스템 (Zabbix, Prometheus)

    • 새로운 호스트를 모니터링 시스템에 등록할 때, 스크립트를 통해 phpIPAM에서 해당 호스트의 IP와 정보를 조회하여 자동 설정 완료 가능

  • CMDB (Configuration Management Database)

    • IT 자산 관리 시스템인 CMDB와 연동해, 서버나 네트워크 장비 정보가 변경될 때 관련된 IP 할당 정보를 phpIPAM과 동기화하여 데이터의 일관성 유지

  • DNS/DHCP 서버

    • API를 통해 phpIPAM에서 IP를 할당할 때, 해당 정보를 기반으로 DNS 레코드(A, PTR)나 DHCP 고정 할당 설정을 자동으로 생성하는 스크립트 구현 가능


4. 커뮤니티 및 지원