RaspberryPi[39] add route 及びDNS が有効にならない

DHCPでルーターからIPをもらうときには、適切に route 情報が書きこまれるけれど、固定IPにしたときは、route が何も設定できない状態になります。起動時の自動起動で設定スクリプトを書きましたが、全然反映されないので悩みました。手動で

sudo /usr/sbin/route add -net 192.168.1.0 netmask 255.255.255.0

と入れると、ちゃんと設定されるので記述自体は間違ってない。

ラズパイの自動起動の方法はいくつかあります。一番簡単なのは、/etc/rc.local に記載する方法で、私はずーとこれで行っていました。今回、同じように記述しても反映されないので、色々調べた結果、route コマンド はネットワークリンクがUPしてからではないと駄目なようです。SIOCADDRTのエラーが出る場合はまずそれでしょう。それをキーワードで調べると、/etc/network/if-up.d の下に static-route ファイルを作り記述するという方法と、/lib/dhcpcd/dhcpcd-hooksの下に 40-route ファイルを作りその中に記述するという二つの方法が見つかりました。

/usr/sbin/route add -net 192.168.1.0 netmask 255.255.255.0 wlan0
/usr/sbin/route default gw 192.168.1.1

結論から言えば、後者の40-route ファイルに記述することでちゃんと route が設定されました。

ちなみに。ラズパイ4はrc.localで呼んだスクリプトでもちゃんと設定されます。なぜか2Wはこれがうまくいかない。時間を待って起動させれば、有効になったかもしれません。

色々自動起動の方法を調べていて、crontab を利用する方法があるのを初めて知りました。これは。route の設定はできません。やはり、リンクがUPしてから行わないとだめなので。

キーワード機能
@reboot起動時に1度だけ実行
@yearly1年に1度だけ実行(「0 0 1 1 *」と同等)
@annually@yearlyと同じ
@monthly1カ月に1度だけ実行(「0 0 1 * *」と同等)
@weekly1週間に1度だけ実行(「0 0 * * 0」と同等)
@daily1日に1度だけ実行(「0 0 * * *」と同等)
@hourly1時間に1度だけ実行(「0 * * * *」と同等)
crontabの便利な記述

過去のラズパイを設定していくと、DNSが有効にならないものがいくつか出てきました。DNSは 8.8.8.8 を入れるのですが、過去の設定で 192.168.1.1 のルータのアドレスを設定しているものがありました。DNSは /etc/interfacesや/etc/dhcpcd.confでも設定できるし、GUIで設定することができますが、/etc/resolv.conf が優先されるようです。ここに間違った記載があると他を変えても有効になりません。DNSの設定が正しいか、確認するのに nslookup コマンドを使いますが、標準では入っていないので、apt install dnsutils を先に入れておくのがよいです。ネットにつながらないと入れることもできませんので。