2018年3月12日月曜日

RaspbianなどのDebian系Linuxでスタティックルートを追加する方法

自宅のネットワーク環境は、仮想ルータ-であるVyOSを使って2つのセグメントに分割している。そのため、2つのセグメント間の通信を正常に実施するために、スタティックルートの設定を実施する必要がある。

先日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
------------------------------

これで、OS再起動時に本スクリプトが実行され、スタティックルートが追加されるようになる。

なお、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 件のコメント:

コメントを投稿

人気の投稿