====== 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}}