のらぬこの日常を描く

ノージャンルのお役立ち情報やアニメとゲームの話、ソフトウェア開発に関する話などを中心としたブログです。

【auひかり】ネット不調時、ルータ(ホームゲートウェイ)を自動再起動する方法

どうものらぬこです。

今の住まいに引っ越してきて早7年。当初からずっとauひかりを使い続けております。

昼夜問わず、スピード的な不満を感じたことはほとんどないのですが、時々、LAN⇔WAN間のネットワーク通信ができなくなることがあります。ローカルエリア端末への接続は何の問題もないのですが、外に出ることが出来なくなる感じです。

待っていれば1~2分ほどで復活するし、頻度が多いわけでもないのですが、今回は、これを、動かなくなったらとりあえず再起動(今回はルータの再起動を行います)するという、消極的な手段で解決したいと思います。

auひかりの場合、ルータは市販のものを自由に使えるわけではなく、KDDI指定の機器を使う必要があります。

最新の性能がいいやつとか、セキュリティー機能がいろいろついてるやつとか、自由に選べないのは残念極まりないですが、ここで言ってもしょうがないのでこの辺は置いておきます。

普通のやり方でルータを再起動するには

Edge等のWebブラウザを立ち上げ、アドレスバーに http://192.168.0.1/ と入力します。ログインID/パスワードを聞かれるので、ログインIDに「adm」、パスワードは自分で設定したパスワード(設定した記憶がなければ「password」となっているはずです)を入力します。

左のサイドバーから「メンテナンス」を選び、さらに「再起動」というメニューを選びます。

再起動は40秒ほどかかるとメッセージが表示されますが、20~30秒ほどで完了します。

ブラウザにURL打ち込んで、ログイン情報打ち込んで、マウスをぽちぽちやるのもめんどくさいので、ネットにつながらなくなったら自動でルータの再起動をする監視スクリプトWindows標準のBATファイルで書いてみました。

bat標準の機能では、特定のURLにアクセスしたり、formのPOSTなどは出来ないので、そこはcurlというツールの力を借ります。

この辺の記事を見てインストールしてください。

Windows > curlを使う

curl を展開したディレクトリの下に、bin というディレクトリがあるので、そこに以下のようなファイルを batという拡張子で作成します。

@echo off

echo start on %date% %time% >> d:\reboot.log
:init

timeout 5 > nul
curl -u adm:password -i -s http://192.168.0.1/index.cgi/reboot_main -X GET > nul
ping -w 800 -n 1 www.google.com > nul
if errorlevel 1 goto warn1
goto init

:warn1
timeout 3 > nul
ping -w 300 -n 1 www.google.com > nul
if errorlevel 1 goto warn2
goto init

:warn2
ping -w 300 -n 1 192.168.0.1 > nul
if errorlevel 0 goto reboot
goto warn1

:reboot
curl -u adm:password -i -s http://192.168.0.1/index.cgi/reboot_main_set -X POST -d SESSION_ID=9F**********CA > nul
echo reboot on %date% %time%  >> d:\reboot.log
timeout 60
goto init

最後にクリプトの下の方、SESSION_ID=9F**********CA となっている個所の修正が必要です。

Webブラウザで、ルータの管理画面を表示して、「メンテナンス」「再起動」メニューを選びます。

選んだら、再起動画面のhtmlソースを表示してください(ブラウザ画面の適当な場所を右クリックして「ソースを表示」みたいなメニューがあると思うのでそれを選ぶと表示されます)。

ソース内の、

<input name="SESSION_ID" id="SESSION_ID" type="hidden" value="**********""/>

という個所を探し、value= 以降の英数字の文字をコピーし、スクリプトの -d SESSION_ID=... 以降の文字列と置き換えます。

また、ホームゲートウェイのログイン情報(adm:password となっている個所)や、ログの出力先(d:\reboot.log となっている個所)は、環境に合わせて適切に書き換えてください。

f:id:noranuk0:20180526175601p:plain

やっていることを簡単に説明すると、まずgoogle.com に ping を投げ、これが2回連続で失敗(応答なし)したらホームゲートウェイの再起動を行う、という処理を5秒ごとにひたすら繰り返します。

このバッチファイルをcurlを解凍したディレクトリ内の bin ディレクトリに保存して、エクスプローラからファイルダブルクリック等で実行すると、ネットワーク接続が切れたら自動的にホームゲートウェイを再起動してくれます。

コマンドプロンプトのウィンドウが表示されて邪魔、っていう方は、同じディレクトリに「reboot.vbs」などのファイルを作り、以下のように編集し保存してください。

CreateObject("WScript.Shell").Run "reboot.bat",0

batファイルのウィンドウはクローズボタンで終了し、今作った reboot.vbs を実行してください。

何もおきないように見えますが、何度もダブルクリックしないでください。reboot.bat はウィンドウ非表示の状態でバックグラウンド実行されています。

また、スタートアップに放り込んでおくと、Windows起動時に自動で動いてくれるのでもっと便利になります。

SESSION_ID もスクリプト内で自動取得するとか、頑張ればもうちょいましなものができると思うんですが、面倒くさいし、動いたからもうこれでいいやの精神で今回の作業はこれで終わりにすることにしまs。

最後までお読みいただいてありがとうございました。

ネットワークはなぜつながるのか 第2版 知っておきたいTCP/IP、LAN、光ファイバの基礎知識

ネットワークはなぜつながるのか 第2版 知っておきたいTCP/IP、LAN、光ファイバの基礎知識