====== PPP 接続を行う (発信・状態監視機能あり) ====== Ubuntu Linux 標準のネットワーク接続機能((ifup/ifdown, /etc/network/interfaces による)) で PPP 接続を行うと、 3G/4G のデバイスが不具合を起こすなどした場合に接続を維持することができません。\\ デバイス自動リセット、自動再接続などの機能がないためです。 遠隔地に置いたときのように、人手で回復処理を行うことが難しいケースで安定運用を行うことができるよう、\\ 下記機能を設けた Upstart の Job "ppp" を用意しました((v2.1.5rc8 より))。 * PPP 接続失敗時、もしくは切断時の 3G/4G デバイス自動リセット * Persist (持続) 接続機能 ※ v4.0.0 より、systemd になっています。 \\ ===== 設定 ===== ==== PPP 接続設定 ==== [[mae3xx_ope:connect_ppp:start]] を参考に、PPP 接続の設定を行います。pppconfig で作成した設定を前提にしています。\\ ※ v2.2.0β9 より PPP 設定ファイル生成機能、v2.7.0α2 より PING による接続状態監視機能を追加しました。 \\ ==== Upstart Job / systemd service 設定 ==== Upstart Job / systemd service の設定ファイルは、/etc/default/ppp となります。\\ サンプルファイルを下記に示します。 START=yes PROVIDER=DTI PERSIST=1 RESET_ON_FAIL=1 RESET_ALWAYS=0 RESET_AT=03:00 RESET_WAIT=30 HOLDOFF=5 RETRY=3 \\ 設定項目はそれぞれ下記のとおりです。 ^ 項目 ^ 内容 ^ 値 ^ 初期値 | |START|使用するかどうか| yes/no | no | |PROVIDER|PPP 設定ファイル名|/etc/ppp/peers/ 以下のファイル名| | |PERSIST|持続接続を行う| 1/0 | 1 | |RESET_ON_FAIL|異常発生時、3G/4G デバイスをリセットする| 1/0 | 1 | |RESET_ALWAYS|PPP 切断時、常に 3G/4G デバイスをリセットする| 1/0 | 0 | |RESET_AT(("RESET_ALWAYS" とセットで設定することにより、定時通信モジュールリセットが可能))((v2.2.1 より))|PPP 強制切断時刻指定| hh:mm((24 時間制で指定)) | | |RESET_WAIT|3G/4G デバイスリセット後の待ち時間 [秒]| | 30((接続失敗->モジュールリセットが頻発する場合、この数値を調整してください。)) | |HOLDOFF|PPP 再接続待機時間 [秒]| | 5 | |RETRY|PPP 異常判断までのリトライ回数((v2.7.0α2で追加))| | 3 | \\ v2.2.0β9 より PPP 設定ファイル生成機能 (上記 PROVIDER 部分)、v2.7.0α2 より PING による接続状態監視機能を追加しました。\\ コメント ("# PPP config" の行) 以下の情報から、PPP 接続に必要な設定ファイルを生成します。 START=yes PROVIDER= PERSIST=1 RESET_ON_FAIL=1 RESET_ALWAYS=0 RESET_WAIT=30 HOLDOFF=5 RETRY=3 # PPP config APN=dream.jp PDPTYPE=IP DEMAND=1 IDLE=60 DEVICE=AUTO DEFAULTROUTE=1 AUTH=CHAP ACCOUNT=user@dream.jp PASSWORD=dti NETMODE= # monitor MONITOR=yes MONITOR_TARGET=www.centurysys.jp MONITOR_INTERVAL=30 MONITOR_FAIL=2 MONITOR_LOG=yes \\ ^ 項目 ^ 内容 ^ 値 | |APN|Access Point Name| | |PDPTYPE|PDP Type| IP / PPP | |DEMAND|オンデマンド接続を行う| 1 / 0 | |IDLE|無通信タイムアウト時間 [秒]| | |DEVICE|3G/4G 通信デバイス| LISA-U200 / KYM11 / UM03-KO / AMP520 / ttyLISA0 / ttyKYM11 / ttyUM03KO0 / ttyAMP0 / AUTO((v2.3.0β4 より)) | |DEFAULTROUTE|PPP にデフォルトルートを設定する| 1 / 0 | |AUTH|認証方式| CHAP / PAP / NOAUTH | |ACCOUNT|PPP アカウント| | |PASSWORD|PPP パスワード| | |NETMODE((MA-E350/NL, MA-E350/SL でのみ有効))|通信モード選択 (LTE / 3G / 自動)| AUTO / WCDMA / LTE / NONE(設定しない, AMM5220) | |CARRIERID((AMM570/LN940A 搭載機のみ有効))|キャリア/PLMN 選択| 1(NTT docomo) / 2(KDDI MNO) / 3(Softbank) / 4(SIM Free) / 5(KDDI MVNO) / 5桁の数値((PLMN直接指定, AMM570 or LN940A のみ対応)) | |MONITOR|PING 接続監視機能 有効/無効 (PERSIST 接続でのみ有効)| yes/no | |MONITOR_TARGET|PING 監視先アドレス| FQDN or IPアドレスで指定 | |MONITOR_INTERVAL|PING 送信間隔| 秒で指定 | |MONITOR_FAIL|PING リトライ回数| | |MONITOR_LOG|PING 実行結果を記録する/しない| yes/no | \\ v2.8.4β1 より、PPP 接続に成功した場合、設定ファイル(/etc/default/ppp) に **CONNECT_OK=1** という項目が追加されるようになりました。\\ これは、AMTelecom Module が APN 設定/アカウント設定を行うたびに内蔵フラッシュの書き換えを行い、限界((書き換え回数 Max10 万回))を超えるとモジュールが故障するのを回避するためです。\\ SIM 変更などの理由でエディタで設定を変更する場合、**CONNECT_OK=1** の行を削除してください。 ※ よって、AMTelecom Module の場合、**wvdial** の利用は推奨しません。通常、wvdial を使う場合の説明では、初期化文字列で APN 等を設定するようになっているためです。 \\ この設定ファイルから PPP 接続の設定ファイルを生成する条件は下記となります。 * "PROVIDER" を設定していないこと 生成・編集するファイルは下記となります。 * /etc/ppp/peers/ppp0 * /etc/ppp/chap-secrets * /etc/ppp/pap-secrets * /etc/chatscripts/ppp0 \\ === 生成されたファイルの例 === 下記設定ファイルから生成された設定ファイルの例です。 START=yes PROVIDER= PERSIST=1 RESET_ON_FAIL=1 RESET_ALWAYS=0 RESET_WAIT=30 HOLDOFF=5 # PPP config APN=dream.jp PDPTYPE=IP DEMAND=1 IDLE=60 DEVICE=LISA-U200 DEFAULTROUTE=1 AUTH=CHAP ACCOUNT=user@dream.jp PASSWORD=dti \\ == /etc/ppp/peers/ppp0 == # This optionfile was generated by gen_pppconfig. # # unit 0 hide-password noauth connect "/usr/sbin/chat -v -f /etc/chatscripts/ppp0" debug modem lock /dev/ttyLISA0 460800 defaultroute replacedefaultroute noipdefault user "user@dream.jp" remotename ppp0 ipparam ppp0 demand nopersist idle 60 usepeerdns \\ == /etc/ppp/chap-secrets == # Secrets for authentication using CHAP/PAP # client server secret IP addresses "mopera" * "mopera" "user@dream.jp" ppp0 "dti" "user@au.au-net.ne.jp" * "au" \\ == /etc/chatscripts/ppp0 == # This chatfile was generated by gen_pppconfig. # '' ATZ OK ATE0 ABORT BUSY ABORT 'NO CARRIER' ABORT VOICE ABORT 'NO DIALTONE' ABORT 'NO DIAL TONE' ABORT 'NO ANSWER' ABORT DELAYED ABORT ERROR TIMEOUT 30 OK AT+CGDCONT=1,"IP","CHAP:dream.jp" OK AT OK ATDT*99***1# CONNECT \d\c \\ ===== Job の起動/停止 ===== 上記設定ファイルで、"START=yes" としている場合、MA-E3xx が起動したときに自動で起動します。\\ 手動で 起動/停止 を行う場合、Job 名 "ppp" で制御します。 ==== Upstart の場合 ==== user1@plum:~$ sudo service ppp status [sudo] password for user1: ppp stop/waiting user1@plum:~$ sudo service ppp start ppp start/running, process 1669 user1@plum:~$ sudo service ppp status ppp start/running, process 1669 user1@plum:~$ sudo service ppp stop ppp stop/waiting user1@plum:~$ sudo service ppp status ppp stop/waiting user1@plum:~$ \\ ==== systemd の場合 ==== === 状態確認 === user1@plum:~$ sudo systemctl status ppp.path [sudo] password for user1: ● ppp.path Loaded: loaded (/etc/systemd/system/ppp.path; enabled; vendor preset: enabled) Active: inactive (dead) since Wed 2018-08-29 09:32:21 JST; 25s ago Aug 29 09:07:03 plum systemd[1]: Started ppp.path. Aug 29 09:32:21 plum systemd[1]: Stopped ppp.path. user1@plum:~$ sudo systemctl status ppp.service ● ppp.service - PPP wrapper Loaded: loaded (/etc/systemd/system/ppp.service; disabled; vendor preset: enabled) Active: inactive (dead) since Wed 2018-08-29 09:32:21 JST; 56s ago Process: 512 ExecStart=/usr/local/sbin/ppp_wrapper (code=killed, signal=TERM) Process: 508 ExecStartPre=/usr/local/sbin/gen_pppconfig (code=exited, status=0/SUCCESS) Main PID: 512 (code=killed, signal=TERM) Aug 29 09:32:21 plum systemd[1]: Stopping PPP wrapper... Aug 29 09:32:21 plum pppd[523]: Script /etc/ppp/ip-down started (pid 1139) Aug 29 09:32:21 plum pppd[523]: sent [LCP TermReq id=0x2 "User request"] Aug 29 09:32:21 plum pppd[523]: Terminating on signal 15 Aug 29 09:32:21 plum pppd[523]: rcvd [LCP TermAck id=0x2] Aug 29 09:32:21 plum pppd[523]: Connection terminated. Aug 29 09:32:21 plum ip-down[1145]: Terminate PPP monitor. Aug 29 09:32:21 plum pppd[523]: Script /etc/ppp/ip-down finished (pid 1139), status = 0x0 Aug 29 09:32:21 plum pppd[523]: Exit. Aug 29 09:32:21 plum systemd[1]: Stopped PPP wrapper. \\ === 接続開始 === user1@plum:~$ sudo systemctl start ppp.path \\ 接続が完了した場合の状態 user1@plum:~$ sudo systemctl status ppp ● ppp.service - PPP wrapper Loaded: loaded (/etc/systemd/system/ppp.service; disabled; vendor preset: enabled) Active: active (running) since Wed 2018-08-29 09:34:02 JST; 23s ago Process: 1234 ExecStartPre=/usr/local/sbin/gen_pppconfig (code=exited, status=0/SUCCESS) Main PID: 1235 (ppp_wrapper) CGroup: /system.slice/ppp.service ├─1235 /bin/bash /usr/local/sbin/ppp_wrapper ├─1246 pppd call ppp0 nodetach ├─1309 ddclient - sleeping for 590 seconds ├─1318 /bin/bash /usr/local/sbin/ppp_monitor ppp0 └─1321 sleep 60 Aug 29 09:34:10 plum pppd[1246]: primary DNS address 202.231.208.71 Aug 29 09:34:10 plum pppd[1246]: secondary DNS address 202.231.208.72 Aug 29 09:34:10 plum pppd[1246]: Script /etc/ppp/ip-up started (pid 1266) Aug 29 09:34:11 plum ddclient[1306]: WARNING: file /etc/ddclient.conf, line 233: Invalid Value for keyword 'lo Aug 29 09:34:11 plum ddclient[1308]: WARNING: skipping host: example.warplink.ne.jp: 'login=' is an invalid lo Aug 29 09:34:11 plum ip-up[1312]: Execute PPP monitor. Aug 29 09:34:11 plum ddclient[1313]: WARNING: file /etc/ddclient.conf, line 233: Invalid Value for keyword 'lo Aug 29 09:34:11 plum pppd[1246]: Script /etc/ppp/ip-up finished (pid 1266), status = 0x0 Aug 29 09:34:11 plum ddclient[1319]: WARNING: skipping host: example.warplink.ne.jp: 'login=' is an invalid lo Aug 29 09:34:11 plum ppp_monitor[1320]: ping monitoring is disabled. \\ === 切断 === user1@plum:~$ sudo systemctl stop ppp.* \\ 切断が完了した場合の状態 user1@plum:~$ sudo systemctl status ppp.path ● ppp.path Loaded: loaded (/etc/systemd/system/ppp.path; enabled; vendor preset: enabled) Active: inactive (dead) since Wed 2018-08-29 09:35:17 JST; 5s ago Aug 29 09:34:01 plum systemd[1]: Started ppp.path. Aug 29 09:35:17 plum systemd[1]: Stopped ppp.path. user1@plum:~$ sudo systemctl status ppp ● ppp.service - PPP wrapper Loaded: loaded (/etc/systemd/system/ppp.service; disabled; vendor preset: enabled) Active: inactive (dead) since Wed 2018-08-29 09:35:18 JST; 11s ago Process: 1235 ExecStart=/usr/local/sbin/ppp_wrapper (code=killed, signal=TERM) Process: 1234 ExecStartPre=/usr/local/sbin/gen_pppconfig (code=exited, status=0/SUCCESS) Main PID: 1235 (code=killed, signal=TERM) Aug 29 09:35:17 plum systemd[1]: Stopping PPP wrapper... Aug 29 09:35:17 plum pppd[1246]: Script /etc/ppp/ip-down started (pid 1330) Aug 29 09:35:17 plum pppd[1246]: sent [LCP TermReq id=0x2 "User request"] Aug 29 09:35:17 plum pppd[1246]: Terminating on signal 15 Aug 29 09:35:17 plum pppd[1246]: rcvd [LCP TermAck id=0x2] Aug 29 09:35:17 plum pppd[1246]: Connection terminated. Aug 29 09:35:17 plum ip-down[1336]: Terminate PPP monitor. Aug 29 09:35:18 plum pppd[1246]: Script /etc/ppp/ip-down finished (pid 1330), status = 0x0 Aug 29 09:35:18 plum pppd[1246]: Exit. Aug 29 09:35:18 plum systemd[1]: Stopped PPP wrapper. \\ ===== 設定例 ===== ==== SORACOM (plan-K) ==== # PPP config APN=soracom.io PDPTYPE=IP DEMAND= IDLE= DEVICE=AUTO LOCALADDR= REMOTEADDR= NETMASK= DEFAULTROUTE=1 AUTH=CHAP ACCOUNT=sora PASSWORD=sora NETMODE= CARRIERID=5 \\ ==== au.net ==== # PPP config APN=au.au-net.ne.jp PDPTYPE=IP DEMAND=1 IDLE=30 DEVICE=KYM11 DEFAULTROUTE=1 AUTH=CHAP ACCOUNT=user@au.au-net.ne.jp PASSWORD=au \\ ==== ServersMan LTE (DTI) ==== # PPP config APN=dream.jp PDPTYPE=IP DEMAND=1 IDLE=30 DEVICE=LISA-U200 DEFAULTROUTE=1 AUTH=CHAP ACCOUNT=user@dream.jp PASSWORD=dti \\ ==== IIJ モバイルサービス/タイプ I ==== # PPP config APN=iijmobile.biz PDPTYPE=IP DEMAND= IDLE= DEVICE=AUTO LOCALADDR= REMOTEADDR= NETMASK= DEFAULTROUTE=1 AUTH=CHAP ACCOUNT=mobile@iij PASSWORD=iij NETMODE= CARRIERID=4 ※ AMM570 もしくは LN940A 搭載の機器のみ対応 \\ ==== さくらのセキュアモバイル ==== # PPP config APN=sakura PDPTYPE=IP DEMAND= IDLE= DEVICE=AUTO LOCALADDR= REMOTEADDR= NETMASK= DEFAULTROUTE=1 AUTH=NOAUTH ACCOUNT= PASSWORD= NETMODE= CARRIERID=44020 <--- 接続するキャリア(NTT docomo/KDDI/Softbank により変更) ※ AMM570((v4.2.0rc8から対応))もしくは LN940A 搭載の機器のみ対応 \\ ===== PPP 接続状態監視 ===== v2.7.0α2 より追加した、常時接続中(PERSIST)(("DEMAND" 接続の場合、この機能により PPP が切断されなくなるため利用できません)) に通信モジュールがきちんと動作しているか PING による監視を行う機能です。\\ PPP 接続中、指定した間隔で指定したアドレスに PING(ICMP ECHO) を送信し、連続して指定した回数応答がない場合 PPP を切断します。 下記のようなログが記録されます。 Apr 5 10:27:45 plum pppd[2478]: Script /etc/ppp/ip-up started (pid 2521) Apr 5 10:27:46 plum ip-up: Execute PPP monitor. Apr 5 10:27:46 plum pppd[2478]: Script /etc/ppp/ip-up finished (pid 2521), status = 0x0 Apr 5 10:27:46 plum ppp_monitor: ppp monitor started, PPP I/F: ppp0, TARGET: www.centurysys.jp, INTERVAL: 30, MAXFAIL: 2 Apr 5 10:28:16 plum ppp_monitor: ping to www.centurysys.jp succeeded. Apr 5 10:28:46 plum ppp_monitor: ping to www.centurysys.jp succeeded. Apr 5 10:29:16 plum ppp_monitor: ping to www.centurysys.jp succeeded. \\ 手動でアドレスを指定すると、対象が落ちてしまった場合もPPPを切断してしまう為、v5.3.0より、LTE通信の経路上で応答するホップ数が最小のアドレスを対象にするように変更しています。(("host in the route: ..." の出力がでていれば動作しています。)) Feb 22 10:44:07 gemini ppp_manager[992]: PPP Manager[992]: (8) PPP connected. Feb 22 10:44:37 gemini ppp_manager[992]: PPP Manager[992]: check_with_icmp: responding hosts found in the route: address: 1XX.XXX.XXX.XXX, hops: 1. Feb 22 10:44:37 gemini ppp_manager[992]: PPP Manager[992]: LTE: host in the route: 1XX.XXX.XXX.XXX \\ ===== 注意点 ===== PPP 接続の各種設定 (APN / アカウント / パスワード) が誤っている場合、常に **"接続失敗"** と判断されてしまいます。\\ この機能(特に 3G/4G デバイスのリセット)を有効にする前に、手動での PPP 接続ができることを確認してください。 \\