みつきんのメモ

組み込みエンジニアです。Interface誌で「Yocto Projectではじめる 組み込みLinux開発入門」連載中

avahi-autoipdでDHCPサーバが無い場所でもIP通信

USB-Ethernet変換を使って、ラズパイなどのボードと1対1で接続するようなケースでは、 DHCPサーバをいちいち用意するのが面倒。

そういう場合でも、SSHでログインなどしたかったりするのでTCP/IPで通信したい。 そこでavahi-autoipdを使うとIPアドレスを解決できるようにしてくれる。

これで何がしたいかというと、組み込み機器として作成したラズベリーパイにWebインターフェースで設定画面を用意したとして、 ブラウザでアクセスするためにはHTTP(TCP/IP)での通信が必要となる。 その時のネットワークに確実にDHCPサーバが存在するわけではないため、 DHCPサーバがなくても、OSインストール後に設定なしの状態で確実にWebインターフェースにアクセスできるようにしたい。

yoctoで追加

local.confで次のパッケージを追加する。

IMAGE_INSTALL_append = " avahi-daemon \
                 avahi-autoipd \
"

マシンがラズベリーパイ3だった場合、

avahi-daemonraspberrypi3.localの名前でアクセスできるようになる。

avahi-autoipdで、DHCPサーバがなかった場合IPv4LLにフォールバックされ169.264.XXX.XXXのようなIPアドレスが割り振られるようになる。

PC側のネットワークインターフェースの設定

有線LANがひとつしかない場合などは特に設定はいらない(と思う)。

USB-Ethernet変換を使う場合は、そのNICを有効化するために適当にIPアドレスを割り当てる。

NICがそれぞれ有効になったら、次のようにpingを打ってみる。

$ ping raspberrypi3.local
PING raspberrypi3.local (169.254.13.XXX) 56(84) bytes of data.
^C
--- raspberrypi3.local ping statistics ---
23 packets transmitted, 0 received, 100% packet loss, time 22102ms

名前に対してIPアドレスが振られているのに、通信ができない場合はルーティングを設定してみる。

$ sudo route add -net 169.254.0.0 netmask 255.255.0.0 dev eth0 metric 99

eth0のところは適宜NICの名前に変更する。