Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

はじめに

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
/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 delete -net 172.31.0.0 gw 10.13.0.145 netmask 255.255.0.0 eth0

・hostの削除

コマンド
$ sudo route delete -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のルートテーブルは本当に便利だなと思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした