pear/net_dns2 で PHP Fatal error: Uncaught Net_DNS2_Exception が発生する

経緯

表題の通り、 pear/net_dns2v1.5.3 を使用していて以下のエラーが発生しました。

PHP Fatal error: Uncaught Net_DNS2_Exception: DNS request failed: The name server was unable to process this query due to a problem with the name server. in /PATH/TO/PROJECT/vendor/pear/net_dns2/Net/DNS2.php:1019

Stack trace すると以下の通り。

PHP Fatal error:  Uncaught Net_DNS2_Exception: DNS request failed: The name server was unable to process this query due to a problem with the name server. in /PATH/TO/PROJECT/vendor/pear/net_dns2/Net/DNS2.php:1019
Stack trace:
#0 /PATH/TO/PROJECT/vendor/pear/net_dns2/Net/DNS2/Resolver.php(172): Net_DNS2->sendPacket()
#1 /PATH/TO/PROJECT/CERTAIN_PROGRAM.php(xxx): Net_DNS2_Resolver->query()
#2 {main}
  thrown in /PATH/TO/PROJECT/vendor/pear/net_dns2/Net/DNS2.php on line 1019

原因

結果的にはプログラムの問題ではなく、たまたま該当の処理に引っかかる DNS の応答がない…… DNSサーバ の設定ミスでした。

>nslookup
既定のサーバー:  defaultgateway.example.jp
Address:  192.2.0.1

> server ns01.example.com
既定のサーバー:  ns01.example.com
Address:  203.0.113.1

> set type=mx
> example.com

*** [203.0.113.1] が example.com を見つけられません: Server failed

ここで何かがおかしいと気付いて DNSサーバ の設定を確認。

mx.example.com.    IN A  mailexchange.example.co.jp

Aレコードなのに右側がIPアドレスではなくホスト名になっていました。 MXレコード のつもりで記述してしまったようです。しかも末尾のドットがないですね……。

mx.example.com.    IN A  203.0.113.100

IPアドレスの記述が意図したものだったので、そのように修正しました。別途 MXレコード もきちんと設定。

>nslookup
既定のサーバー:  defaultgateway.example.jp
Address:  192.2.0.1

> server ns01.example.com
既定のサーバー:  ns01.example.com
Address:  203.0.113.1

> set type=mx
> example.com

example.com  MX preference = 10, mail exchanger = mailexchange.example.co.jp

nslookup で MXレコード を引けるようになったことを確認して、再度プログラムを実行。

今度はエラーにならずに最後まで処理が走りました。これで原因が DNSサーバ の設定だと確信しました。

(が、実はこれの他にも原因が潜んでいたのでした……。)

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。