先日Raspberry Piを自宅環境に導入する際も、同様にスタティックルートの設定が必要となったが、Raspberry PiのOSであるRaspbianは、CentOSなどのRed Hat系のLinuxと勝手が違ったこともあり、対応に少々苦労した。
今回は備忘録として、Raspbianでスタティックルートを追加した際の手順を記載することにする。なお、RaspbianはDebian系のLinuxとなるため、Ubuntu等の他Debian系Linuxでも同様の手順となると想定される。
環境について
今回はRaspberry Pi Zero Wに対して設定を行っており、Raspbianのバージョンは以下の通りとなる。$ lsb_release -a
------------------------------
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 9.1 (stretch)
Release: 9.1
Codename: stretch
------------------------------
スタティックルート設定手順 (一時的に追加)
取り急ぎスタティックルートを追加したい場合は、routeコマンドを利用すればよい。構文は以下の通り。route add -net <ネットワークアドレス> netmask <サブネットマスク> gw <ゲートウェイ> metric 1 <インターフェース名>
例として、192.168.11.0/24のゲートウェイを192.168.33.31にしたい場合は、以下の通り設定する。
$ sudo route add -net 192.168.11.0 netmask 255.255.255.0 gw 192.168.33.31 metric 1 wlan0
確認コマンドはrouteとなる。黄色網掛けのルートが追加されていることがわかる。ただし、あくまで一時的に追加するだけであり、OS再起動をすると消えてしまうので注意。
$ route
------------------------------
カーネルIP経路テーブル
受信先サイト ゲートウェイ ネットマスク フラグ Metric Ref 使用数 インタフェース
default 192.168.33.1 0.0.0.0 UG 302 0 0 wlan0
192.168.11.0 192.168.33.31 255.255.255.0 UG 1 0 0 wlan0
------------------------------
スタティックルート設定手順 (恒久的に追加)
OS再起動してもスタティックルートを消えないようにするためには、「/etc/network/if-up.d/static-routes」という設定ファイル(というかスクリプト)を新規に作成し、起動時にスタティックルートが追加がされるようにすればよい。$ sudo vi /etc/network/if-up.d/static-routes
------------------------------
#!/bin/sh
# Add Static Route
sleep 10
route add -net 192.168.11.0 netmask 255.255.255.0 gw 192.168.33.31 metric 1 wlan0
------------------------------
上記の通りスクリプトになっているので、実行権限を与えておく。
$ sudo chmod +x /etc/network/if-up.d/static-routes
$ ls -l /etc/network/if-up.d/
------------------------------
-rwxr-xr-x 1 root root 703 7月 26 2011 000resolvconf
-rwxr-xr-x 1 root root 484 1月 23 2017 avahi-daemon
-rwxr-xr-x 1 root root 972 6月 18 2017 openssh-server
-rwxr-xr-x 1 root root 112 3月 7 21:52 static-routes
-rwxr-xr-x 1 root root 1483 6月 2 2015 upstart
lrwxrwxrwx 1 root root 32 10月 14 21:18 wpasupplicant -> ../../wpa_supplicant/ifupdown.sh
------------------------------
なお、sleepコマンドで10秒の待ち時間を入れている理由は、DHCPにてIPアドレスを取得する前に本スクリプトが実行されてしまった場合、「SIOCADDRT: ネットワークに届きません」というエラーにてスタティックルートの追加に失敗するためである。何回か私の環境で試したところ、5秒だと失敗することがあるため、10秒と設定するのがよさそうだ。
【参考】「/etc/rc.local」で対応する方法
今回は「/etc/network/if-up.d/static-routes」というファイルにて設定する方法としているが、「/etc/rc.local」もOS起動時に実行されるスクリプトになっており、同様にsleepとrouteコマンドを記載することでスタティックルートの追加が実現できる。どちらで実装するかは好みの問題ではあるが、スタティックルートはネットワークの設定となるため、static-routesを使う対応が設計としてはわかりやすいと思われる。
0 件のコメント:
コメントを投稿