|目次|手順 0|1|2|3|A|B|C|D|E|F|G|H| I |J|K|L|M|N|O|P|Q|
作成日:2009年03月01日、更新日:2009年03月01日 作成:鷹の巣OpenSSL の設定放置で、ISC BIND9 のサービス動作エラーが発生。修復するまでの経過を説明。
Shining Light Productions - Win32 OpenSSL の Win32 OpenSSL v0.9.8j インストールを行ったのが原因で、会社の ISC BIND9 のサービス動作が開始出来なくなりました。(会社のルータは、NetGenesis SuperOPT100 無印で、LAN 内から、グローバルアドレスで、アクセス出来ません。LAN内用のDNSサーバーを BIND9 で構築していました。)これが復旧するまでの経過を以下に示します。
不具合の現象:BIND 9 を BIND | Internet Systems Consortium の BIND 9.6.0-P1 for Windows XP/2003/2008 にアップデートし、ISC BIND をサービス画面より起動すると、「ローカル コンピュータ の ISC BIND サービスを開始できません。エラー 1067: プロセスを途中で強制終了しました。」というエラーが出る。
コマンドプロンプト画面より起動すると、
C:\>net start named
ISC BIND サービスを開始します.
ISC BIND サービスを開始できませんでした。
システム エラーが発生しました。
システム エラー 1067 が発生しました。
プロセスを途中で強制終了しました。
update なので、設定ファイルには問題なし。BIND インストール時の VC++2005 の runtime 周りのエラーだと考え、Google で、「ISC BIND エラー 1067」とかで検索。しかし、同様のエラーは、見当たらない。runtime のエラーだという潜入観念があるので、下記のコマンドを実施すると案の定、エラーが発生。長引きそうなので、代替のDNSサーバーをGoogle で検索し、Private Local DNS Server for Windows にピンチヒッターに立ってもらった。(PLDNSは、アンチウィルスソフトに排除されたWinDNSに似ているかも。)
下記のコマンドも使用できないので、VC++2005 の runtime のインストールエラーだと思われたが。
C:\>nslookup sakaguch.com Auto configuration failed 424:error:0E065068:configuration file routines:STR_COPY:variable has no value:.\crypto\conf\conf_def.c:629:line 37 C:\>dig sakaguch.com Auto configuration failed 3012:error:0E065068:configuration file routines:STR_COPY:variable has no value:.\crypto\conf\conf_def.c:629:line 37
デバッグ用のBINDのbinaryで動かそうと一旦考えたが、ここで、「crypto」という文字に注目した。会社のDNSサーバーは、実験的に動かしていて、私の自宅サーバー同様、ドメイン名は、たったの1つです。リモート操作の必要性が全くないので、リモート操作用のキーは、作成していなかった。BIND9 が OpenSSL に依存していることをすっかり、忘れていました。(自宅サーバーでは、ソースを読むことをほとんどしなかったが、会社のサーバーとなると、ソースを読まざるをえない。)
OpenSSLのソースをダウンロードして、conf_def.c の 629行を見る。
/* So at this point we have
* np which is the start of the name string which is
* '\0' terminated.
* cp which is the start of the section string which is
* '\0' terminated.
* e is the 'next point after'.
* r and rr are the chars replaced by the '\0'
* rp and rrp is where 'r' and 'rr' came from.
*/
p=_CONF_get_string(conf,cp,np);
if (rrp != NULL) *rrp=rr;
*rp=r;
if (p == NULL)
{
CONFerr(CONF_F_STR_COPY,CONF_R_VARIABLE_HAS_NO_VALUE); /* <---------- 629行 */
goto err;
}
BUF_MEM_grow_clean(buf,(strlen(p)+buf->length-(e-from)));
環境変数OPENSSL_CONFにC:\OpenSSL\bin\openssl.cfgが定義されているので、
この openssl.cfg の 37行を見る。
#################################################################### [ ca ] default_ca = CA_default # The default ca section #################################################################### [ CA_default ] dir = $ENV::KEY_DIR # Where everything is kept <---------- 37行 certs = $dir # Where the issued certs are kept crl_dir = $dir # Where the issued crl are kept database = $dir/index.txt # database index file. new_certs_dir = $dir # default place for new certs.
37行は、「 dir = ./demoCA 」になっていなればならない。XMAIL関係の openssl.cnf が残留していたと考えらます。 C:\Program Files\OpenVPN\bin\openssl.cfg をC:\OpenSSL\bin\openssl.cfg に上書きコピーすると、
openssl.cfg の変更後の起動結果
C:\>net start named ISC BIND サービスを開始します. ISC BIND サービスは正常に開始されました。 C:\>net stop named ISC BIND サービスは正常に停止されました。 C:\>
正常に起動と停止ができる様になりました。
不具合の発生経過
Windows では、OpenSSL 関係の拡張子「 .cfg 」「 .cnf 」が扱い辛いので、「 .conf 」に変えて運用していた。(環境変数OPENSSL_CONF に C:\OpenSSL\bin\openssl.conf を設定していた。)
OpenVPN のインストールに伴い、OpenSSL もバージョンを上げた。(アンインストールとインストールを行う)この時点で、環境変数OPENSSL_CONF が C:\OpenSSL\bin\openssl.cfg に戻った。C:\OpenSSL\bin\openssl.cfg には、不具合を生ずる設定ファイルが存在していた。
OpenVPN やXmailCFG では、「 openssl.cfg 」や「 openssl.cnf 」を引数に指定して、SSLデータを作成する。(環境変数OPENSSL_CONF は、参照されない。)
この時点から、2週間程度後にWindows Update の為、PCを再起動したら、BIND が起動しなくなった。
BIND は、鍵が生成されてなくても、環境変数OPENSSL_CONF を参照し、SSLの設定ファイルが存在したら、取込んで鍵を捜しに行く。環境変数 OPENSSL_CONF を 一時的に OPENSSL_CONFXXXXXに変更すれば、BIND を起動出来たのかもしれない。
おまけの話。Google で検索した時にコマンドの「 nslookup.exe www.example.com 」を実行するとエラーになる。「 .exe 」を抜いて、「 nslookup www.example.com 」とすれば良いという回答。初耳だったので、試しに実行。
BIND 9.6.0-P1 for Windows XP/2003/2008 でのコマンド実行例
C:\>cd \dns\bin C:\dns\bin>dir /w ドライブ C のボリューム ラベルは ローカル ディスク です ボリューム シリアル番号は 8459-F5CE です C:\dns\bin のディレクトリ [.] [..] bindevt.dll BINDInstall.exe dig.exe dnssec-dsfromkey.exe dnssec-keyfromlabel.exe dnssec-keygen.exe dnssec-signzone.exe host.exe libbind9.dll libdns.dll libeay32.dll libisc.dll libisccc.dll libisccfg.dll liblwres.dll named-checkconf.exe named-checkzone.exe named-compilezone.exe named.exe nslookup.exe nsupdate.exe readme1st.txt rndc-confgen.exe rndc.exe 24 個のファイル 3,497,582 バイト 2 個のディレクトリ 25,600,094,208 バイトの空き領域 C:\dns\bin>nslookup sakaguch.com Server: 192.168.0.1 Address: 192.168.0.1#53 Non-authoritative answer: Name: sakaguch.com Address: 203.212.55.105 C:\dns\bin>nslookup.exe sakaguch.com Server: 192.168.0.1 Address: 192.168.0.1#53 Non-authoritative answer: Name: sakaguch.com Address: 203.212.55.105 C:\dns\bin>dig sakaguch.com ; <<>> DiG 9.6.0 <<>> sakaguch.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1833 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 2 ;; QUESTION SECTION: ;sakaguch.com. IN A ;; ANSWER SECTION: sakaguch.com. 26734 IN A 203.212.55.105 ;; AUTHORITY SECTION: sakaguch.com. 26734 IN NS ns1.nsnoc.com. sakaguch.com. 26734 IN NS ns2.nsnoc.com. sakaguch.com. 26734 IN NS ns1.twisted4life.com. sakaguch.com. 26734 IN NS ns1.sakaguch.com. ;; ADDITIONAL SECTION: ns1.sakaguch.com. 152277 IN A 203.212.55.105 ns2.nsnoc.com. 151517 IN A 195.69.95.114 ;; Query time: 31 msec ;; SERVER: 192.168.0.1#53(192.168.0.1) ;; WHEN: Sun Mar 01 07:54:49 2009 ;; MSG SIZE rcvd: 169 C:\dns\bin>dig.exe sakaguch.com ; <<>> DiG 9.6.0 <<>> sakaguch.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1657 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 2 ;; QUESTION SECTION: ;sakaguch.com. IN A ;; ANSWER SECTION: sakaguch.com. 26724 IN A 203.212.55.105 ;; AUTHORITY SECTION: sakaguch.com. 26724 IN NS ns1.sakaguch.com. sakaguch.com. 26724 IN NS ns1.twisted4life.com. sakaguch.com. 26724 IN NS ns1.nsnoc.com. sakaguch.com. 26724 IN NS ns2.nsnoc.com. ;; ADDITIONAL SECTION: ns1.sakaguch.com. 152267 IN A 203.212.55.105 ns2.nsnoc.com. 151507 IN A 195.69.95.114 ;; Query time: 31 msec ;; SERVER: 192.168.0.1#53(192.168.0.1) ;; WHEN: Sun Mar 01 07:54:59 2009 ;; MSG SIZE rcvd: 169 C:\dns\bin>
実行結果は、どちらでも正常で、「 .exe 」をつけても問題なかった。path に絡んだ話だったのだろうか?
||