DNSのルートサーバから引くUnboundの作り方
これはなに
- 私の備忘録です
- 運用しているAS内にリゾルバDNSを作るときに、AS内のすべてのクエリを処理するしせっかくなのでどこにも頼らないリゾルバを作ってみたくなったので作ってみた
環境
- Rocky Linux 9.4
- Unbound 1.16.2
作り方
1. Unboundをインストールします
yum install unbound
2. Configの作成
既存のファイルをリネームします
mv /etc/unbound/unbound.conf /etc/unbound/unbound.conf.org
下の内容を参考にConfigを作成します
server:
interface: 127.0.0.1
interface: 192.168.1.1
interface: 2001:db8:1::1
access-control: 127.0.0.1/8 allow
access-control: 192.168.1.1/24 allow
access-control: 0.0.0.0/0 deny
access-control: 2001:db8:1::/48 allow
access-control: ::/0 deny
hide-version: yes
hide-identity: yes
root-hints: root.hints
logfile: "/etc/unbound/log/unbound.log"
use-syslog: no
log-queries: yes
log-time-ascii: yes
各パラメータの説明
interface:
Unboundがリッスンするアドレスを記載する(複数可)
必要に応じてIPv4とIPv6それぞれ書く
access-control:
Unboundが受け入れるクエリのレンジを設定する
必要に応じてIPv4とIPv6それぞれ書く
hide-version: yes
hide-identity: yes
バージョンなどが見えると脆弱性を突かれたりするので隠す
root-hints: root.hints
今回のミソ
参照すべきルートサーバの情報が格納されているファイル
logfile:
以下
ログの設定なのでよしなに
3. Configのチェック
unbound-checkconf
を実行してConfigに間違いがないことを確認する
エラーに関しては適宜修正を
4. root.hintsを入手する
下のコマンドを実行してルートサーバの情報を入手する
curl --output /etc/unbound/root.hints https://www.internic.net/domain/named.cache
5. systemd-resolvedを無効化する
そのままだとポートが被ってUnboundが起動できないので下記のコマンドで無効化する
systemctl stop systemd-resolved
systemctl disable systemd-resolved
6. Unboundの起動と自動起動を設定する
下のコマンドでUnboundの起動と自動起動の設定を行う
systemctl enable unbound --now
7. 起動確認
localhostに対して正引きを行って問題なく正引き出来ることを確認する
8. サーバのポートを開放する
別のサーバからアクセスできるようにポートを開放する
開放対象:53/tcp・53/udp
Firewalldの場合
firewall-cmd --add-port=53/tcp --permanent
firewall-cmd --add-port=53/udp --permanent
firewall-cmd --reload
9. 動作確認
別の端末からDNSの正引きを実行して動作を確認する
10. root.hintsの更新設定
cronで定期的に更新するように設定します
月一回程度の更新で問題ないです
※サンプルは毎週日曜日午前2時に更新されるようになっています
0 2 * * 0 curl --output /etc/unbound/root.hints https://www.internic.net/domain/named.cache
Discussion