うっかりが過ぎて軽くハマったので備忘録もかねて。
結論を先に書くと、ネームサービスとしてNISを参照しているSolarisのマシンでネットマスクを変更する場合には、NIS側の netmasks も変更しなきゃダメよ、というコトである。
Solarisでネットマスクを変更したい場合には /etc/inet/netmasks ファイルを変更してやればいい。このあたりはちょっとGoogleで検索しただけでも、丁寧な解説が引っかかる。書式は
こんな感じで、ネットワークアドレスとサブネットマスクをタブもしくは空白で区切ってやればいい。(上の例では10.1.2.0/24のネットワー クを設定している)
なのだけど。
こないだ、エンドユーザ側のオフィスで、ネットワークの構成が変わるってんで、このs設定を変更したら:
「リブートするたびにネットマスクが変わるんだけど?」
なる問い合わせが来てしまった。なんでも ifconfig で設定を直してやれば、正しい値を設定することはできるらしい。
速攻で /etc/inet/netmasks を調べたものの、記述に間違いらしいものは見当たらない。
仕方がないのでネットマスクが起動プロセスのどこで、どうやって設定されるのかをたどっていった結果 /etc/rc2.d/S72inetsvc に次の記述(強調部はボクがつけた)を見つけた。
#
# Re-set the netmask and broadcast addr for all IP interfaces. This ifconfig
# is run here, after waiting for name services, so that "netmask +" will find
# the netmask if it lives in a NIS map. The 'D' in -auD tells ifconfig NOT to
# mess with the interface if it is under DHCP control
#
/usr/sbin/ifconfig -auD4 netmask + broadcast +
コメント部分を大雑把に意訳すると:
# 全てのIPインターフェイスについて、ネットマスクとブロードキャストアドレスをリセットする。
# NIS mapが有効な場合に"netmask +"オプションは、NIS mapの中からネットマスクを探すた め、ネームサービスの起動を待って ifocnifng は実行される。
# -auD の中の"D"オプションはインターフェイスがDHCPのコントロール下にある場合に、それを荒らさないように ifconfig に教える。
こんな感じ。要するにNISを使ってる場合には、NIS map配下の記述が優先されるということなんである。従って、こちらも変更してやらないと、 ボクみたいにハマるコトになる。久々にちょっと楽しくなってしまった。
以下、蛇足。
不思議なことに ypcat netmasks をしても「そんなのNIS mapにないもんね」(no such map in server's domain)とツンツンされてしまう。makeするとpushされるし、前述の通り設定は有効になってそうなんだけど……どういうコトなのかなぁ。