【LIVA】【Ubuntu server14.04】Asteriskサーバで050plus収容
Ubuntu Server14.04に導入したAsteriskサーバで050plusを収容します。
1.下準備
まず、050plusのSIPID/パスワードを取得する必要があります。
050plusのSIPID/パスワードを調べる方法 - 海外ドラマに字幕をつけてみよう! - Yahoo!ブログ
こちらに載っているフォームを構築します。
まぁ、テキストに張り付けて拡張子をhtmlにするだけですが。
<html>
<form method="post" action="https://start.050plus.com/sFMCWeb/other/InitSet.aspx">
<p><input type="text" name="ifVer" value="2.0"/>
<p><input type="text" name="apVer" value="2.0.4"/>
<p><input type="text" name="buildOS" value="IOS"/>
<p><input type="text" name="buildVer" value="5.1"/>
<p><input type="text" name="buildModel" value="Android"/>
<p><input type="text" name="earlyStFlg" value="0"/>
<p><input type="text" name="no050" value="050*******"/>
<p><input type="text" name="pw050" value="パスワード"/>
<P><input type="submit" value="送信" />
</form>
</html>
IEで開くとこんな感じ。
no050(050******)とpw050(パスワード)のところは自分の電話番号と設定した050plusのパスワードです。
で、ここからがポイントですが、電話番号とパスワードを設定してもこのままでは
<resCd>E9001</resCd>
<resMsg>IFバージョンが許容範囲外です</resMsg>
となり、情報が取得できません。
どこのサイトを見てもこれに対する対策は書いてありませんでしたが、実際には以下のように修正すればOKです。
- ifVerを「2.0」ではなく、「3.0」に書き換える。
- →2019/7/15現在では「5.0」になっています
再度実行すると
<resCd>N0000</resCd>
<resMsg>正常に終了しました</resMsg>
(略)
<sipID>XXXX<sipID>
<sipPwd>XXXXXX</sipPwd>
(略)
<nicNm>fmcXXXXX</nicNm>
(略)
となり、情報が取得できます。
2.TLS通信をするための下準備
TLS対応させるにはast_tls_certというシェルを実行すると楽です。
http://www.filewatcher.com/m/ast_tls_cert.4625-0.html
が、いつ消えるかわからないので、ここに置いておきます。
(内容はネットで拾ったものを何もいじっていません。実行は自己責任で!)
#!/bin/sh -e
DEFAULT_ORG="Asterisk"
DEFAULT_CA_CN="Asterisk Private CA"
DEFAULT_CLIENT_CN="asterisk"
DEFAULT_SERVER_CN=`hostname -f`# arguments
# $1 "ca" if we are to generate a CA cert
# $2 alternate config file name (for ca)
# $3 alternate common name
# $4 alternate org name
create_config () {
if [ "$1" = "ca" ]
then
castring="
[ext]
basicConstraints=CA:TRUE"
ficat > ${2:-"${CONFIG_FILE}"} << EOF
[req]
distinguished_name = req_distinguished_name
prompt = no[req_distinguished_name]
CN=${3:-"${COMMON_NAME}"}
O=${4:-"${ORG_NAME}"}
${castring}
EOF
}create_ca () {
echo "Creating ${CAKEY}"
openssl genrsa -des3 -out ${CAKEY} 4096 > /dev/null
echo "Creating ${CACERT}"
openssl req -new -config ${CACFG} -x509 -days 365 -key ${CAKEY} -out ${CACERT} > /dev/null
}create_cert () {
local base=${OUTPUT_DIR}/${OUTPUT_BASE}
echo "Creating ${base}.key"
openssl genrsa -out ${base}.key 1024 > /dev/null
echo "Creating signing request"
openssl req -batch -new -config ${CONFIG_FILE} -key ${base}.key -out ${base}.csr > /dev/null
echo "Creating ${base}.crt"
openssl x509 -req -days 365 -in ${base}.csr -CA ${CACERT} -CAkey ${CAKEY} -set_serial 01 -out ${base}.crt > /dev/null
echo "Combining key and crt into ${base}.pem"
cat ${base}.key > ${base}.pem
cat ${base}.crt >> ${base}.pem
}usage () {
cat << EOF
This script is useful for quickly generating self-signed CA, server, and client
certificates for use with Asterisk. It is still recommended to obtain
certificates from a recognized Certificate Authority and to develop an
understanding how SSL certificates work. Real security is hard work.OPTIONS:
-h Show this message
-m Type of cert "client" or "server". Defaults to server.
-f Config filename (openssl config file format)
-c CA cert filename (creates new CA cert/key as ca.crt/ca.key if not passed)
-k CA key filename
-C Common name (cert field)
This should be the fully qualified domain name or IP address for
the client or server. Make sure your certs have unique common
names.
-O Org name (cert field)
An informational string (company name)
-o Output filename base (defaults to asterisk)
-d Output directory (defaults to the current directory)Example:
To create a CA and a server (pbx.mycompany.com) cert with output in /tmp:
ast_tls_cert -C pbx.mycompany.com -O "My Company" -d /tmpThis will create a CA cert and key as well as asterisk.pem and the the two
files that it is made from: asterisk.crt and asterisk.key. Copy asterisk.pem
and ca.crt somewhere (like /etc/asterisk) and set tlscertfile=/etc/asterisk.pem
and tlscafile=/etc/ca.crt. Since this is a self-signed key, many devices will
require you to import the ca.crt file as a trusted cert.To create a client cert using the CA cert created by the example above:
ast_tls_cert -m client -c /tmp/ca.crt -k /tmp/ca.key -C phone1.mycompany.com \\
-O "My Company" -d /tmp -o joe_userThis will create client.crt/key/pem in /tmp. Use this if your device supports
a client certificate. Make sure that you have the ca.crt file set up as
a tlscafile in the necessary Asterisk configs. Make backups of all .key files
in case you need them later.
EOF
}if ! type openssl >/dev/null 2>&1
then
echo "This script requires openssl to be in the path"
exit 1
fiOUTPUT_BASE=asterisk # Our default cert basename
CERT_MODE=server
ORG_NAME=${DEFAULT_ORG}while getopts "hf:c:k:o:d:m:C:O:" OPTION
do
case ${OPTION} in
h)
usage
exit 1
;;
f)
CONFIG_FILE=${OPTARG}
;;
c)
CACERT=${OPTARG}
;;
k)
CAKEY=${OPTARG}
;;
o)
OUTPUT_BASE=${OPTARG}
;;
d)
OUTPUT_DIR=${OPTARG}
;;
m)
CERT_MODE=${OPTARG}
;;
C)
COMMON_NAME=${OPTARG}
;;
O)
ORG_NAME=${OPTARG}
;;
?)
usage
exit
;;
esac
doneif [ -z "${OUTPUT_DIR}" ]
then
OUTPUT_DIR=.
else
mkdir -p "${OUTPUT_DIR}"
fiumask 177
case "${CERT_MODE}" in
server)
COMMON_NAME=${COMMON_NAME:-"${DEFAULT_SERVER_CN}"}
;;
client)
COMMON_NAME=${COMMON_NAME:-"${DEFAULT_CLIENT_CN}"}
;;
*)
echo
echo "Unknown mode. Exiting."
exit 1
;;
esacif [ -z "${CONFIG_FILE}" ]
then
CONFIG_FILE="${OUTPUT_DIR}/tmp.cfg"
echo
echo "No config file specified, creating '${CONFIG_FILE}'"
echo "You can use this config file to create additional certs without"
echo "re-entering the information for the fields in the certificate"
create_config
fiif [ -z ${CACERT} ]
then
CAKEY=${OUTPUT_DIR}/ca.key
CACERT=${OUTPUT_DIR}/ca.crt
CACFG=${OUTPUT_DIR}/ca.cfg
create_config ca "${CACFG}" "${DEFAULT_CA_CN}" "${DEFAULT_CA_ORG}"
create_ca
ficreate_cert
シェルを作ったら実行します。
$sudo mkdir /etc/asterisk/keys
$sudo chmod 755 ast_tls_cert
$ sudo ./ast_tls_cert -C pbx.mycompany.com -O "My Super Company"
-d /etc/asterisk/keys
何やらkeyのパスワード?を設定するように求められるため、入力します。
※This script requires openssl to be in the pathと出力された場合、opensslがインストールされていないと思われるため、apt installでインストールしましょう。
が最後に出てきたら成功している(はず)。
3.Asteriskの設定ファイルを変更
まずはsip.confの設定変更
$ sudo vi /etc/asterisk/sip.conf
[general]
context=default
port=5060
bindaddr=0.0.0.0
language=ja; 050plus and tls
maxexpirey=3600
defaultexpirey=3600
context=defaulttlsenable=yes
tlsbindaddr=0.0.0.0
tlscertfile=/etc/asterisk/keys/asterisk.pem
tlscafile=/etc/asterisk/keys/ca.crt
tlscipher=ALL
tlsclientmethod=tlsv1
tlsdontverifyserver=yes
register => tls://nicNm:sipPwd:sipID@60.37.58.170:5061/200;2015/1/30追記:サーバのIPアドレスが変わったらしく、60.37.58.170は使えないため、"kar-f2fcp.050plus.com"を設定したほうがいいかも
[050plus]
type=friend
secret=sipPwd
port=5061
defaultuser=sipID
fromuser=nicNm
host=60.37.58.170;こちらも"kar-f2fcp.050plus.com"を設定したほうがいいかも
;host=kar-f2fcp.050plus.com
fromdomain=050plus.com
context=default
insecure=invite,port
dtmfmode=inband
canreinvite=no
disallow=all
allow=ulaw
allowguest=no
callgroup=1
transport=tls
encryption=yes
nat=yes
[201]
type=friend
defaultuser=201
secret=pass
canreinvite=no
host=dynamic[202]
type=friend
defaultuser=202
secret=pass
canreinvite=no
host=dynamic
赤文字にしているところは、1の手順で取得した情報をそれぞれ入れます。
次にextensions.confを設定変更します。
$ sudo vi /etc/asterisk/extensions.conf
[globals]
;For 050plus
MYNUMBER=050xxxxxxxx
[default]
exten => 200,1,Dial(SIP/201&SIP/202)
exten => 200,n,Hangup;050plus
exten => _0.,1,Set(CALLERID(num)=${MYNUMBER})
exten => _0.,n,Set(CALLERID(name)=${MYNUMBER})
exten => _0.,n,Dial(SIP/${EXTEN}@050plus,120,T)
exten => 201,1,Dial(SIP/201,30,r)
exten => 201,2,Hangup()exten => 202,1,Dial(SIP/202,30,r)
exten => 202,2,Hangup()
050plusは内線200に設定されています。sip.confにて「register =>」の末尾に/200を記述しており、これが内線200を表します。
というわけで、defaultの記述では200(050plus)で受信した呼はすべての端末で鳴動するようになります。
また、
exten => _0.,1,Set(CALLERID(num)=${MYNUMBER})
exten => _0.,n,Set(CALLERID(name)=${MYNUMBER})
exten => _0.,n,Dial(SIP/${EXTEN}@050plus,120,T)
で、発信先番号に先頭0がついていた場合は、すべて050plusの番号からの発信をします。これはどの端末から発信しても、です。
ただし、セキュリティ的に先頭0発信はイケてないため、工夫する必要があります。
詳細はこちら。
Asterisk SIP セキュリティ - VOIP-Info.jp Wiki
4.接続確認
一度Asteriskを再起動し、
$sudo service asterisk restart
X-LiteなどのSIPフォンで実際に自分の携帯などに発信してみましょう。設定に問題がなければ繋がるはずです。
Asteriskのコマンドで確認することもできます。
実行する場合はAteriskが動いている必要があります。
$ sudo service asterisk status
* Asterisk PBX is running
$ sudo asterisk -vvvvcr
ずらずら何か出てくる
ubuntu*CLI> sip show registry
Host dnsmgr Username Refresh State Reg.Time
60.37.58.170:5061 N fmcXXXXXXXX 3600 Registered Thu, 02 Oct 2014 06:25:32
fmcXXXXXXXXは1の手順で取得したnicNmです。
050plusのサーバと接続できていれば、上記の内容が出力されます。