auひかりの接続でいろいろ難儀しました DHCPがなんかヘン!

 今日のお話は、ネットワーク的にちょっとマニアックなお話です。
 しかし・・・・同じような現象に遭遇するかもしれない人のために、詳細に記述しておきます。

auひかり。自宅に直接光ファイバ回線を引き込むので快適な通信ができます
TEPCOひかり時代から、かれこれ9年使い続けていて快調なので、引越しの後も基本的にそのまま使い続けることにしました。


ただし、設備は新しく敷設しなおし。そしてauからレンタルという形になる"ONU(回線終端装置)"と"ホームゲートウェイ(ブロードバンドルータ )"(NEC製 Aterm BL900HW)は、旧宅で使用していたものは一旦返却となり、新品の機械が新しく配置されました。


ONUは光ファイバ回線上の光信号とLAN上の電気信号とを相互に変換する装置。
そしてホームゲートウェイは、いわゆるブロードバンドルータとして機能し、WANとLANとの接続点となります。

f:id:vfr750f2:20130328212729g:plain
・【図1】光ファイバ・ONU・ホームゲートウェイの接続系統

ホームゲートウェイのWAN(インターネット)側は、自らがDHCPクライアントとなってグローバルIPアドレスを自動取得するとともに、LAN側では自らがDHCPサーバになって、ローカルIPアドレスを管理します。


さっそくホームゲートウェイにLANケーブルを接続して、ノートPCからインターネットに接続できているかテストしました。

f:id:vfr750f2:20130328212730g:plain
・【図2】有線LAN接続による機能テスト

動作良好、サクサクです! さすが光クオリティー!
なんでも自動・・・・というのは性に合わないので、さっそくホームゲートウェイの設定を(出来る範囲で)カスタマイズ。


さて、このままでも良いのですが、有線接続だとケーブルが届く範囲でしか移動できないし、見栄えが悪いし・・・・
宅内の各部屋にLANケーブルを配線するのはまだ少し先の予定なので、無線接続にしたいですね。
ホームゲートウェイにも無線LAN機能が内蔵されているのですが、使うのにはなんと『月額525円』も取られちゃうので、手持ちの安価な"無線LANルータ(IO-DATA製 WN-G150TR)"を使ってしまい、こんな感じにしたいんです。

f:id:vfr750f2:20130328212731g:plain
・【図3】こんな感じで使いたいなぁ~

この無線LANルータ、売価は2千円台前半と非常に安く、主に出張サラリーマンが出先のビジホで手軽にWiFi環境を構築できるように開発された、マッチ箱サイズの機械。


取説がチープすぎるので色々調べた結果、無線LANルータには『ルータモード』と『アクセスポイントモード』があり、ルータモードだと(この機械=無線LANルータの)WAN側・LAN側[無線]が別ネットワークとなり、自身がアドレス変換機能を有し、かつDHCPサーバ機能も有し、LAN側を自動管理する動きをします。
対してアクセスポイントモードは、(この機械の)WAN側・LAN側[無線]を直結するブリッジイメージで、無線から受信した内容をそのまま(この機械の)WAN側に流したりその逆に送信したりします。


たまたまアクセスポイントモードになっていたので、何も考えずに接続するだけでした。

f:id:vfr750f2:20130328212732g:plain
・【図4】無線LANルータをアクセスポイントモードで接続した様子と、IP構成

無線LANのSSIDとパスワードだけ各端末に設定したら、スイスイ~と接続完了。なんだ・・・・アッという間でした。簡単簡単~


・・・・


数時間後・・・・


繋がらない・・・・、いや、全くつながらないのではなく、なんか不安定でつながる時とつながらない時が。
現象を細かく見ていくと、スマフォやノートPCを立ち上げた直後、IPアドレスを取得するためにDHCPで通信をするのですが、これがうまくいかなくてIPアドレスが振られていないみたい


えっ!(?)
LAN側DHCPサーバはホームゲートウェイ(NEC製 BL900HW)だから、こいつの動きがおかしいのか(?)
仕方なく、先ほどカスタマイズした設定を全てデフォルトに戻し再検証。やはり最初は良くてもしばらくするとダメ。ふてくされて寝てしまい、翌朝だとケロッとしていることもあるし、ダメなこともある。


う~む、何が起きているんだろう・・・・
DHCPの動きがこの不調に関与しているっぽいですが、初めて使うIO-DATA製無線LANルータもまだ100%信用できない・・・・こいつがDHCPパケットの邪魔をしている・・・・とか(?)


切り分けのため、無線LANルータをデフォルトの『ルータモード』として使用することにしました。
これだと、アドレス変換を2段階通るというムダがありますが、問題の切り分けのためですから仕方がない・・・・

f:id:vfr750f2:20130328212733g:plain
・【図5】無線LANルータを"ルータモード"で使用した場合の構成

端末側から見ると、DHCPサーバがNEC製ルータから、IO-DATA製に変わるという点が大きく、これによりDHCPサーバが変わった場合の動作が見られるわけです。


うほ~、調子が良くなりました
当然、接続直後の動作だけでなく、数時間放置した後の動きも良好。この構成で安定動作するのであれば、多少パフォーマンス的に不利でもイイヤ・・・・


・・・・


翌朝。
繋がらない・・・・
現象を見ていくと、端末側から無線LANルータまではpingが飛びますが、その先のホームゲートウェイまではpingが飛ばない・・・・
なんと、無線LANルータにログインしてステータス画面で確認すると、WAN側IPアドレスが『Dynamic IP disconnect』となっていて、LAN1におけるIPアドレスの取得がうまくできていないみたいです。
いや、正確には、無線LANルータ再起動直後の1回目の取得はうまくいくのですが、IPアドレスのリース時間を過ぎての延長時にIP再取得の通信ができなくなっているのかなぁ・・・・(?)(?)(?)(?)


ますますホームゲートウェイのDHCPサーバ機能が怪しくなって来ました。
なんか、DHCPサーバ機能の動きがトロいとか、はたまた立ちあげてから時間が経過するとハングアップしているのか・・・・とかいろいろ想定。
無線ルータはアクセスポイントモードに戻し、最終兵器、プロトコルアナライザの登場。ネットワークに流れる全データを盗みとり表示するもので、仕事道具の一つでもあります。


LAN1の有線部分と、LAN2の無線部分でそれぞれ、DHCPの動きを中心にデータの解析をしていきます。


IPアドレスが再取得できなくなった際のバケットを確認すると・・・・

調査1
1 ホームゲートウェイは、端末からの"DHCP Request"に対してきちんと回答している。ただし"DHCP NAK"否定応答していた。
2 端末側は、"DHCP NAK"否定応答を受け取った後も、何度も同じ"DHCP Request"を送り続けてリトライをしている。
3 ホームゲートウェイは、同じリクエストを受けても、毎回否定応答をしている。
4 したがって、ホームゲートウェイのDHCPサーバ機能がスローダウンやハングアップしているのではなく、動作はしているが否定応答をしていることが認められた。

ということがわかりました。なんか一生懸命に何かやろうとはしていますが、うまくいっていない模様です。

 この辺りから先を詳細に読む場合は、DHCPの知識が有ることが前提となってきます。ググればどこにでも情報がありますが、1つだけ載せておきます。

http://docs.olab.org/XXX/netmemo/dhcp.html DHCP(Dynamic Host Configuration Protocol)

う~ん・・・・

疑問点1 なぜホームゲートウェイは、(1)項で、"DHCP ACK"肯定応答ではなく、"DHCP NAK"否定応答しているのか(?)
疑問点2 DHCP仕様的には、"DHCP NAK"否定応答を受け取った場合はそれ以上の交渉を諦めて、新たに"DHCP Discover"からやり直すことになっているが、なぜか端末はひたすら自分が使いたい(と思っている)IPアドレスを繰り返し"DHCP Request"で送出しては否定され、上位層アプリケーションがタイムアウトするまで繰り返している。
 なんじゃそりゃ(?)(?)(?)

こんな疑問が湧いてきます。


更に調べてみます。

調査2
5 スマフォなど再起動後など最初の1回目のDHCP要求をして正しくIPアドレスの割当を受ける。このまましばらく使った後に放置しておくと、スマフォ自体がスリープモードになる。
 さて、このまましばらく時間が経ち(例えば寝てしまい翌朝になる。)再度ネットワークに接続する機会となると、前回割当を受けたIPアドレスはリース期間は切れているので、本来であれば"DHCP Discover"からやり直すべきだが、以前のIPアドレスを引き続き使いたいという旨の要求"DHCP Request"をしてくる。
 これは、スリープ中の実際の時間経過を無視していると考えられる。もしくは、ダメ元で同じIPアドレスを使えるか問い合わせてみよう的な動きと思われる。
6 ホームゲートウェイはこの要求に対して、否定応答"DHCP NAK"していることは、動作的にも全く問題がないと考えられる。(自分がオファーしたIPでもなんでもないものをいきなりリクエストされてもねぇ・・・・)(ただし、端末が要求してきたIPアドレスが実際に使用中かどうかまで私は確認していないが・・・・。)

以上より、疑問点1に対しては、ホームゲートウェイは正しく動作していると考えられる。
また、疑問点2に関しては、端末側ソフトウェアがそのような動きをするのはどうしようもないので、事実として受け入れるしか無いと考えられる。全く別のSSIDとかに接続した場合は、"DHCP Discover"からやり直すロジックなのかしら(?)


ここまでで、どうもホームゲートウェイのDHCPサーバ機能のリース周りが調整できると良さげなので、さらに見ていたら、胡散臭い動きをしているのを発見。

調査3
7 ホームゲートウェイのDHCPサーバから払い出されるIPアドレスのリース時間は1時間であった。またこれを変更できる仕組みにはなっていなかった。
8 使っていて、かつ継続して使用しているスマフォ(Aとする。)が突然使用できなくなる事象が発生した。その時たまたま、別の端末(Bとする。)をネットワークに接続開始して、ホームゲートウェイのDHCPサーバからAが使っていたIPアドレスの割当を受けていた。
 ひょっとすると、DHCPサーバがアホで、同一のIPアドレスを割り当ててしまった可能性が考えられる。
9  無線LANルータをルータモードで使用した際も、しばらくするとWAN側IPアドレスが『Dynamic IP disconnect』となっていた事象は・・・・
a IPアドレスがリース期間中だが残り時間が少なくなったので"DHCP Request"にてリース期間の延長を試みたが、ホームゲートウェイのDHCP機能がアホで"DHCK NAK"否定応答をしていた。
b 無線LANルータのリース期間の管理がアホで、リース期間外になってから"DHCP Request"にてリース期間の延長を試みたが、ホームゲートウェイのDHCP機能にて"DHCK NAK"否定応答となった。
 のどちらかである可能性が考えられる。しかし、このどちらであるのかは確認テストをしていない。

う~む、怪しい~


ここで、こんな推論になりました。

推論
 どうも、ホームゲートウェイのDHCPサーバ機能で、リース時間の管理がシビアなのか。短いリース時間と相まって、そのリース期間の更新動作がうまくいっていない可能性が考えられます。
 端末側の要求動作が変なのは目をつぶろう。


というわけで・・・・

実験
 ホームゲートウェイDHCPサーバから振り出されるIPアドレスが重複してしまう可能性を解消してみるために、同DHCPサーバ機能の設定で『MACアドレス毎の固定IPアドレス割り当て設定』機能を利用して、自宅で使用するすべての端末のMACアドレスに対して、それぞれ固定のIPアドレスを割り当てるように手動で設定を実施してみました。

この設定をすると、リース時間が『Infinite』(無限大)としてIPアドレスが振り出されるという副次的な効果もみられました。


すると、そもそも端末側からは短い間隔での"DHCP Request"そのものが発生しなくなりましたし、スリープから復活した際に"DHCP Request"を送出した時も、ホームゲートウェイ側から素直に"DHCP ACK"肯定応答をする動作に替わりました。

効果の確認
 設定をして3日が経過しましたた、DHCPサーバとの通信は極めて順調に行われ、端末は快調に使用できています。
 いままでは半日もすれば通信ができない事象に陥っていたため、本件対策により効果があったことが認められました。

なんだか、個人宅で使うから、接続される端末台数がたかが知れているのでこんな対策が効きましたが、業務で使用するならば混乱間違いなしのような気がします。


もし、世界の誰かが私と同じ壁にぶち当たったときにお役に立てますように・・・・

無線LAN IO-DATA製 WN-G150TR ファームウェアバージョン 1.04
ホームゲートウェイ Aterm BL900HW ファームウェアバージョン 1.2.3