pslaboが試したことの記録

はてなダイヤリーからはてなブログに引っ越してきました

この日記は現在実行中の減量記録を含む個人的なメモとして始めましたが、最近はコンピュータやガジェット、ハック、セキュリティネタのほうがメインになっております。

はてなダイヤリー時代はカテゴリ分けが適当だったのですが、これはそのうち直します。


文鎮化した WHR-G301N を Macbook air or Pro retina から復旧させる

WHR-G301N を DD-WRT 化して使っていたのですが、ファームウェアをアップデートしようとしたら、別の機種のを間違って焼いて文鎮化。。。ググってみると修復手順は判ったのですが、Macbook air or Pro retina の場合は若干の工夫が必要だったので忘備録として残すメモ。

この手順でできること

  1. WHR-G301Nに純正のファームウェアを強制的に書き込む。

必要なモノ

  1. 流し込みたいファームウェア
  2. USB or Thunderbolt LAN アダプタ

あると便利なもの

  1. イーサネットハブ

これが有ると、大変便利です。無い場合は少々しんどい。

手順の中で "arp -s" を行いますが、これは Macbook が有線LANに接続済みの状態で行う必要があります。有線LANに接続されていない状態では "arp -s" が失敗します。しかし今回の復旧では作業開始の時点で WHR-G301N の電源を落としています。だから WHR-G301N と Macbook を直結した場合は LAN がアクティブではないために、予め arp を実行しておくことができない。

そうすると直結の場合は WHR-G301N の電源を投入後、有線LANが有効な状態となったことを確認して "arp -s" を実行し、さらにタイミングを合わせて tftp も行うことになります。この間、僅か7秒ですよ。これって無理とは言わないけど、かなり厳しいです。

でも、イーサネットハブがあれば、予め LAN 接続が有効な状態で arp -s を実行した段階までは事前に準備しておけます。あとはタイミングを合わせて WHR-G301N の電源投入と tftp の実行を行うだけです。

手順概略

  1. Macbook と WHR-G301N を接続します。ハブが別にある場合は Macbook と WHR-G301N の間に挟みます。
  2. Macbook に接続した LAN アダプタのIPアドレスを 192.168.11.2 に設定します。
  3. ターミナルで "sudo arp -s 192.168.11.1 WHR-G301NのMACアドレス" を実行し、WHR-G301N の MAC アドレスに対して 192.168.11.1 のIPアドレスを紐づけます。
  4. 別のターミナルを開き、ping 192.168.11.1 を実行します。
  5. WHR-G301Nの電源を入れて7秒待ち、tftp コマンドで純正ファームウェアを流し込みます。
  6. ping の応答が帰ってくるようになったら、Web の管理画面にアクセスしてみます。

上記の手順を自動的にやってくれるスクリプト

この手順をスクリプトにしてみました。ただし Mac 側の NICIPアドレス設定は含んでおりませんので、これは行った上でご利用ください。また、このスクリプトは「イーサネットハブを別途準備する」ことを前提に書いています。


また、このスクリプトは WZR-HP-AG300H に tftp でファームウェアを流し込む場合にも使えることを確認しています。

#!/bin/sh

macaddr=$1
firmware=$2

# パラメタ数が合わないときは中止
if [ $# != 2 ]; then
	echo ""
	echo " $0 MACアドレス ファームウェアのファイル名"
	echo ""
	exit 1
fi

# ファームウェアが無ければ中止
if [ ! -f $firmware ]; then
	echo ""
	echo " ファームウェア $firmware が見つかりません。中止します。"
	echo ""
	exit 1
fi

echo "以下の内容で実行します。"
echo "実行する場合は enter を、中止する場合は ctrl + c を押してください。"
echo " MACアドレス $macaddr"
echo " ファームウェア $firmware"
echo ""
echo "※"
echo "enter を押すと、arp 実行のためにログインアカウントのパスワード入力を要求します。"
read

echo "MACアドレスとIPアドレスの紐付けを解除します"
sudo arp -s 192.168.11.1 $macaddr

if [ $? -ne 0 ]; then
	echo "sudo arp の実行に失敗しました。処理を中止します。"
	echo ""
	exit 1
fi

echo "enter を押して3秒後に WHR-G301N の電源を入れてください。"
echo "画面にはカウントダウン表示が出ます。"
read


# 3秒カウントダウン
for i in $( seq 3 -1 1 ) ; do
	echo "$i\r"
	sleep 1
done

echo "電源を入れてください。"
sleep 1

# 7秒待つ
for i in $( seq 1 7 ) ; do
	echo "$i\r"
	sleep 1
done

echo ""
echo "tftpを実行します"
(
cat<<EOF
verbose
connect 192.168.11.1
binary
put $firmware
EOF
) | tftp

echo ""
echo "MACアドレスとIPアドレスの紐付けを解除します"
sudo arp -d 192.168.11.1

echo ""
echo "終了しました。念のために ping 192.168.11.1 を実行して、応答が返ってくるのを待ってください。"