今回は、Linuxサーバー構築時によくあるパターンですが、「ネットワークインターフェースが複数ある場合の設定方法について」です。
「間違えた事例」を元に、調査して設定していくパターンで説明します。
routeコマンドでルーティングテーブルを調べていたらおかしな点を見つけた
あるLinux(CentOS)サーバーで構築されたシステムで、各サーバーにログインしてネットワーク周りやルーティングテーブルを調べていたところ、おかしな点を見つけました。
Linuxでルーティングテーブルやデフォルトゲートウェイを確認する場合は、「route」コマンドで確認できます。
■routeコマンド
$ route -n
|
あれ?
デフォゲが2つあるような気がします?
eth0とeth1が同じデフォゲを持っているように見えます。。
早速調べました。
ネットワークインターフェース設定
正しいネットワークインターフェースの設定は以下です。
eth0 のみデフォルトゲートウェイを持ちます。
eth0:192.168.1.230 ←eth0がデフォゲを持つ
eth1:192.168.51.230
default gateway: 192.168.1.1
ルーティングテーブルがおかしくなっていた原因
結論から言えば、ifcfg-ethx ファイルの設定が間違えていました。
以下の設定を見てほしいのですが、ifcfg-eth1(192.168.51.230)のネットワークの設定が「NETWORK=192.168.1.0」になっていたことが原因でした。
$ cat ifcfg-eth0
$ cat ifcfg-eth1 |
正しく修正しました。
「NETWORK=192.168.1.0」→「NETWORK=192.168.51.0」
この後、OSまで再起動した場合、ルーティングテーブルの表示が変わり、正しい状態になりますでしょうか。
設定を修正しOSを再起動してみた結果
OSを再起動しましたが、まだ変わりませんでした。
$ route -n
|
さらに原因を追跡します。
/etc/sysconfig/network-scriptディレクトリ配下を確認します。
今回は、ルーティングテーブルがおかしいのに/etc/sysconfig/network-scriptディレクトリ配下にrouteファイルがありません。
※routeファイルはスタティックルートを切る時に使う設定ファイルです。
routeファイルがないのが気になりますが、なくても問題ではありません。
$ ls |
あらためて見ると、ipv6のファイルがあるし、なぜか ifup-wireless ファイルもあります。
と思ったらifup-isdnとかifup-pppとかなんでもあります(笑)
なんだろう、これは。
ここら辺の原因は後程するとして、今はネットワークの設定です。
通常、デフォルトゲートウェイは1つしかありません。
複数ネットワークインターフェースがあったとしてもデフォルトゲートウェイは1つです。
もし複数デフォルトゲートウェイがあったら、それはデフォルトのゲートウェイじゃなくなります。
だからDestination「0.0.0.0」は1つしかなければいけません。
正常なルーティングテーブルの例
念のため、他のサーバーのルーティングテーブルも調べました。
特に問題はなさそうでした。
ちなみに、これは正常なルーティングテーブルです。
$ route -n
|
当たり前の話ですがデフォルトゲートウェイは1つしかありません。
※Windowsは各インターフェースがそれぞれデフォルトゲートウェイを持てるようですが、今回はLinux(CentOS)です。
他のサーバーのその他ネットワーク設定も調べてみたところ・・・
デフォルトゲートウェイだけでなく、他のサーバーのネットワーク設定も調べてみたところ、再度「あれ?」と思いました。
その理由は複数の ifcfg-ethx にデフォルトゲートウェイが設定されていたからです。。
※混乱しますが、おかしなルーティングテーブルのサーバーは、「ifcfg-eth0」も「ifcfg-eth1」もデフォルトゲートウェイの設定(GATEWAY=xx.xx.xx.xx)はされていません。
正常に動いていると思われたサーバーのネットワーク設定もおかしなものだったからです。
$ cat ifcfg-eth0
$ cat ifcfg-eth1 |
しかし route コマンドで確認すると「Destination 0.0.0.0」は1つしかありません。
$ route -n |
なぜか両方のifcfg-ethxにデフォルトゲートウェイの設定がされていますがrouteコマンドを見る限りでは問題なさそうです。
ifcfg-eth1で設定されているデフォゲが有効になっていますが、では、ifcfg-eth0で設定しているデフォルトゲートウェイの設定はどうなったのか?
調べてみたら複数のインターフェースでデフォルトゲートウェイを有効にすると、最後のインターフェースのデフォルトゲートウェイが有効になるそうです。
だから「ifcfg-eth0」と「ifcfg-eth1」の両方に「DEFROUTE=yes」が設定してあっても、2つをデフォゲに設定できないので一番最後の「ifcfg-eth1」が「DEFROUTE=yes」が有効になるということです。
ここまでは分かりました。
しかもややこしいのが、
- ifcfg-eth0 →デフォルトゲートウェイを設定するのが正解。eth1にも「DEFROUTE=yes」が設定されているので本来なら消えるはずだが、消えずにルーティングテーブルに残り、ちゃんと通信できている。
- ifcfg-eth1 →デフォルトゲートウェイ不要。しかし「DEFROUTE=yes」が設定されているのでeth0→eth1の流れでifcfg-eth1が優先的になる。
しかし実際、2つのデフォルトゲートウェイが見えています。
$ route -n |
そのため、明示的に ifcfg-eth1に「DEFROUTE=no」を設定してみました。
複数のインターフェースがある場合は、他を「DEFROUTE=no」に設定することもできます。
- ifcfg-eth0 → とりあえず何もしない
- ifcfg-eth1 → DEFROUTE=noを入れてみる
ここまでやってから、念の為、OS再起動をしてみました。
(そこまでしなくてもいいかもしれないが)
DEFROUTE=noを入れたら直った
結論から言うと、「DEFROUTE=no」を設定したら直りました。
【正常な状態】
$ route -n
|
【以前のおかしかった状態】
$ route -n |
だいぶルーティングテーブルの内容がスッキリしたというか、正しくなったようです。
余計な設定が消えたからでしょうか。
結論
まだまだなぞが残ってスッキリしないので、Linuxのマニュアルを漁ります。
コメント