본문 바로가기

스니핑

라즈베리파이로 VoIP 전화 구현하기

안녕하세요 호박감자입니다.

오랜만에 글을 씁니다. 요즘 공모전에 참가 중이라 공모전을 준비하며 공부했던 내용들을 차근차근 올려보려고 합니다.

이번엔 라즈베리파이 4에 Asterisk를 설치하는 방법입니다.

프로젝트에서 VoIP 환경을 구현해야 해서 열심히 검색을 해보았는데,

라즈베리파이 4에 설치하는 최신 글이 없는 것 같아, 지금 한번 해보면서 글로 남기려고 합니다.


먼저 제가 참고한 글을 걸어두겠습니다.

https://pimylifeup.com/raspberry-pi-asterisk/

 

Install Asterisk on the Raspberry Pi

Raspberry Pi powered VOIP PBX

pimylifeup.com

이 글에 자세한 설명이 있으니, 참고하시면 될 것 같습니다.

저는 이 글을 따라 하며 그 과정을 정리하도록 하겠습니다.

(하다 보니 이 글만으로는 완성되지 않아, 제 글을 참고하시면 좋을 것 같습니다.)


1. RasPBX 다운로드

http://www.raspberry-asterisk.org/downloads/

 

Downloads | Asterisk for Raspberry Pi

RasPBX images based on Raspbian 10 Buster: The latest image supports Pi 4, Pi 3 and Pi 2 (Pi 1 and Pi zero no longer supported): An 8GB card or larger is recommended. Upgrades: Once your RasPBX has successfully booted, run this command on the console to in

www.raspberry-asterisk.org

위 링크에서 최신 버전의 RasPBX를 다운로드하여줍니다.

 

다운로드화면

지금 제가 글을 쓰고 있는 시점에서는 이 버전이 최신이네요.

참고로 이 RasPBX는 라즈베리파이 2, 3, 4를 지원합니다.

(라즈베리파이 0, 1은 제가 링크 건 글을 참고하세요)

저기 HTTP 옆에 있는 걸로 다운로드하였습니다.

파일 내용은 Asterisk랑 FreePBX가 있다고 나와있습니다.

 

제가 참고한 글에 따르면 Asterisk는 라즈베리 파이의 제한된 하드웨어에서 실행할 수 있는 오픈 소스 음성 인터넷 프로토콜 PBX 시스템이고,

FreePBX는 오픈소스로 웹 기반 Asterisk 관리 도구라고 합니다.

(PBX: private branch exchange, 사설교환기)

 

다운로드하는데 시간이 꽤 오래 걸립니다.(저는 한 시간 걸렸어요)

다운로드하고 압축도 풀어주세요.


2. 라즈베리파이에 RasPBX 쓰기

자, 이제 다운로드한 RasPBX 이미지를 라즈베리파이 SD카드에 써야 합니다.

이때 저는 이 프로그램을 사용했습니다.

Raspberry Pi Imager

 

어떤 도구를 사용할지는 여러분의 선택입니다.

CHOOSE OS 버튼을 누르고 맨 아래 Use custom을 선택해 이미지 파일을 선택해주세요.

Use custom 선택

 

그럼 아래와 같이 선택됩니다.

이미지 선택됨.

 

저는 노트북으로 현재 진행하고 있는데요, 노트북에 SD카드를 꽂습니다.

그리고 CHOOSE STORAGE 버튼을 클릭해 SD카드를 선택해줍니다.

그럼 아래와 같이 됩니다.

SD카드 선택됨.

자, 이제 WRITE 하시면 됩니다!

 

쓰는중...

이거 WRITE 누르시면 경고창이 뜨는데, 원래 SD카드에 있던 내용이 지워진다는 경고이니 참고하세요

(이 과정도 꽤 시간이 걸립니다.)


3. 라즈베리파이에서 초기 설정

라즈베리파이에 SD카드를 연결하고 전원을 연결하면, 연결된 모니터 화면이 켜지면서 여러 메시지가 올라갑니다.

그리고 잠시 뒤에 raspbx login이라고 뜹니다.

여기에 root라고 입력하고 엔터 칩니다.

password가 뜰 텐데, 초기 루트 비번은 raspberry입니다.

 

터미널 창에서

$ raspbx-upgrade

를 입력해 최신 버전으로 업그레이드해줍니다.

그런데 저는 에러가 나서 그냥 넘어갔습니다.

(후에 인터넷이 연결되지 않아 나는 에러임을 알게 되어, 와이파이 연결을 해주고 업그레이드했습니다.)

 

$ regen-hostkeys

를 입력해 SSH 호스트 키를 재생성합니다.

보안을 위해 하는 것 같습니다.

다음에 라즈베리파이에 연결할 때 SSH키가 바뀌었다는 메시지가 표시됩니다.

 

...

 

6번을 하다가 ip주소가 안 나와서 인터넷이 연결되지 않아서 그런 것 같다는 생각이 들었습니다.

그래서 와이파이 공유기로 무선랜 연결해주었습니다.


4-1 와이파이 연결하기

https://webnautes.tistory.com/903

 

Raspberry Pi 4 에서 무선랜(WiFi) 설정하는 방법

Raspberry Pi 4에 내장된 무선랜(WiFi)를 사용하기 위해 필요한 설정 방법에 대해서 다룹니다.       1. raspi-config를 사용하여 WiFi 설정     2. 커맨드 명령으로 WiFi 연결 설정 및 테스트     3..

webnautes.tistory.com

이 블로그 글을 참고해서 했습니다. 이 내용까지 정리하면 너무 길어져서

만약에 필요하신 분들은 이 글을 참고해주세요.

저는 이 글의 2번 방법으로 했습니다.

 

이렇게 해서 와이파이를 연결하니, 

$ raspbx-upgrade

명령이 잘 실행됐습니다.

 

혹시 몰라

$ regen-hostkeys

이 명령도 다시 실행했습니다.


4. 파일 시스템 확장

기본적으로 이 RasPBX 배포판은 그 이미지만큼만 소비하도록 된다고 합니다.

그래서 SD카드의 남은 부분에 접근할 수가 없어서 파일 시스템을 확장시켜 SD카드 전체 공간에 접근할 수 있게 해줘야 합니다.

 

$ raspi-config

입력하면 config tool 창이 뜹니다.

아래 화살표 누르고, 엔터 쳐서 ok를 누릅니다.

 

그러면은 1번부터 9번까지 9개의 문장이 뜹니다.

저희는 7번 Advanced Options를 클릭합니다.

 

그다음 A1 Expand Filesystem을 선택합니다.

 

이러면은 이제 창이 뜨고, 재부팅을 하면 된다는데

이상하게 저는 명령줄이 나오고 몇십 분을 기다려도 창이 안 뜨더라구요.

그렇다고 뭘 입력할 수 있는 상태도 아니고 하염없이 기다리다가 그냥 넘어갔습니다.

 

...

 

wifi 연결 후 다시 시도해봤지만, 또 시간이 걸려도 나오지 않네요.

지금 32기가 바이트 중에 4기가 바이트 정도만 사용되던데.. 너무 넓어서 오래 걸리는 건지 모르겠습니다..


5. 시간 맞추기

전화 시스템에서 시간이 중요하기 때문에 맞는 시간에 Asterisk를 구동시켜주어야 합니다.

 

$ configure-timezone

을 입력합니다.

 

Asia -> Seoul 선택

그런데 맞춰진 시간이 다르더라고요. 일단 패스


6. IP 주소 찾기

$ hostname -I (대문자 아이)

명령을 입력해줍니다.

인터넷이 연결돼있어야 아이피 주소가 리턴됩니다.

이 아이피 주소는 라우터가 라즈베리파이에 할당한 아이피 주소입니다.


7. Asterisk Web Interface 찾기

라즈베리파이에서 실행 중인 Web Interface에 접근하기 위해 웹브라우저를 사용합니다.

저는 노트북이어서 크롬으로 접근하겠습니다.

 

크롬에서

http://raspbx/

라고 입력합니다.

하지만 저는 이렇게 하면 raspbx가 거부했다는 화면이 나오더라구요.

 

그러면은 아까 찾았던 IP 주소로 접근하면 됩니다.

http://[라즈베리파이 IP 주소]/

이렇게 하면 아주 귀여운 개구리 임티를 포함한 창이 나오게 됩니다.

 

이 명령 실행 후, http://raspbx/로 입력해도 접근 가능하더라구요.

 

 

처음 웹 인터페이스를 열게 되면, 관리자 계정을 만들라는 페이지가 나오게 됩니다.

Username, Password, Confirm Password, Email을 입력하고 Setup System 버튼을 누릅니다.

제가 참고한 글에서는 비밀번호를 예측 못하게 어렵게 만들라고 강조하고 있습니다.

 

그러면은 이런 화면을 만나게 됩니다.

우리는 Administration

저희는 Administration을 클릭해줍니다.

그러면 로그인 창이 뜨는데, 로그인해주고 Continue 버튼을 눌러줍니다.

 

 

아까 설치한 Timezone

이제 라즈베리파이의 기본 지역을 설정해야 하는데요, Timezone을 보면 아까 설정한 대로 Asia/Seoul로 되어있습니다.

아쉬운 점은 Language에 한국어가 없다는 점입니다.

ㅠㅠ

Submit 버튼을 눌러줍니다.

 

그럼 이제 우리는 FreePBX 웹 인터페이스에 접근할 수 있습니다.


8. SIP 구성

이제 SIP를 구성해봅시다.

아래 글을 참고했습니다.

https://blog.naver.com/romanst/220635666592

 

Asterisk SIP 서버를 이용하여 VOIP 서비스 구현

SIP 전화는 무엇인가? SIP 전화는 VoIP 전화와 동일한 소프트웨어 전화입니다 . IP 네트워크 또...

blog.naver.com

 

Applications 메뉴에서 Extensions를 클릭합니다.

 

Add Extension에 보면 여러 가지가 있습니다.

sip Extension

이거 둘 중에 아무거나 해도 될 것 같습니다.

저는 위에 pjsip로 만들었습니다.

 

User를 만드는 부분은 다른 블로그 글이 많으니 그 글들을 참고해주세요

Submit를 누르고 오른쪽 위에 빨간 Apply Config 버튼 누르는 거 잊지 마세요!


8.1 공유기 설정

중요한 부분입니다. 저는 이 부분 때문에 굉장히 애를 먹었습니다.

사실 이거를 완성하고서 꽤 시간이 지나고 글을 다시 작성하는 중이어서 완벽히 설명은 못하지만,

최대한 기록해보겠습니다.

 

일단 지금 저희가 구성하고자 하는 VoIP 환경을 그림으로 표현해 보겠습니다.

구성할 VoIP 환경

이런 상황인데, 지금 저희 라즈베리파이가 공유기 밑에서 와이파이 통신을 하고 있습니다.

그래서 라즈베리파이는 공유기에게 로컬 IP주소를 할당받게 됩니다.

그런데 라즈베리파이의 IP주소가 계속 바뀌어 버린다면, 그때마다 일일이 확인해서 클라이언트들이 연결해야 될 것입니다. 그럼 상당히 곤란하겠죠?

그래서 라즈베리파이에게 고정 IP주소를 할당해야 합니다.

 

# 라즈베리파이 고정 IP 할당

자세히는 기억이 안 나지만, 자신이 사용하는 공유기에 접속해서 설정을 하면 됩니다.

라즈베리파이가 할당받은 주소가 로컬 주소인데, 거기 맨 뒤에 숫자를 1로 바꿔주면 공유기의 주소가 됩니다.

주소 창에 입력하면 공유기에 접속할 수 있습니다.

 

공유기 살펴보시면 비밀번호가 적혀있으니 그거 보시고 접속하시면 됩니다. (WiFi 비번이랑은 다릅니다.)

 

그리고 DHCP 할당 정보를 봐야 하는데요. 저희 집 공유기는 상태 정보 -> DHCP 할당 정보로 들어갈 수 있습니다.

 

여기에 해당 공유기에 연결된 기기들이 나열되어 있습니다.

자세히 보시면은 라즈베리파이가 받은 IP 주소도 있을 것입니다.

그래서 고놈을 고정 IP로 설정해주시면 됩니다.

 

 

자아 그럼 이제 무엇을 해야 할까요?

이제 포트포워딩을 해야 합니다.

 

# 포트포워딩

포트포워딩은 간략하게 설명하자면, 해당 포트로 들어오는 얘들은 여기로 보내라. 하는 내용입니다.

저희도 SIP 통신을 할 때 SIP 서버인 라즈베리파이에게 포트포워딩 해야할 포트들이 있습니다.

이건 공유기에서 NAT 설정에서 하면 됩니다.

저희 집 공유기는 네트워크 설정 -> NAT 설정으로 들어갈 수 있습니다.

 

그런데 주의할 점이 있습니다.

방금 저희가 SIP Extension으로 유저를 만들었죠?

그때 pjsip와 sip 중 어떤 걸로 하셨나요?

이것에 따라 포트포워딩 해야할 게 달라집니다.

 

설정에 보시면,

pjsip
sip

이렇게 포트가 설정되어 있습니다.

따라서, pjsip를 사용하신다면 5060을,

sip를 사용하신다면 5160을 포트포워딩 해야합니다.

 

(제 블로그를 따라오시면서 TCP로 설정해야 할지, UDP로 설정해야할지 고민되는 부분들이 있을 텐데요, 저는 참고로 전부 UDP로 설정했습니다.)

 

포트포워딩 하는것이 어렵지 않으니 따로 적지 않겠습니다.

그런데 만일 나중에 하다가 안되신다면, 저희 FreePBX 들어가 보면은 설정에서 이런 부분이 있습니다.

Port Ranges

이 부분은 포트포워딩 안 해도 괜찮은 거 같은데, 만일 에러가 나신다면 이 포트들도 포트포워딩 해보세요.


이제 VoIP 통화를 할 전화를 설치해야 합니다. (SIP 클라이언트 설치)

8.2 PC 전화 설치

MicroSIP라는 프로그램을 설치하려고 합니다.

구글에 microsip라고 검색하면 홈페이지가 나옵니다.

구글에 MicroSIP검색
microsip 홈페이지 화면

왼쪽 위에 메뉴바에 있는 Downloads를 클릭합니다.

 

Downloads 화면

그럼 이런 화면이 나오고, 저는 왼쪽을 설치했습니다.

제가 설치한 버전은 3.20.7이네요.

 

프로그램을 실행시켜줍니다.

언어선택

오케이 눌러주면, 설치 화면이 나옵니다.

설치 화면

여기 쓰여 있는 대로 가능한 모든 프로그램을 종료하고 다음을 눌러보겠습니다.

라이선스 동의하기 누르고,

그다음 구성요소 선택창이 나오는데, 기본적으로 다 체크가 되어있습니다.

구성요소선택창

다음 누르고,

설치 위치 선택

다음 누르겠습니다.

아휴,, 그런데 저 경로에 한글이 들어가도 에러가 나지 않을까 걱정이네요.

User이름이 한글이여가지구 걱정되긴 하지만 일단 다음 누르겠습니다.

(디스크 공간이 많이 없는 건 못 본 척해주세요~ ㅎㅎ)

 

그리고 시작 메뉴 폴더 선택 창이 뜨는데 설치 눌러주면, 1초 만에 설치가 끝납니다!

마침을 누르고 microSIP가 자동실행이 됐습니다.

그리고 기부할 건지 물어보는 도네이션 창도 떴는데, 일단 닫아줬습니다.

 

microSIP

오른쪽 위에 드롭다운 버튼을 클릭하고 계정 추가를 선택합니다.

계정 생성

이런 식으로 저는 입력해줬습니다.

그리고 저장을 눌러주면 버튼 누르는 화면의 왼쪽 아래에 (초록색) 온라인이라고 떠야 제대로 연결이 된 것입니다.

온라인 상태


8.3 스마트폰 전화 설치

앱스토어에서 sip phone이라고 치면 다양한 앱들이 있습니다.

그중에 아무거나 설치하셔도 상관없을 거 같습니다.

저는 Play 스토어에서 제일 심플해 보이는 이 앱을 설치했습니다.

SIP Client 전화 앱

설치 후, SIP 서버 IP 주소, Username, Password를 입력하면 됩니다.

연결 성공

이런 식으로 뜬다면 연결이 성공한 것입니다.

여기서 주의할 점이 있습니다.

핸드폰의 인터넷 연결을 WiFi로 해야만 연결이 성공할 수 있습니다.

아마도 라즈베리파이, 즉 SIP 서버 주소가 로컬 IP 주소이다 보니, 같은 로컬에 있어야 이 주소를 찾아갈 수 있는 것 같습니다.

Linphone

Linphone이라는 어플도 사용해봤는데, 잘 됩니다.

Linphone 연결됨.

 


마지막. 통화해보기

자 그럼 이제 전화를 걸어보겠습니다.

먼저 PC에서 걸어볼까요?

PC -> 스마트폰 전화 연결 중
전화가 걸려옴.
통화중(PC)
통화중(스마트폰)

 

자, 이번엔 스마트폰에서 전화를 걸어보겠습니다.

스마트폰 -> PC 전화 연결 중
전화가 걸려옴.

통화 성공!


자, 여기까지 해서 VoIP 환경 구축을 성공했습니다.

네트워크 관련 지식이 부족하고, 시간이 촉박한 상황에서 한 4일 정도를 노력한 내용입니다.

공모전을 위해 진행하였지만, 스니핑을 완성하지 못해 결국 공모전에서 쓰이진 못했습니다.ㅠㅠ

하지만 이 내용이 필요하신 분들을 위해 정리하였습니다.

도움이 되었기를 바라고, 긴 글 따라오시느라 수고하셨습니다.

 

밑에 VPN 설정은 제가 시도했던 방법들 중 하나인데, 이건 하지 않으셔도 됩니다.

그냥 정리한 게 아까워서 놔뒀습니다.

 

그 밑에 팁도 있으니 파이프라인이 안 나온다 하시는 분들 참고하세요.


9. VPN 설정

(계속하다 보니까 이건 안 하셔도 핸드폰과 무리 없이 연결되는 것 같습니다.)

 

핸드폰과 컴퓨터에 SIP 전화를 설치해도, 연결이 안돼서 왜 그럴까 계속 찾아보다가 한 유튜브 영상과, 한 블로그의 다음 글을 보게 되었습니다.

 

"이 프로그램을 사용하면 공유기를 사용하는 컴퓨터라도 서버를 만들어서 외부로부터 접속을 가능하게 만들어 줍니다."

 

라즈베리파이가 공유기를 사용하고 있어서, 안됬던 건가 하는 생각이 들었습니다.

그래서 VPN을 설정해주려고 합니다.

 

ZEROTIER라는 홈페이지를 통해 VPN을 설정할 수 있습니다.

먼저 라즈베리파이에 다음 명령을 입력해줍니다.

$ curl -s https://install.zerotier.com | sudo bash

그러면 설치가 완료되고 마지막에 축하한다면서 ZeroTier 주소를 줍니다.

 

그리고 zerotier.com에 들어가서 로그인을 해줍니다.

저는 구글로 로그인했습니다.

이게 무료인 것 같은데, 확실하게는 잘 모르겠습니다.

 

구글로 로그인하면은 이제 네트워크를 만들겠냐는 창이 뜨는데, 오른쪽 아래에 처음 로그인한 사람을 위해 가이드라인이라고 해야 되나? 어떤 창이 하나 뜹니다.

거기서 어떤 용도로 VPN을 사용할 건지 몇 번 선택창을 누르면 (저는 Personal VPN -> ... -> Private VPN 이렇게였나? 선택했습니다.) 화면에 가이드라인이 뜨면서 처음 사용자를 돕기 위해 네트워크를 만드는 방법이 차근차근 뜹니다.

그걸 따라가셔도 됩니다.

 

Generate ~~라고 돼있는 버튼을 누르면 네트워크가 생성됩니다.

제가 이미 하고서 내용 정리하는 중이라 사진이 없는데, 아마 사진이 없어도 어렵지 않게 따라오실 수 있을 거예요.

거기에 이제 생성된 네트워크 ID가 있습니다.

그걸 클릭합니다. --1번 화면

 

라즈베리파이에 다음 명령을 입력합니다.

$ sudo zerotier-cli join [네트워크 ID]

그럼 조인이 됩니다.

 

1번 화면에서 내리다 보면 아래 사진과 같은 부분이 나옵니다.

연결된 멤버

왼쪽 체크박스를 체크해주시면 연결이 됩니다.

혹시 몰라 주소 같은 거는 지워뒀고, 이름은 제가 바꿔준 겁니다.


# 팁

1. 라즈베리파이에서 파이프라인 기호가 안 써질 때

$ sudo nano /etc/default/keyboard 입력.

여섯 번째 줄의 XKBLAYOUT="gb"의

gb를 us로 바꿔줌.

저장 후, 리부팅

 

2. 화면이 뒤집혔을 때

팁은 따로 정리 못했습니다.

구글링 해보세요!