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でもpingもsshも通らなくなった時は相当焦りましたが… 結局、30分ほどしてダメ元でもう一回試したらアクセス出来ました。ブロードキャストのIPが無効だったから、それを諦めるまで待ったみたいな形になるんでしょうか? よく分かってません。
まぁ、とにかくそういう環境でIPエイリアスを設定する場合は、
sudo ifconfig eth0:0 AAA.BBB.CCC.EEE broadcast XXX.XXX.XXX.XXX netmask XXX.XXX.XXX.XXX
てな具合にブロードキャストとかサブネットマスクも指定しとけってこった。eth0の設定を引き継いでくれるんじゃね? とか何となく思ってると痛い目に遭うぞ。
sudoでリダイレクトしてファイルを書き換えるとか
LVSの設定するのにIP forwardを変更する必要があって、それを変更するのに、
sudo echo '1' > /proc/sys/net/ipv4/ip_forward
とかやろうとしたけど、リダイレクトがroot権限で動いてくれなくて上手くいかない。こういう場合は、
echo '1' | sudo tee /proc/sys/net/ipv4/ip_forward sudo sh -c "echo '1' > /proc/sys/net/ipv4/ip_forward"
のどちらかでやるといいらしい。個人的には何となく上の方が好み。書き込み権限が無い場合はこうやればいいのか。
※追記:ごめんなさい。上のコマンド例の下の方「sudo su -c」と書いてました。suじゃなくてshです。sudo suとかしちゃいかんです。
あと、IP forwardする場合は、/etc/sysctl.confもちゃんと書き換えて再起動してもIP転送してくれるようにする。
そして、
sudo sysctl -w net.ipv4.ip_forward=1
だけでいいことを知った。まぁいい。勉強にはなった。