IP-Phone SMART SMARTalk (Fusion)をAsteriskに収容
楽天モバイル(Fusion)のIP-Phone SMART SMARTalkをAsteriskに収容するとき、ちょっとつまずいたところがあったのでメモ。
設定はいろんなサイトからパクってきたのを、こちらの環境に合うようちょっと変えてます。
環境:
Ubuntu Server 20.04 5.4.0-89-generic
Asterisk 16.2.1
とりあえずインスコします
1 | $ sudo apt install asterisk |
pjsip.conf と extensions.conf に書き込んで設定するらしいです
内線2つ(6000,7000)を設定しました。5XXXXXXXは050よりあとの番号です。
/etc/asterisk/pjsip.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | [transport-udp] type = transport protocol = udp bind = 0.0.0.0 [fusion] type = registration transport = transport-udp outbound_auth = fusion server_uri = sip:smart.0038.net:5060 client_uri = sip:5XXXXXXX@smart.0038.net:5060 retry_interval = 60 auth_rejection_permanent = no [fusion] type = auth auth_type = userpass username = 5XXXXXXX password = XXXXXXXX [fusion] type = endpoint transport = transport-udp context = default outbound_auth = fusion allow = !all,g722,ulaw aors = fusion [fusion] type = identify match = 61.213.230.153 endpoint = fusion [fusion] type = aor contact = sip:5XXXXXXX@smart.0038.net qualify_frequency = 5 [6000] type = endpoint context = default disallow = all allow = ulaw auth = 6000 aors = 6000 rewrite_contact = yes [6000] type = auth auth_type = userpass password = pass username = 6000 [6000] type = aor max_contacts = 10 [7000] type = endpoint context = default disallow = all allow = ulaw auth = 7000 aors = 7000 rewrite_contact = yes [7000] type = auth auth_type = userpass password = pass username = 7000 [7000] type = aor max_contacts = 10 |
こちらの環境だとstartさせた直後は発信も着信もできるのですが、しばらくすると着信だけできなくなる現象が発生しました。
UDPなのでNATでおかしくなってるのですかね…? 認証の試行間隔 qualify_frequency を5ぐらいにしたら解決しました。
さらに、一日ほど経過したところで繋がらなくなったので見てみると認証状態がRejectedになってました。デフォルトだとどうやら一度Rejectされるとそのままで再接続はされないらしいです。それを回避するために auth_rejection_permanent = no を指定しました。
次 extensions.confを設定します。こっちに発信や着信の処理を書くみたいです。
/etc/asterisk/extensions.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | [general] static=yes writeprotect=no [globals] FUSIONNUMBER=5XXXXXXX [default] exten => ${FUSIONNUMBER},1, Goto(chakushin,s,1) exten = 100,1,Answer() same = n,Wait(1) same = n,Playback(hello-world) same = n,Hangup() exten => 6000,1,Dial(PJSIP/6000,30,r) same = n,Hangup() exten => 7000,1,Dial(PJSIP/7000,30,r) same = n,Hangup() exten => _9.,1,NoOp same => n,Set(CALLERID(num)=${FUSIONNUMBER}) same => n,Set(CALLERID(name)=${FUSIONNUMBER}) same => n,Dial(PJSIP/${EXTEN:1}@fusion) [chakushin] exten => s,1,Set(FROMNUM=${CALLERID(number)}) exten => s,n,Set(CALLERID(name)=${FROMNUM}) exten => s,n,Dial(PJSIP/6000&PJSIP/7000,30) |
9をつけて発信すると外線に繋がります。
また、100番にかけるとテスト用の音声が流れます。
chakushinの最終行、このように指定すると外線からの着信が6000,7000にかかってきます。
systemctl restartして、認証できてるか見てみましょう
1 2 | $ sudo asterisk -rvvvvv *CLI> pjsip show registration fusion |
statusがRegisteredになっていたら成功です。
このAsteriskサーバーを外に公開する場合、5060/UDPをNATします。
またその時は絶対fali2banを導入してください。めちゃめちゃ攻撃されます。(ちょっと放置していたら60万回ほどアタックされてました。)
1 | $ sudo apt install fail2ban |
/etc/fail2ban/jail.d/defaults-debian.conf
1 2 | [asterisk] enabled = true |
これを追記するだけです。bantimeなどはお好みで
最近のコメント