2017-06-29

Asterisk入門 -- その3

ソフトフォン・クライアント -- zoiper のインストールと設定


今回は、Asterisk に接続するためのクライアントの設定をしてみます。

使うのは、定評のある zoiper です。使用感や安定性、品質に不満が少ない、非常に優れたソフトフォンアプリです。

ほかには、CSipSimple(コーデックに無料で opus が使える)、Acrobits(有料)、AGEphone などがオススメのクライアントです。

内線端末としてだけでなく、ブラステルも使うなら zoiper 一択でしょう。
Fusion も、050 Plus も zoiper で決まりかな。

現在は Grandstream Wave というソフトフォンアプリを使用しており、zoiper は止めました。

内線端末向けの設定と、ブラステル向けの設定の仕方を記述していますのでご参考まで。

Google playで「zoiper」を検索すると、次のような画面になります。


いま現在は、LITE(無料)、PRO(有料)、BETA(β版・無料)があります。
LITE を使います。
PRO 版はコーデックに G729 と opus が追加されているようですが、それ以外の機能面は殆ど LITE も同じです。
β版はテスター登録して使えますが、使い勝手も画面も好みに合いません。


インストール画面になりますので、「インストール」をクリックします。


インストールが終わったら、「開く」をクリックします。


初期画面ですが、「do not show again」にを入れて、「Cancel」をクリックします。


まだ、なにもレジストされていない状態です。右上の「Config」をクリックします。


設定画面になりました。「Accounts」から順に設定をしていきます。


「Add account」をクリックします。


「Yes」をクリックします。また、「Accountt setup」が出ますが、今度は、


右の「Manual Configration」をクリックします。次に、「SIP」または「IAX」の設定の画面になりますから、


「SIP」をクリックします。


上から順に設定していきますので、まず、「Account name」をクリックしてこのアカウントに付ける名前を入力します。名前は任意名です。英字でも漢字でも番号でも何でも構いません。設定したあとの、実際に使うときの画面に表示される表示名になります。


入力が終わったら、「OK」をクリックします。


次に、接続先のホスト(IPアドレス)とポートを「:」で区切って入力します。
例えば、「IPアドレス 19.168.xxx.yyy」「ポート 5060」
の場合は、
  192.168.xxx.yyy:5060
ブラステルの場合は、
  softphone.spc.brastel.ne.jp:5060
と、入力して「OK」をクリックします。

ポート番号は、一般的な SIP 標準の 5060 で結構です。

ネットでは、5061とか、標準とは別にした方がいい、という人もいるようですが、サーバーの負荷的なことをいっているのだとすると、意味がありません。

そんなレベルでサーバーの処理能力を越えるようなことはありません。

何千、何万の呼を処理するわけではありません。

また、IP電話サービス事業者は殆ど 5060 です。問題があるという報告はありません。

あなたが、ルーターのポートに穴を開けるつもりなら、もっとかけ離れた番号の方がむしろいいでしょうけど、そもそもポート開け自体は「強く」オススメしません。セキュリティ上の問題を抱えてしまうからです。

前の画面に戻ったら、次に「Username」をクリックし、ユーザー名を入力します。ユーザー名は sip.conf に定義したユーザ名、例えば内線の場合は「201」などと入力します。
ブラステルの場合は、ブラステルカードの裏側のスクラッチを削ったところに書いてある「ユーザー名 (8桁の数字)」を記述します。


「OK」をクリックして、前の画面に戻ります。「Password」をクリックしてパスワードを入力します。内線の場合、sip.conf に記述のパスワードです。

ブラステルの場合は、ブラステルカードの裏側のスクラッチを削ったところに書いてある「パスワード(8桁の文字列)」を入力します。
パスワードはあとで、ブラステルの「マイアカウント」からログインして変更することもできます。



入力したら「OK」をクリックして前の画面に戻ります。次に「Ringtone」をクリックして、着信時に鳴らす音を選びます。好みの音を選んでください。選ぶと、その音が短く鳴りますから、どんな音かはわかります。


右下の「OK」をクリックして、着信音を確定して元の画面に戻ります。


次に、「Audio Codec Settings」をクリックして、コーデックの選択と、優先順序を決めます。
この例のように「ulaw, iLBC30, Speexs,gsm」をを入れ、この順序でいいと思います。
順序の入れ替えは左の3本線の部分を押しながら上下にスライドすれば、順序の入れ替えができます。
選び終えたら、「Save」をクリックして確定・保存します。


「Enable on start」にが入っているのを確認します。
次に、「Network Settings」をクリックします。


「Registration expirey time」は、1800 60sのままです に変更します「Use RPORT for signalling」はを外します。Androidの「戻る」ボタンで画面を戻します。
次に「Features」をクリックして「DTMF style」を確認します。デフォルトは RFC-2833 です。これは、sip.conf の設定と合わせてください。
ブラステルの場合は「inband」を選択した方がよいみたいです。


画面を戻したら、左下の「Save」をクリックして確定・保存をします。



例では、表示名部分を塗りつぶしてありますが、「緑色のレ点」の右に設定時の表示名が表示されます。また、「レ点」が緑色は、接続状態を示しています。
ここまでの設定が正しければ、緑色のはずです。これが、緑色になっていなければ、設定が間違っています。
最初から、再チェックしてみてください。


次に、ほかの部分の設定を続けます。Config の最初の画面に戻り、「Account」の次に「Audio」を設定します。初期値は下記のようになっていると思います。


この中で、エコーキャンセル、自動ゲインコントロールはを外します。

スピーカーゲインは+5〜8くらいがいいでしょう。スマホによって差があります。実際に聞いたときの音量で、スマホのボリュームボタン最大ではまだ音量が小さいときは、ここを上げて見てください。

Androidの「戻る」ボタンで画面を戻します。
次に、「Connectivity」の設定をします。



「Stay awake」はプロトコルが tcp のときに有効な設定ですから、外します。
これを外しておくことは大事です。スリープで切断されたりすることがあります。
は、zoiper の help ページによれば、するように、とのこと。

消費電力が増える、とありますが、そもそも zoiper の消費電力は少ないので気にする必要はありません。

続いて「Listening Port」を開いて、設定を見直します。


初期値はすべてが入っていると思います。これらはすべて外します。
ここも大事なポイントです。
一番上の、Local SIP Port の中の、Port が 5060 であることを確認します。
5060 以外だったら、5060 に設定し直します。
ここも大事なポイントです。

知らないうちに切断、なんてときは、大事なポイントが大抵の場合、間違っています。

Android の「戻る」ボタンで戻り、左下の「Save」で、確定・保存してください。

忘れると、設定が反映されません。

最後の設定です。
「Advanced」を設定します。


「Send Google Analytics」はグーグルの解析に協力する方は、協力しない方はを外します。ダイヤラーを、Android のネイティブダイヤラーと統合するときは、「Dialer integration」にを入れますが、zoiper のまま使う場合は外します。
お好みでどうぞ。

「Supported networks」は特に触る必要はないでしょう。
Android の「戻る」ボタンで戻ります。左上の Dialer で、ダイヤル画面、Contacts で電話帳、Call log で通話履歴が、それぞれ表示されます。Chat は zoiper クライアント同士で有効です。

以上で設定も終わりです。
実際にやってみて、IP 電話の楽しさ、苦労(? 遅延する、とか、音質がどうも、とか、これらが感じられなくなったとか)も一緒に味わって見てください。

では、では。


》Asterisk 入門・終わり

追記:どうも、Android 6.0 以降の Doze で「最適化対象外」としても
   ディープスリープに入ると切れるようです。Android 5 以前の
   バージョンでは、大丈夫みたい。
   仕方ないので、tasker 使って、1時間おきに起動するようにしま
   した。tasker自体も「最適化対象外」にしないと、これもディープ
   スリープしちゃうようで、tasker が寝ちゃってしまう。
   少し、これで様子見。
   最初は、NAT越えの問題かと思いましたが、どうも Doze の影響
   みたいです。寝てると「切れる」ヒトは、これもご参考に。


追記の追記:zoiperのHelpページでの記載では、次の設定をするように、とあります。

  Open Zoiper -> go to settings -> Connectivity
  Enable Keep Alive WiFi (unless you want to switch to 3g/4g when the wireless turns off).
  Stay awake is on
  Run in background is on

また、アンドロイドの設定で

  Then go to Android Settings -> Apps -> Zoiper -> Data Usage
  Enable background data
  Enable Unrestricted data usage

とするように、ともあります。さらに、

  On Android 6.0 and above, please make sure Zoiper is on the whitelist for battery optimization. Zoiper should popup to allow it to add itself to the whitelist, but this will not work on some devices  (Huawei, Xaomi,..) that come with their own battery optimization settings. Please manually add Zoiper to the battery optimization whitelist on such devices.

For Huawei devices, please see here.

と、電池の最適化をしない設定にするように、とあります。ただし、Huaweiや、Xaomi は、チョッと違う設定の仕方、とありますので、これに従ってください。

Registration expiry time はなるべく短く(60s)設定するように、とあります。

以上の設定どおりであれば、待受けも大丈夫なはずです。レジストが切れることもないでしょう。





2017-06-27

再び通話転送、されど転送

ひかり電話を、ボイスワープ・オプション契約なしで転送する


「転送」って以外に難しい。

発信者番号(以下、発番)通知を無視すれば簡単だけど、それでは運用には不便です。
発番が、最終的に転送された電話まで通知されることが望まれます。

ひかり電話の発番表示オプション契約は必須ですが、それ以外のオプションの契約なしに転送を実現したいわけです。

 500円(基本料)+400円(発番表示)+450円(HGW貸借料)= 1,350円/月額

これ自体が、かかり過ぎと思っています。

今現在は、光コラボ回線ですから HGW 貸借料はかかっていませんが、光コラボ回線の優遇期間が来年7月で終了します。

更新期は今年の11月ですから、このときに NTT東のフレッツ光ネクストに戻そうと考えています。

ひかり電話もこの際廃止してしまえ、というわけで、現在、光回線+ひかり電話で約 4,500円/月額が、約 3,000円ほどになります。毎月 1,500円、これが来年7月以降は 1,900円の差になってしまうのです。年間で約 2.4万円の差になります。
これは大きい。

発番表示オプションを使用するのに NTT側には新たなコストは発生しません(厳密には課金のためのデータベースへの登録くらいです)。それなのに :-( ...... 
無料でいいはずだし、HGW 貸借料もなんだかな〜〜?? と、考えてしまいます。

さらにボイスワープは 500円、留守電とか、着信通知メールとか、オプション料もばかにならず、ドンドン、月額費用が増えていきます。
使う頻度は少なくても、必要なヒトは、腹立たしくもこのような費用を支払い続けているのではないでしょうか。

ひかり電話A(エース)でも 5オプションで 1,500円/月額です。発番表示・キャッチホン・ボイスワープの 3セットでも 800円/月額、別途かかります。

これらの大半のオプションは、Asterisk で、初期投資の数千円以内で実現できてしまうのです。
ラズパイ3 は本体・ケース・電源アダプター込みで約 7,000円です。SDカードが必要ですが、16GB程度でよいので、1,500円程度の追加で済みます。

Asterisk(無料で手に入ります)をラズパイに構築すれば、たったこれだけでできてしまうのです。

古い PC、使わなくなった PC はありませんか。これに Linux 入れて、Asterisk 構築なら、余計な費用もかけなくて済みます。


ですが、このときに「転送」は中継する電番が転送先に通知され、発番が届かない、という問題にぶち当たったのです。

今回、この問題をクリアできるメドが立ったので、かなり充実した環境が作れることになりました。ひかり電話の各オプションのうち、下記が月額無料で「実現できる」
のです。

 ■ナンバーディスプレイ(ブラステルなどの利用で無料・ひかり電話のオプションが無料ではありません) ■ナンバー・リクエスト ■ボイスワープ ■迷惑電話お断り ■着信お知らせメール ■FAXお知らせメール ■コールセレクト

加えて、FAX 送受信(FAX 機なしに PC から)、留守電、留守電お知らせメールなどもできます。

三者通話も、スマホ内線への転送も、内線同士の通話も、代表番号着信で内線振分などなど、高機能な環境を実現できるのです。

我が家は、ひかり電話は11月にやめる予定ですが、それまでは、このような付加機能の一部を実現してみることにしました。これは、イエデンをブラステルに代えても同じサービス環境を引き継ぐことができます。

電話って、いまやあまり使わなくなったのですが、それでもないと困りますよね。
我が家も今は、家族や親戚、親しい人くらいしかかけることはありませんが、そのうちの半数くらいは、いまや LINE です。

カミさんは友だちと毎日のように長っ話しするので、携帯電話の通話定額10分が必要ですが・・・ :-(

また、レガシーな環境のヒトとは相変わらず電話になります。例えば、我が家の場合、離れて住んでいる姉なんかはガラケーと固定電話ですから、こちらも「電話」になります。

あとは、このようなヒト以外では、勧誘電話か詐欺電話が着信するくらいです。クルマのディーラーとか、いくつかの、使っている様々なサービスの事業者がまれにかけてくることがあるくらいですね。

そんなわけですから、たかが電話になぜそんなに入れ込むの? と、おっしゃるかもしれませんが、されど「電話」なのです。

転送を使ったサービス機能などは、Asterisk 構築の章で追々、紹介していきます。





2017-06-26

Asterisk入門 -- その2

extensions.conf について


前回の「Asterisk入門 -- その1」では sip.conf について記述しました。
今回は、Asterisk の実際の振る舞い(発着信の定義など)について記述したいと思います。

extensions.conf もまた、[general] セクションから始まります。

[general]                   ; 全般的なことを定義します
writeprotect=no        ; CLIによるextenの変更の許可・不許可
                                ; CLIは、Asteriskのコマンドモードインターフェース
[globals]                   ; グローバル(セクション越えて有効な)変数を定義します
MYNUMBER=0312345678    ; 自宅ひかり電話の番号(03-1234-5678)
;
[default]                   ; デフォルトセクション
exten => 200,1,Dial(SIP/201&SIP/202,30) ; ひかり電話着信時、子機の
                               ; 201と202を30秒間、呼び出します
; 「200」は、sip.conf でひかり電話をレジストしたときにひかり電話に与えた
; 内線番号です。これはエクステンション番号といい、その後ろの「1」や「 n」
; はエクステンションの順序をしめす番号です。順に、1, 2, 3, ・・・のように
; 記述する代わりに、2 以降は「n」で表現できます。exten を変更するとき
; など、「n」と書いた方が順序番号の変更が少なくて済みます
exten => 200,n,Hangup ; 通話終了でオンフックします。
;
exten => 201,1,Dial(SIP/201,30) ; 201がダイヤルされたら、201を呼び出します
exten => 201,n,Hangup
;
exten => 202,1,Dial(SIP/202,30)
exten => 202,n,Hangup
;
exten => 99,1,Dial(SIP/201&SIP/202,30) ; 99がダイヤルされたら201と202を
                                ; 呼び出します
exten => 99,n,Hangup
;
; 発信の定義
exten => _0ZX.,1,Set(${CALLERID(num)=${MYNUMBER}) ; 発信番号セット
; 発信番号は、実際には外線発信時はひかり電話の番号で強制的に置き換えられる
; ようです。なりすましの防止のためでしょう。
exten => _0ZX.,n,Dial(SIP/${EXTEN}@hikari-denwa)
exten => _0ZX.,n,Hangup

このときの「_0ZX.」はパターンマッチングといい、「0」から始まる数字で、「Z」は 1〜9 のどの数字でもよく(許可)、「X」は 0〜9 のどの数字でもよいことを表し、かつそのあとの「.」で「X」は何桁でもいいことを表しています。
日本の一般電話番号と携帯電話番号を含む数字を許可しています。
3桁番号(104や117など)は、次のように記述します。

  exten => _1XX,n,Dial(SIP/${EXTEN}@hikari-denwa)

「X」のうしろに「.」はありませんから、3桁の数字のみ許可、という意味です。
「${EXTEN}」はエクステンション番号を示します。
例えば、0412345678 をダイヤルすると、「_0ZX.」にマッチしますから、許可されて、発信ができることになります。このときに「${EXTEN}」は、 0412345678 と記述したことと同じ扱いになるのです。

つまり、ひかり電話の SIP サーバーである、hikari-denwa から0412345678 を呼び出す、という意味になります。

お気づきでしょうけど、パターンマッチングはいろいろ細かく設定すれば、マッチングしない番号ははねられます(無視されます)ので、例えば、00発信(国際通話)を制限したり、許可したりもできるわけです。

extensions.conf は書きれないほど、ある意味複雑です。

これは、ネットなどで、事例を学びながら、あるいは高橋 隆雄氏が書かれた書籍などで理解をしていただきたいと思います。1冊の分厚い本ができるほどの内容があります。

入門編としては、とりあえず使ってみる、レベルの記述に限定しました。

「続き」は、クライアント(子機)になるスマホへのソフトフォンの設定をしてみます。

続く



2017-06-25

LINE モバイルのエントリーパッケージ

エントリーパッケージを購入しました






カミさんのスマホの、今の MVNO の優遇期間が切れて7〜8月に更新期を迎えます。優遇期間が過ぎると、月額料金が 1,100円(税抜)ほど高くなります。

更に1年経つと、これ以外の基本割引もなくなり、更に 1,000円(税抜)高くなり、 3,980円/月額料金となってしまいます。

次の更新期は2年後なので、今をのがすと1年間は 2,980円、1年後には 3,980円に跳ね上がってしまうことになります。

つまり、今月までは 1,880円(税抜)だった訳です。これには通話定額(10分・300回/月のかけホーダイ)が含まれていました。

今、同じ MVNO は、最初の1年は「イチキュッパ」と盛んに CM していますが、2年目以降の高額化は「黙って」います。このあたりはチョッとブラックですねぇ。

ともあれ、丁度、LINE モバイルが 6月19日から通話定額始めて、フリープラン+通話定額で、2,080円/月額料金になります。ずーっとです。ヘンな1年限りの割引とかありませんし、もともと安い料金設定です。

LINE モバイルの LTE の速度は結構安定的に超速です。キャリアおよび、キャリアの子会社がサービスしている MVNO に匹敵する早さを、ず〜〜〜っとキープしているから驚きです。

なんでも日本法人の社長いわく、モバイルは赤字でもいい、質の高いサービスを心がける、と。

これを信じて、のりかえることにして、エントリーパッケージを購入しました。

これは、加入料 3,240円(税込)が、990円(税込)で済む、というものです。

その代わり、いま行われているキャンペーンのうちの「選べる夏のトリプルキャンペーン」対象外になりますが、もともとこのキャンペーンは興味ない内容なので、むしろ加入料が 2,250円ほど安くて済む方がメリットは大きい。

こういうエントリーパッケージは、ほかのいくつかの MVNO でもやっていて、中には ナンと 228円(3,240円に対しての価格)のところもあります。

アマゾンで売っていますので、是非ご活用くださればと思います。
ワタシは買い物がてら駅前のビックカメラで購入しました。
ただし、「格安」の加入料なので、キャンペーンなどの対象外のケースが多いです。

キャンペーン内容と照らしてパッケージ利用の可否を判断いただければ、と思います。

ワタシが加入している MVNO は、1GB・1,200円(通話SIM)/月額料金で、LINE モバイルに今、のりかえなくても同じ料金なので、11月までこのままでいくツモリです。➡ 結局、カミさんの分と一緒にのりかえました。
ワタシの方は、いつ解約しても解約料はかからないのですが、11月に固定ネットをのりかえようと思っていて(こちらは11月が更新期)その時点でモバイル割がなくなって +200円の 1,400円になりますから、LINE モバイルにすると 1,200円に戻ります。

と、いうわけでした。





Asterisk入門 -- その1

Asterisk を使うには・・・


よく使う、sip.conf ファイルと、extentions.conf を理解する必要があります。
sip.conf は基本的なことがらを定義するファイルで、内線番号の定義や、収容する回線の定義、レジスト定義などを行います。

例えば、ひかり電話を収容して(レジストして接続することを「収容」といいます)、その属性などを定義します。また、内線の定義もここで行います。

Raspberry Pi 3へAsteriskを構築する -- その1 に記載したものを例にして説明しましょう。


sip.conf ファイルの事例:

[general]              ; 全般的な定義をするセクションです。先頭に記載します
context=default     ; このセクションはデフォルトで扱うことを示します
                           ; デフォルト以外で扱うコンテキストを次行以降に記載します
bindport=5062      ; sipのポートを指定します。通常は5060で、この場合は記述省略可
bindaddr=0.0.0.0  ; sipのIPアドレスで 0.0.0.0 はすべてのアドレスを許可の意味
language=ja         ; 言語は日本語を使用する指定です
dsiallow=all          ; コーデックをすべて不許可にします
allow=ulaw           ; コーデックとして、μLaw(G.711.μ)を使用(許可)します
allow=alaw           ; コーデックとして、aLaw(G.711.a)を使用します
allow=gsm           ; コーデックとして、GSMを使用します

localnet=192.168.xxx.0/255.255.255.0 ; ローカルネットワークのアドレスとマスク

  
※ コーデックの記載順序が優先度を表します。ulaw,alaw,gsm のように記述
   しても構いません。
  ※ コーデックは、一般には上の3つを指定しておけば、問題ありません。
   sipのセッション確立時にお互いのコーデックを何にするかを決めています。
   ほかにも例えば、opus なんていま最強といわれるコーデックもありますが、
   残念ながら、まだメジャーではありませんので、相手合ってのことで、
   実際的に使われず、結局、μLaw、aLaw、GSMあたりに落ち着きます。
   GSMは2G携帯電話のコーデックとして有名です。
   μLawは、ひかり電話が使っています。
   「μ」とは記述せずに、「u」で代替しています(1バイト表現のためです)

[201]                  ; 内線201の定義を行うセクションです(内線番号は任意です)
type=friend         ; 発着信できる設定です。peerが発信専用、userが着信専用です
defaultuser=201  ; ユーザー名を201にします
secret=パスワード(任意); 内線201のパスワードを設定します
host=dynamic      ; ホストを特定しない場合に、こう指定します
canreinvite=no     ; noはRTP(音声)をAsteriskが中継します。yesは中継しません

  ※ パスワードは、乗っ取りなどの防止のため、できる限り長い(16文字以上
   くらい)、大小文字、記号、数字を含む文字列を推奨します。

ほかにもいくつか用意されたコンテキスト(各行の定義をこのように呼びます)がありますが、詳しくは、ネットで調べるか(http://www.st-asterisk.com/http://www.st-asterisk.com/ など)、できれば「高橋 隆雄の Asterisk 徹底活用ガイド」Kindle 版で約 3,000円、をオススメします。

この本は大きな図書館には置いてあるかもしれません(?)。私の近隣では船橋市に1冊だけあり、居住する市の図書館が取り寄せてくれましたけど。

高橋 隆雄氏は、日本における Asterisk の神様のような方です。

ひかり電話を収容するには、光ルーターの「電話設定→内線設定→内線番号・編集」で指定した内容を次のように記述します。
これは、FUSION や、ブラステル、050Plus などの収容でも同様ですが、050Plus はチョット特殊で、コンテキストも TLS を指定する必要があります。

register => 光ルーターの内線番号:パスワード:ユーザID@hikari-denwa/200

のように記述します。これを [general] セクションの中に記述します(最初の内線コンテキストのセクション、事例では [201] セクションとの間)に記載します。

「=>」は Asterisk 特有の記述の仕方で、上例では、「レジストは以下を行います」の意味になります。

また、ひかり電話のコンテキストは次のように記述します。

[hikari-denwa]
type=friend
context=default
secret=パスワード
bindport=5062
username=ユーザID
fromuser=3
host=192.168.xxx.yyy               ; ひかり電話を設定した光ルーターのアドレス
fromdomain=192.168.xxx.yyy   ; (同上)
insecure=port,invite                ; port: どのポートも受け入れる、invite: 着信時認証不要
dtmfmode=inband                  ; inband: 音声チャネルでプッシュトーンを流す
disallow=all
allow=ulaw
allow=alaw
allow=gsm

「hikari-denwa」は任意のSIPサーバー名になります。この名前は、extensions.conf で
発信時の sip サーバーの指定に使います。
その後の番号「200」は、エクステンション番号といい、extensions.conf の中で紐付きます。記載しない場合は、特殊なエクステンション番号「s」と結び付きます。


続く



Raspberry Pi 3へAsteriskを構築する -- その1

Raspberry Pi 3 に Asterisk (Free-PBX)をインストールしてみる


開発環境に必要(と思われる)ものをインストールします。
xxxx部分は必須で、あとは不明ながら入れると安心なものです。

 # apt-get update
 # apt-get install g++  libncurses5-dev  uuid-dev  libxml2-dev subversion sqlite3 libsqlite3-dev libssl-dev ncompress autoconf automake  libjansson-dev libopus-dev
 # apt-get install bison libnewt-dev  doxygen
 # apt-get install bluetooth libbluetooth-dev
 # apt-get install chkconfig

chkconfig は最新版ubuntuでは sysv-rc-confに代わっていますが、Raspbianでは使えます。Raspbian Jessie PIXEL 構築時にインストール済みにしています。

ディレクトリを移動して、安定版の asterisk-14-current.tar.gz をダウンロードし解凍します。

 # cd /usr/src
 # wget
 # tar zxvf asterisk-14-current.tar.gz

解凍された asterisk のディレクトリを確認します。

 # ls
 # cd asterisk-14.0.2  ➡  そのディレクトリに移動します。

作成作業に入ります。

 # ./configure
 # make menuselect

メニュー画面が現れますので、「add-ons」→「chan_mobile」を選びます。
他にも、音声ファイルを選んで「save & exit」で終了します。

 # make ← 約20分くらいかかります。
 # make install

サンプルファイルをインストールして、自動起動を設定します。

 # make samples
 # make config
 # chkconfig asterisk -list
    asterisk 0:off 1:0ff 2:on 3:on 4:on 5:on 6:off

のように結果表示されます。

試しに sip.conf と extensions.conf をleafpadで編集して、基本動作できることを確認します。まず、バックアップをコピーして取っておきます。

 # exit
 # cp /etc/asterisk/sip.conf  /etc/asterisk/sip.conf.bak
 # cp /etc/asterisk/extensions.conf  /etc/asterisk/extensions.conf.bak
 # leafpad /etc/asterisk/sip.conf

sip.conf はバックアップを取りましたから中身をすべて消して、とりあえず以下のようにして Asterisk の動作確認をします。

[general]
context=default
bindport=5062
bindaddr=0.0.0.0
language=ja
dsiallow=all
allow=ulaw
allow=alaw
allow=gsm
localnet=192.168.xx.0/255.255.255.0

[201]
type=friend
defaultuser=201
secret=パスワード(任意)
host=dynamic
canreinvite=no

以下 [202] [203] も同様に編集

extensions.conf も、最低限の動作確認の設定をしてみます。

[default]
exten => 201,1,Dial(SIP/201,30,r)
exten => 201,n,Hangup

exten => 202,1,Dial(SIP/202,30,r)
exten => 202,n,Hangup

exten => 203,1,Answer()
exten => 203,n,Playback(hello-world)

これにより、内線201と202を相互に呼び出しができます。
スマホ2台にソフトフォンをインストールして、それぞれ 201、202 をクライアントにし、お互いにダイヤルしてみて内線同士が通話できることを確認します。
203 を呼び出すと、喋った内容をオウム返しに再現してくれます。

ここまでの作業は簡単でしょ?

これでフリーなPBXをインストールできたわけです。
引き続き、ひかり電話や、FUSION、ブラステルなどを収容して、内線設定も家族で使えるように、とか、留守電も設定して、とか、FAXも入れちゃえ、なんてことをやってみたいと思います。

その2 に続きます。



2017-06-23

Asteriskとは・・・

Asterisk は世界的に広く使用されているフリー PBX のソフトウェアです。

国内でもファンが沢山いて、事例がネットに多く掲載されています。
この事例は結構ありますので参考になさってください。

できることは、それこそ工夫次第ということですが、主な使い方は次のようなものです。

・ひかり電話やIP電話を収容して、スマホ子機を内線として使えるようにする。
・内線に転送する。
・内線を一斉呼び出しする。
・留守電機能を使えるようにする。
・FAX 機能を使えるようにする。
・時報サービス(ホテルなどの目覚ましサービスが代表的)ができる。
・外線転送できる。

などなど。

かわったところでは、かけホーダイの携帯電話を収容して、これを子機間で共有使用する、なんてこともできるのです。
そうすると、一家に1台かけホーダイの携帯電話があれば、家族皆んながかけホーダイをできるのです。


Asterisk には大きく二つの重要な設定ファイルがあり、sip.conf とextensions.conf です。
前者は、SIP にかかわること、レジストする IP 電話、子機などの定義を記述します。
後者は、実際にどういう風に呼び出したり、サービスを構成するか(ダイヤルプランといいます)を記述します。

これらのほかに、留守電では、Voicemail の設定や、それをメール通知するためのメーラーの設定ファイル、FAX 機能を使うためにソフトウェアモデムを構成して、実際に FAX の送受信を行うためのソフトウェアなどをアドオンして使うなどの使い方になっています。

結構遊べますし、実用面でもすこぶる安定的に使えますので、IT 技術者ならば、一度は是非に経験してみてはいかがでしょうか。PC(LINUX)さえあれば、そこにインストールして使うことができます。

私の構築した Asterisk サーバーは近いうちに掲載してみたいと思います。
乞うご期待! と、いうところです。



Ubuntu のLxde(軽量GUI)による軽量化

Lxde 化の前に、Unity デスクトップ環境で一通りインストールと設定を行います。


Lxde での設定等は結構面倒なことがあって、却って時間がかかるので、Unity 上でできることは先にやっておいた方がいいでしょう。Lxde 化は最終段階で行います。


【Macでの作業】 LiveUSB 作成

  ubuntu ダウンロード公式サイト https://www.ubuntulinux.jp/download/ja-remix
  から ubuntu-ja-16.04-desktop-amd64.iso をダウンロード。
  unetbootin.app を起動して .iso を LiveUSB として作成します。


【インストール先 PC(Dynabook ss RX1)での作業】


1. esc + 電源ボタン。次に F1 キーを押して BIOS を起動しブート順序を USB->HDD
 とします。

  USB1 に LiveUSB を差し込んで電源を押すと unetbootin の画面になるので
 「Install Ubuntu」を選択。

2.「ようこそ」画面で「日本語」を選択して続ます。

3.「ubuntuのインストール中にアップデートをダウンロードする」をチェックオフし、
 「グラフィックス、WiFi 機器、Flash、MP3 やその他のメディアに必要なサード・
 パーティーソフトウェアをインストールする」にチェックオンして続けます。

4.「インストールの種類」画面で、「ディスクを削除して Ubuntu をインストール」を
 選択し、「インストール」します。

5. エリア画面はデフォルトのまま続けます。

6.「キーボードレイアウト」はデフォルト(日本語)のまま続けます。

7. ユーザ名「abcdefgh」、パスワード「12345678」を入力して続けます。

8. パッケージのインストールが始まります。

 14分程(HDD だと 20分)でインストール完了し、再起動を促されます。

9.「今すぐ再起動」し、電源が落ちたときに USB を外します。

 ※ 外すタイミング(誤ると中途半端にブートが中断したり、再リブートしたりします)



【起動後のセッティング】

1. ソフトウェアのアップデート

 Dash で「so」と入力して、「ソフトウェアの更新(Aに ◯マーク。Apple Storeの
 ようなマーク)」を検索し、起動します。
 起動後、更新するかどうかを問われるので「更新」します。

 ※「ソフトウェアセンター(Ubuntu Software)」からの更新ではうまくいきません。


  アップデートは大体うまくいくはずですが、万一うまくいかない場合、appstream
  にバグがあるので下記を実行します。
  この場合 appstreamcli が起動していないかをシステムモニターで確認して、起動し
  ていれば終了します。

    cd /tmp && mkdir asfix
    cd asfix
    wget https://launchpad.net/ubuntu/+archive/primary/+files/appstream_0.9.4-1ubuntu1_amd64.deb
    wget https://launchpad.net/ubuntu/+archive/primary/+files/libappstream3_0.9.4-1ubuntu1_amd64.deb
    sudo dpkg -i *.deb



  その後、改めて Dash から「ソフトウェアの更新」を実行します。

  更新が完了したら再起動し、「Ubuntu Software」を開いて、「更新」タグで更新
  を確認します。


2. 不安定な Ubuntu Softare に換えて、安定した Ubuntu Software Center にします。

 「Ubuntu Software」で「ubuntu」と検索し、「Ubuntu Software Center」を
 インストールします。


3. 余分なソフトウェア(ゲームなど)を削除します。

 「Ubuntu Software Center」で、「インストール済み」から不必要なソフトウェア
 を削除します。
 「Ubuntu Software」からの削除は実際には削除されているが、インストール済み
 リストには残ったままとなるので、「Ubuntu Software」では削除しません。


4. ファイヤーウォール 

 Ubuntu Software Center から gufw をインストールします。
 起動して、Status をオンにします。












 ルールを追加する -> ルールをクリック -> 「+」で入力欄に「smb」と入力し、
 「追加」を押して、「閉じる」を押します。 



5. メニューの追加

 ① 類似の desktop を流用して編集します。

   例:gnome-control-center を作る場合、類似の desktop をコピーします。

    $ sudo cp /usr/share/applications/{credentials-preferences.desktop,gnome-control-center.desktop}

 ② これを編集します。

    $ gksu gedit /usr/share/applications/gnome-control-center.desktop

     [Desktop Entry]
     Name=gnome-control-center
     Comment=gnome-control-center
     Exec=env XDG_CURRENT_DESKTOP=GNOME gnome-control-center
     Icon=credentials-preferences
 ←後で置き換えるので、とりあえずこのまま。
     Type=Application
     StartupNotify=true
     Categories=GNOME;Settings;DesktopSettings;

 ③ 保存して終了します。

 ④ メニューに現れているのを確認します。

 ⑤ menulibre を起動して、編集を完成させます。

   このアプリケーションのアイコンは適当なものを探して置き換えます。
   メニュー上のカテゴリーの位置づけを決めます(上下させる)。


6. ssh のインストール

   # apt-get install openssl-server

 設定ファイルの編集

   # leafpad /etc/ssh/sshd_config

 28行目「PermitRootLogin yes」➡「PermitRootLogin no」にしてroot権限での
 ログイン不可とします。
 ファイヤウォールでローカスホストからのアクセスを許可設定します。

   # ufw allow proto tcp from 192.168.xxx.0/24 to any port 22

 Macからログインしてみます。

   $ ssh abcdefgh@192.168.xxx.yyy ; xxx.yyy は PC のIPアドレス。


7. rootのパスワードを設定します。

   # passwd root

 まだ、未設定の場合は、新規に設定するパスワードをたずねてくるので、「........」(任意)
 を設定、再入力確認に同じパスワードを設定します。


8.「設定」を開きます。

 すべての設定アイテムを適切な内容に設定する。
 言語サポートを開いた場合、日本語環境に不足があると自動的にアップデートされます。
 設定変更は、「テキスト入力」、「画面の明るさとロック」、「外観」、「言語サポート」、
 「ディスプレイ」、「プリンター」の接続設定と印刷確認など。


9. ファイラーのフォルダ名を英語表記にします。

 ターミナルから

   $ env LANGUAGE=C LC_MESSAGES=C xdg-user-dirs-gtk-update

 実行するとダイアログが表示されるので「Update Names」ボタンをクリックします。
 一旦ログアウトし、再ログインすると再びダイアログが表されるので、
 「次回から表示しない」をチェックし、「古い名前のままにする」をクリックします。


10. ゲストセッションを無効にする。

  以下のコマンドを実行し、再起動するとゲストセッションが無効化されます。

   $ sudo sh -c ‘printf “[SeatDefaults]¥nallow-guest=false¥n” > /usr/share/lightdm/lightdm.conf.d/50-no-guest.conf’


11. updatedb の無効化

  updatedb は毎日1回、すべてのファイル、フォルダをチェックして DB に名前を書き込む
  ようになっています。
  これは著しく HDD をアクセスするので、負荷が上がり、HDD の寿命にも影響するので、
  無効化します。

   $ sudo chmod 644 /etc/cron.daily/mlocate


12. Gimpのインストールとスキャナーの動作確認

  Ubuntu Software Center で Gimp を検索し、インストールします。
  同じく、xsane もインストールして、Gimp からスキャンニングできることを確認。
  ファイヤウォールで、スキャナーポートがブロックされていることがありますので、
  これを許可設定します。


13. ブラウザとして、Chrome をインストール、起動確認し、Dock に登録します
 (省略可能)

  Firefox で「Chrome」を検索、Google のサイトからダウンロード、インストール
  します。
  ログインすれば、同期されます。


14. Thunderbird を Dash で起動確認し、Dock に登録します。

  メールアカウントを登録します。


15. Libreoffice の最新化

  ターミナルから

    $ sudo add-apt-repository ppa:libreoffice/ppa
    $ sudo apt-get update
    $ sudo apt-get dist-upgrade


  アップデートの結果、不要になったファイルを削除。

    $ sudo apt-get autoremove


  ※ ここでポイントは、apt-get updateの後にapt-get dist-upgradeを行うことです。 
    upgradeは全く削除されることなく、dist-upgradeは必要あらばファイルを削除する
    可能性があるわけです。

    今回、LibreOfficeの5.1..xから5.2.xへのアップグレードには、いくつかのファイル
    が削除される必要もあるので、dist-upgradeを利用することとなります。


16. 「設定->言語サポート」で Libreoffice 更新後の日本語環境を最新化します。


17. Google Drive を使えるようにします。


 ① gnome-control-center をインストールします。

   $ sudo apt-get install gnome-control-center

 ② これをターミナルから起動
  ( $ XDG_CURRENT_DESKTOP=GNOME gnome-cpntrol-center)。

 ③ 「オンラインアカウント」を開いて、「オンラインアカウントの追加」をクリック。

 ④ リストの中から「Google」を選択。

 ⑤ Google へのログインと、許可。

   これでファイラーから使えるようになっているはずです。


18. Dropbox を使えるようにする。

  Dropbox のサイトから ubuntu 用のアプリをダウンロード、ダブルクリックで
  Software Center が開き、インストールできるようになります。
  「インストール」ボタンをクリックしてインストーラーをインストールします。
  Dash からアプリケーション Dropbox を起動すると、インストールが始まります。
  画面の指示に従い、インストールします。
  下記のやり方でもできますが、ファイル名などが変更されない場合が
  あるので、Dropbox のダウンロードサイトで確認します。

   $ cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -

   新規作成した.dropbox-distフォルダから Dropbox デーモンを実行する。

   $ ~/.dropbox-dist/dropboxd

  /home/ユーザー名 に Dropbox フォルダが作成されているはずです。


19. LXDE と Lubuntu デスクトップ

  軽量デスクトップ環境の一つである、LXDE と Lubuntu をインストールします。

   $ sudo apt-get install lxde
   $ sudo apt-get install lubuntu-desktop


  再起動して Lubuntu にログイン、その後、再々起動して ubuntu から Lubuntu を
  削除します。

   $ sudo apt-get remove lubuntu-desktop
   $ sudo apt autoremove

  再び、再起動し、LXDE を選択してログインします。
  ログアウトができないときは

   $ sudo apt-get install lxsession-logout
  を実行します。


20. メニューエディターをインストールします。

  Synaptic パッケージマネージャで menulibre をインストールし、
  起動してメニューを編集します。
  使わないソフトウェアをメニューに非表示にしたり、カテゴリーを変更したりします。
  menulibre は非常に便利ですが、若干、動作がヘンなところあります。
  例えば、突然「システムツール」が消える、「Debian」の中のアプリケーション群
  が消える等々・・・
  「システムツール」が消えても、中のアプリケーションは「設定」の最後にそっくり
  移っていますからご安心を。
  壊れたメニューの復活は、

   ~/.config/menus/ 配下のファイル

  をすべて削除すると復活します(lxde-applications.menuが復旧)。
  メニューを開いて復活を確認します。

  なお、メニューのカテゴリーは

   ~/.config/menus/lxde-applications.menu

  アプリケーションは

   /usr/share/applications に、「〜.desktop」
  というファイルで属性や実行パスを含んでいます。

  

21. pdf エディター


 ① 文字、レイアウト、の追加・削除などの編集用です。

   Libreofiice Draw で pdf ファイルを読み込み編集できます。
   pdf でエキスポートすれば編集済みとして保存されます。
   Mac でも Libreoffice Draw でできますので互換があります。
  (私の場合、Mac では skim を多用してきましたが、これからは Draw にします)

   ※ skim は Mac ではビューワーとして位置づけることにしました。

 ② 複数ページの順序変更やサイズ、向きの変更、これも Draw でできます。

   pdf shuffler を使ってもできますが。


22. Mac と共通のアプリケーション

  atom: テキストエディター(Mac 版に比べて少々動作が重い)

   $ sudo add-apt-repository ppa:webupd8team/atom
   $ sudo apt-get update
   $ sudo apt-get install atom


  atom を起動して、「設定」を開き「+install」で検索し、「japanese-menu」と、

  「auto-encoding」を組み込みます。


  テキストエディターは同じアプリケーションである必要性はありません。


以上で、一通り、LXDE が快適に使える環境となったはずです。
Mac とほぼ同じように使えます。
onenote の編集やWebページのキャプチャーはブラウザからログインして使います。

起動時間とシャットダウン時間

 HDD  50s    10s

(WindowsVista HDDの場合: 起動 2分 以上、シャットダウン 30s。

HDDアクセスがおさまるまで 5分以上かかる状態)

 SSD  15s程度  5s以下

動作はlxdeはすごくキビキビしてて、まったくストレスがない。


23.自動起動のチェックと変更

  端末から以下のコマンドを実行します。

   $ sudo sysv-rc-conf

  次のような画面になります。





この中で [X] がサービスレベルに応じた自動実行対象を示します。
  空欄は自動実行対象外を示しています。
  変更は当該箇所にカーソル移動して、 space キーで [X] [ ]を切り替えます。



※※ より便利にするために


1. シャットダウンに妙に時間がかかるケースで、10程度で終了するには?

   $ sudo sed -i 's/#DefaultTimeoutStopSec=90s/DefaultTimeoutStopSec=10s/g' /etc/systemd/system.conf

  元に戻すには?

   $ sudo sed -i 's/DefaultTimeoutStopSec=10s/#DefaultTimeoutStopSec=90s/g' /etc/systemd/system.conf


 この設定を行った後にsystemdがアップデートされた場合、ソフトウェアの更新を実行
 すると、変更されている '/etc/systemd/system.conf' を最新バージョンの設定ファイ
 ルで置き換えますか? というダイアログが表示されるので「置き換える」ボタンを
 クリックしてアップデートした後、再び上記の設定を実行します。


2. ファイル・ディレクトリ共有

  以下を端末から実行

   $ sudo su             suモードに入る
   # mkdir /home/share      共有するディレクトリを作成
   # chmod 777 /home/share   フルアクセス属性を設定
   # gedit /etc/samba/smb.conf  sambaの設定ファイルをエディターで開く

  25行目:以下2行を追加

     unix charset=UTF-8
     dos charset=CP932


  30行目:必要に応じて変更

     workgroup=WORKGROUP

  51行目:コメントを解除してアクセス許可IP(群)を追記

     interfaces=127.0.0.0/8 192.168.xxx.0/24

  58行目:コメント解除して追記

     bind interfaces only=yes
     map to guest=Bad User


  最終行に追記

     [Share]          任意の共有名称を指定
      path= /home/share   共有フォルダへのパスを指定
      writable= yes      書き込み可
      guest ok= yes       ゲストユーザ許可
      guest only= yes      すべてゲストとして扱う
      create mode= 0777    ファイル作成をフルアクセス属性とする
      directory mode= 0777  フォルダ作成をフルアクセス属性とする
      share modes= yes     複数のユーザが同一ファイルアクセス時に警告

  保存して、geditを終了。

   # systemctl restart smbd    sambaの再起動
   # exit             suモードから抜ける
   $



以上です。





   


OpenVPNのインストールと設定

Raspberry Pi 3にOpenVPNサーバーを構築しました。


外で、ひかり電話を使うために、Asterisk で内線設定したスマホ子機をイントラネットにつなぐ必要があったためです。

ポートに穴を開けずに安全につなぐには、VPNが一番です。

最初は、光ルーターの VPN を使っていましたが、すぐに切れて使い物になりません。
常時接続にするにはスマホの root化が必要でしたが、これは抵抗がありました。

OpenVPN なら常時接続できる、ということでこれを構築したわけです。

最終的には、認証用のファイルを dd-wrt化したルーターに転用し、現在はこのルーター上で OpenVPN は動作していますので、Raspberyy Pi 3 上の OpenVPN サーバーは未起動状態にしてあります。



dd-wrt ルーターがなければ、Raspberry Pi 3 でもかまいませんが、我が家の場合、Raspberry Pi 3 には Asteriskが構築されていて、これは単独で動作するようにしたかったので、OpenVPN は dd-wrt ルーターに移しました。


もう1台、Raspberry Pi を用意してこれに構築しても結構です。


なぜ分けたかというと、セキュリティ上、万一いずれかのサーバーに侵入を許してしまっても、ほかのサーバーへの波及を防止するためです。

1.インストール

 # apt-get update
 # apt-get install openvpn easy-rsa libssl-dev openssl

2.証明書作成用ディレクトリの作成

 # make-cadir /etc/openvpn/easy-rsa
 # cd /etc/openvpn/easy-rsa

3.証明書作成用の環境変数の書き換え

このディレクトリ内に var というファイルがありますので、この中の下記部分を
書き換えます。

 EXPORT KEY_COUNTRY=”JP”        # 国:適当に
 EXPORT KEY_PROVINCE=”Chiba”     # 都道府県:適当に
 EXPORT KEY_CITY=”K-Cty”        # 市町村:適当に
 EXPORT KEY_ORG=”Home”          # 組織:適当に
 EXPORT KEY_EMAIL=”abcd@gmail.com”     # メールアドレス:適当に
 EXPORT KEY_OU=”PersonalUnit”      # 組織単位:適当に
 export KEY_NAME=”abcd” ← 任意

変更したファイルの読み込み。

 # source ./var   ➡ 次の ./clean-all の実行を促される。
 # ./clean-all

サーバーの秘密鍵、証明書の作成。

 # ./build-ca
 # ./build-key-server server ➡ サーバ名を入力(任意)

途中で、入力待ちが何ヶ所かありますが、すべて空欄のまま、または [y/n] はy を入力
して「enter(return)」

次に、Diffie Hellmanパラメーターを生成します。

 # ./build-dh ➡ 4〜5分かかります。

クライアント、サーバーに共通の秘密鍵を生成。

 # cd ./keys
 # openvpn --genkey --secret ta.key

ハイフンは2つ続けて記述 「- - g e n k e y」「- - s e c r e t」
クライアント鍵の作成。
一つ上のディレクトリに戻る。

 # cd ..
 # ./build-key-pass client ➡ クライアント名を入力(任意)

途中、以下のPEMパスワードの入力を促されるので、パスワード(任意)
「abcdefgh」を入力

 Enter PEM pass phrase:abcdefgh

確認のため、再入力

 Verifying – Enter PEM pass phrase:abcdefgh

これ以外は、すべて空欄のまま、または [y/n] はy を入力して「enter(return)」

作成したファイルを openvpn ディレクトリにコピー

 # cp ./keys/ca.* client.* ta.key dh2048.pem server.* /etc/openvpn

同じく、ca.* , client.* , ta.key を端末にインストールするために、共用ディレクトリ
にもコピー。

 # cp ./etc/openvpn/ca.* client.* ta.key /home/share

コピー先の /home/share のファイル群の権限属性を変えます。

 # chmod 777 /home/share/*

Mac を通じて、端末側にコピーします。

次に、/etc/openvpn/server.conf を以下の内容で編集します。

 port 443 ➡ 接続ポート番号(通常は 1194 ですが、443 がいいと思います)
 proto udp ➡ プロトコルはudp(tcpでも可)
 dev tun ➡ tun を定義
 ca ca.crt ➡ 証明書の指定(ディレクトリは同じ /etc/openvpn にあれば省略可)
 cert server.crt ➡ サーバ証明書
 key server.key ➡ サーバの鍵
 dh dh2048.pem ➡ 暗号の指定
 server 10.8.0.0 255.255.255.0 ➡ サーバの仮想ip とネットマスクを指定
 ifconfig-pool-persist ipp.txt ➡ クライアントに払い出したip のリストを入れておく器
 push "route 192.168.xxx.0 255.255.255.0" ➡ イントラネットのアドレスとネットマスク
 push "redirect-gateway def1 bypass-dhcp" ➡ トラフィックをすべて VPN 経由にする指定
 push "dhcp-option DNS 192.168.xxx.yyy" ➡ DNS サーバを指定(ローカル)
 push "dhcp-option DNS 8.8.8.8" ➡ DNSサーバを指定(グローバル)
 tls-server ➡ TLS認証するサーバとして有効化
 tls-auth ta.key 0 ➡ TLS認証の鍵と方向(0: サーバ、 1: クライアント)
 cipher AES-256-CBC ➡ 暗号化の種類
 user nobody ➡ 接続断時のユーザ属性を特権にしない
 group nogroup ➡ 同じく、ユーザグループ属性も特権にしない
 ;client-to-client ➡ クライアント間の通信をOK にするなら、コメントオフにする
 duplicate-cn ➡ 同じクライアント証明、鍵などを使用して複数のクライアント接続を許可
 persist-key ➡
 persist-tun ➡
 log openvpn.log ➡ ログファイル名
 log-append openvpn.log ➡ ログは追記方式
 status openvpn-status.log ➡ ステータスファイル名
 verb 3 ➡
 keepalive 10 120 ➡ キープアライブの間隔と時間


4.サーバーのりスタート

server.conf の保存後、openvpn を再起動します。

 # service openvpn restart


5.ファイヤウォールとフォワーディング

/etc/sysctl.conf の以下の行のコメントアウトを外します。

 ;net.ipv4.ip_forward = 1  net.ip4.ip_forward = 1

設定の反映のため、リスタートします。

 # sysctl -p

次に、仮想ネットワークから実ネットワークへのマスカレードを設定します。

 # iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

設定内容を保存します。

 # iptables-save > /etc/iptables/my_tables

次に、IPv6を処理しない設定をします。

 $ gksu gedit /etc/default/ufw

7行目の 「IPv6=yes」 を 「IPv6=no」に変更します。

下記の設定を ufw で行います。

 # ufw default deny
 # ufw allow in from 192.168.xxx.0/24 to 192.168.xxx.vvv ← xxx.vvvはOpenVPNサーバーのアドレス
 # ufw allow out from 192.168.xxx.vvv to 192.168.xxx.0/24
 # ufw allow in from any to 192.168.xxx.vvv port 443 proto udp ➡ dd-wrtでOpenVPNの場合、不要
 # ufw allow in on tun0 from 10.8.0.0/24 to 10.8.0.0/24 port 
  5060:5070,10500:10550 proto udp
 # ufw allow out on tun0 from 10.8.0.0/24 to 10.8.0.0/24 port
  5060:5070,10500:10550 proto udp
 # ufw allow in on tun0 from 10.8.0.0/24 to 192.168.xxx.vvv port
  5060:5070,10500:10550 proto udp
 # ufw allow out on tun0 from 192.168.xxx.vvv to 10.8.0.0/24 port
  5060:5070,10500:10550 proto udp
 # allow out from 192.168.xxx.vvv to any

ポート 5060~5070,10500~10550 は SIP/RTP を通すためです。
SIP サーバーがなければ設定不要です。

ufw のステータスで、設定を確認します。

 # ufw status numbered

ufw の設定結果は /etc/ufw/user.rules に格納されています。


6.HGW(ホームゲートウェイ)の設定

外部からの443/udp宛のパケットをOpenVPNサーバーに向けるため、
静的マスカレードの設定。

 宛先アドレス     : 192.168.xxx.vvv
 対象アドレス     : 自分のWAN側アドレス
 対象プロトコル  : udp
 宛先ポート   :443
 対象ポート   :443

次に、内部とのパケットを openvpn をゲートウェイとして行うため、
静的IPルーティングの設定

 宛先アドレス     : 10.8.0.0/24
 ゲートウェイ     : 192.168.xxx.vvv


7.ログローテーションの設定

以下のファイルを新規に編集。

 $ gksu gedit /logrotate.d/openvpn
  /var/log/openvpn {
  missingok
  notifempty
  sharedscripts
  postrotate
  /etc/init.d/openvpn restart 2 >&1 > /dev/null ll true
  endscript
  }

保存します。


8.クライアントの設定(以下は「OpenVPN クライアント」の場合、「OpenVpn for Android」は別のやり方)

sambaで共有したディレクトリに以下のファイルをコピーして、ファイル属性を解除しておく。

 # cd /etc/openvpn/
 # cp ca.* client* ta.key /home/share
 # chmod 777 /home/share/*

これらのファイルを編集。
geditで新規に以下のファイルを作成。

 tls-client
 key-redirection 1
 remote 12345678.dip.jp ← DDNSサービスに登録時のユーザー名
 cipher AES-256-CBC
 port 443
 proto udp
 <ca>
  ➡ ca.crtの BEGIN CERTIFICATE 〜〜 END CERTIFICATEをコピペ
 </ca>
 <cert>
  ➡ client.crtの BEGIN CERTIFICATE 〜〜 END CERTIFICATEをコピペ
 </cert>
 <key>
  ➡ client.keyの BEGIN CERTIFICATE 〜〜 END CERTIFICATEをコピペ
 </key>
 <tls-auth>
  ➡ ta.keyの BEGIN OpenVPN Static key V1 〜〜 END OpenVPN Static key V1をコピペ
 </tls-auth>

編集したら、client.ovpn というファイル名で保存。


9.端末の設定

Macからsambaで接続して、「client.ovpn」を取り出し、Google Drive にコピペ。
端末で Google Drive を開き、このファイルをダウンロードします。

Google Drive 上のこのファイルはコピペ後にセキュリティ上、念のために削除しておきます。

端末で OpenVPN クライアントを起動し、このファイルをインポートします。

WiFi を切断してモバイル LTE にして、パスワード:abcdefgh を設定し、connect でサーバーとの接続を確認してOK。


10.Androidでの接続時

  xx:xx GDG:SIOCGIFADDR(lo) failed

というエラーがでるが、これはlo がMACアドレスを持たないことからエラーになっています。
Androidのバグっぽい。

実際は無視してかまいません。









WHR-300HP2 の dd-wrt化と OpenVPN サーバー化

dd-wrt のサイトから v24-sp2 (01/10/14) std - build 23320 (firmware-jp.bin) をダウンロードしておく。

少しバージョンは古いが、安定しているバージョンです。



WHR-300HP2 は初期化して、PC と LAN 直結し、PC のアドレスを 192.168.11.1 に設定、Web管理画面を開いてファームウェアの更新を行う。


ID/PW は、"admin" / "password"


ファームウェアの更新が完了すると WHR-300HP2 は自動起動されるので、PC のアドレスを 192.168.1.2 として、192.168.1.1 のWeb画面を開く。

各設定項目のうち、変更設定しないものは割愛しています。


最初に、ID/PW(admin/abcdefgh:任意)を設定し、次に日本語化する。

[Administraion → Mangement]
  We Access
   Protocol : HTTP[✔] HTTPS[✔]
   Enable Info Site : Enable[✔]
   Info Site Password Protection : [  ]
   Info Site MAC Masking : Disable[✔]
  Routing
   Routing : Disable
   Language Selection
   Language : Japanese

【Apply Settings】をクリック


次に、ブリッジ化(ルーターモード無効化) と無線 LAN の無効化、その他の設定を行う。


[基本 → 基本]
  WAN Connection Type : Static IP --> ブリッジ接続
   WAN IP Address : 192.168.xxx.bbb(OpenVPN アドレス+1 にでも設定)
   サブネットマスク : 255.255.255.0
   ゲートウェイ : 192.168.xxx.zzz(V6プラスルーターの LAN側アドレス)
   Static DNS 1 : 8.8.8.8
  Router IP
   Local IP Address : 192.168.xxx.aaa(OpenVPN アドレス)
   サブネットマスク : 255.255.255.0
   ゲートウェイ : 192.168.xxx.zzz(V6プラスルーターの LAN側アドレス)
   LAN側DNS : 8.8.8.8
  Network Address Server Settings(DHCP)
   DHCP Type : DHCP Server
   DHCP Server : 無効
  Time Settings
   NTP Client : 有効
   Time Zone : UTC+09:00
   Summer Time (DST) : none
   Server IP/Name : ntp.jst.mfeed.ad.jp
【設定】をクリック


[基本 → DDNS]
  DDNS
   DDNS サービス名:No-IP.com(No-IP の場合)
   ユーザー名: 12345678 (No-IP の場合、No−IP 登録時のユーザー名)
   パスワード:abcdefgh (No-IP の場合、No−IP 登録時のパスワード)
   ホスト名: ijklmnpo.ddns.net(No-IP の場合、No−IP に登録したホスト名)
   IPが変更されても更新しない: [✔いいえ]
  オプション
   自動更新間隔: (毎日)
【設定】をクリック(次項の動作ステータスが反映されるまで少し時間がかかる)
  DDNS動作ステータス:
   Fri May 11 10:39:50 2018: I:INADYN: IP address for alias 'ijklmnop.ddns.net'
    needs update to 'WAN のグローバルIPアドレス'
   Fri May 11 10:39:50 2018: I:INADYN: Alias '
ijklmnop.ddns.net' to IP
    'WAN のグローバルIPアドレス' updated successfully.


PC の LAN 設定を192.168.xxx.ccc として、192.168.xxx.aaa をWebで開き直す。


[基本 → 経路] 変更なし


[無線LAN → 基本]
  物理インターフェースra0-SSID [] …
   Wireless Mode : AP
   Wireless Network Mode : 無効 --> WLAN無効化の場合
   Wireless Network Name (SSID) : 無効化の場合空欄でよい)
   Wilreless SSID Broadcast : 無効
   Network Configration : Bridged
【設定】をクリック


[無線LAN → 無線LANセキュリティ]
  WLAN 無効の場合、変更なし

[無線LAN → 詳細]
  Advanced Settings
   TX Power : 10(国内は電波法上、最大10)
【設定】をクリック


[ネットワーク → サーバー/サービス]
  DNSMasq
   DNSMasq : 有効
   Local DNS : 有効
   No DNS Rebind : 無効
   Additional DNSMasq Option : 以下の2行を記入
    interface=tun0
    no-dhcp-interface=tun0
  Secure Shell
   SSHd : 有効
   SSH TCP Forwarding : 有効
   Password Login : 有効
   ポート : 22
   (50922などに変更時は、ssh root@192.168.xxx.yyy -p 50922 となる)
  Telnet
   Telnet : 無効
【設定】をクリック


[ネットワーク → PPTPサーバー/クライアント]
  OpenVPN Server/Deamon
   OpenVPN : 有効
   Start Type : System
   Config as : Server[x]
   Server Mode : Router(TUN)
   Network : 10.8.0.0(VPN ネットワークの IP アドレス空間)
   Netmask : 255.255.255.0(VPN ネットワークのネットマスク)
   ポート : 1194 (デフォルトは 1194 : 任意のポート番号)
   Tunnel Protocol : TCP
   Encryption Cipher : AES-256 CBC(暗号化方式)
   Hash Algorithm : SHA1(ハッシュのアルゴリズム)
   Advanced Option : 有効
   TLS Cipher : None(TLS の暗号化はしない)
   LZO Compression : Yes(データの圧縮を LZO で行う)
   Redirect default Gateway : 無効(Additional Config で有効化するので)
   Allow Client to Client : 無効(VPN クライアント同士の通信の不許可)
   Allow duplicate cn : 無効(複数のVPN クライアントが同じ証明書等使用を不許可)
   Tunnel MTU setting : 1500
   Tunnel UDP Fragment : 空欄
   Tunnel UDP MSS-Fix : 無効
--------------------
 ※ 留意事項
  VPN クライアント側でフラグメンテーションがエラー検出される場合があり、
  サイズを 1390 にしてもなお発生することがあります。
  プロトコルが tcp の場合はいい、という報告もあります。
  エラー頻度は減るはずですし、発生しても多少応答が遅い場合がある程度なので
  無視しても構いません。
--------------------
   次に、認証用の ca.crt   server.crt  server.key  dh2048.pem  ta.key
   の中身をそれぞれ、
    "CA Cert"  "Public Server Cert"  "Public Server Key"  "DH PEM" 
    "TLS Auth Key"
   の各項にコピペする。
   これらは LINUX 上で OpenVPN を構築し作成したときのものを使う。

 ※ OpenVPN構築の仕方は別途ブログに記述しています。

 その後、[設定] でこれらを反映させて、 /tmp/openvpn 配下にこれらのファイルが
 作られるのを確認する。

 確認は、PC のターミナルから ssh root@192.168.xxx.yyy で入り、
 ls /tmp/openvpn で確認します。


   Additioan Config : 以下のテキストを入力する。
    push "route 10.8.0.0 255.255.255.0"(クライアントにアドレスを通知)
    push "redirect-gateway def1"(すべての通信を VPN 経由とする)
    push "dhcp-option DNS 10.8.0.1"(ローカル DNS を通知)
    push "dhcp-option DNS 8.8.8.8"(同上/公的 DNS も通知)
    dev tun0

【設定】をクリックして Additional Config を反映させる
  正しく設定されたかどうかを、ターミナルから
   cat /tmp/openvpn/openvpn.conf
  として確認する。


[セキュリティ → Firewall]
  Firewall 保護
   SPI Firewall : 有効
  追加フィルター
   ActiveXをフィルターする : [✔]
  インターネット側からのパケット遮断 : すべてチェック [✔]
  Impede WAN DoS / BruteForce : すべてチェック [✔]
【設定】をクリック


[管理 → コマンド実行]
  以下の内容を入力して、実行し 「Firewall スクリプト として保存」する。
   iptables -I INPUT 1 -p udp --dport 1194 -j ACCEPT
   iptables -I FORWARD 1 -s 10.8.0.0/24 -j ACCEPT
   iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE

  ファイヤウォールポリシーはデフォルトですべてACCEPTになっているが、
  spi(有効)なのでよしとする。
  dd-wrt ではデフォルトポリシーの変更はできないみたい。



以上で、dd-wrt 化と DDNS の設定、 OpenVPN サーバー化の設定は完了。


[管理 → 管理]

[再起動]をクリックしてすべての設定結果を反映させる。




クライアントから接続テストしVPN接続とSIPクライアントのオンライン、Web閲覧などができることを確認する。




【クライアントの設定:OpenVPN for Android】


1.全体設定

  起動後「設定」タブで全体の設定を行う。

  基本的にはデフォルト設定を使用する。

  「規定のVPN」:プロファイルを登録後、このプロファイルを指定する。

2.基本設定

  最初に上の方にある ○ に ➕ のボタンを押し、プロファイルを新規追加する。


  「プロファイル名」:任意
  「CA証明書」:ca.crt ファイルを指定
  「クライアント証明書」:client.crt ファイルを指定
  「クライアント証明書のキー」:client.key ファイルを指定
  「秘密のパスワード」:パスワードを設定

  これらのファイルは OpenVPN サーバーを別途 Linux などで構築して、その過程で
  作成されたファイルを Google Drive などを通じてスマホに取り込んでおいたもの。

  パスワードは同じく構築時に設定したパスワードを使用する。

  「接続先リスト」
   サーバーアドレス:DDNS で設定の自分の WAN ドメイン名
   ポート番号:標準的には 1194 です(サーバーで設定のポート)
   プロトコル:TCP
   接続タイムアウト:120(デフォルト)

3.IP と DNS

  「接続情報を取得する」:オン
  その他はすべてオフ

4.経路設定

  「IPv4」
   規定の経路に使用する:オン(すべてのトラフィックを VPN 経由とする)
  「IPv6」
   規定の経路に使用する:オフ

5.認証/暗号化
  「TLS サーバー証明書を要求する」:オン
  「TLS 認証を使用する」:オン
  「TLS 認証ファイル」:ta.key ファイルをインポートする
  「TLS Direction」:(1はクライアントの意味)
  「暗号化方式」:AES-256-CBC

6.高度な設定

  「ピア情報を送信する」:オン
  「カスタムオプションを使用する」:オン
   カスタムオプションには、auth-nocache と入力する
  これら以外はすべてデフォルトのまま

7.許可されたアプリ

  「VPN は選択したアプリ以外のすべてのアプリから使用されます」:オン
   アプリリストにはチェックはしない

8.生成された設定

  ここには、接続時に生成された内容が入っているので確認することができます。