Debian Stretch上でUnboundを使ってみます。
やる事としては、
ローカル用にdomain1.tld,domain2.tldのA,MXレコードを追加する。
LAN内(192.168.0.0/24)から参照出来るようにする。
APT
# apt update # apt install unbound
Unboundの設定
悪いインターネットさんの「unbound.confの雛形 IPv4+IPv6」を参考にしました。
/etc/unbound/unbound.conf
server: verbosity: 0 #No Log interface: ::0 #IPv6 interface: 0.0.0.0 #IPv4 access-control: 0.0.0.0/0 refuse access-control: ::0/0 refuse access-control: 127.0.0.0/8 allow access-control: ::1/128 allow access-control: 192.168.0.0/24 allow # your IPv4 LAN access-control: fc00::/7 allow # your IPv6 LAN #INCLUDE FILES (in server:) include: /etc/unbound/include/local.zone forward-zone: name: "." forward-addr: 2001:4860:4860::8888 # IPv6 Google public DNS#1 forward-addr: 2001:4860:4860::8844 # IPv6 Google public DNS#2 forward-addr: 8.8.8.8 # IPv4 Google public DNS#1 forward-addr: 8.8.4.4 # IPv4 Google public DNS#2
server: | |
---|---|
verbosity | 0でログを取らない |
interface | 応答するインターフェイスの指定 |
access-control | refuseで拒否、allowで許可 |
include | 追加で読み込む設定ファイルorディレクトリ |
この設定だと、localhostとLAN内からの問い合わせにのみ応答し、それ以外からの問い合わせは拒否されます。
また、includeはディレクティブごとに複数指定出来ます。
公開されているサーバで使う場合はオープンリゾルバにならないように注意しましょう。
forward-zone: | |
name | フォワード(転送)するドメインを指定、"."で全てのドメイン |
forward-addr | フォワード先のDNSを指定 |
つまり、後述するゾーンファイルで設定を行うドメイン以外は、全て「forward-addr:」で指定したDNSで名前解決されます。
今回はGoole Public DNSを使っていますが、ISPの提供しているDNSなどを設定しても良いです。
ゾーンファイル
# mkdir /etc/unbound/include
このファイルへローカル向けのDNSレコードを記述します。
/etc/unbound/include/local.zone
local-data: "domain1.tld. IN A 192.168.1.11" local-data: "mail.domain1.tld. IN A 192.168.1.10" local-data: "domain1.tld. IN MX 10 mail.domain1.tld." local-data: "domain2.tld. IN A 192.168.1.11" local-data: "domain2.tld. IN MX 10 mail.domain1.tld."
ドメインの後には、「.」を付ける必要があるので注意してください。
ポート開放
ここではFirewalldでtcp/udpの53番ポートを開けます。
# firewall-cmd --permanent --zone=public --add-service=dns # firewall-cmd --reload # firewall-cmd --list-all #サービスにdnsが追加されているか確認
起動
そのままだとエラーが出て自動起動出来ないらしいので、unbound.serviceを編集します。
/lib/systemd/system/unbound.service
After=network-online.target
Afterのnetwork.targetをnetwork-online.targetへ変えています。
起動する
# systemctl start unbound # systemctl enable unbound
とりあえずこれでUnboundが起動出来ているはずです。
nslookupでテストしてみます。
# nslookup domain1.tld 127.0.0.1
ゾーンファイルで設定したIPアドレスが表示されたら正常に動作しています。
resolv.confとか
このままではOSがUnboundへDNSの問い合わせをしてくれないので、resolv.confを編集します。
/etc/resolv.conf
nameserver 127.0.0.1 nameserver ::1
既存の「nameserver」を削除して、これを追加してください。
また、DNSの設定は/etc/network/interfacesにも記述しておくべきらしいので、こちらも編集します。
/etc/network/interfaces
iface enp0s3 inet static ~~~~~~~~~~ dns-nameservers 127.0.0.1 iface enp0s3 inet6 auto ~~~~~~~~~~ dns-nameservers ::1
終わり
後はRebootすれば自動でUnboundが立ち上がっていると思います。
正常に動作しているかどうか確認します。
# systemctl status unbound
実際に問い合わせが行えるか確認します。
# nslookup domain1.tld
ちなみに、次のコマンドでUnboundの設定ファイルの内容が正しいかどうか確認することが出来ます。
# unbound-checkconf unbound-checkconf: no errors in /etc/unbound/unbound.conf
終わり