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. 자동 설치 (권장)
git
을 사용하여 공식 GitHub 저장소에서 최신 소스 코드를 복제(Clone)git clone https://github.com/phpipam/phpipam.git /var/www/phpipam
복제된 디렉토리로 이동해 서브모듈 초기화
cd /var/www/phpipam git submodule update --init --recursive
웹 브라우저를 통해
http://<서버주소>/phpipam
에 접속하면 자동 설치 마법사가 실행설치 마법사의 안내에 따라 데이터베이스 종류 선택, 연결 정보(사용자, 비밀번호, DB 이름) 입력 등을 진행하면 자동으로 필요한 테이블을 생성하고 기본 설정 완료
3.2. 수동 설치
웹 서버(Apache/Nginx)에 phpIPAM을 위한 가상 호스트(Virtual Host)를 설정하고,
DocumentRoot
를 phpIPAM 소스코드 디렉토리로 지정 (URL 재작성이 가능하도록 설정 추가)MySQL/MariaDB에 접속하여 phpIPAM이 사용할 데이터베이스와 전용 사용자를 생성하고, 해당 데이터베이스에 대한 모든 권한 부여
소스코드 내의
config.dist.php
파일을config.php
로 복사config.php
파일을 열어define('DB_USER', '...');
,define('DB_PASS', '...');
등 데이터베이스 연결 정보 수동 입력제공되는
SCHEMA.sql
파일을 사용해 데이터베이스에 테이블 구조 임포트웹 브라우저로 접속하여 관리자 계정 설정 및 로그인 확인
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 ID
와App 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. 커뮤니티 및 지원
공식 GitHub 저장소
소스 코드
이슈 트래커 (Issue Tracker)
공식 문서
phpIPAM 공식 웹사이트(https://phpipam.net/)에서 설치, 설정, API 사용법 등 상세한 공식 문서 제공
커뮤니티 포럼