差分

移動先: 案内検索

Asterisk FUSION GW

9,541 バイト追加, 2021年10月28日 (木) 17:18
編集の要約なし
Asteriskでフュージョン用ゲートウェイを作る。Asteriskでフュージョンを利用するためには、現在3種類のゲートウェイを使う方法がある。<br>https://comm.rakuten.co.jp/houjin/asterisk_ip/<br>FusionがAsterisk用に用意をしたGW<br>・IP電話 B2BUA(ISPは楽天系を使用)<br>・IP電話 B2BUA OpenGate(ISPは問わず)<br>契約者が用意をするGW<br>・Asteriskの所定のバージョンにパッチを当てる(本記事)<br><br>フュージョンで提供しているパッチは、<br>13.16.0<br>11.14.0<br>フュージョンでは現在、Asterisk 1.4系パッチしか提供されていませんので、Asterisk 8.9.0<br>1.8など新しいAsteriskとフュージョンと接続する場合には直接接続ができません。またパッチが適用できないアプライアンスや、その他のSIPサーバ類を使う場合にも同じことが言えます。4.26.3<br>のバージョンのパッチを提供しています。13系が2021-10-24でEOLが切れているので、今後が楽天からの提供が期待できないかもしれません。新しいAsteriskとフュージョンと接続する場合には直接接続ができません。またパッチが適用できないアプライアンスや、その他のSIPサーバ類を使う場合にも同じことが言えます。<br>
そこで、パッチの提供されているAsteriskをゲートウェイ(B2BUA)として使うことで、対フュージョンとの接続の仲介をさせてしまいます。この場合、ゲートウェイとなるAsteriskには特に機能は必要ないので不要なモジュール類は落としてしまい、最低限のAsteriskで動作させます。<br>
==概略==
なおスクリプトが/etc/resolv.confを書き換えてしまいますので、不都合がある場合には修正しておいてください。adsl-setupを実行すると指定したDNSサーバが/etc/resolv.confに設定されます。
# adsl-stop
===ファイアウォールの設定===
この方法ではLinuxマシンにグローバルIPが当たるため、そのままではマシンが公開されているのと同じことになってしまいます。このため、外部からの攻撃にさらされるのでiptablesによってフィルタリングすることによって不要なトラフィックを遮断する方法で防御します。<br>
iptablesのエントリはCentOSのデフォルトのものに追加する形で追記します。ファイルは/etc/sysconfig/iptablesを修正して行います。設定に必要な情報は以下の通りとします。<br>
:インタフェース ppp0
:開くポート
:: SIPシグナリング UDP 5060
:: メディア(RTP) UDP 10000~20000 (rtp.confで調整できる)
:: セッションの戻りパスの許可
これら以外は遮断します。というのはGOLはFUSIONとのVoIP接続にしか使用しないためです。また、SIPおよびUDPのポートはフュージョンのIPレンジにのみ許可します。<br>
/etc/sysconfig/iptablesの内容は以下のようになります。
# Firewall configuration written by system-config-securitylevel
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i ppp0 -s 61.114.160.0/20 -p udp -m udp --dport 5060 -j ACCEPT
-A RH-Firewall-1-INPUT -i ppp0 -s 61.114.160.0/20 -p udp -m udp --dport 10000:20000 -j ACCEPT
-A RH-Firewall-1-INPUT -i ppp0 -s 61.117.213.0/24 -p udp -m udp --dport 5060 -j ACCEPT
-A RH-Firewall-1-INPUT -i ppp0 -s 61.117.213.0/24 -p udp -m udp --dport 10000:20000 -j ACCEPT
-A RH-Firewall-1-INPUT -i ppp0 -s 61.203.144.0/20 -p udp -m udp --dport 5060 -j ACCEPT
-A RH-Firewall-1-INPUT -i ppp0 -s 61.203.144.0/20 -p udp -m udp --dport 10000:20000 -j ACCEPT
-A RH-Firewall-1-INPUT -i ppp0 -s 61.213.224.0/20 -p udp -m udp --dport 5060 -j ACCEPT
-A RH-Firewall-1-INPUT -i ppp0 -s 61.213.224.0/20 -p udp -m udp --dport 10000:20000 -j ACCEPT
-A RH-Firewall-1-INPUT -i ppp0 -s 202.176.16.0/20 -p udp -m udp --dport 5060 -j ACCEPT
-A RH-Firewall-1-INPUT -i ppp0 -s 202.176.16.0/20 -p udp -m udp --dport 10000:20000 -j ACCEPT
-A RH-Firewall-1-INPUT -i ppp0 -s 202.176.32.0/19 -p udp -m udp --dport 5060 -j ACCEPT
-A RH-Firewall-1-INPUT -i ppp0 -s 202.176.32.0/19 -p udp -m udp --dport 10000:20000 -j ACCEPT
-A RH-Firewall-1-INPUT -i ppp0 -s 210.253.135.0/24 -p udp -m udp --dport 5060 -j ACCEPT
-A RH-Firewall-1-INPUT -i ppp0 -s 210.253.135.0/24 -p udp -m udp --dport 10000:20000 -j ACCEPT
-A RH-Firewall-1-INPUT -i ppp0 -s 219.105.160.0/20 -p udp -m udp --dport 5060 -j ACCEPT
-A RH-Firewall-1-INPUT -i ppp0 -s 219.105.160.0/20 -p udp -m udp --dport 10000:20000 -j ACCEPT
-A RH-Firewall-1-INPUT -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -i ppp0 -j REJECT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 5060 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 10000:20000 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
フュージョンのIPレンジは変更される可能性があるので注意してください。
==Asteriskの設定==
あたりまえのことですが、ここで言うAsteriskはフュージョン・パッチを適用したAsteriskです。<br>
Asteriskの設定はそれほど難しくありませんが、FUSIONの特性のため留意しなくてはならないことがあります。以下の説明を十分に理解して設定を行って下さい。<br>
*allowguestの扱い
:'''FUSIONではallowguest=yesにしなくてはなりません。'''
:これはFUSION側からの着信の際に'''FUSION側のIPアドレスが決まっていない'''ためです。
:このためallowguest=yesを有効にしていないと着信することができません。
:もし、発信にしか使わないのであればallowguest=noでも構いません。
このことを十分に留意してsip.confとextensions.confを記述します。これは以下の方針で行います。
*sip.confの設定
:allowguest=yesを指定します
:'''デフォルトのコンテキストをincomingにします'''
:'''内線を接続するコンテキストをdefaultにします'''
この方針に十分、注意してください。FUSION側あるいはインターネット上からの接続要求は全てコンテキスト'''incoming'''内で処理することにします。このコンテキスト内にはextensions.confで'''外線発信の記述は入れません'''。<br>
<br>
===設定ファイル===
Asteriskを最低限で立ち上げるので、必要なファイルは以下のみです。
asterisk.conf
extensions.conf
features.conf
modules.conf
rtp.conf
sip.conf
===asterisk.conf===
[directories]
astetcdir => /etc/asterisk
astmoddir => /usr/lib/asterisk/modules
astvarlibdir => /var/lib/asterisk
astagidir => /var/lib/asterisk/agi-bin
astspooldir => /var/spool/asterisk
astrundir => /var/run
astlogdir => /var/log/asterisk
[options]
languageprefix=yes
===features.conf===
[general]
===rtp.conf===
[general]
rtpstart=10000
rtpend=20000
===modules.conf===
なにもしなくていいのなら
[modules]
autoload=no
load=res_agi.so
load=res_features.so
load=pbx_config.so
load=chan_sip.so
load=app_dial.so
エンドノードとして動きたいのなら、この程度をロード
[modules]
autoload=no
load=res_agi.so
load=res_features.so
load=pbx_config.so
load=chan_sip.so
load=chan_local.so
load=app_dial.so
load=codec_ulaw
load=pbx_spool.so
load=app_playback.so
 
===sip.conf===
フュージョン2回線、内線(後ろのAsteriskと繋ぐチャネル)2回線の例を示します。<br>
[general]
maxexpirey=3600
defaultexpirey=3600
registertimeout=300
context=incoming
port=5060
bindaddr=0.0.0.0
disallow=all
allow=ulaw
allow=alaw
allow=gsm
dtmfmode=auto
; [fusion1]
register => 815012345678:password1@fusion1/815012345678
; [fusion2]
register => 815012345679:password2@fusion2/815012345679
[fusion1]
type=friend
username=815012345678
fromuser=815012345678
secret=password1
canreinvite=no
context=incoming
insecure=port,invite
fromdomain=f02.sip.0038.net
host=f02.sip.0038.net
dtmfmode=inband
allowsubscribe=no
nat=never
[fusion2]
type=friend
username=815012345679
fromuser=815012345679
secret=password2
canreinvite=no
context=incoming
insecure=port,invite
fromdomain=f02.sip.0038.net
host=f02.sip.0038.net
dtmfmode=inband
allowsubscribe=no
nat=never
[1001]
type=friend
username=1001
secret=pass1234
canreinvite=no
host=dynamic
context=default
dtmfmode=auto
fusioncom=no
[1002]
type=friend
username=1002
secret=pass1234
canreinvite=no
host=dynamic
context=default
dtmfmode=auto
fusioncom=no
===extensions.conf===
[general]
writeprotect=no
priorityjumping=no
[globals]
INTERNAL1=1001
INTERNAL2=1002
SIPACCOUNT1=815012345678
SIPACCOUNT2=815012345679
[incoming]
exten => ${SIPACCOUNT1},1,AGI(incoming.agi)
exten => ${SIPACCOUNT1},n,Dial(SIP/${INTERNAL1})
exten => ${SIPACCOUNT1},n,Hangup
exten => ${SIPACCOUNT2},1,AGI(incoming.agi)
exten => ${SIPACCOUNT2},n,Dial(SIP/${INTERNAL2})
exten => ${SIPACCOUNT2},n,Hangup
[default]
exten => _98.,1,SetCallerID(${SIPACCOUNT1})
exten => _98.,n,AGI(outgoing.agi)
exten => _98.,n,Dial(SIP/${EXTEN:2}@fusion1)
exten => _98.,n,Hangup
exten => _99.,1,SetCallerID(${SIPACCOUNT2})
exten => _99.,n,AGI(outgoing.agi)
exten => _99.,n,Dial(SIP/${EXTEN:2}@fusion2)
exten => _99.,n,Hangup
外線発信のプレフィックスは98と99にしてあります。
==接続する側のAsteriskの設定==
これでゲートウェイとして使用するAsteriskが用意できたので、これに別なAsteriskを接続することでフュージョンを使って通話することができます。<br>
===sip.conf===
SIPはこんな感じでゲートウェイに対してREGISTERします。<br>
;Fusion GW
register => 1001:pass1234@fusion-gw1/201
ピアの設定はこんな感じ
[fusion-gw1]
type=friend
username=1001
secret=pass1234
host=192.168.xxx.xxx
fromuser=1001
fromdomain=192.168.xxx.xxx
dtmfmode=auto
canreinvite=no
disallow=all
allow=ulaw
insecure=port,invite
ローカルネットワークなのでIPアドレスを直接指定しています。
11
回編集

案内メニュー

VoIp-Info.jp

HP Directplus -HP公式オンラインストア-