Asterisk18 + Ubuntu로 내선 전화 네트워크 구축

7841 단어 asterisk우분투

처음에



이 메모는 xecus씨 가 발행되고 있는 기사 내용 를 재현해, 일부 막힌 곳을 기록한 것입니다.

Asterisk에서 과거에 내선 환경 자체는 구축한 적이 있습니다만, 그 때는 목소리가 닿지 않고 검증의 시간도 준비하고 있지 않았기 때문에, 단념했습니다. 이번은 바삭바삭할 수 있는 기사를 찾아, 해 보면 정말로 생겼지만. 라는 내용입니다. ← 비망록입니다.

환경



ConoHa VPS에서 Ubuntu 인스턴스를 시작하고 그 안에 Asterisk를 설정합니다.
- VPS/RAM 1GB/CPU 2Core
- OS/Ubuntu 20.04 LTS
- asterisk/18.3.0

참고 자료 : Asterisk17 + Ubuntu로 사쿠토 내선 전화 네트워크 구축

Asterisk18 빌드



소스 코드에서 떨어뜨려 빌드합니다.
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-18.3.0.tar.gz
tar xf asterisk-*
cd asterisk-*/
./contrib/scripts/install_prereq install
./configure --with-jansson-bundled
sudo make -j4
sudo make install
sudo make samples # 初期の設定ファイル等がインストールされる

Asterisk18 설정



내선 전화 번호 6001, 6002를 구축하고 서로 연결할 수 있습니다.
설정 파일은 기본적으로 맨 아래에 추가되었습니다.

pjsip.conf 설정



SIP 서버에 대한 설정 및 내선 전화(SIP 클라이언트)에서 자격 증명을 설정합니다.

/etc/asterisk/pjsip.conf
[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0

[6001]
type=endpoint
context=from-internal
disallow=all
allow=ulaw
auth=6001
aors=6001
rewrite_contact = yes # 6001がNAT環境下の場合、必要。

[6001]
type=auth
auth_type=userpass
password=unsecurepassword
username=6001

[6001]
type=aor
max_contacts=10

[6002]
type=endpoint
context=from-internal
disallow=all
allow=ulaw
auth=6002
aors=6002
rewrite_contact = yes # 6002がNAT環境下の場合、必要。

[6002]
type=auth
auth_type=userpass
password=unsecurepassword
username=6002

[6002]
type=aor
max_contacts=10

extensions.conf 설정



내선 전화(SIP 클라이언트)에서 발신 및 수신할 때의 규칙을 여기에 설명합니다.

/etc/asterisk/extensions.conf
[from-internal]

exten = 100,1,Answer()
same = n,Wait(1)
same = n,Playback(hello-world)
same = n,Hangup()

# 6001がコールされたらSIPの6001を呼び出す
exten = 6001,1,Dial(PJSIP/6001,30,r)
same = n.Hangup()

# 6001がコールされたらSIPの6001を呼び出す

exten = 6002,1,Dial(PJSIP/6002,30,r)
same = n.Hangup()

UFW 설정



외국으로부터의 공격이 대단하기 때문에 UFW에 의한 방화벽을 넣습니다.
일본의 IP 주소는 JPNIC 참고로 좋은 느낌으로 설정
sudo apt install ufw
sudo ufw enable
sudo ufw default DENY
# SIP用ポートを許可
sudo ufw allow from XXX.XXX.XXX.XXX/32 to any port 5060 proto udp
# RTP用ポートを許可
sudo ufw allow from XXX.XXX.XXX.XXX/32 to any port 10000:20000 proto udp
sudo ufw reload

Asterisk18 서비스



이대로는 보통의 서비스처럼 sudo systemctl restart asterisk 를 할 수 없기 때문에 서비스화합니다.

새로 만들기:/etc/systemd/system/asterisk.service

refs : Asterisk Startup systemd
sudo useradd asterisk -s /sbin/nologin

/etc/systemd/system/asterisk.service
[Unit]
Description=Asterisk PBX and telephony daemon
Documentation=man:asterisk(8)
Wants=network.target
After=network.target

[Service]
Type=simple
User=asterisk
Group=asterisk
Environment=HOME=/var/lib/asterisk
WorkingDirectory=/var/lib/asterisk
ExecStart=/usr/sbin/asterisk -f -C /etc/asterisk/asterisk.conf
ExecStop=/usr/sbin/asterisk -rx 'core stop now'
ExecReload=/usr/bin/asterisk -rx 'core reload'

# safe_asterisk emulation
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable asterisk
sudo systemctl unmask asterisk

Asterisk18 서비스 시작


sudo systemctl start asterisk
sudo systemctl status asterisk

Asterisk18 시작 확인


systemctl status asterisk
ss -ltu | grep sip

sample_output
[email protected]:~$ systemctl status asterisk
● asterisk.service - Asterisk PBX and telephony daemon
     Loaded: loaded (/etc/systemd/system/asterisk.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2021-04-27 23:20:59 JST; 5min ago
       Docs: man:asterisk(8)
   Main PID: 92141 (asterisk)
      Tasks: 66 (limit: 1067)
     Memory: 67.7M
     CGroup: /system.slice/asterisk.service
             mq92141 /usr/sbin/asterisk -f -C /etc/asterisk/asterisk.conf
[email protected]:~$ ss -ltu | grep "sip\|iax"
udp    UNCONN  0        0                                0.0.0.0:sip                                    0.0.0.0:*                                      
udp    UNCONN  0        0                                0.0.0.0:iax                                    0.0.0.0:*
[email protected]:~$

실제 기계 테스트



검증에 사용한 앱:
iOS : htps : // 아 ps. 아 ぇ. 코 m / jp / 아 p / 세시 온타 lk
Android : htps : // p ぁ y. 오, ぇ. 이 m / s 취해 / 아 ps /에서 원하는 ls? 이 d=이. f 어서. 세시 온 _ t & hl = 그럼 & gl = U S

설정 항목



계정 이름: 텍토
사용자 이름: 6001 or 6002 or 만든 사람
암호 : 위의 설정 그대로라면 unsecurepassword도메인: 서버 IP 주소 or FQDN
인증 사용자 이름: 사용자 이름과 동일

ios





안드로이드





마지막으로



원래 문서에 서비스화 설정 쓰지 않았는데 systemctl 쓰거나 sudo 하지 않았거나 여러가지 고생했지만 조사하자마자 나왔으니까 그렇게 도하마리는 하지 않았다. 일단 코피페로 할 수 있도록 만들고 있지만, 잘 가지 않는 곳이면 대답할 수 있는 범위에서 대답합니다. 보류 음의 설정이라든지. 그리고 잘 안 가는 사람은 한 번 에러 메시지로 가서 보면 대답 실려 있다. ( ー` 드 ') 키리

좋은 웹페이지 즐겨찾기