2019/06/30

Asteriskで簡単外線接続(RakutenCommunicationsIP電話利用) 連載2回目

1. はじめに

前回は、Rakuten Communications IP電話サービス までの紹介で終わっておりました。 いよいよ、asteriskをセットアップして、Rakuten Communications IP電話サービスとつないで行きます。

最後まで読んでいただければ、Rakuten Communications IP電話サービス とつながった、Astersikサーバと、PC上のソフトフォンのセットアップが終わります。

UbuntuでAsteriskサーバを作成

それでは、順番に実施していきましょう。

Ubuntuのセットアップ

Asteriskを運用するには、Linuxサーバが必要です。

今回はUbuntu Server18.04で構築します。

UbuntuにはServerとDesktop版がありますが、ServerはGUIの画面が省かれており、軽量化が図られているので筆者は好んで使っています。GUIが必要という方は、Desktop版をインストールください。

次のページにアクセスして、Downloadボタンをクリックください。

インストール手順は、youtubeで紹介されておりましたので、貼っておきます。こちらを参照ください。

Asteriskのインストール

Asteriskのバージョンは次の一覧のものがあり、Release TypeがLTSのものが長期安定版で、現在は13と16のLTSバージョンがあります。よく使われているものは13でしょうか、最新の長期安定版を望まれる方は16をよく使われるようです。

Ubuntu18.04のAsteriskバージョンを調べてみると、13となっていました。今回はそのまま13を入れていきます。

# apt-cache policy asterisk asterisk: Installed: (none) Candidate: 1:13.18.3~dfsg-1ubuntu4 Version table: 1:13.18.3~dfsg-1ubuntu4 500 500 http://archive.ubuntu.com/ubuntu bionic/universe amd64 Packages

次のコマンドで、Asteriskをインスールします。

# sudo apt-get -y install asterisk

インストールは以上で終了です。設定に入っていきます。

Asterisk設定ファイルの準備

今回の設定では、SIP電話を2機準備し、Asteriskサーバを介してRakuten Communications IP電話サービスの外線発着信を実現します。

電話概略図

電話網 
    |
Rakuten Communications IP電話サービス 
    |
Asterisk Server
    |-- SIP電話1   内線 1
    |-- SIP電話2   内線 2
  • SIP電話1,2があり、それぞれ内線1,2で内線通話が可能。
  • SIP電話1,2から外線は、0から始まる番号を外線と識別して発信。
  • 外線の着信は、SIP電話1,2が一緒に着信音がなり、電話に出たほうが通話状態となる。
  • Rakuten Communications IP電話サービスは、同時通話2なので、この構成で、SIP電話1,2が同時に発着信可能。

それでは、Asteriskの設定ファイルを整備します。

設定は、/etc/asterisk/ディレクトリ以下の、sip.conf,extensions.confの2つのファイルで行います。

まず、OS初期状態のファイルを退避しましょう。次のコマンドで、/etc/asterisk/saveフォルダに初期状態のファイルが移動されます。

# cd /etc/asterisk # mkdir save # mv sip.conf save # mv extensions.conf save

設定にはRakuten Communications IP電話サービスから送られてくる、「IP電話B2BUA OpenGateサービス開始のご案内」に記載されている内容を基に入力が必要となる箇所がありますので、注意してください。

以下が「IP電話B2BUA OpenGateサービス開始のご案内」のサンプルです。記載の番号、アカウントは架空のもので、後続の設定例と対応づいています。

それでは、sip.confを編集していきましょう。viで編集します。 viが苦手な方は、端末側で編集してscpなどのファイル転送を行ってください。

# vi /etc/asterisk/sip.conf

書き込む内容は次のとおりです。99998888,hogepass,hogesipは「IP電話B2BUA OpenGateサービス開始のご案内」の内容に読み替えてください。

FileName /etc/asterisk/sip.conf [general] defaultexpiry=3600 realm=asterisk context=default register => 99998888:hogepass@hogesip disallow=all allow=ulaw qualify=yes ;内線1番 [1] type=friend context=group1 defaultuser=1 #SIP電話1のパスワードです。実際は書き換えてください。 secret=pass host=dynamic canreinvite=no disallow=all allow=ulaw ;内線2番 [2] type=friend context=group1 defaultuser=1 #SIP電話2のパスワードです。実際は書き換えてください。 secret=pass host=dynamic canreinvite=no disallow=all allow=ulaw [rakuten] type=friend defaultuser=99998888 fromuser=99998888 secret=hogepass host=hogesip fromdomain=hogesip context=rakuten-in insecure=port,invite careinvite=no
FileName /etc/asterisk/extensions.conf [globals] RAKUTEN=99998888 WAIT_TIME=60 SIP_S=SIP/1&SIP/2 [rakuten-in] ;着信の設定 exten => ${RAKUTEN},1,NoOp(着信rakuten-in) exten => ${RAKUTEN},n,Answer() exten => ${RAKUTEN},n,Set(AGC(rx)=off) exten => ${RAKUTEN},n,Set(AGC(tx)=off) exten => ${RAKUTEN},n,Dial(${SIP_S},${WAIT_TIME},tT) exten => ${RAKUTEN},n,Hangup [group1] ;内線用設定 exten => _[1-9],1,NoOp(内線定義) exten => _[1-9],n,Dial(SIP/${EXTEN},${WAIT_TIME},tT) exten => _[1-9],n,Hangup ;外線設定 exten => _0.,1,NoOp(外線発信) exten => _0.,n,Dial(SIP/${EXTEN}@rakuten) exten => _0.,n,Set(AGC(rx)=off) exten => _0.,n,Set(AGC(tx)=off)

「Set(AGC(rx)=off)」「Set(AGC(tx)=off)」の行は、AutoGainControlをoffにする設定です。なぜか、電話受信に使うMicrosipで運用する場合、ノイズが出ることが多かったので、offで運用することにしています。 皆さんが運用される場合、該当行を削除いただければ、AutoGainControlがOnになりますので、状況を見て設定変更してください。

以上で設定完了です。

Asteriskの起動

それではAsteriskを起動していきます。コマンドは次を使います。

# sudo systemctl start asterisk

正常起動を確認します。次のように表示されれば、正常起動しています。

# systemctl | grep asterisk asterisk.service loaded active running Asterisk PBX

正常起動していない場合、メッセージが以下ファイルに出力されていますので、そちらを確認してください。

FileName /var/log/astersik/messages

SIP電話の設定

今回はPCソフトフォンMicrosipをセットアップしていきます。

以下よりダウンロードしてください。

ダウンロード出来たら、起動してインストールを実施してください。

インストールが終わるとMicrosipが起動するので、▼ボタンを押して、設定メニューを開いてください。

「アカウント編集」をクリックしてください。

「アカウント名」「ユーザ名」「ログイン」にsip.confに設定した 1または2を、「パスワード」もsip.confに設定したものを入力してください。

また、「SIPサーバ」「ドメイン」にAsteriskサーバのipアドレスを入力してください。

入力が終わりましたら「保存」ボタンを押してください。

電話番号を入力して電話が掛けられるかどうかテストしてください。

以上ですべての作業が完了です。

Asteriskのコマンド

Asterskの詳細調査は次のコマンドでCLIインタフェースを起動します。-vに続く、vの数によってより詳細のメッセージが表示されますので、状況によって指定してください。3つぐらいで十分と思います。

# sudo asterisk -vvvr Asterisk 13.18.3~dfsg-1ubuntu4, Copyright (C) 1999 - 2014, Digium, Inc. and others. Created by Mark Spencer <markster@digium.com> Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details. This is free software, with components licensed under the GNU General Public License version 2 and other licenses; you are welcome to redistribute it under certain conditions. Type 'core show license' for details. ========================================================================= Connected to Asterisk 13.18.3~dfsg-1ubuntu4 currently running on ubuntu18 (pid = 3211) ubuntu18*CLI>

sipコネクションの状況を確認には、sip show peersを使います。 以下は、sipユーザ1とrakutenの接続が行われており、sipユーザ2は未接続であることがわかります。

ubuntu18*CLI> sip show peers Name/username Host Dyn Forcerport Comedia ACL Port Status Description 1/1 192.168.10.102 D Auto (No) No 56867 OK (1 ms) 2/1 (Unspecified) D Auto (No) No 0 UNKNOWN rakuten/99998888 XX.XXX.XXX.XXX Auto (No) No 5060 OK (29 ms) 3 sip peers [Monitored: 2 online, 1 offline Unmonitored: 0 online, 0 offline]

設定ファイル(sip.conf, extensions.conf)を修正後、次のコマンドにて、動作させてまま、再読込出来ます。(電話中の状況でも切断されません。)

ubuntu18*CLI> reload

どうでしたか?できるだけ簡単に具体的に記載してみました。

もし何か依頼されたい点がありましたら、twitter kazuihitsohiまでご連絡ください。

2019/06/15

Raspberry Piで家庭用WiFiルータ見ちゃだめ時間制限付き!!

この記事について

この記事を最後まで読んで実践してもらえれば、Raspberry Piで自由に制限がかけられる、WiFiルータが作れてしまいます。

しっかり正確に記載していますので、是非実践してみてください。


はじめに

もうかれこれ2年以上になりますが、筆者の長男自身より、ネットを使いすぎるので制限をかけてほしいとの相談があり、どうせならプロキシーサーバのsquidを利用した細かい制限をかけていこうということで、WiFiルータを組む事になりました。

Wifiルータサーバ機器はどうしようということで、今流行りのRaspberry Piで作成することにしました。

筆者はLinuxは得意なのですがシングルボードコンピュータは初めで、少々手こずりましたが、無事快適に制限が掛けられるWifiサーバを完成させ運用しております

youtubeなどの動画サイトは制限なく観てしまいますから、大人であっても制限を掛けたほうが良いかもしれませんね。

それでは、ご説明をいたします。


ネットワーク構成

ネットワーク構成は次のようになります。

 光ルータ ⇔(ワイヤード) Wifiルータ(大人用) ⇔(ワイヤード) Raspberry Pi WiFiルータ
  • WiFiルータ(大人用) 192.168.10.1
  • Raspberry Pi WiFiルータ 192.168.150.1

各ルータ間はすべてLANケーブル接続されている構成です。

Raspberry PiはWiFiクライアントと、WiFiサーバの両方になることはできないようなので、WiFiルータにするのであれば、上位回線とはLANケーブル接続するしかないようです。

この構成でWiFiルータ(大人用)は制限なく、Raspberry Piルータ側にはいろいろと制限をかける構成に仕上げます。


RasberryPiの購入とインストール


・RasberryPi 3B+の購入

Raspberry PiはAmazonなどで簡単に買えます。WiFiを国内で使うなら、技適取得者を購入したいところです。次なら技適も採取しているようなので、よろしかったらどうぞ。

また、SDカードも必要です。32GBで十分です。以下にリンクをおいておきますね。


・RasberryPiのインストール

Raspberry Piのインストールは、まず、PCを使ったインストールファイルのダウンロード及びSDカードへのコピーを行います。

出来上がったSDカードをRaspberry Piへセットして起動します。

初回起動時にインストーラが起動しますので、順当に進めれば作業完了となります。

注意点として、PCでSDカードへコピーする際、PCで使っているファイルシステムと違う形式での書き込みになるので、処理中にPC側から認識できないメディアとのメッセージが出ることがあります。メッセージは無視して進めてください。

筆者は以下サイトの記事を参考にインストールしました。

最近のRaspberry Piイメージ(Raspbian)をインストールするメモ


RasberryPI WiFiルータ構築

WiFiサーバ機能をhostapdで、dhcpサーバとdnsキャッシュでdnsmasqを、制限などを付与するproxyにsquidをproxyの自動設定スクリプトの配布用にapache2をインストールして、設定していきましょう。

・必要パッケージのインストール

次のコマンドにて必要パッケージをインストールしましょう。

# sudo apt-get update && apt-get upgrade
# sudo apt-get install hostapd squid dnsmasq apache2
# systemctl enable hostapd
# systemctl enable squid
# systemctl enable dnsmasq
# systemctl enable apache2

・hostapdの起動順変更

hostapdの起動をdnsmasqより後する必要がありますので、次のようにsystemdのファイルを修正します。

Filename: /lib/systemd/system/hostapd.service
[Unit]
Description=Advanced IEEE 802.11 AP and IEEE 802.1X/WPA/WPA2/EAP Authenticator
#After=network.target    ←コメントアウト
After=dnsmasq.service    ←追加

修正が終わりましたら、次のコマンドにてsystemdに読み込みを行ってください。

# systemctl daemon-reload

・WiFiサーバのipアドレス設定(dhcpcd)

次のファイルの最終行に追加してください。WiFiサブネットを「192.168.150」、WiFiサーバを「192.168.150.1」とした設定です。変更される場合は、その設定を記載してください。

Filename: /etc/dhcpcd.conf
interface wlan0
static ip_address=192.168.150.1/24

・WiFiサーバの設定

WiFiサーバの設定を行います。以下設定はSSIDをRasberry、パスワードをxxxxとした設定です。設定するときは変えてくださいね。

Filename: /etc/hostapd/hostapd.conf
interface=wlan0
driver=nl80211
country_code=JP
#SSIDを設定
ssid=Rasberry
hw_mode=g
channel=7
ieee80211n=1
ieee80211d=1
beacon_int=100
dtim_period=2
macaddr_acl=0
wmm_enabled=1
macaddr_acl=0
auth_algs=1
wpa=2
wpa_key_mgmt=WPA-PSK
#パスワード
wpa_passphrase=xxxx
rsn_pairwise=CCMP

DAEMON_CONFの行を次のように変更してください。これをしないと、hostapdが起動されません。

Filename: /etc/default/hostapd
DAEMON_CONF="/etc/hostapd/hostapd.conf"

・WiFiサーバ配下のipアドレス発行

Wifiクライアントに発行するipアドレスの範囲を設定してください。以下では、192.168.150.2から192.168.150.40までの範囲で、48時間を期限で発行する設定をしています。

また、ファイル中のwpad.datは、後続で設定するsquidプロキシーサーバを自動配布で参照する設定です。どうも最近のスマホなどは、セキュリティーの関係からプロキシーサーバの自動設定は完全自動では行われないようになっておりますが、この設定があれば一部の手間が省けるので設定をされたほうが良いと思います。

Filename: /etc/dnsmasq.conf
interface=wlan0
dhcp-range=192.168.150.2,192.168.150.40,255.255.255.0,48h
dhcp-option=252,http://192.168.150.1/wpad.dat
Filename: /var/www/html/wpad.dat
function FindProxyForURL(url,host)
{
       return "PROXY 192.168.150.1:8080";
}

・ipv4パケットの転送設定

net.ipv4.ip_forwardの行を次のように変更してください。

Filename: /etc/sysctl.conf
net.ipv4.ip_forward=1

ファイル変更が終わったら、次のコマンドで反映します。

sysctl -p

ここまで設定が終わったら、wifiルータとしてはほぼ可動しているはずです。最後にプロキシーで制限を掛けて完成です。


・squidプロキシーサーバの設定

いよいよ、制限設定です。squidの設定は結構奥が深いので、こちらなどを参考にさせてもらいました。

条件のトレース方法は、【squid.conf】acl設定書式 ~複数条件や正規表現(url_regex), http_accessの順番, whitelist~を参考にさせてもらいました。

どうも条件を上からトレースして、条件に合致したらそれで終わり(先に禁止条件が合致したら、後続にOK条件があっても評価してくれない、逆もしかり)になるようです。

長男からは、動画サイトを制限してほしいとのオーダーでしたので、ブラックリストを定義して、そちらに時間指定で制限を掛けてみました。

動画サイトについては、7:00-8:00,19:00-20:00のみ閲覧可能、土日については、19:00-21:00まで延長の設定で対処してみました。

Filename: /etc/squid/squid.conf
acl blacklist dstdomain "/etc/squid/blacklist"
acl ok_black_time1 time 7:00-8:00      #許可時間を定義
acl ok_black_time2 time 19:00-20:00    #許可時間を定義
acl ok_black_time_weekend time 19:00-21:00 SA     #許可時間を定義 土曜と日曜
acl tomo src 192.168.150.27/255.255.255.255   #長男のスマホIPアドレス
acl tomopc src 192.168.150.4/255.255.255.255  #長男のパソコンIPアドレス
http_access allow blacklist ok_black_time_weekend tomo tomopc
http_access allow blacklist ok_black_time1 tomo
http_access allow blacklist ok_black_time2 tomo
http_access deny blacklist
http_access allow tomo tomopc
acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
acl home src 192.168.12.0/24
acl home src 192.168.150.0/24
acl CONNECT method CONNECT
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
http_access allow localhost
http_access allow home
http_access deny all
http_port 8080
coredump_dir /var/spool/squid
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320
acl NOCACHE src 192.168.150.0/24
cache deny NOCACHE
Filename: /etc/squid/blacklist
.googlevideo.com
.youtube.com
.nicovideo.jp
.pixiv.net
.bokete.jp

・スマホ側プロキシー設定

スマホからは全自動認識させたいところですが、Wifi接続の際にプロキシー設定をしないといけないようです。次のように詳細をクリックいただければ入力欄が表示されますので、そちらで指定して接続してください。

以上で、動画制限付きの家庭用Wifi環境ができました。みなさんも参考にしてみてください。