わたしは片手間に、サーバやネットワークを やらされております。
(専門外なのに・・・)
先日、サーバのネットワークが つながらなくて困りました。
困った現象
ある Linux(CentOS7) サーバについて、もともと次の設定で運用していました。
※ 以下のIPアドレス等は、架空のものです。
ifcfg-em1(
未使用
)
ifcfg-em2 (192.168.1.10)(ローカルアドレス。使用中。)
つまり、サーバは外部に公開せず、ローカルで使っていました。
これに、グローバルアドレスを追加で有効にしたのです。
ifcfg-em1 (12.34.56.78)(グローバルアドレス。
使用開始!
)
ifcfg-em2 (192.168.1.10)(ローカルアドレス。使用中。)
ところが、グローバルアドレスに対して PING が通らないのです。
グローバルの ifcfg-em1
は確かにUPしているのに、です。
PING で調べる
いろいろ調べると、不思議な現象を確認しました。
グローバルアドレスと同じセグメントからなら PING が通ることに気づきました。
例えば、設定したグローバルアドレスが 12.34.56.78
なら、
12.34.56.80
の別サーバからは PING が通るのです。
(しかしセグメント外の、例えば自分のPCからは PING が通りません。)
さらに不思議なことに、まったく同じ設定の別のサーバでは、
グローバルアドレスに PING が通るのです。
別のサーバというのは、OSや基本設定(2種類のネットワークを使う)は
同じで、IPアドレスだけが異なるサーバのことです。
私はこの正常サーバと、今回の異常サーバで何が違うのか、
いろんなコマンドを投入して調べました。
ファイル比較で相違点を発見
ようやく相違点を発見しました。
正常/異常サーバで、GENERAL.DEFAULT
なるものが違っていました。
異常サーバのグローバルアドレス
# nmcli c s em1
:
GENERAL.DEVICES: em1
GENERAL.STATE: アクティベート済み
GENERAL.DEFAULT: いいえ
:
同じく異常サーバのローカルアドレス
# nmcli c s em2
:
GENERAL.DEVICES: em2
GENERAL.STATE: アクティベート済み
GENERAL.DEFAULT: はい
:
上記は異常サーバですが、正常サーバでは、
はい/いいえ がどちらも反転していたのです。
(グローバル側が「はい」、ローカル側が「いいえ」でした。)
さらに、ルーティングテーブル?(←ゴメン よく知らないの)の順番も
違うことに気づきました。(ローカル側が上に表示されていました。)
# ip route
default via 192.168.1.1 dev em2 proto static metric 102
default via 12.34.56.1 dev em1 proto static metric 101
これも正常サーバでは、順番が逆でした。
OSによるゲートウェイ設定の違い
冒頭に述べたとおり、わたしは片手間にサーバを担当しています。
以前は CentOS5 を扱っていて、ゲートウェイの設定箇所は
/etc/sysconfig/network
の1ヶ所でした。
今回の問題のサーバは CentOS7 で、ゲートウェイは
ネットワークごとに複数箇所で設定できるようです。つまり、
/etc/sysconfig/network-scripts/ifcfg-em1
でも設定できるし、
/etc/sysconfig/network-scripts/ifcfg-em2
でも設定できます。
なので、「グローバル/ローカル 両方にゲートウェイを設定するんだな」
と理解していました。実際それで、問題なく運用しているサーバもありました。
しかし もしかしたら、それは たまたま上手くいっていただけかもしれません。
よくよく考えたら、ゲートウェイが複数ってのは妙です。
サーバから外部に通信するとき、ゲートウェイは1つで十分だからです。
もし2つあれば、どちらかを優先して、もう一方は使われないんじゃないか・・・?
その使われないほうが、グローバルアドレスのゲートウェイなのでは・・・?
だから外部から PING が通らないんじゃないか・・・?
おぼろげながら原因が見えてきました。
ただ残念なことに、どんなコマンドで修正すればよいか分かりませんでした。
コマンドはあきらめ、設定ファイルを直接 修正することにしました。
(ネットでは、設定ファイルの直接の修正は非推奨で、
コマンドを使えとありましたが、私には それしか方法がありませんでした。)
/etc/sysconfig/network-scripts/ifcfg-em2
(ローカルアドレス)の
ゲートウェイの行を削除し、サーバを再起動しました。
:
DEVICE=em2
ONBOOT=yes
IPADDR=192.168.1.10
PREFIX=24
GATEWAY=192.168.1.1 ← ← ← 削除
:
結果は・・・?
グローバルアドレスに対して PING が通りました!!
(よかったよかった)
やはりゲートウェイを複数 設定していて、ローカルの方が優先されていたから、
グローバルのほうが無視されていたようです。
それにしても、疑問が残ります。
複数のゲートウェイを設定していて、グローバルアドレスに つながるサーバもあります。
(この場合はローカル側のゲートウェイが無視されているはず。)
どちらを優先するか、どう決めているのでしょう???
そういえば、正常/異常サーバの違いがありました。
正常サーバでは、グローバル/ローカルアドレスを、最初から両方UPしていました。
一方 異常サーバでは、最初 ローカルアドレスのみをUPしていて、
後でグローバルアドレスを追加でUPしました。違いといえば それくらいです。
この対応のために、1日無駄にしてしまいました。
サーバ専門の担当者を雇ってほしい・・・。