[VOIP] Korea-WAN-VoIP
일본인 친구들과 이야기 하다보니, VoIP로 WAN을 만들 수 있지 않을까 싶어서 프로젝트를 시작 해봤다.
VoIP를 VPN을 묶어서 WAN으로 만들 수 있지 않을까? 생각 해보니, 이미 일본측에서는 해당 프로젝트를 진행하고 있었다.
한국쪽에서도 해당 프로젝트를 진행해보기 위해서, 디스코드 서버를 생성하였다.
먼저, 용어 정리를 해보고 시작하자.
PBX : Private Branch Exchange 의 약자로, 내부 전화 교환 시스템을 의미한다.
자동응답, 내선연결, 외부 연결 등을 처리한다.
이 프로젝트에서 사용하는 PBX는 MIKOPBX를 사용한다.
Docker-compose로 간단히 올릴 수 있기에, 매우 편리하게 사용이 가능한 장점이 있다.
해당 글은 OS상에 Docker를 설치한 것을 가정하고 진행한다.
services:
mikopbx:
container_name: "mikopbx"
image: "ghcr.io/mikopbx/mikopbx-x86-64"
network_mode: "host"
cap_add:
- NET_ADMIN
entrypoint: "/sbin/docker-entrypoint"
hostname: {Hostname}
volumes:
- /var/spool/mikopbx/cf:/cf
- /var/spool/mikopbx/storage:/storage
tty: true
environment:
- ID_WWW_USER=
- ID_WWW_GROUP=
- PBX_NAME={PBX_NAME}
# Change the default SSH port to 23
- SSH_PORT=23
# Change the default WEB port to 8080
- WEB_PORT=8080
# Change the default WEB HTTPS port to 8443
- WEB_HTTPS_PORT=8443
여기서 hostname, PBX_Name를 정해주고
docker compose up -d
로 해당 컨테이너를 실행시켜준다.
이후 8443 포트로 접속을 하면 된다.
먼저, 새로 설치 한 mikoPBX는 이것저것 테스트(?) Config가 남아 있기에 제거해준다.

여기서 delete everything 입력하여, 기본 값을 지우고 셋팅을 시작.
이후, 외부 서버와 함께 Call routing을 하기 위해 SIP 설정을 2개를 해야한다.
SIP서버 설정
Call routing -> Telephony provider -> Connect SIP
위 메뉴에서 SIP을 생성한다.
먼저, 외부에서 전화를 "수신" 할 설정을 먼저 한다.
Provider Name -> From Any
Account Type -> Incoming Registeration
Username -> 자동생성
Password -> 자동생성
이후 Save Settings로 먼저 "수신" SIP을 생성한다.
추후에 외부에 IP(tailscale Priave IP) + Username + Password를 제공하면 내 PBX에 접속 할 수 있는 환경이 구축된다.
이제 발신 할 PBX (상대방 PBX)을 등록하는 방법은
Call routing -> Telephony provider -> Connect SIP
Provider Name -> 상대방 서버 이름-TEL
Account Type -> Outgoing Registartion
Provider host URL or IP address -> 상대방 서버 IP (Tailscale Priavte IP)
Username -> 제공 받은 ID
Password -> 제공 받은 PW
로 설정을 하면 양 PBX간 연동은 완료되었다.
이제, 내선 (Extenstions)를 생성한다.
Extenstions -> Add new extension
으로 새로운 내선을 추가한다.
추후에 SIP 프로그램에서 로그인 할 때에는 Extension이 Username이 되는 점을 참고바람.
이제 외부에서 받는 전화를 설정하자.
Incoming routing
Incoming routing은 외부에서 걸려오는 전화를 내선으로 연결해주는 라우팅이다.
공유 된 SIP중에 "From Any"를 공유 하였기 때문에, 1개의 룰만 생성하면 도니디ㅏ.
Call Routing -> Incoming routing -> Add a new Rule

위와 같이 설정한다.
Provider : From-Any
The call wiil be forwared to -> Direct to employee (match by DID)
로 설정을 하면 외부에서 들어오는 수신설정은 완료되었다.
Outbound routing
발신 전화를 라우팅 하는 섹션이다.
Call Routing -> Outgoing routing
Rule name : Friend-Tel
Number begins with : 상대방이 원하는 국번
The rest of the number consist of the specified number of digits : 비워두기
Before you start the call cut off "친국 국번의 자릿수" digits at the beginning of the number...
through the provider : 상대방 서버 이름-TEL
으로 설정하면 된다.

SIP Client
실제로 각자 Deivce (termial)에서 테스트를 해 볼수 있다.
IOS, Windows, macOS에서 테스트 한 클라이언트는
https://www.linphone.org/home/
을 사용하고있다.
Windows 기준
Third-party SIP account -> I understand ->
Username : 내선번호
Password : 내선번호의 비밀번호
Domain : mikoPBX의 서버 주소
Transport : UDP로 설정.
VoIP test
SIP client에서 000063 으로 연결을 하면, 자신이 사용중인 번호를 음성으로 안내 해준다.