본문 바로가기
서버/리눅스 서버

9.4 음성통화 서버 Asterisk + FreePBX / 통화 시연해보기

by ㅋㅋ잠자 2015. 12. 3.
반응형

안녕하세요. 도정진입니다.

   

이번에는 서버를 정상적으로 구축했으니 Asterisk 의 chan_sip (SIP 프로토콜의 채널 드라이버) 기능을 이용하여 음성통화를 해보겠습니다.

   

내용이 Asterisk 를 전문적으로 다루는 사람이 쓴 글이 아니기 때문에 이론적인 면은 상세히 설명을 못드림을 알려 드립니다.

   

몇번 설치해보고 이렇게도 해보고 저렇게도 해보고 해서 경험에서 나오는 글임을 알려드립니다.

   

   

기본적으로 Asterisk 에서의 SIP 클라이언트는 5060 UDP 포트를 사용합니다. 물론 이 SIP 프로토콜은 TCP 도 사용이 가능합니다.

   

실제로 운영할때는 배터리 소모가 많기 때문에 UDP 가 아닌 TCP 로 사용을 많이 한다고 합니다. 그리고 RTP 패킷이라는 것이 있는데 실시간 전송 프로토콜이라는 것으로 오디오와 비디오를 전달하는 패킷입니다. Asterisk 에서는 RTP 패킷을 보내기 위한 포트가 미리 정해져 있습니다. (나중에 설정 수정으로 바꿀 수 있습니다.) 범위는 UDP 10000~20000 입니다.

   

기본적으로 포트포워딩을 어떻게 해야 할지 감이 옵니다 ㅎㅎ

   

그럼 바로 시작해 보겠습니다.

   

   

   

   

   

0 . Extension 생성하기

   

먼저 SIP 클라이언트를 생성해야 합니다. 번호를 생성한다고 생각하시면 편합니다.

   

   

이 메뉴로 이동합니다.

   

Add Extension 을 누르고 Chan_SIP Extension 을 누릅니다. 실제로 Asterisk 가 13으로 업그레이드 되면서 pjsip / chan_sip 의 두개의 드라이버가 생겼습니다.

   

http://www.pjsip.org/ <- 공식 사이트 입니다.

   

Asterisk 가 오픈소스이다 보니 짬뽕도 쉬운것 같습니다. ㅎㅎ

   

일단 저는 예전부터 써 오던 Chan_SIP 드라이버를 사용해서 Extension 을 생성하겠습니다.

   

   

이렇게 저는 임시로 2000의 번호를 생성하였습니다. User Manager Settings 는 FreePBX 에서 제공하는 UCP 라는 기능에 로그인 하는 것입니다.

   

자신의 앞으로 음성 메시지 (VoiceMail) 이 있거나 자신의 상태를 조절할 수 있는 기능이 있는데 WebRTC 를 사용하지 않는 이상 쓸 일은 없을것 같습니다..

   

그 다음 Advanced 로 이동합니다.

   

   

그 다음 참 중요한것이 NAT 설정입니다. 꼭 YES 로 설정해 주시길 바랍니다.

   

   

   

그 다음 전화 인바운드 / 아웃바운드 설정을 하는 Context 라는 부분이 있는데 실은 .. 이 설정을 FreePBX 의 어디서 설정하는지 잘 모르겠습니다.

   

그냥 기본적으로 생성되어있는 from-internal 로 설정하고 포트는 기본적으로 5060 이지만 pjsip 드라이버가 생기고 나서 포트가 5061 로 바뀌었습니다. (설정으로 바꿀 수 있습니다.)

   

pjsip = 5060

chan_sip = 5061

   

로 Asterisk 에서 리스닝 하게 됩니다.

   

   

이것만 설정하고 아래의 Submit 을 누릅니다.

   

   

   

이렇게 테스트로 2개의 계정을 생성하였습니다.

   

   

   

   

   

   

1 . SIP 고급설정하기

   

Asterisk 서버가 공유기 밑단에 위치함으로 추가적인 설정이 필요합니다.

   

물론 서버가 공인 아이피를 바로 받는다면 문제는 생기지 않지만 NAT 상에 위치하고 있으면 아래의 설정은 꼭 해주셔야 3G 상태나 다른 와이파이를 연결하였을때 음성이 들리지 않는 문제가 발생하지 않습니다.

   

   

Setting - Advanced Settings 로 이동합니다.

   

   

내리다 보면 이 설정이 있습니다.

   

이부분은 전화기들이 같은 네트워크에 위치하고 있을 때 음성 데이터를 서버를 통하지 않고 주고 받는 기능입니다.

   

같은 네트워크가 아니라면 전화기 끼리 데이터 통신이 불가능해지기 때문에 꼭 NO 로 설정해 주셔야 합니다.

   

   

이런식으로 진행이 되는데 전화기가 같은 네트워크 (EX 192.168.0.0 / 24 ) 가 아니면 작동하지 않기 때문에 음성이 들리지 않는 문제가 발생하게 됩니다.

   

   

이런식으로 음성 패킷 (RTP) 패킷도 서버를 경유해서 전달 되도록 해야 서버가 있는 네트워크가 아닌 외부에서도 음성이 들리게 됩니다.

   

그 다음 SIP nat 부분을 YES 로 바꿔줍니다.

   

   

   

이까지 마치셨으면 다음으로

   

   

Settings - Asterisk SIP Settings 로 이동합니다.

   

   

NAT 설정이 있는데 Detect Network Settings 를 누르면 자동으로 설정이 됩니다.

   

안되면 수동으로 설정해 주시길 바랍니다.

   

   

그 다음 우리는 Chan_sip 드라이버를 사용함으로 아래처럼 이동합니다.

   

   

여기도 NAT 설정이 있는데 고정 아이피이면 고정아이피 공인아이피이면 공인아이피

   

혹시 연동된 도메인이 있다면 아래처럼 설정해 줍니다.

   

   

기본적으로 Reinvite 설정은 NO 로 되어 있습니다.

   

   

그럼 최종적으로 설정은 끝이 났습니다.

   

   

그리고 Submit 을 누르고 상단에 Apply Config 를 누릅니다.

   

   

   

   

   

   

   

   

   

2 . CSipSimple 을 통해 통화 해보기

   

일단 저는 아래처럼 LG 에릭슨의 IP 전화기가 없기 때문에 물리적으로 테스트는 못해 보지만 설정을 서버측과 맞춰주면 전화기도 작동을 할 것입니다.

   

안드로이드 앱을 통해 테스트를 해 보겠습니다.

   

   

아 테스트를 먼저 하기 전에 포트포워딩 부분을 살펴 보겠습니다.

   

기본적으로 5061 포트 / RTP 패킷 포트를 열어주면 되는데

   

예전에 작업할 때도 5038 포트를 열어주지 않으면 통화가 진행되지 않았던것이 생각이 나서 FreePBX CentOS 부분의 터미널에서 netstat 을 돌려 보았습니다.

   

netstat -nlp

   

   

역시나 5038 포트가 열려있고 5060 / 5061 포트가 열려 있습니다.

   

8088 은 Asterisk 의 mini-HTTP 서버로 웹RTC 웹 소켓용으로 사용하기도 합니다.

   

그럼 아이피 타임 기준으로 설명드리겠습니다.

   

   

귀찮아서 이렇게 범위로 설정을 해 두었습니다.

   

실제로는 5038 TCP 포트와 5061 의 UDP 포트 / 그리고 RTP 포트인 10000~20000 의 UDP 포트 개방이 필요합니다.

   

   

플래이 스토어로 이동하여 아래의 앱을 다운받습니다.

   

https://play.google.com/store/apps/details?id=com.csipsimple

   

   

   

오른 쪽 아래 열쇠버튼을 누릅니다.

   

   

계정추가를 누르고 Basic 을 누릅니다.

   

   

위 처럼 계정 설정을 합니다. 일단 예시 계정인 2000 번을 넣어 보겠습니다.

   

   

저장을 하고 안드로이드 모양을 꾹 누르면 등록 완료라고 뜹니다. (등록 완료라고 되어 있지 않으면 가이드를 다시 살펴 보시길 바랍니다.)

   

앱의 다이얼러에서 2001 이라고 치고 전화를 걸어 봅니다.

   

(2001 계정도 다른 폰에 설정이 되어 있어야 합니다. 혹은 Xlite PC 프로그램을 깔아서 테스트 해볼 수 도 있습니다.)

   

http://www.counterpath.com/x-lite/

   

   

동영상

   

   

감사합니다.

반응형

댓글