0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

StaticRoute設定をした話

Posted at

はじめに

この度、所属プロジェクトでStaticRoute設定をしたので、記載します。
環境はCentOS7.9です。

$ cat /etc/redhat-release 
CentOS Linux release 7.9.2009 (Core)

StaticRouteとは?

管理者が宛先ネットワークへの最適なルートを設定したルートのことです。
Linuxの世界では/etc/sysconfig/network-scripts/route-ethXに記載することによる永続的な設定(再起動した後でも継続して設定される)とrouteコマンドやipコマンドによる一時的な変更をする方法の2通りの設定方法があります。

事前確認

まずはnetstatコマンドで現在のルーティングの状態を確認してみましょう。

コマンド
$ netstat -nr
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         100.64.200.223  0.0.0.0         UG        0 0          0 eth2
100.64.102.0    0.0.0.0         255.255.254.0   U         0 0          0 eth5

~中略~

172.31.196.128  172.30.245.254  255.255.255.128 UG        0 0          0 eth0

最初のDestinationは宛先ネットワークを、そしてGatewayはパケットを転送するルータ、Genmaskはサブネットを示しています。
FlagsのU フラグは送信経路が up 状態であること、G フラグは送信経路がゲートウェイ(以降、GWと記載する。)へのものであることを示します。H フラグは宛先がネットワークではなく、完全指定のホストアドレス(/32)であることを示しています。
MSSは Maximum Segment Size を表します。Windowは TCP window sizeを示します。この2つはよく知らない、且つ気にしたこともないです。

最後の Ifaceは、ルーティングインターフェースを示します。

設定内容についても少し触れます。最初の0.0.0.0 が宛先アドレスがない場合に使用できる経路の「デフォルトルート」となります。つまりそれ以降のDestination列の宛先で該当するものがなければ、100.64.200.223のGatewayに割り振られることとなります。
デフォルトルート設定は/etc/sysconfig/networkに設定されます。設定中身は以下の通りでGATEWAY=で設定を行います。

/etc/sysconfig/network
NETWORKING=yes
NOZEROCONF=yes
NETWORKING_IPV6=no
IPV6FORWARDING=no
IPV6_AUTOCONF=no
GATEWAY=100.64.200.223

ルーティングの追加(永続設定)

コマンドで一時的に追加しただけでは、サーバー再起動などをしてしまうと消えてしまいます。
そこで再起動してもルーティングが消えない永続設定をします。
/etc/sysconfig/network-scripts/route-ethXに記載することで永続設定をすることができます。

既存設定ファイルの確認

既存ファイルの設定内容確認
$ ll /etc/sysconfig/network-scripts/route-eth*
-rw-r--r-- 1 root root 283  7月 30 17:35 /etc/sysconfig/network-scripts/route-eth0
-rw-r--r-- 1 root root  35  7月 30 17:35 /etc/sysconfig/network-scripts/route-eth1
-rw-r--r-- 1 root root  70  7月 30 17:35 /etc/sysconfig/network-scripts/route-eth4

$ cat /etc/sysconfig/network-scripts/route-eth0
172.21.201.0/24 via 172.30.245.254
172.31.195.0/25 via 172.30.245.254
172.31.196.0/25 via 172.30.245.254
172.31.195.128/25 via 172.30.245.254
172.31.196.128/25 via 172.30.245.254
172.21.225.0/24 via 172.30.245.254
172.21.237.0/24 via 172.30.245.254
172.30.77.0/26 via 172.30.245.254

$ cat /etc/sysconfig/network-scripts/route-eth1
100.65.204.0/22 via 100.64.207.254

$ cat /etc/sysconfig/network-scripts/route-eth4
100.65.195.0/25 via 100.64.195.254
100.64.195.0/25 via 100.64.195.254

今回追加したいこと

172.31.224.0/23のアドレス帯向けの通信を
172.30.245.254のGWを通す形でスタティックルート設定をしたい。

追加作業

数台程度であれば、viで記載してもよいですが、コマンドで追記したほうが簡単です。
ブロードキャストやansibleでやれば一瞬で終わります。

echo '172.31.224.0/23 via 172.30.245.254' >> /etc/sysconfig/network-scripts/route-eth0

networkの再起動をする。

再起動
$ sudo /etc/init.d/network restart

再度ルーティングテーブル確認をする。

コマンド(grepかけてます)
$ netstat -nr | egrep Destination|^172.31.224.0
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
172.31.224.0  172.30.245.254  255.255.254.0  UG        0 0          0 eth0

追加されました。

一時的な追加

一時的な追加はipコマンドでの追加となります。

コマンド
$ sudo ip route add 172.31.141.207/32 via 172.30.245.254 dev eth0
$
$ netstat -nr | grep 172.31.141.207
172.31.141.207  172.30.245.254  255.255.255.255 UGH       0 0          0 eth0

一時的な削除

一時的な削除はipコマンドでの削除となります。

コマンド
$ netstat -nr | grep 172.31.141.207
172.31.141.207  172.30.245.254  255.255.255.255 UGH       0 0          0 eth0

$ sudo ip route del 172.31.141.207/32
$ netstat -nr | grep 172.31.141.207
### 何も出ない!

そういえばどのethファイルで設定すればよいの?

既存の設定ファイルがあれば、route-ethXファイル内のvia以降をみれば分かりますが、そのethに対して初めて設定する場合は記載がないので、分からないですよね。
その場合はifconfigをたたいて確認しましょう。

ifconfig
$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.30.245.15  netmask 255.255.255.0  broadcast 172.30.245.255
        ether fa:16:3e:9f:12:a7  txqueuelen 1000  (Ethernet)
        RX packets 32794093  bytes 2756994961 (2.5 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1787539  bytes 2649771082 (2.4 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 100.64.204.19  netmask 255.255.252.0  broadcast 100.64.207.255
        ether fa:16:3e:75:5e:11  txqueuelen 1000  (Ethernet)
        RX packets 135279103  bytes 12739714526 (11.8 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 73474995  bytes 9602836628 (8.9 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 100.64.200.207  netmask 255.255.255.128  broadcast 100.64.200.255
        ether fa:16:3e:ae:9a:06  txqueuelen 1000  (Ethernet)
        RX packets 131868206  bytes 10906997905 (10.1 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 49781970  bytes 4556337046 (4.2 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 100.64.193.169  netmask 255.255.255.128  broadcast 100.64.193.255
        ether fa:16:3e:2f:29:a0  txqueuelen 1000  (Ethernet)
        RX packets 149428083  bytes 10657969006 (9.9 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 50756402  bytes 4592856708 (4.2 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth4: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 100.64.195.160  netmask 255.255.255.128  broadcast 100.64.195.255
        ether fa:16:3e:33:0c:ab  txqueuelen 1000  (Ethernet)
        RX packets 326062375  bytes 39811374535 (37.0 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 422798714  bytes 39139274189 (36.4 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth5: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 100.64.102.161  netmask 255.255.254.0  broadcast 100.64.103.255
        ether fa:16:3e:81:69:0f  txqueuelen 1000  (Ethernet)
        RX packets 205280165  bytes 13208536531 (12.3 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 99787  bytes 197507781 (188.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 95564501  bytes 6893647458 (6.4 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 95564501  bytes 6893647458 (6.4 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

例えば、eth0inetのIPアドレス172.30.245.15となっています。inetはサーバ本体のアドレスとなります。このアドレスのGWは、172.30.245.254となります。
第3オクテットまで同じですね。
GWアドレスが正しいかは社内のNW図など、ドキュメントでも確認するとよいでしょう。
ifconfigの詳細パラメータは以下記事が参考になります。

おわりに

もうStaticRouteは怖くない。
常に情報はアップデートしていこうと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?