Nginx/OpenResty慎重配置8.8 DNS serverとして


目次
  • ディレクトリ
  • 問題
  • 解析
  • 余談
  • 問題
    NFingx reolverの構成:
    resolver 127.0.0.1 8.8.8.8;
    プロジェクトの中で2か所はドメイン名を使って、1か所は外网CDNドメイン名で、1か所はMySQLクラスタドメイン名です。配置が終わったらテストの両方が正常に解析できますが、しばらく実行したらdb.example.com could not be resolved (3: Host not found)エラーが発生します。
    分析digを用いて、DNS serverの2つのドメイン名に対する解析状況をテストする。
    dig @127.0.0.1 www.baidu.com
    dig @127.0.0.1 db.example.com
    
    dig @8.8.8.8 www.baidu.com
    dig @8.8.8.8 db.example.com
    127.0.0.1は、ANSWER SECTIONを得ることができる。
    ;; ANSWER SECTION:
    www.baidu.com.          8       IN      CNAME   www.a.shifen.com.
    www.a.shifen.com.       91      IN      A       103.235.46.39
    しかし、dig @8.8.8.8 db.example.comAUTHORITY SECTIONしか得られない。
    ;; AUTHORITY SECTION:
    .                       86398   IN      SOA     a.root-servers.net. nstld.verisign-grs.com. 2017071900 1800 900 604800 86400
    このように、理由ははっきりしています。Ngixは複数のDNS serverをポーリングして、テスト時にちょうど127.0.0.1に会ったので、大丈夫です。その後、8.8.8.8にポーリングしたら問題が発生しました。
    余談をする
    すべてのイントラネットのIPはイントラネットのドメイン名でしかマッピングできないですか?AWSのMySQLクラスタのドメイン名は、外部ネットワークDNS server(e.g.8.8.8.8)で解析できますが、マッピングされたIPは確かにイントラネットIPです。