Site icon Mr. 沙先生

Unbound 取代 Bind 拿來當 DNS resolver

在過去我們會使用 Bind 來做 DNS resolver 查詢 (allow-recursive),但實際有拿來當成 resolver 的人有可能會遇到 recursive query 問不到的狀況,這在我上一間公司就遇到了很多次 .. 而且加上 Bind 安全性的問題,漸漸的開始有一些取代的方案出現,本篇介紹的就是 Unbound 這套專門處理 Resolver query 的 DNS

 

Unbound 是一個 open source project,官方介紹:

Unbound is a validating, recursive, and caching DNS resolver

 

同時他也支援 DNSSEC 和 stub-resolver

Unbound is designed as a set of modular components, so that also DNSSEC (secure DNS) validation and stub-resolvers (that do not run as a server, but are linked into an application) are easily possible.

 

 

Ubuntu 16.04 安裝 Unbound

Unbound 的安裝非常簡單,在這之前可以先參考 Documentation

 

Step 1. 直接用 apt 安裝 unbound

$ sudo DEBIAN_FRONTEND=noninteractive apt-get -y install unbound

 

Step 2. 設定 interface,和可以查詢的網路 (192.168.0.0/24)

$ sudo tee /etc/unbound/unbound.conf.d/interface.conf <<EOF
server:
    access-control: 192.168.0.0/24 allow
    interface: 0.0.0.0
    interface: ::0
EOF

 

Step 3. 設定在 cache 消失之前會預先去要更新的資料回來,讓 cache 不會消失,好處是 client 不需要再等待 Unbound 去要新的 dns record 回來,但 Unbound 則會增加約 10% 的負載和流量,因為只要問過之後這個 cache 就會一直再去更新,而不會消失。

prefetch-key 則是會再使用 DNSKEYs 來驗證,會耗費更多的 CPU 資源。

$ sudo tee /etc/unbound/unbound.conf.d/performance.conf <<EOF
server:
    prefetch: yes
    prefetch-key: yes
EOF

 

Step 4. 用 . 把 zone forward 去問 Google

$ sudo tee /etc/unbound/unbound.conf.d/forward-zone.conf <<EOF
forward-zone:
  name: "."
  forward-addr: 8.8.8.8
  forward-addr: 8.8.4.4
EOF

 

Step 5. 開啟 rrset-roundrobin 用 RRSet 的順序來回應。

$ sudo tee /etc/unbound/unbound.conf.d/rrset-roundrobin.conf <<EOF
server:
    rrset-roundrobin: yes
EOF

 

啟動服務

$ sudo systemctl enable unbound.service
$ sudo systemctl start unbound.service

 

搞定!

 

 

Exit mobile version