#author("2020-10-12T23:27:59+09:00","default:nowsky","nowsky")
*NSD [#se397aaa]
権威DNSに特化したサーバアプリケーションであり、オランダ企業とRIPE NCCの共同開発が行われている。
RFCに準拠した最低限の機能のみ実装している為、脆弱性が少なく堅牢で応答速度も早いのが特徴となる。
最低限の機能しか無い為、&color(#ff0000){DNSクエリを取得出来ない};欠点がある。
 
DNSルートサーバでも採用されており、グローバルの稼働実績も多い。
BINDとNSDのハイブリッド構成を取って脆弱性対策をするケースも多い上、
BIND脱却としてオールNSD構成を取る日本企業も増えてきた。
~
*参考サイト [#s4cd4ee5]
-[[NLnet Labs:+https://nlnetlabs.nl/]]
-[[NSD Documentation:+https://nlnetlabs.nl/documentation/nsd/]]
~
*構築環境 [#x197e83c]
OSはCentOSを利用。普通は出来ないDNSクエリ取得を実現すべくパッチを適用する為、
ソースコードからビルドを実施している。
- 共通環境
 OS  : CentOS 8.2.2004 x86_64
 NSD : NSD v4.3.3
 USER: nsd
 GRP : nsd
~
*インストール [#ia53f3a8]
-&size(16){&font(b){0. ソース改変};};
NSDでDNSクエリを取得する事は出来ないが、
下記サイトで公開している独自パッチを適用する事でログ取得が可能となる。
サポート外となるが、ログ取得が必要な時はソースコードを変更した上でビルドする。
#region(変更部分)

-参考サイト
[[あ~ゆ~どりま~:+http://ayd.jp/p_blog/archive-201410/article-1413696054.html]]
[[どさにっき:+http://ya.maya.st/d/201305b.html#s20130517_2]]
 

-NSD v4.3.3
 [root@server nsd-4.3.3]# diff -up query.c query.c-4.3.3
 --- query.c     2020-10-08 16:14:25.000000000 +0900
 +++ query.c-4.3.3       2020-10-10 14:20:49.000000000 +0900
 @@ -1406,6 +1406,7 @@ query_process(query_type *q, nsd_type *n
         nsd_rc_type rc;
         query_state_type query_state;
         uint16_t arcount;
 +       char address[128];
  
         /* Sanity checks */
         if (buffer_limit(q->packet) < QHEADERSZ) {
 @@ -1543,6 +1544,19 @@ query_process(query_type *q, nsd_type *n
                 return QUERY_PROCESSED;
         }
  
 +       /* Query logging. */
 +       addr2str(&q->addr, address, sizeof(address));
 +       log_msg(LOG_INFO, "client %s: query %s %s %s %s%s%s%s%s",
 +               address,
 +               q->qname ? dname_to_string(q->qname, NULL) : "(null)",
 +               rrclass_to_string(q->qclass),
 +               rrtype_to_string(q->qtype),
 +               RD(q->packet) ? "+" : "-",
 +               q->edns.status == EDNS_OK ? "E" : "",
 +               q->tcp ? "T" : "",
 +               q->edns.dnssec_ok ? "D" : "",
 +               CD(q->packet) ? "C" : "");
 +
         query_prepare_response(q);
  
         if (q->qclass != CLASS_IN && q->qclass != CLASS_ANY) {
#endregion

続きを作成中....