「Asterisk FUSION」の版間の差分
(→extensions.conf) |
(てんぷれ追加) |
||
259行目: | 259行目: | ||
この方法だと、プレフィクスとして使う4桁の番号を知らなければ外線に発信できません。 | この方法だと、プレフィクスとして使う4桁の番号を知らなければ外線に発信できません。 | ||
− | 書きかけ | + | {{Template:書きかけ}} |
2009年12月28日 (月) 00:00時点における版
AsteriskとFUSIONを接続する方法など
目次
AsteriskとFUSIONの接続
FUSIONがAsterisk対応を正式に表明したため、堂々と繋ぐことができます。
ただし、専用のパッチが必要となるので留意してください。現在のところ各種検証のためクローズドβの形でパッチが提供されていますので、テストしてみたい方はクローズドβに参加してください。
GOLとの接続
FUSIONの場合、通話品質の確保のためISPとしてGOLとの接続が必要となります。このため、既存のISP接続がすでにある場合には、ちょっと面倒になりますが既存接続を維持したままGOLを使う場合には、Linuxサーバから直接PPPoEを喋らせてしまうのがNAT抜けの点でも簡単だと思われますので、ここではPPPoEでGOLと接続する方法を解説してみます。
ルータの設定
ルータでは既存のISP接続はそのままにしておき、"PPPoEブリッジ機能"を有効にしておきます。多くのルータでは、おそらくこの機能は有効になっているでしょう。この場合の接続は以下のようになります。
- 図は後で描く
PPPoEの設定
Linuxマシン上でPPPoEの設定を行います。ここではCentOS上でrp-pppoeを使う例を示します。rp-pppoeでは設定に各種スクリプトが付属してくるので便利です。
まずadsl-setupを実行します。
Welcome to the ADSL client setup. First, I will run some checks on your system to make sure the PPPoE client is installed properly... LOGIN NAME Enter your Login Name (default root): GOLのアカウント(ユーザ名。@以降も必要) INTERFACE Enter the Ethernet interface connected to the ADSL modem For Solaris, this is likely to be something like /dev/hme0. For Linux, it will be ethX, where 'X' is a number. (default eth0): PPPoEを使うEthernetインタフェース Do you want the link to come up on demand, or stay up continuously? If you want it to come up on demand, enter the idle time in seconds after which the link should be dropped. If you want the link to stay up permanently, enter 'no' (two letters, lower-case.) NOTE: Demand-activated links do not interact well with dynamic IP addresses. You may have some problems with demand-activated links. Enter the demand value (default no): 常時接続の場合は'no' DNS Please enter the IP address of your ISP's primary DNS server. If your ISP claims that 'the server will provide dynamic DNS addresses', enter 'server' (all lower-case) here. If you just press enter, I will assume you know what you are doing and not modify your DNS setup. Enter the DNS information here: プライマリDNSのアドレス Please enter the IP address of your ISP's secondary DNS server. If you just press enter, I will assume there is only one DNS server. Enter the secondary DNS server address here: セカンダリDNSのアドレス PASSWORD Please enter your Password: GOLのアカウントのパスワード Please re-enter your Password: パスワードをもう一度 USERCTRL Please enter 'yes' (three letters, lower-case.) if you want to allow normal user to start or stop DSL connection (default yes): ユーザがセッションを開始できるかどうか FIREWALLING Please choose the firewall rules to use. Note that these rules are very basic. You are strongly encouraged to use a more sophisticated firewall setup; however, these will provide basic security. If you are running any servers on your machine, you must choose 'NONE' and set up firewalling yourself. Otherwise, the firewall rules will deny access to all standard servers like Web, e-mail, ftp, etc. If you are using SSH, the rules will block outgoing SSH connections which allocate a privileged source port. The firewall choices are: 0 - NONE: This script will not set any firewall rules. You are responsible for ensuring the security of your machine. You are STRONGLY recommended to use some kind of firewall rules. 1 - STANDALONE: Appropriate for a basic stand-alone web-surfing workstation 2 - MASQUERADE: Appropriate for a machine acting as an Internet gateway for a LAN Choose a type of firewall (0-2): 0 ファイアウォール設定。ここでは指定しない。あとで書く。 Start this connection at boot time Do you want to start this connection at boot time? Please enter no or yes (default no): ブート時にセッションを自動的に張るかどうか Start this connection at boot time ** Summary of what you entered ** Ethernet Interface: 設定したインタフェース User name: 設定したアカウント(ユーザ名) Activate-on-demand: No Primary DNS: プライマリDNSのアドレス Secondary DNS: セカンダリDNSのアドレス Firewalling: NONE User Control: yes Accept these settings and adjust configuration files (y/n)? 確認してOKならy
これで、インタフェースppp0が作成され、使用できるようになります。試しに接続してみて以下のようにIPアドレスが割り当てられれば接続は完了です。
# adsl-start # ifconfig ppp0 ppp0 Link encap:Point-to-Point Protocol inet addr:IPアドレス P-t-P:接続先のIPアドレス Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1454 Metric:1 RX packets:3 errors:0 dropped:0 overruns:0 frame:0 TX packets:3 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:3 RX bytes:30 (30.0 b) TX bytes:30 (30.0 b)
この時点ではファイアウォールを設定していないため、このまま接続しておくと危ないので接続確認ができたなら、一旦、インタフェースを落としておきます。
なおスクリプトが/etc/resolv.confを書き換えてしまいますので、不都合がある場合には修正しておいてください。adsl-setupを実行すると指定したDNSサーバが/etc/resolv.confに設定されます。
# adsl-stop
ファイアウォールの設定
この方法ではLinuxマシンにグローバルIPが当たるため、そのままではマシンが公開されているのと同じことになってしまいます。このため、外部からの攻撃にさらされるのでiptablesによってフィルタリングすることによって不要なトラフィックを遮断する方法で防御します。
iptablesのエントリはCentOSのデフォルトのものに追加する形で追記します。ファイルは/etc/sysconfig/iptablesを修正して行います。設定に必要な情報は以下の通りとします。
- インタフェース ppp0
- 開くポート
- SIPシグナリング UDP 5060
- メディア(RTP) UDP 10000~20000 (rtp.confで調整できる)
- セッションの戻りパスの許可
これら以外は遮断します。というのはGOLはFUSIONとのVoIP接続にしか使用しないためです。
/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 -p udp -m udp --dport 5060 -j ACCEPT <--追加する。SIP(UDP/5060) -A RH-Firewall-1-INPUT -i ppp0 -p udp -m udp --dport 10000:20000 -j ACCEPT <--追加する。RTP(UDP10000~20000) -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 <--注:ローカルでSIPを使うため -A RH-Firewall-1-INPUT -p udp -m udp --dport 10000:20000 -j ACCEPT <--注:ローカルでSIPを使うため -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
記述の順序に注意してください。デフォルトで設定されるファイアウォールの設定ではインタフェースを指定しないものがあるため、これらのエントリより前にppp0のエントリを書く必要があります。
なお、この記述例ではローカルネットワーク(eth0)からはsshとSIP/RTPしか使えなくなっています。
Asteriskの設定
Asteriskの設定はそれほど難しくありませんが、FUSIONの特性のため留意しなくてはならないことがあります。以下の説明を十分に理解して設定を行って下さい。
- allowguestの扱い
- FUSIONではallowguest=yesにしなくてはなりません。
- これはFUSION側からの着信の際にFUSION側のIPアドレスが決まっていないためです。
- このためallowguest=yesを有効にしていないと着信することができません。
- もし、発信にしか使わないのであればallowguest=noでも構いません。
このことを十分に留意してsip.confとextensions.confを記述します。これは以下の方針で行います。
- sip.confの設定
- allowgues=yesを指定します
- デフォルトのコンテキストをincomingにします
- 内線を接続するコンテキストをdefaultにします
この方針に十分、注意してください。FUSION側あるいはインターネット上からの接続要求は全てコンテキストincoming内で処理することにします。このコンテキスト内にはextensions.confで外線発信の記述は入れません。
sip.conf
sip.confは以下の例を参考にしてください。
[general] maxexpirey=3600 defaultexpirey=3600 registertimeout=300 context=incoming <---注意1 port=5060 bindaddr=0.0.0.0 srvlookup=yes disallow=all allow=ulaw allow=alaw allow=gsm language=ja localnet=192.168.0.0/255.255.0.0 allowguest=yes <--指定する ;[fusion1] register => FUSIONアカウント:パスワード@fusion1/FUSIONアカウント [fusion1] type=friend username=FUSIONアカウント fromuser=FUSIONアカウント secret=パスワード canreinvite=no context=incoming insecure=port,invite host=指定されたSIPドメイン fromdomain=sip.fusioncom.co.jp dtmfmode=inband allowsubscribe=no nat=never [201] type=friend defaultuser=201 secret=pass context=default <--注意2 canreinvite=no host=dynamic dtmfmode=rfc2833 callgroup=1 pickupgroup=1 mailbox=201 [202] type=friend defaultuser=202 secret=pass context=default canreinvite=no host=dynamic dtmfmode=rfc2833 callgroup=1 pickupgroup=1 mailbox=202
sip.conf内ではデフォルトコンテキストをincomingに設定します。個別の内線のコンテキストをdefaultで指定します。この個別指定は全ての内線に対して行います。
extensions.conf
次にextensions.confでは以下の例のように記述します。
[general] writeprotect=no priorityjumping=no [globals] MYNUMBER=FUSIONアカウント [default] ; Local SIP/IAX phones 201-209 exten => _20Z,1,Dial(SIP/${EXTEN}&IAX2/${EXTEN},,tT) exten => _20Z,n,Hangup exten => _0.,1,Set(CALLERID(num)=${MYNUMBER}) exten => _0.,1,Set(CALLERID(name)=${MYNUMBER}) exten => _0.,n,Dial(SIP/${EXTEN}@fusion1) exten => _0.,n,Hangup ; Ext. 700 for Parking include => parkedcalls [incoming] ;From fusion exten => ${MYNUMBER},1,Dial(SIP/201)
[incoming]コンテキスト内には内線にダイヤルするextenしかないことに注意してください。sip.confでallowguest=yesにしたため、万が一SIPポートに対するアタックが発生した場合でも、内線にダイヤルされるだけで外線に発信されることはありません。これによりアタックによる金銭的被害を防ぎます。
内線電話機類はすべて[default]コンテキストに所属させます。このコンテキストからは外線発信ができますから、内線として接続されている電話機は外線に発信することができます。
ただし、この方法では外部(外側)からREGISTERされると認証されてしまうと内線として扱われるのでパスワード等の扱いに十分に注意してください。サンプルのまま使用しないでください。
- 外線発信を特番にしてしまう
うかつに外線発信されてしまうことを避ける方法として、外線発信を『比較的長い』特番にしてしまうという手もあります。例えば1234をダイヤルした後に番号をダイヤルしないと外線発信できないようにするには以下の記述例を参考にしてください。
exten => _1234.,1,Set(CALLERID(num)=${MYNUMBER}) exten => _1234.,1,Set(CALLERID(name)=${MYNUMBER}) exten => _1234.,n,Dial(SIP/${EXTEN:4}@fusion1) exten => _1234.,n,Hangup
この方法だと、プレフィクスとして使う4桁の番号を知らなければ外線に発信できません。