現象
外部ホストのCORBAのサーバアプリケーションに接続するとCOMM_FAILUREなどの例外を吐いてクライアントアプリケーションが落ちてしまう.
対処方法
というかこんな設定をすることに気が付かなかった.
/etc/hosts の最初のエントリがマシンのホスト名(localhost以外)であるようにする.
# # Internet host table # xxx.xxx.xxx.xxx hoge <--- これを追加 127.0.0.1 localhost loghost
次に /etc/nsswitch.conf で hosts の部分でfilesが先にDNSよりも先に読まれるようにする.
# /etc/nsswitch.conf # # Example configuration of GNU Name Service Switch functionality. # If you have the `glibc-doc' and `info' packages installed, try: # `info libc "Name Service Switch"' for information about this file. passwd: compat group: compat shadow: compat hosts: files dns mdns <--- ここ注意 networks: files protocols: db files services: db files ethers: db files rpc: db files netgroup: nis
これで大丈夫なはず.しかしこんなことに気が付くのに3日もかかるなんて思わなかった…
参照
こんなところにちょろっと記述があった.
ただし、ネームサーバと同じマシン上に存在するサーバオブジェクトを外部から呼び出すことができないという問題が存在します。これは、そのサーバオブジェクトの参照情報において、IPアドレスがループバックアドレス(127.0.0.1)として記録されているため、外部からこの参照情報をもとにサーバオブジェクトの存在するマシンのIPアドレスを特定することができないからです。この問題を解決するためには、ネームサーバの存在するマシン上の /etc/hostsファイルを編集するなどの対処が必要です。
具体的な設定方法はここを参照した.記述は「Solarisで」となっているが基本的には同じこと.
まとめ
やっぱりサーバ/クライアントでは名前解決が肝なんだなぁ.