====== 16 unboundでキャッシュサーバ ======
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
===== 1.インストール =====
==== epelを用意 ====
# 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
===== 2.設定変更 =====
==== 設定ファイル ====
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"
==== DNSルートサーバのhintファイル ====
# 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
}
===== 3.チューニングメモ =====
ワーカスレッド
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
===== 4.unbound-control を利用 =====
==== 鍵を作成 ====
# 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
==== unbound.confの修正 ====
remote-control:
control-enable: no
↓
remote-control:
control-enable: yes
==== サービス再起動 ====
service unbound restart
==== キャッシュの確認 ====
unbound-control dump_cache
{{tag>unbound bind}}