あっかぎのページ

ネット環境が壊れた?! Raspberry Piルーター化

20150717_3

ここ2,3日ネット環境トラブルに見舞われています。紆余曲折してRaspberry Piをルータにしました。
2015/7/18(ハマったことに追記)

ネットが遅い

なぜか急にネットが遅くなってしまって、PCでネット接続できない日が2,3日続きました。

20150717_2

家のネット環境は上の図のようになっていて、ルータを介して家の中のPC/iPhone/iPad/Raspberry Piがネットにつながっています。

どの端末でもネットが遅くなっていたので、まずはルータを疑いました。今まで使えていたので「部品のどれかが壊れたのかな」と思って分解したのがこの写真。

20150717_1

ルーター自体もかなり熱を持つので、コンデンサあたりがパンクしていると思いきや、以外とそうでもなさそうでした。電源まわりの電圧もいろいろチェックしてみましたが、これも大丈夫。ACアダプターからの電圧も安定しているので、どうやらこれも問題なさそう。

ということで、どうやら最初に疑ったルーターのハード故障ではなさそうでした。

PCを再インストール

サブディスプレイ

いろいろ調べると、どうやらルーターとPCを接続したときに問題が発生してそうです(PCをOFFしてネットを止めると他の端末はきちんとネットにつながりました)。

ということで、PCのドライバー周りを見てみたり、USBのWifiを使って別経路でネット接続してみましたが全滅。そこで、最終手段の再インストールをしてみました。再インストールは以前にもやったことがあるので、同じような手順でやりました。

けれども、結局PCをつなぐとネット環境が全滅する症状が直りませんでした。「新しいSurface Proを買おうか」とネットで値段を調べるくらいには迷走していました。

Raspberry Piのルーター化

20150717_3

Raspberry Piがルーターとして使えるのを思い出したので、これを使ってPCが悪いのかルータが悪いのか問題を切り分けられないかと考えました。

眠っていたRaspberry Piの初期モデルと4GBのSD、USB-Wifiを持ってきてルーターにできないかやってみました。結果は大成功!!手順とかはネットでいろいろ出ていますので、このあたりを参考にさせてもらいました。

Raspberry Piのルーター化でハマったこと

20150717_4

ただ、1つハマったことがあったので、それをメモにして残します。

ルーター化の基本事項は次を設定することです。

  1. /etc/network/interfaces
  2. hostapd
  3. isc-dhcp-server
  4. iptables

参考サイト通りにやっていけば普通にルーター化できるそうです。

ところが、ぼくの場合はhostapdやisc-dhcp-serverのサービスを動作させると、無線LAN(wlan0)のipアドレス設定がリセットされてしまってうまく動作しませんでした。(上の起動後の画面でもエラーが出ています)

2つ目の参考サイトのように、再起動後に次のように無理やりwlan0のipアドレスを割り当ててdhcpサーバーを起動させることでなんとかうまく動作しました。

$ sudo ifconfig wlan0 192.168.42.100 netmask 255.255.255.0 up
$ sudo service isc-dhcp-server start

実はこれを起動スクリプトのrcに設定したら、起動不良になってレスキューモードでなんとか復帰するトラブルとかもありました。わざわざ起動してからコマンドを入力するのも面倒くさいので、起動時のエラーを調べてみました。

Not running dhcpcd because /etc/network/interfaces ... failed!

これに関してGoogleで調べると

これに関する投稿があって、内容を見るとraspberrypi-net-modsに原因があるとのこと。そこで下記のように再インストールしました。

$ sudo apt-get install --reinstall -o Dpkg::Options::="--force-confask" raspberrypi-net-mods

これで解決!!

理由はよくわかりませんが、起動後にifconfigでipアドレスを割り当てなくてもRaspberry Piがルーター動作するようになりました。めでたしめでたし?

2015/07/18追記

やっぱり上の方法はめでたくありませんでしたw 起動直後にwlan0にipアドレスが割り当てられないことがあって、手動でipアドレスを割り当てないといけないことがありました。

$ ip a

...
3: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN qlen 1000
    link/ether 00:24:a5:0a:f1:b1 brd ff:ff:ff:ff:ff:ff

ip aをするとwlan0にipアドレスが割り当てられないことがわかります。同じ症状で悩む人もいました。

やっぱり解決方法は、手動でipアドレスを割り当てていることを起動スクリプトでやるみたいです。ということで、自分ももう一度rcスクリプトを見直してやり直しました。

$ sudo vi /etc/rc.local

...
ifconfig wlan0 192.168.10.1 netmask 255.255.255.0 up
/etc/init.d/isc-dhcp-server start
/etc/init.d/hostapd start

exit 0

/etc/rc.localの起動スクリプトの末尾のexit 0の手前に、3行追加します。それぞれの役割は

  • wlanにipアドレス割り当て
  • dhcpd立ち上げ
  • hostapd立ち上げ

これでほんとの解決!! 前回同じことをやって無限ループになったのは記述ミスでした・・・orz

起動直後にもきちんとipアドレスが割り振られるようになりました

$ ip a

...
3: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN qlen 1000
    link/ether 00:24:a5:0a:f1:b1 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.1/24 brd 192.168.10.255 scope global wlan0
       valid_lft forever preferred_lft forever

おわりに

実はアイ・オー・データの安物ルーターのAir Portも持っていてそれも検証に使ったのですが、こちらもネットが安定しませんでした。そこへRaspberry Piをルーター化したところ、今までで一番安定してネット接続できています。

家の中では、PC/iPhone/iPad/iPad mini/Raspberry Piと5台が接続する環境ですが、まったくトラブルなく使えています。もとの回線がADSLのため、通信速度は3Mbps程度が限界なのでRaspberry Piルーターがボトルネックになるようなことはありませんでした。

眠っていた部品とかを使ってお金をかけずにできたことと、新しいSurface Proを買わなくてよかったことにほっとしています。