bindで行っていたDNSのキャッシュサーバだが、bindは脆弱性が多いのでunboundに変えてみる。
unbound 1.4系は、以下の脆弱性があるので1.5系を入れていきます。
https://jprs.jp/tech/security/2014-12-09-multiple-impl-vuln-delegation-limit.html
CentOS 6.7
unbound 1.5.1
# wget http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm # rpm -ivh epel-release-6-8.noarch.rpm # sed -i 's/enabled=1/enabled=0/g' /etc/yum.repos.d/epel.repo
インストール
# yum --enablerepo=epel install unbound
cp -p /etc/unbound/unbound.conf /etc/unbound/unbound.conf.org
CPU:24,メモリ: 8G での設定
# cat /etc/unbound/unbound.conf | sed 's/\(^\t\|^ *\)//g' | egrep -v '(^#|^$)' server: verbosity: 1 statistics-interval: 0 statistics-cumulative: no extended-statistics: yes num-threads: 2 interface: 0.0.0.0 interface-automatic: no outgoing-range: 32768 outgoing-num-tcp: 100 incoming-num-tcp: 100 so-rcvbuf: 16777216 so-sndbuf: 16777216 msg-cache-size: 750m msg-cache-slabs: 16 num-queries-per-thread: 16384 rrset-cache-size: 1500m rrset-cache-slabs: 16 infra-cache-slabs: 16 do-ip6: no access-control: 127.0.0.0/8 allow access-control: 192.168.0.0/16 allow access-control: 0.0.0.0/0 deny chroot: "" username: "unbound" directory: "/etc/unbound" logfile: "/var/log/unbound.log" use-syslog: no log-queries: no log-time-ascii: yes pidfile: "/var/run/unbound/unbound.pid" root-hints: "/etc/unbound/named.cache" hide-identity: yes hide-version: yes harden-glue: yes harden-dnssec-stripped: yes harden-below-nxdomain: yes harden-referral-path: yes use-caps-for-id: no unwanted-reply-threshold: 10000000 prefetch: yes prefetch-key: yes rrset-roundrobin: yes minimal-responses: yes dlv-anchor-file: "/etc/unbound/dlv.isc.org.key" trusted-keys-file: /etc/unbound/root.key val-clean-additional: yes val-permissive-mode: yes val-log-level: 1 key-cache-slabs: 16 remote-control: control-enable: yes server-key-file: "/etc/unbound/unbound_server.key" server-cert-file: "/etc/unbound/unbound_server.pem" control-key-file: "/etc/unbound/unbound_control.key" control-cert-file: "/etc/unbound/unbound_control.pem"
# wget -O "/etc/unbound/named.cache" ftp://FTP.INTERNIC.NET/domain/named.cache # chown unbound:unbound /etc/unbound/named.cache
# touch /var/log/unbound.log # chown unbound:unbound /var/log/unbound.log # chmod 644 /var/log/unbound.log
# vi /etc/logrotate.d/unbound /var/log/unbound.log { daily rotate 30 size 15M missingok compress create 644 unbound unbound sharedscripts prerotate touch /var/log/unbound.log chown unbound:unbound /var/log/unbound.log chmod 644 /var/log/unbound.log /usr/sbin/unbound-control log_reopen endscript postrotate /usr/sbin/unbound-control log_reopen endscript }
ワーカスレッド
CPUコア数の合計を指定するのが良い。
4(core) x 2(thread) x 2(CPU) = 16
num-thread = 16
キャッシュを構成するハッシュデータ構造のスラブ数
ワーカスレッドは、このデータ構造へアクセス時にスラブ毎にロックを掛けるため
スラブ数とワーカスレッド数を一致させるとロック回数が減る。
msg-cache-slabs
rrset-cache-slabs:
infra-cache-slabs
key-cache-slabs
ユーザ通信ソケットバッファ
OS側でのソケットの最大バッファサイズ
so-rcvbuf: 16777216
so-sndbuf: 16777216
/etc/sysctl.conf
# net.core.rmem_max
net.core.rmem_max = 16777216
# net.core.wmem_max
net.core.wmem_max = 16777216
リクエスト処理
num-thread x 1024 = 16384
num-queries-per-thread:16384
下記が増えているなら、num-queries-per-threadを引き上げる
current.user
overwritten
exceeded
権威サーバ通信用ソケット最大数
num-queries-per-threadの2倍
outgoing-range
キャッシュメモリサイズ
rrset-cache-size:750m
msg-cache-size:1500m
rrset-cache-sizeは、msg-cache-sizeの2倍が推奨される。
実メモリは、合計キャッシュサイズの2.5倍程度まで拡大することを想定
/etc/sysctl.conf
net.nf_conntrack_max = 1210856
net.netfilter.nf_conntrack_tcp_timeout_established = 43200
同時リクエスト数
※デフォルト10
outgoing-num-tcp: 100
incoming-num-tcp: 100
DNS応答が小さくなるため、TCPフォールバックが必要となる可能性が減る
minimal-responses: yes
以前はこの機能が実装されて無くて、ラウンドロビンの順番までキャッシュしてしまい
結果として毎回同じサーバへアクセスしてしまってた。
デフォルトではnoになっているので、yesへ変更
rrset-roundrobin: yes
# unbound-control-setup setup in directory /etc/unbound Generating RSA private key, 3072 bit long modulus (2 primes) ....................................................................................................++++ ..++++ e is 65537 (0x010001) Generating RSA private key, 3072 bit long modulus (2 primes) ..................++++ ...........................................++++ e is 65537 (0x010001) Signature ok subject=CN = unbound-control Getting CA Private Key removing artifacts Setup success. Certificates created. Enable in unbound.conf file to use
remote-control: control-enable: no ↓ remote-control: control-enable: yes
service unbound restart
unbound-control dump_cache