PowerDNS Recursor 4.3 ๋ฐ KnotDNS 2.9.3 ์ถœ์‹œ

์ผ์–ด๋‚ฌ๋‹ค ์บ์‹ฑ DNS ์„œ๋ฒ„ ์ถœ์‹œ PowerDNS ๋ฆฌ์†Œ์Šค 4.3, ์žฌ๊ท€์ ์ธ ์ด๋ฆ„ ๋ณ€ํ™˜์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. PowerDNS Recursor๋Š” PowerDNS Authoritative Server์™€ ๋™์ผํ•œ ์ฝ”๋“œ ๋ฒ ์ด์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋˜์—ˆ์ง€๋งŒ PowerDNS Recursive ๋ฐ Authoritative DNS ์„œ๋ฒ„๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ ์ฃผ๊ธฐ๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ๋˜์–ด ๋ณ„๋„์˜ ์ œํ’ˆ์œผ๋กœ ์ถœ์‹œ๋ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ ๋ฐฐํฌ์ž GPLv2์— ๋”ฐ๋ผ ๋ผ์ด์„ผ์Šค๊ฐ€ ๋ถ€์—ฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์„œ๋ฒ„๋Š” ์›๊ฒฉ ํ†ต๊ณ„ ์ˆ˜์ง‘์„ ์œ„ํ•œ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•˜๊ณ , ์ฆ‰์‹œ ์žฌ์‹œ์ž‘์„ ์ง€์›ํ•˜๋ฉฐ, Lua ์–ธ์–ด๋กœ ์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์—”์ง„์ด ๋‚ด์žฅ๋˜์–ด ์žˆ์œผ๋ฉฐ, DNSSEC, DNS64, RPZ(์‘๋‹ต ์ •์ฑ… ์˜์—ญ)๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ์ง€์›ํ•˜๊ณ  ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ์—ฐ๊ฒฐ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ•ด๊ฒฐ ๊ฒฐ๊ณผ๋ฅผ BIND zone ํŒŒ์ผ๋กœ ๊ธฐ๋กํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๊ณ ์„ฑ๋Šฅ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด FreeBSD, Linux ๋ฐ Solaris(kqueue, epoll, /dev/poll)์—์„œ๋Š” ์ตœ์‹  ์—ฐ๊ฒฐ ๋‹ค์ค‘ํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜๊ณผ ์ˆ˜๋งŒ ๊ฐœ์˜ ๋ณ‘๋ ฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ณ ์„ฑ๋Šฅ DNS ํŒจํ‚ท ํŒŒ์„œ๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ƒˆ ๋ฒ„์ „์—์„œ:

  • ์š”์ฒญํ•œ ๋„๋ฉ”์ธ์— ๋Œ€ํ•œ ์ •๋ณด ์œ ์ถœ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ๊ฐœ์ธ ์ •๋ณด ๋ณดํ˜ธ๋ฅผ ๊ฐ•ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ํ•ด๋‹น ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. QNAME ์ตœ์†Œํ™” (RFC-7816), "์™„ํ™”" ๋ชจ๋“œ์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”์ปค๋‹ˆ์ฆ˜์˜ ํ•ต์‹ฌ์€ ํ™•์ธ์ž๊ฐ€ ์—…์ŠคํŠธ๋ฆผ ์ด๋ฆ„ ์„œ๋ฒ„์— ๋Œ€ํ•œ ์š”์ฒญ์—์„œ ์›ํ•˜๋Š” ํ˜ธ์ŠคํŠธ์˜ ์ „์ฒด ์ด๋ฆ„์„ ์–ธ๊ธ‰ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด foo.bar.baz.com ํ˜ธ์ŠคํŠธ์˜ ์ฃผ์†Œ๋ฅผ ๊ฒฐ์ •ํ•  ๋•Œ ํ™•์ธ์ž๋Š” ".com" ์˜์—ญ์— ๋Œ€ํ•œ ๊ถŒํ•œ ์žˆ๋Š” ์„œ๋ฒ„์— "QTYPE=NS,QNAME=baz.com" ์š”์ฒญ์„ "" ์–ธ๊ธ‰ ์—†์ด ๋ณด๋ƒ…๋‹ˆ๋‹ค. foo.bar". ํ˜„์žฌ ํ˜•ํƒœ์—์„œ๋Š” ์ž‘์—…์ด "์™„ํ™”" ๋ชจ๋“œ๋กœ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค.
  • ๊ถŒํ•œ ์žˆ๋Š” ์„œ๋ฒ„๋กœ ๋‚˜๊ฐ€๋Š” ์š”์ฒญ๊ณผ ๊ทธ์— ๋Œ€ํ•œ ์‘๋‹ต์„ dnstap ํ˜•์‹์œผ๋กœ ๊ธฐ๋กํ•˜๋Š” ๊ธฐ๋Šฅ์ด ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์‚ฌ์šฉํ•˜๋ ค๋ฉด "-enable-dnstap" ์˜ต์…˜์ด ์žˆ๋Š” ๋นŒ๋“œ๊ฐ€ ํ•„์š”ํ•จ).
  • TCP ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์ „์†ก๋œ ์—ฌ๋Ÿฌ ์ˆ˜์‹  ์š”์ฒญ์— ๋Œ€ํ•œ ๋™์‹œ ์ฒ˜๋ฆฌ๊ฐ€ ์ œ๊ณต๋˜๋ฉฐ ๊ฒฐ๊ณผ๋Š” ๋Œ€๊ธฐ์—ด์˜ ์š”์ฒญ ์ˆœ์„œ๊ฐ€ ์•„๋‹Œ ์ค€๋น„๊ฐ€ ๋˜๋ฉด ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค. ๋™์‹œ ์š”์ฒญ ํ•œ๋„๋Š” โ€œTCP ์—ฐ๊ฒฐ๋‹น ์ตœ๋Œ€ ๋™์‹œ ์š”์ฒญ ์ˆ˜".
  • ์ƒˆ๋กœ์šด ๋„๋ฉ”์ธ์„ ์ถ”์ ํ•˜๋Š” ๊ธฐ์ˆ  ๊ตฌํ˜„ ๋ชฉ๋ก€ (์ƒˆ๋กœ ๊ด€์ฐฐ๋œ ๋„๋ฉ”์ธ), ์˜์‹ฌ์Šค๋Ÿฌ์šด ๋„๋ฉ”์ธ์ด๋‚˜ ์•…์„ฑ์ฝ”๋“œ ์œ ํฌ, ํ”ผ์‹ฑ ๊ฐ€๋‹ด, ๋ด‡๋„ท ์šด์˜์— ์ด์šฉ๋˜๋Š” ๋“ฑ ์•…์„ฑ ํ™œ๋™๊ณผ ๊ด€๋ จ๋œ ๋„๋ฉ”์ธ์„ ์‹๋ณ„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ์ด์ „์— ์•ก์„ธ์Šคํ•œ ์ ์ด ์—†๋Š” ๋„๋ฉ”์ธ์„ ์‹๋ณ„ํ•˜๊ณ  ์ด๋Ÿฌํ•œ ์ƒˆ๋กœ์šด ๋„๋ฉ”์ธ์„ ๋ถ„์„ํ•˜๋Š” ๊ฒƒ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์œ ์ง€ ๊ด€๋ฆฌ์— ์ƒ๋‹นํ•œ ์ž์›์ด ํ•„์š”ํ•œ ์ง€๊ธˆ๊นŒ์ง€ ๋ณธ ๋ชจ๋“  ๋„๋ฉ”์ธ์˜ ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•ด ์ƒˆ ๋„๋ฉ”์ธ์„ ์ถ”์ ํ•˜๋Š” ๋Œ€์‹  NOD๋Š” ํ™•๋ฅ ์  ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. SBF (Stable Bloom Filter)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ์™€ CPU ์†Œ๋น„๋ฅผ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด ์„ค์ •์—์„œ "new-domain-tracking=yes"๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • systemd์—์„œ ์‹คํ–‰ํ•  ๋•Œ PowerDNS Recursor ํ”„๋กœ์„ธ์Šค๋Š” ์ด์ œ ๋ฃจํŠธ ๋Œ€์‹  ๊ถŒํ•œ์ด ์—†๋Š” ์‚ฌ์šฉ์ž pdns-recursor์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. systemd ๋ฐ chroot๊ฐ€ ์—†๋Š” ์‹œ์Šคํ…œ์˜ ๊ฒฝ์šฐ ์ œ์–ด ์†Œ์ผ“ ๋ฐ pid ํŒŒ์ผ์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ ๋””๋ ‰ํ„ฐ๋ฆฌ๋Š” ์ด์ œ /var/run/pdns-recursor์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ, ์ถœํŒ ๋œ ์„๋ฐฉํ•˜๋‹ค KnotDNS 2.9.3, ๋ชจ๋“  ์ตœ์‹  DNS ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋Š” ๊ณ ์„ฑ๋Šฅ ๊ถŒํ•œ ์žˆ๋Š” DNS ์„œ๋ฒ„(๋ฆฌ์ปค์„œ๋Š” ๋ณ„๋„์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ์„ค๊ณ„๋จ)์ž…๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋Š” C๋กœ ์ž‘์„ฑ๋œ ์ฒด์ฝ” ์ด๋ฆ„ ๋“ฑ๋ก CZ.NIC์— ์˜ํ•ด ๊ฐœ๋ฐœ ์ค‘์ž…๋‹ˆ๋‹ค. ๋ฐฐํฌ์ž GPLv3์— ๋”ฐ๋ผ ๋ผ์ด์„ผ์Šค๊ฐ€ ๋ถ€์—ฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

KnotDNS๋Š” SMP ์‹œ์Šคํ…œ์—์„œ ์ž˜ ํ™•์žฅ๋˜๋Š” ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ๋ฐ ๋Œ€๋ถ€๋ถ„ ๋น„์ฐจ๋‹จ ๊ตฌํ˜„์„ ์‚ฌ์šฉํ•˜๋Š” ๊ณ ์„ฑ๋Šฅ ์ฟผ๋ฆฌ ์ฒ˜๋ฆฌ์— ์ค‘์ ์„ ๋‘”๋‹ค๋Š” ์ ์—์„œ ๊ตฌ๋ณ„๋ฉ๋‹ˆ๋‹ค. ์ฆ‰์‹œ ์˜์—ญ ์ถ”๊ฐ€ ๋ฐ ์‚ญ์ œ, ์„œ๋ฒ„ ๊ฐ„ ์˜์—ญ ์ „์†ก, DDNS(๋™์  ์—…๋ฐ์ดํŠธ), NSID(RFC 5001), EDNS0 ๋ฐ DNSSEC ํ™•์žฅ(NSEC3 ํฌํ•จ), ์‘๋‹ต ์†๋„ ์ œํ•œ(RRL)๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

์ƒˆ ๋ฆด๋ฆฌ์Šค์—์„œ:

  • NOTIFY ๋ฉ”์‹œ์ง€ ์ „์†ก์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•ด 'remote.block-notify-after-transfer' ์„ค์ •์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • DNSSE์—์„œ Ed448 ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•œ ์‹คํ—˜์  ์ง€์› ๊ตฌํ˜„(GnuTLS 3.6.12+ ํ•„์š”, ์•„์ง ์ถœ์‹œ๋˜์ง€ ์•Š์Œ) ์๊ธฐํ’€ 3.6+);
  • KASP ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์„œ๋ช…๋œ ์˜์—ญ์— ๋Œ€ํ•œ SOA ์ผ๋ จ ๋ฒˆํ˜ธ๋ฅผ ์–ป๊ฑฐ๋‚˜ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด 'local-serial' ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ keymgr์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • BIND DNS ์„œ๋ฒ„ ํ˜•์‹์˜ Ed25519 ๋ฐ Ed448 ํ‚ค๋ฅผ keymgr๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • 500๋น„ํŠธ ์‹œ์Šคํ…œ์—์„œ ๊ธฐ๋ณธ 'server.tcp-io-timeout' ์„ค์ •์€ 512ms๋กœ ๋Š˜์–ด๋‚ฌ๊ณ  'database.journal-db-max-size'๋Š” 32MiB๋กœ ์ค„์—ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€