Amazonのアソシエイトとして、ラズパイダ(raspida.com)は適格販売により収入を得ています。詳しくは当サイトの プライバシーポリシーをご覧ください。
2018年頃、ラズパイでisc-dhcp-serverとhostapdでアクセスポイント化を試したことがあります。今更ながらisc-dhcp-serverに再トライしてみて、どうも上手く行かない。エラーもよく分かりませんでした。
先人のブログでもisc-dhcp-serverはたくさん扱われていて、簡単にできるだろうと思っていたら見事にハマった。一応は動作したのですけど、なんだか腑に落ちない。
私の理解力不足は否めませんが、あれ?って思うところを列挙してみます。
dhcpcd.confとdhcpd.conf
設定ファイルのdhcpcd.confとdhcpd.confは別物です。
- /etc/dhcpcd.conf (DHCPクライアントデーモン)
- /etc/dhcpd/dhcpd.conf (DHCPサーバデーモン)
isc-dhcp-serverはサーバですから2です。
これはDHCPに関することですから、今回だけ特別というわけではありません。つい混乱してしまう部分です。
hostapdとのアクセスポイント化は一応できる
結論を先にいうと、isc-dhcp-serverとhostapdでWi-Fiのアクセスポイント化は一応できました。一応というのは、自分自身がよく理解していない点と、インターフェイスwlan0に手動でIPアドレスを指定しないとエラーが消えなかったからです。
調べてみると、no subnet declaration for wlan0のエラーは、どうもisc-固有のエラーらしく、ip rangeを指定するコマンドを実行しないとダメみたいでした。
全て設定した後、このコマンドを実行すればエラーなく動作した。
sudo ip addr add 192.168.2.0/24 dev wlan0
このコマンドでアドレスを追加しないと、どこをどう変更してもエラーが消えずに動作しません。都合3回試しました。
よく見たエラー
トライしていて、よく見たエラーは2つ。
exit-codeのエラーとNo subnet declaration for wlan0のエラー。
exit-codeのエラーが出たら、confファイルを疑ってください。書式が間違っている可能性があります。空白スペースやセミコロンが無いとか諸々です。Syntaxエラーみたいな感じ??
No subnet declaration for wlan0は先程のIPアドレスをwlan0に指定すると消えた。
No subnet declaration for wlan0 (no IPv4 addresses).
** Ignoring requests on wlan0. If this is not what
you want, please write a subnet declaration
in your dhcpd.conf file for the network segment
to which interface wlan0 is attached. **
基本的な設定
/etc/dhcpd/dhcpd.confデフォルトから2箇所、option domain-nameとoption domain-name-serversのグローバル設定をコメントアウトし、最下行に追記していきます。
#option domain-name "example.org";
#option domain-name-servers ns1.example.org, ns2.example.org;
default-lease-time 600;
max-lease-time 7200;
# The ddns-updates-style parameter controls whether or not the server will
# attempt to do a DNS update when a lease is confirmed. We default to the
# behavior of the version 2 packages ('none', since DHCP v2 didn't
# have support for DDNS.)
ddns-update-style none;
IPアドレス範囲を追記した。
subnet 192.168.2.0 netmask 255.255.255.0 {
range 192.168.2.2 192.168.2.99;
option subnet-mask 255.255.255.0;
option routers 192.168.2.1;
option domain-name-servers 192.168.2.1;
option broadcast-address 192.168.2.255;
}
仮に192.168.2.0のセグメントとした場合、rangeで払い出し範囲を指定、ルーターやブロードキャストアドレスは上記のようにしました。
■Pi 5は8GBモデルがオススメ
authoritative;
ここまでは良いのですが、authoritative;をどうしたのものか。
クライアントがDHCPにIPアドレスを要求してきたとき、アドレスのセグメントが違う場合の返答処理に関することで、syslogではエラーが見受けられた。
この DHCP サーバーがそのサブネットに対して権限がある場合、「authoritative;」と書いてください。 ディレクティブ サブネット宣言またはそれを囲む何らかのスコープ内サブネット宣言 - 例えば、dhcpd.conf ファイルの先頭に記述します。
syslog
#デフォルトでコメントアウトされているauthoritative;
# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
# authoritative;
authoritative;
# not authoritative;
しかし、authoritative;を有効/無効しても変わらず、not authoritative;で上手く動作したり、ちょっと意味が分からない。
問題は、IPアドレスの範囲だと思う。宣言がされていない点は同感。
空の範囲を指定すると良いとネットで見掛けた。
subnet 192.168.2.0 netmask 255.255.255.0 {
}
これもよく分からない。
これに加えて、rangeなどのオプションの部分も含めた箇所を追加すればいいのか?
subnet 192.168.2.0 netmask 255.255.255.0 {
}
subnet 192.168.2.0 netmask 255.255.255.0 {
range 192.168.2.2 192.168.2.254;
option broadcast-address 192.168.2.255;
}
固定IPアドレス
/etc/dhcpcd.confに設定して固定IPアドレスは効く。ただ、それだとサービスをストップしてもIPアドレスが異なるセグメントのまま固定になり、自宅LAN環境に繋がりません。当たり前といえば当たり前。
どうやら、ハードウェアのMACアドレスを指定するやり方で固定IPアドレスにできるらいい。しかし、これ効いているのか分からない。
MACアドレスは別に調べる。
ip link show wlan0
link/ether xx:xx:xx:xx:xx
設定したけど反映されていない気がする。
host testpi {
hardware ethernet (MACアドレス);
fixed-address 192.168.2.21;
}
それに、host «ホスト名»のホスト名は、何に合わせているのかも分からない。(自分がそこまで調べていないとも言う)
IPv4にWi-Fiを設定
Wi-Fiをアクセスポイント化するため、インターフェイスを明示的に指定するとあった。デフォルトでは何も入っていない。
sudo nano /etc/default/isc-dhcp-server
INTERFACESv4="wlan0"
INTERFACESv6=""
しかし、これも効いているのか分からない。実際に動作もしたので、間違いないとは思うが、海外の掲示板では一旦eth0を入れてからwlan0にしろといった理解不能な記述もあったりして、やはりよく分からない。
素人ながら、どうもIPアドレスとサブネット関連のどこかにバグがあるような気がする。
isc-dhcp-serverとhostapdを使ったアクセスポイント化
Raspberry Pi 4とbullseyeの環境下でも、isc-dhcp-serverとhostapdでのアクセスポイント化はできました。冒頭のように、一部だけ手動でコマンドを打ったことで解決しました。
しかし、再起動すると・・・。
エラーメッセージに度々登場するscopが気になる。subnet declarationもよく目にする。
宣言する方法が何だかよく分かりません。
最後に、isc-dhcp-serverは既に開発が止まってサポートも切れています。
**ISCは、2022年末にISC DHCPのメンテナンス終了を発表しました。**ISCは、既存の加入者に専門的なサポートサービスを提供し続けますが、それ以上のメンテナンスリリースを発行するつもりはありません。
ISC DHCPは、DHCPサーバー、リレーエージェント、およびクライアントを実装するための完全なオープンソースソリューションを提供します。ISC DHCPはIPv4とIPv6の両方をサポートしており、大容量および高信頼性のアプリケーションでの使用に適しています。DHCPは、MPL 2.0ライセンスの条件の下で無料でダウンロードできます。ISC DHCPのクライアントとリレー部分はメンテナンスされなくなりました。
ISCは新しいDHCPサーバーKeaを開発し、ほとんどのサーバー実装でISC DHCPを置き換える予定です。
新しいkeaもissuを見る限りバグだらけのようですね。
ラズパイでWi-Fiのアクセスポイント化なら
DHCPサーバは関係なく、単にWi-Fiのアクセスポイント化をするなら他の方法もあります。
どちらも試してみて問題ありませんでした。
Raspberry Pi OSでもオプションでNetworkManagerが使えます。今後のことを考えるとNetworkManagerの方が導入しやすい印象です。ただ、NetworkManagerも高度なのか、複雑でまだよく分かっていません。
ネットワーク周りは難しいけど、上手く行くと楽しいですね。
参考





