2017年2月22日水曜日

raspberry PI B3 で dhcpサーバ構築(ありがち)

何台かPCをお使いの人の多くはDHCPサーバを何処かに立てていることだろう。ルータの機能を使ってる場合も多いかも知れない。

接続プロバイダが貸し出してるルータは貧弱な場合が多い

ケーブルインターネットから貸出のルータを使っていた時は、PCのIPアドレスが変化するという現象に悩まされた。結論から言うと、DHCPサービスの容積が小さく、新しい機器が接続してくる度に、古い機器の設定を忘れていく。次回のIP再発行では違うアドレスを発行してしまう。ありえるのかコレ。ちなみにcastlenet製。

NASキットのDHCPサーバ機能を使う?


最初はThecus、次はQnapのNASキットを使っていたのだが、何れもDHCP機能を内包しており、ネットワークインターフェース機能から概ね起動する。

DHCPサーバの機能そのものには不満は無いのだが、これらは何一つログを吐かないため、何が何のIPアドレスを獲得したか判らない場合がままある。

毎回 nmap で探すのも相当面倒くさいし、何のためのDHCPだって話。

結論、自作しよう


古いノートPCで運用するとかいう手もあるが、DHCPサーバ如きにCPUファンを回されても困る。一昔前では玄人志向の黒箱で、となったかも知れないが、今ではraspberry PIシリーズが完全な後任になったとおもわれる。

結局、raspberry PI でDHCPサーバ


前フリがようやく終わった。
何点かハマりがあるが、基本的にはあちこちのwebに書いてある通りで動く。

ハマりを次に述べる。
  • isc-dhcp-server は、
    • ネットワーク・インターフェース eth0 に、既知のnetmaskを必要とする。
    • 要するに、先にeth0のIPアドレスが決定していなければならない。
  • eth0のIPをアドレスに関する記述は色々あるが
    • dhclient / dhcpcd.confを使う方法は、isc-dhcp-server の後に起動するため、これは上手く動かない。
      • 小生が導入したのは、SDカードにraspbian入りだったため、比較的新しいバージョンであり、起動管理がsystemctlであった。
      • systemctlの依存設定はよくわからん orz
    • /etc/network/interface の eth0 に auto eth0 を書く。これだけと言えばこれだけ。
    • 煩雑なので dhclient / NetworkManager / dhcpcdは停止し、iface eth0 inet staticに統一した方が良いだろう。
後は、dhcp.leasesを WEBから見られるようにしておけば便利だろう。

次のような簡易なスクリプトを書いた。