중요: 이 문서는 예시 구성과 오래된 Asterisk 버전(예: 1.4)을 기준으로 합니다. 실제 프로덕션 배포 시 최신 안정 버전 사용과 추가 보안 조치(TLS, SRTP, 방화벽 설정, fail2ban 등)를 권장합니다.
개요
Asterisk는 널리 사용되는 오픈소스 PBX 엔진입니다. 다양한 GUI(예: FreePBX)와 통합할 수 있고, SIP 기반 클라이언트, ATA, 소프트폰과 호환됩니다. 이 문서는 소규모 사무실이나 실험용으로 로컬 서버에 Asterisk를 직접 설치하고 기본 기능을 구성하는 방법을 설명합니다.
사전 준비
- 운영체제: 커널 2.6 이상(헤더 파일 필요). 최신 배포판을 권장합니다. 헤더 설치 예: Debian/Ubuntu의 경우
linux-headers-$(uname -r)
설치. - 컴파일 도구: gcc 및 필수 라이브러리(termcap, openssl 등).
- 데이터베이스 연동(옵션): asterisk-addons 컴파일을 위해 MySQL 개발 헤더(libmysqlclient-dev 등) 설치.
- 파일 위치 가정: 예제는 모든 소스 파일을 /usr/src/에 복사했다고 가정합니다.
Note: Asterisk는 C로 작성되었으므로 빌드 시 위 도구와 헤더가 필요합니다.
다운로드할 파일 목록
- Zaptel
- libpri
- asterisk
- asterisk-sounds
- asterisk-addons
(원본 tarball 파일명은 환경에 따라 다를 수 있습니다.)
설치 단계(요약)
아래는 원본 문서의 순서를 보존한 설치 명령의 예시입니다. /usr/src/에 소스 tarball을 풀었다고 가정합니다.
- tar -xzf zaptel-1.4.12.1.tar.gz
- tar -xzf libpri-1.4.9.tar.gz
- tar -xzf asterisk-1.4.20.tar.gz
- tar -xzf asterisk-sounds-1.2.1.tar.gz
- tar -xzf asterisk-addons-1.4.7.tar.gz
- cd zaptel-1.4.12.1
- ./configure
- make
- make install
- make config
- service zaptel start
- cd ..
- cd libpri-1.4.9
- make
- make install
- cd ..
- cd asterisk-1.4.20
- ./configure
- make
- make install
- make samples
- make config
- cd ..
- cd asterisk-sounds
- make install
- cd ..
- cd asterisk-addons-1.4.7
- ./configure
- make
- make install
- service asterisk start
설치가 모두 성공하면 시스템에 Asterisk 서비스가 동작합니다. 빌드/설치 중 오류가 발생하면 컴파일 로그를 확인하고 누락된 개발 헤더나 의존성을 설치하세요.
첫 SIP 확장자 만들기
다음 내용을 /etc/asterisk/sip.conf에 추가합니다. 템플릿([common])을 만들고 5개의 확장자를 정의하는 예시입니다.
[common](!) ; this is template.
type=friend
context=internal
host=dynamic
disallow=all
allow=ulaw
allow=alaw
allow=g723
allow=g729
dtmfmode=rfc2833
[1000](common)
username=1000
secret=1000
[1001](common)
username=1001
secret=1001
[1002](common)
username=1002
secret=1002
[1003](common)
username=1003
secret=1003
[1004](common)
username=1004
secret=1004
ALT 텍스트(이미지 없음).
설명: 위 설정으로 SIP 클라이언트(x-lite, 소프트폰, Cisco SIP 전화 등)가 등록 가능해집니다. 초기 설정 단계에서는 방화벽/네트워크 필터를 비활성화해 테스트하세요(테스트 후 반드시 재구성).
기본 다이얼플랜(호 연결)
모든 확장자가 서로 통화하려면 다이얼플랜이 필요합니다. /etc/asterisk/extensions.conf에 다음을 추가하세요.
[internal]
exten=> _XXXX,1,Dial(SIP/${EXTEN})
이제 4자리 내선번호(예: 1000~1004)끼리 통화할 수 있습니다.
첫 SIP 트렁크 구성(아웃바운드/인바운드)
외부 발신을 위해서는 트렁크 제공자(ITSP)가 필요하고, 인바운드를 받으려면 공인 IP 또는 포트 포워딩이 필요합니다. sip.conf에 트렁크 섹션을 추가하세요.
[trunk]
type=friend
context=internal
host=
disallow=all
allow=ulaw
allow=alaw
allow=g723
allow=g729
dtmfmode=rfc2833
업데이트된 sip.conf 전체 예시는 아래와 같습니다.
[common](!) ; this is template.
type=friend
context=internal
host=dynamic
disallow=all
allow=ulaw
allow=alaw
allow=g723
allow=g729
dtmfmode=rfc2833
[1000](common)
username=1000
secret=1000
[1001](common)
username=1001
secret=1001
[1002](common)
username=1002
secret=1002
[1003](common)
username=1003
secret=1003
[1004](common)
username=1004
secret=1004
[trunk]
type=friend
context=internal
host=
disallow=all
allow=ulaw
allow=alaw
allow=g723
allow=g729
dtmfmode=rfc2833
extensions.conf에 아웃바운드 라우트 하나를 추가하세요:
exten => _XXXXXXX.,1,Dial(SIP/trunk1/${EXTEN})
최종 extensions.conf 예:
[internal]
exten=> _XXXX,1,Dial(SIP/${EXTEN})
exten => _XXXXXXX.,1,Dial(SIP/trunk1/${EXTEN})
이제 로컬 확장자에서 외부 번호로 발신될 수 있습니다(트렁크 제공자와의 인증/라우팅 설정 필요).
배포 체크리스트(관리자용)
- 최신 OS 패치 적용
- 커널 헤더 및 빌드 도구 설치
- 필요한 개발 라이브러리 설치(libssl-dev, libncurses-dev 등)
- Asterisk 최신 안정 버전 사용 여부 확인
- SIP 비밀번호 강도 확인(랜덤·충분 길이)
- RTP 포트 범위(기본 10000-20000 UDP) 방화벽 허용 및 NAT 설정
- fail2ban 또는 IP 차단 규칙 설정
- TLS/SRTP를 통해 미디어/시그널 암호화 고려
보안 강화 권장사항
- SIP 인증에 강력한 비밀번호 사용, 가능하면 digest 인증 외 추가 인증 적용
- SIP를 public하게 노출할 경우 TLS(시그널)와 SRTP(미디어) 사용 권장
- RTP 포트 범위를 방화벽에서 제한하고 포트 포워딩은 필요한 경우에만 설정
- fail2ban로 반복 실패한 등록/인증 시 차단
- 제공자와의 트렁크는 IP 제한 또는 인증 토큰 사용
테스트 케이스 및 수락 기준
- 확장자 등록: SIP 클라이언트가 등록되면 Asterisk CLI에서 상태 확인(asterisk -rvv -> sip show peers).
- 수락 기준: 등록 상태가 ‘OK’로 표시되고, 레이턴시 없이 등록됨.
- 내부 통화: 1000 -> 1001 통화 시 두 방향 오디오 확인.
- 수락 기준: 양방향 음성 연결, DTMF 전달 확인.
- 아웃바운드: 내부 확장자에서 외부 번호로 발신 성공.
- 수락 기준: 트렁크를 통해 외부 회선 연결되고 오디오 전달 확인.
- 인바운드: 외부 번호로 걸려오는 통화가 내부 확장자로 라우팅됨.
- 수락 기준: 외부에서 걸어 들어온 통화가 지정된 다이얼플랜으로 연결.
문제해결(가입/통화 실패 시 체크리스트)
- 방화벽/포트 포워딩: SIP(UDP 5060, TLS 5061)와 RTP(예: UDP 10000-20000)를 확인.
- NAT: NAT 환경이면 외부 IP와 localnet, externip/externaddr 설정 검토(sip.conf에서).
- 코덱 불일치: allow 항목에 동일한 코덱(ulaw/alaw 등)이 양쪽에 있는지 확인.
- 인증 실패: 비밀번호/username 확인, asterisk 로그(/var/log/asterisk/messages)와 CLI에서 sip debug로 상세 확인.
- 트렁크 문제: 제공자 IP, 포트, 인증 방식 확인. 제공자 문서와 일치하는지 검토.
대안 및 확장 방안
- GUI 관리: FreePBX, Issabel 등 GUI를 사용하면 설정/루팅/전화번호 관리가 쉬워집니다.
- 클라우드 PBX: 초기 구축 부담을 줄이려면 클라우드 기반 VoIP(호스팅 Asterisk 또는 SaaS PBX) 고려.
- 상용 SBC(Session Border Controller) 도입으로 SIP 보안·호처리 기능 강화.
배포 방법론(간단한 단계)
- 테스트 환경(격리된 네트워크)에 설치 및 기본 기능 검증
- 보안 설정 적용(TLS/SRTP, 방화벽, fail2ban)
- 로드/품질 테스트(동시 통화, 네트워크 품질 영향 확인)
- 운영 전용 공인 IP 또는 NAT 포워딩 구성
- 운영 전 모니터링·로그 수집 설정
결정 트리: 트렁크 설정 필요 여부
flowchart TD
A[외부 발신/수신 필요?] -->|예| B{공인 IP 보유 여부}
B -->|예| C[직접 트렁크 구성]
B -->|아니오| D[포트 포워딩 또는 클라우드 트렁크 사용]
A -->|아니오| E[내선 전용 PBX]
자주 묻는 질문
Q: Asterisk 1.4를 반드시 사용해야 하나요? A: 아니요. 가능한 경우 최신 안정 버전(Asterisk 18/20 등)을 사용하세요. 보안·호환성 개선이 있습니다.
Q: NAT 환경에서 SIP 등록이 되지 않습니다. 무엇을 확인해야 하나요? A: sip.conf의 externaddr/externip, localnet 설정과 RTP 포트 포워딩을 확인하세요. sip debug를 통해 패킷 흐름을 점검합니다.
Q: G.729 같은 코덱 사용 시 라이선스는 어떻게 되나요? A: 상용 코덱은 라이선스가 필요할 수 있습니다. 코덱의 라이선스 정책을 확인하세요.
문의: Gventure
요약
- Asterisk 설치에는 커널 헤더, 개발 라이브러리, 그리고 빌드 도구가 필요합니다.
- sip.conf와 extensions.conf의 기본 예제로 내선, 다이얼플랜, 트렁크를 구성할 수 있습니다.
- 보안(비밀번호, TLS/SRTP, 방화벽)과 NAT 설정은 매우 중요합니다.
- 테스트 케이스와 체크리스트를 통해 배포 전 기능·보안 점검을 권장합니다.