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 ファイルを作りその中に記述するという二つの方法が見つかりました。

#WiFi
/usr/sbin/route add -net 192.168.1.0 netmask 255.255.255.0 wlan0
#LAN
/usr/sbin/route add -net 192.168.179.0 netmask 255.255.255.0 eth0
#Router on USB port
/usr/sbin/route add -net 192.168.179.0 netmask 255.255.255.0 eth1
#VPN
/usr/sbin/route add -net 192.168.100.0 netmask 255.255.255.0 vpn_nic
/usr/sbin/route add default gw 192.168.1.1 wlan0
/usr/sbin/route add default gw 192.168.179.1 eth1

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

上記はLANとWiFiをつなげている状態です。GWは特に設定しなくても自動的に設定されるようです。ルータにもよると思いますので、もし設定されないのなら、ここに記述してもいいと思います。この辺は、まだ試行錯誤です。

VPNのルートの追加もここに書けば設定されます。rc.local やautostart で設定してもうまくいったり行かなかったりするので、お勧めしません。

色々自動起動の方法を調べていて、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は /etc/interfacesや/etc/dhcpcd.confでも設定できるし、GUIで設定することができますが、/etc/resolv.conf が優先されるようです。ここに間違った記載があると他を変えても有効になりません。/etc/resolv.conf に下記の記述をした方が確実の様です。ルーターからDHCPでIPアドレスを受け取ると、/etc/resolv.conf がルーターによって書き換わるので、これもあまりお勧めしません。

nameserver 8.8.8.8

また、DNSの設定が正しいかを確認するのにnslookup コマンドを使いますが、標準では入っていないので、apt install dnsutils を先に入れておくのがよいです。ネットにつながらないと入れることもできませんので。