IPエイリアスの設定でハマった

eth0のIPがAAA.BBB.CCC.DDDの時に、

sudo ifconfig eth0:0 AAA.BBB.CCC.EEE

とかIPエイリアスを設定して、複数のIPを持たせたりするのにハマったのでメモ。

特にこれといった設定をしていない、一般的なネットワークでifconfigすると、

eth0      Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX
          inet addr:AAA.BBB.CCC.DDD  Bcast:AAA.BBB.CCC.255  Mask:255.255.255.0

こんな感じになってます。

上記の設定をすると、

eth0:0    Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX
          inet addr:AAA.BBB.CCC.EEE  Bcast:AAA.BBB.CCC.255  Mask:255.255.255.0

なんてのが追加されて、1つのNICに複数のIPでアクセスできるようになります。

ところが、世の中にはブロードキャストやサブネットマスクを変更している場合というのがあります。ブロードキャストの末尾が255じゃなかったり、サブネットマスクがもっと大きな値(小さい場合はきっと少ない)になってたり。そういうところで、冒頭のコマンドでIPエイリアスを設定するとえらいことになります。

eth0にグローバルIP、eth1にローカルIPを持たせた環境でやったら、eth0, eth0:0はもちろん、eth1のローカルIPでも接続出来なくなってしまいました。単にifconfigでIPエイリアスを振っただけだと、eth0:0のブロードキャストとサブネットマスクが上に示したようなデフォルトの値になってしまい、ネットワークの設定によっては問題が発生してしまうようです。

それでもグローバルはおろか、ローカルIPでもpingsshも通らなくなった時は相当焦りましたが… 結局、30分ほどしてダメ元でもう一回試したらアクセス出来ました。ブロードキャストのIPが無効だったから、それを諦めるまで待ったみたいな形になるんでしょうか? よく分かってません。

まぁ、とにかくそういう環境でIPエイリアスを設定する場合は、

sudo ifconfig eth0:0 AAA.BBB.CCC.EEE broadcast XXX.XXX.XXX.XXX netmask XXX.XXX.XXX.XXX

てな具合にブロードキャストとかサブネットマスクも指定しとけってこった。eth0の設定を引き継いでくれるんじゃね? とか何となく思ってると痛い目に遭うぞ。