ホーム » 「DHCP」タグがついた投稿

タグアーカイブ: DHCP

システム

最近の投稿

アーカイブ

カテゴリー

2022-03-26-クラス●さんへのメモ

このページは、息子の入居先のネットワークトラブルの原因を(私が自宅に帰るため)、ネットワーク関連の担当者に状況を伝えるためのメモです。

本格入居までの状態

  • 2月末に契約を行い、荷物運び込みなどを順次行い、3月上旬に入居。
  • ルータは、Buffalo WSR-1800AX4S ver 1.03 で、今回の新居にあわせ新規購入品。
    この際にはルータのデフォルト設定(Auto/Router)のスイッチで接続。
  • 「インターネット@スタート」で初期化が行われたが最初は繋がったが、すぐに切れてしまった。
    しかし、色々と接続設定を変えていたら、何らかの”偶然”だったのか接続できるようになった。入居日から翌日までは、そのまま接続ができていた。
  • この後、帰省先に帰り1週間後に本格的な入居(3/26)

3/26のメモ

  • 入居先に到着し、インターネットを接続するが、ここでも「最初の10秒?から30秒ほどは繋がったがすぐにインターネットに接続できない状態」となる。
  • ルータのWAN状態は…
    • つながる時は 192.168.200.6 などのIPアドレスリースをうけている。
    • 切れた状態になると「インターネット@スタートで接続するが繋がらない状態」になる。
  • クラス●さんに連絡を入れ、担当者さんからの連絡を受ける。

担当者さんのアドバイス以降

  • 担当者さんのアドバイスにより、ルータをManual / Access Point モードにしたが、一時的に繋がったが30秒程度接続ができた後、繋がらなくなる。(過去の状態と同じ)
    • PCは、192.168.200.15 が割り当てられた。
    • ping 192.168.200.1 を実行したが30秒ほど後で応答が途切れる。
  • こちらの判断で、ルータを Manual / Router モードに変更し、再起動したが、同様の症状。
    • 自宅ルータも Buffalo で、過去に「インターネット@スタート」でトラブったことがあるので Auto / Router モードは信用していない。
  • 動かない原因が古いファームウェアのバグといったトラブルを避けたいので、別途Webで入手したファームウェアに更新。ただし、バージョン番号は同じ ver 1.03なのでファーム更新はただの気休めの予定だった。
  • しかし、ファームウェア更新ご再起動したら、安定してつながる状態となった。
    (意味不明!?!?!?!?)

原因の推測

  • つながったのにすぐに切れる。
  • 他の居住者からはトラブル連絡はない。
    • トラブルが全建物的なものなら別途クレームがあるはず
  • 今回のこのルータは、帰省中の1週間使われていなかった。
  • ルータからのDHCPのリース時間は、259200sec = 3日間
  • 一旦繋がったら、安定して使えている。

これらのことより

  • リース済みIPアドレスの再利用(リース延長/DHCP Request)は正しく動いている。
  • 新規接続はつながるけど、すぐに切れる。DHCP Offer が失敗する?
  • リース期間の情報が、サーバと端末で、ずれていることが原因ではないか?
  • 上流のDHCPサーバ(192.168.200.1) の時計がずれているのではないか?
  • すぐに繋がらなくなるのは、他のPCにリース済みのIPアドレスを、時計がずれることが原因で、間違って再延長許可(DHCP Request に ACK を返答)するため、他のPCとIPアドレス重複を起こして繋がらなくなる?(他の重複したIPアドレスを使っているPCがパケットを出すまでは一時的に使える)
  • リース期間が切れる前にリース延長(DHCP Request)を行う端末は、安定してつながる。

2022-03-27 追記

  • 朝、ネットワークを使ったら無事に使える状態であった。
  • しかしながら、10分ほど安定して利用できていたが、再び繋がらない状態となる。
  • 繋がらない状態になった時に、改めてルータの通信パケットを見ると、エラーパケットが0なので、ケーブルが抜けかかっているとか、コリジョンが発生しているとかの原因ではないと思われる。
  • ルータの通信LOGには、WAN側接続のトラブルに関する記録なし。

WiFi中継器の先につながる有線デバイス

WiFiルータの更新で、WEX-733Dを再利用した。

WiFi-router – – – WEX733D=(ether)-REGZA+Raspberry-Pi

当初、中継器WEX 733D の先につながる TV,ラズパイが最初は繋がっていたけど、接続が切れる。確認をしてみると、ルータ配下から中継器の先のデバイスは、どれも中継器のMACアドレスに見える。このため、我が家でのDHCPでMACアドレスに紐づけた固定アドレスを割り振る方式では、中継器でアドレスがすり替えられているために、MACアドレスが DHCP サーバ側で正しく把握できない。このため、正しくIPアドレスが取れない。

しかたがないので、中継器の先の有線デバイスは固定IPアドレスを割り振る。中継器をWiFiアダプターとして使う場合、DHCPで動的アドレスを振ったとしても、IPアドレスは変な状態になるだろうなぁ。固定IPアドレスにしないかぎりは、使い物にならないだろうなぁ。

dhcp-evalの使い方

自宅ネットワークでは、利用する機器の状態を把握するために固定IPアドレスを割り振っているが、DHCP の hardware ethernet で、Mac アドレスをみて配布している。この DHCP のリース時に、状態に合わせた処理を起動するための機能がある。

on commit などで script を実行

on commit , on release , on expiry を設定すると、IPアドレス割り振り時にプログラムを起動できる。

# vi /etc/dhcp/dhcpd.conf
:
# IPアドレス割り振り時に on-commit.sh を起動
on commit {
    set clip = binary-to-ascii(10, 8, ".",
                 leased-address);
    set clhw = binary-to-ascii(16, 8, ":",
                 substring(hardware, 1, 6));
    execute("/etc/dhcp/on-commit.sh", clip, clhw);
}

# vi /etc/dhcp/on-commit.sh
#!/bin/bash
#   IPアドレスを割り振り時にメールを送る
IP=$1
MAC=$2
if [ -n "$IP" -a -n "$MAC" ]; then
    echo "$IP $MAC" \
    | /usr/bin/mail -s "dhcp on commit" foo@example.com
fi

on commit の例で示した方法は、DHCPがアドレスをリースする度に呼び出される。スクリプトは同期して行われるため、遅い処理の場合には アドレス割り振りに支障がでるかもしれない。よって、スクリプトはシンプルなものを使う必要がある。

自宅では、host { fixed-address … } で、固定しているとはいえ WiFi なスマホだと、電波強度不足で再接続が発生する時だと、頻繁にメールが届くことになる。接続情報を保存するなどの Script を書かないとウザぃ。

host 毎に script を実行

こういうことができると、状況に合わせてリースを制御したくなる。自宅で使う場合だと、子供が長い時間使っている場合には、IPアドレスのリースを失敗させて、ネットワーク接続を切りたいかもしれない。

こういう場合には、host … { } の中に、execute を埋め込むことができる。しかも、execute で実行される script の返り値で、lease を失敗させることもできる。

# /etc/dhcp/dhcpd.conf
:
host game-machine {
    hardware ethernet 00:11:22:33:44:55 ;
    fixed-address      192.168.11.222 ;
    execute( "/etc/dhcp/lease-check.sh ,
             "192.168.11.222" ,
             "00:11:22:33:44:55" ) ;
}

# vi /etc/dhcp/lease-check.sh

#!/bin/bash
#  DHCP接続を判定する script
IP=$1
MAC=$2
if [ -n "$IP" -a -n "$MAC" ]; then
    if [ アドレスを許可する条件 ]; then
        # 接続許可
        exit 1
    else
        # 接続禁止
        exit 0
    fi
fi

注意: 最初 lease-check.sh は許可するときに shell-script 成功時を表す exit 0 を返せばいいとおもったけど、逆だったな。

Google 検索

My Google   Yahoo

Microsoft

ファンサイト