静的ルーティングの設定 - Linux

LinuxUbuntuCentOS

Written by Kohei Yamada Posted on 2016/07/25



はじめに

AWSではルートテーブルがあるので設定することはないですが、そう言ったルーティングを管理する機能がない場合は自分で設定を行わなければなりません。
ということでルーティングの設定についてまとめてみました。


事前確認

とりあえずnetstatコマンドで現在のルーティングの状態を確認しておきます。

$ netstat -nr
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.13.0.1       0.0.0.0         UG        0 0          0 eth0
10.13.0.0       0.0.0.0         255.255.248.0   U         0 0          0 eth0


ルーティングの追加

ルーティングの追加には一時的または永続的の2通りあります。コマンドでの追加、設定ファイルへ記載しての追加です。


一時的な追加

一時的な追加はコマンドでの追加となります。ここではrouteコマンドとipコマンドの2通りを紹介します。


routeコマンド

・networkの追加

$ sudo route add -net 172.31.0.0 gw 10.13.0.145 netmask 255.255.0.0 eth0

・hostの追加

$ sudo route add -host 172.31.0.10 gw 10.13.0.145 eth0

networkに比べてhost-net-hostになるのと、netmaskが不要になります。
また、eth0 は無くても大丈夫です。その場合は任意でルーティングが設定できるethで設定されます。


ipコマンド

・networkの追加
$ sudo ip route add 172.31.0.0/16 via 10.13.0.145 dev eth0
・hostの追加
$ sudo ip route add 172.31.0.10/32 via 10.13.0.145 dev eth0

ここでのnetworkhostの違いはnetmaskだけです。hostの場合は/32にするだけです。


永続的な追加

コマンドで一時的に追加しただけではサーバー再起動などをしてしまうと消えてしまいます。
そこで再起動してもルーティングが消えない設定を紹介します。


Ubuntu の場合

・その1

ひとつ目は/etc/network/if-up.d/static-routesで設定する方法です。

$ sudo vi /etc/network/if-up.d/static-routes
#!/bin/sh
/sbin/route add -net 172.31.0.0 gw 10.13.0.145 netmask 255.255.0.0 dev eth0 // networkの場合
/sbin/route add -host 172.31.0.10 gw 10.13.0.145 eth0 // hostの場合
$ sudo chmod +x /etc/network/if-up.d/static-routes
$ sudo /etc/network/if-up.d/static-routes

・その2

もう一つの方法は/etc/network/interfacesに設定する方法です。
post-upを使うと任意のコマンドが実行できるようになります。

$ cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet dhcp
    post-up route add -net 172.31.0.0/16 gw 10.13.0.145  // networkの場合
    post-up route add -host 172.31.0.10/32 gw 10.13.0.145  // hostの場合


CentOS の場合

$ cat /etc/sysconfig/network-scripts/route-eth0 
# Static route for metadata service
172.31.0.0/16 via 10.13.0.145 dev eth0 // networkの場合
172.31.0.10/32 via 10.13.0.145 dev eth0 // hostの場合
$ sudo /etc/init.d/network restart

もしroute-eth00の部分は設定したいethによって変えてください。


確認

ということで追加した後の設定は以下の状態になります。

$ netstat -nr
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.13.0.1       0.0.0.0         UG        0 0          0 eth0
10.13.0.0       0.0.0.0         255.255.248.0   U         0 0          0 eth0
172.31.0.0      10.13.0.145     255.255.0.0     UG        0 0          0 eth0
172.31.0.10     10.13.0.145     255.255.255.255 UGH       0 0          0 eth0


ルーティングの削除

ルーティングの削除にも一時的または永続的の2通りあります。コマンドでの削除は一時的なものですが。永続的に削除をしたい場合は設定ファイルの記載から削除してあげる必要があります。


一時的な削除

一時的な削除は追加の時と同じでコマンドで行います。ここでもrouteコマンドとipコマンドの2通りを紹介します。


routeコマンド

・networkの削除

$ sudo route add -net 172.31.0.0 gw 10.13.0.145 netmask 255.255.0.0 eth0

・hostの削除

$ sudo route add -host 172.31.0.10 gw 10.13.0.145 eth0

追加の時と同じで、networkhostの違いは-net-hostになるのと、netmaskが不要になるところです。eth0の箇所も無くても大丈夫です。


ipコマンド

・networkの削除

$ sudo ip route del 172.31.0.0/16

・hostの削除

$ sudo ip route del 172.31.0.10/32

こちらも追加と同じでhostの場合はnetmask/32にするだけです。


永続的な削除

ただ、追加した箇所を削除するだけですので割愛します。


確認

永続的な設定の場合もnetstatで確認するとコマンドで追加した場合と同様の状態と取ります。

$ netstat -nr
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.13.0.1       0.0.0.0         UG        0 0          0 eth0
10.13.0.0       0.0.0.0         255.255.248.0   U         0 0          0 eth0
172.31.0.0      10.13.0.145     255.255.0.0     UG        0 0          0 eth0
172.31.0.10     10.13.0.145     255.255.255.255 UGH       0 0          0 eth0


おわりに

今までのルーティングの設定は各サーバーに設定しなければならないので、台数が多くなればなるほど大変でした。
そういった煩雑さを軽くしてくれたAWSのルートテーブルは本当に便利だなと思います。