はじめに
この度、所属プロジェクトで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=
で設定を行います。
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
再度ルーティングテーブル確認をする。
$ 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
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
例えば、eth0
のinet
のIPアドレス172.30.245.15
となっています。inet
はサーバ本体のアドレスとなります。このアドレスのGWは、172.30.245.254となります。
第3オクテットまで同じですね。
GWアドレスが正しいかは社内のNW図など、ドキュメントでも確認するとよいでしょう。
ifconfigの詳細パラメータは以下記事が参考になります。
おわりに
もうStaticRouteは怖くない。
常に情報はアップデートしていこうと思います。