先週、家のインターネットの接続がバンバン切れるという事象が発生した。
はじめは仕事中のVPNが切れるから、VPNが原因かと思っていたら、
そうではなく普通にインターネットも来れることから、うちのネットワークが悪いということがわかった。
うちはauひかりなのだが、ルーターがレンタルされる。これはホームゲートウェイという機器で、単なるルーターやモデムではなくてauひかりの接続の認証も行っているような機器があるのだが、ここで通信が切れるようだ。
なお、家にあるパソコンはすべて有線でつないでいる。
家の壁にLAN線を埋めているんだ
確認
なぜここがわかったかというと以下のように調べた
まずずっとgoogleにPINGを飛ばしつつ、別のマシンにもPINGをして、ルーター(ホームゲートウェイ)にもPINGを飛ばし続けた。
通信が切れたときに、googleにもルーターにも届かなかったけれど、同じスイッチングハブ経由している別のマシンにはpingが届いた。
つまり、ルーターが落ちていて、それより手前のハブやそれより先の回線ってわけではないと判断した。
どれくらい続くのか
どれくらいの頻度でルーターが落ちているのかを確認してみた。
確認方法は、RaspberryPiに常駐で動く、ずっとルーター宛に0.5秒間隔でpingを飛ばし続けるアプリを開発した。
届かなかったときの時刻を記していく
これで調べてみると、ほぼ10分間隔で切断されていることがわかった。
どれくらい10分間隔なのかというと誤差は数十秒。
機械的な故障で10分位で落ちるとかだったら、あるときはすぐに、あるときは1時間くらいは持っていて、平均していくと10分とかになるのが自然だが、
スケジュールが決まっているかのように10分間隔で続いてた。
10分で必ず起きるので、次に落ちるタイミングを予測するのも簡単だった
原因はなんだ?
こんなに周期性があるものであれば、ルーター内部で行われている周期性のある処理で落ちているのではないかと思った
例えばファームウェアの更新確認が10分間隔で行われていて、その確認処理でエラーが発生して再起動を起こしているとか
だが、一晩中記録していたPINGの結果によると、0:40から10:00までは再起動が発生していないのだ。
ファームウェアの更新とかは夜中にこそやりそうなものなにになぜ?
再起動が発生しない時刻との共通点の発見
発生している時刻、発生していない時刻がまるで自分が活動している時間みたいだった。
こっちの閉店時間がわかっているのかのようだった。
そこで気づいたのが、個人用パソコンのArchLinuxを入れているマシンの起動時間と同じかもしれない。
そこで、起きている間は意味もなく起動しているこのArchLinuxのマシンをシャットダウンしてみた。
するとさっきまで再起動を繰り返していたルーターがずっと起動するようになった。
それは自作監視アプリのデータからも一目瞭然だった。
つまり原因はルーターではなく、ArchLinuxだったのだ。
ArchLinuxは何をしている?
このマシンはNetworkManagerで有線でルーターとつながっている。
journalctlコマンドで調べていると、10分間隔でDHCPCDがなにか動いているのが分かる。
ただこれは切断されたあと、IP割り当てられなくなったときの処理かもしれない
ただネットワーク的な何かの通信をルーターに10分間隔で送っているらしい。
DNSやNTPは別のサーバーに設定している。
ほぼ放置していても起きているので、定期的にルーターとやり取りをしている何かの通信で、バグかなにかがあったため、ルーターがその不正なパケットを無視できず異常終了再起動をおこしたのかもしれない。
対処
通信エラーが発生したときに、ルーターが壊れたから先走って無線LANルーターを買ってしまった。本当はAUに決められたルーターしかつけられないんだけど、市販のものも使えるのかと思って買ってしまった。
でもこれが結果的に良かった。
auが貸し出しているルーターにそのルーターをつなげて、二重ルーターにした。
ArchLinuxはその新しいルーターにつなげるようにした。
新しいルーターはArchLinuxのその通信にエラー終了しなかった。
現象の見た目はルーターが再起動を繰り返すというものだったので、機械的な故障かと思ったが、そのパターンを調べてみると実際の原因というのは以外なところにあるのだなと思った。
原因を探り、本当に対処できるようにするためには、やはり一番大切なのは情報収集だな。
今回は落ちている時間の詳細がわかったからこそ対処できた。