本記事はAD廃止に伴いDNSサーバーをUnbound (Windows)で設定した記録となります。
Windowsで設定する情報が少なく苦戦しましたが、だいたいLinuxと同じ設定が使えました。
実際にWindows端末で有効化を行い、動作検証を実施しました。
ふぅたこ
ふぅたこです。X(Twitter)もやってます。お問い合わせはこちらです
目次
検証環境
- OS:Windows 11 Pro
- ネットワーク:192.168.1.0/24
- ルータIPアドレス:192.168.1.1
- ファイルサーバ:192.168.1.2
- 内部向けwebサーバ:192.168.1.3
- Unbound端末IPアドレス:192.168.1.100
Unboundのダウンロードとインストール
ダウンロード作業
まずはWindows用のインストーラーをダウンロードします。
- Unbound – Download – NLnet Labsを開く。
- Unbound 1.22.0 (Current version)からインストーラーをダウンロードする。
インストール作業
- ダウンロードされたファイル「unbound_setup_1.22.0.exe」を実行します。
- [Next]をクリック。
- License Agreementを読んで、同意するなら[I Agree]をクリック。
- [Next]をクリック。
- [Next]をクリック。
- [Install]をクリック。
- [Finish]をクリック。
インストール先の確認
上記手順の通り、インストール先を変更せずに進めた場合、 C:\Program Files\Unbound にインストールされています。
このフォルダ内に設定ファイルがありますので、変更や追加を行っていきます。
Unboundの設定
C:\Program Files\Unbound\service.confがメインの設定ファイルになります。
設定例
以降は、C:\Program Files\Unbound\ フォルダ内のファイルについて設定していきます。
IPv6の記述はコメントアウトしています。
存在しないファイルは新規作成してください。
ふぅたこ
環境によって異なる部分もあると思いますので例としてください。
- service.conf
# Unbound configuration file on windows.
# See example.conf for more settings and syntax
server:
# ログ
# verbosity number, 0 is least verbose. 1 is default.
verbosity: 1
# Windows では、すべてのパスを相対パスにすることもできます。
# 実行可能ファイル (unbound.exe) が含まれるディレクトリを使いたい場合。
directory: "%EXECUTABLE%"
# 受け入れインターフェース
interface: 127.0.0.1 # IPv4ローカルホスト
interface: 0.0.0.0 # IPv4任意IP
# interface: ::1 # IPv6ローカルホスト≒127.0.0.1
# interface: :: # IPv6任意IP≒0.0.0.0
# 受け入れポート
port: 53 # デフォルト
# アクセスコントロール
access-control: 192.168.1.0/24 allow # IPv4ローカル
# access-control: fe80::/10 allow # IPv6ローカル
# 動作設定
do-ip4: yes # IPv4を解決する
do-ip6: no # IPv6を解決しない
do-udp: yes # UDPを解決する
do-tcp: yes # TCPを解決する
# 情報の秘匿
hide-identity: yes
hide-version: yes
# IPv6優先
# prefer-ip6: yes
# syslogは使わずにログファイルにログを出す
logfile: "unbound.log"
use-syslog: no
log-time-ascii: yes
log-queries: no
# グルーレコードを使ったDNSスプーフィング攻撃を回避する機能の有効化
harden-glue: yes
# DNSSEC機能に対する防御設定
harden-dnssec-stripped: yes
# 上位ゾーンと下位ゾーンのNSセットが同期していない場合の挙動の設定
harden-below-nxdomain: yes
# DNSSECの署名の検証時に参照パスの検証を行う設定
harden-referral-path: yes
# 0x20に符号化されたランダムビットを使った偽造攻撃の検出設定
use-caps-for-id: no
# 望まない回答を受け取った回数によりキャッシュをクリアする機能の設定
unwanted-reply-threshold: 10000000
# 「transparent」は該当のlocal-dataが存在しない時に普通に問い合わせする設定
# 外部のサーバーに自分のドメインを割り当てて使う事もあるかも知れないので、普通はこれで良いと思う
local-zone: "example.com." transparent
#パフォーマンス設定
num-threads: 4 # CPUコア数
outgoing-range: 200 # 1024/コア数 - 50
num-queries-per-thread: 100 # outgoing-rangeの半分
msg-cache-size: 64m #キャッシュメモリサイズ(合計で最大2.5倍になるので余裕をもって)
rrset-cache-size: 128m #キャッシュメモリサイズ(msg-cache-sizeの2倍)
msg-cache-slabs: 4 #コア数に最も近い2の累乗
rrset-cache-slabs: 4 #コア数に最も近い2の累乗
infra-cache-slabs: 4 #コア数に最も近い2の累乗
key-cache-slabs: 4 #コア数に最も近い2の累乗
so-rcvbuf: 4m # UDP ポート 53 受信のバッファ サイズ
so-sndbuf: 4m # UDP ポート 53 送信のバッファ サイズ
prefetch: yes
prefetch-key: yes
# ラウンドロビン使う
rrset-roundrobin: yes
# minimal-responsesはA/AAAAだけを引く環境ならyesで
# MXを大量に引きまくる大規模なメールサーバーみたいなのが居るならnoの方が良い?
minimal-responses: yes
qname-minimisation: yes
# SO_REUSEPORT を使用してクエリをスレッドに分散します。
# 極度の負荷では、均等に分散するためにオフにした方がよい場合があります。
#so-reuseport: yes
# Include Files
include: "local-data.conf"
include: "local-data-ptr.conf"
# 該当しない問い合わせをDNSに投げる
# ブロードバンドルーターの DNS や Google DNS で問題ありません。
# 複数設定も可能です。
forward-zone:
name: "."
forward-addr: 192.168.1.1
# Google DNS 使う場合
# forward-addr: 2001:4860:4860::8888 #Google public DNS IPv6
# forward-addr: 2001:4860:4860::8844 #Google public DNS IPv6
# forward-addr: 8.8.8.8 #Google public DNS IPv4
# forward-addr: 8.8.4.4 #Google public DNS IPv4
server: auto-trust-anchor-file: "root.key"
remote-control:
# If you want to use unbound-control.exe from the command line, use
control-enable: yes
control-interface: 127.0.0.1
control-use-cert: no
- local-data.conf
server:
# ローカル データの設定ファイル
# 末尾のドットを忘れないように注意。
# <domain>. [TTL] IN <Type> <Value>
local-data: "file.example.com. IN A 192.168.1.2"
local-data: "www.example.com. IN A 192.168.1.3"
# local-data: "example.com. 300 IN AAAA fe80::xxxx:xxxx:xxxx:xxxx"
# local-data: "www.example.com. 300 IN AAAA fe80::xxxx:xxxx:xxxx:xxxx"
- local-data-ptr.conf
server:
# 逆引きの設定
# <IP> [TTL] <domain>.
local-data-ptr: "192.168.1.2 300 file.example.com."
local-data-ptr: "192.168.1.3 300 www.example.com."
# local-data-ptr: "fe80::xxxx:xxxx:xxxx:xxxx 300 example.com."
# local-data-ptr: "fe80::xxxx:xxxx:xxxx:xxxx 300 www.example.com."
- unbound.log
ログファイルの出力先なので空で大丈夫です。
下記のようなログが出力されます。
2024/11/27 17:28:31 C:\Program Files\Unbound\unbound.exe[31864:0] info: start of service (unbound 1.22.0).
generate keytag query _ta-xfxx. NULL IN
最後に、設定ファイルが間違っていないか確認
- 管理者権限でコマンドプロンプトを起動する。
- 下記をコピーして貼り付けする。
cd "C:\Program Files\Unbound"
unbound-checkconf
- 下記表示となれば設定OKです。
unbound-checkconf: no errors in C:\Program Files\Unbound\service.conf
その他、確認コマンド
現在キャッシュされている情報を出力
unbound-control dump_cache
不正なキャッシュがある場合には、キャッシュを削除
unbound-control flush www.example.com
該当ドメインの全キャッシュを削除
unbound-control flush_zone example.com
特定のドメインへのアクセスを禁止する設定
unbound-control local_zone example.com unsafe
Windowsの設定
自分のパソコンからしか使わない場合
パソコンのDNSを127.0.0.1と設定すればOKです。
他のパソコンからも参照する場合
Unboundを設定したパソコンのファイアウォールを開放する作業
- セキュリティが強化されたWindows Defender ファイアウォールを開く
- 新しい規則 をクリックして、設定を作成する。
- ポートを選択して次へ。
- TCPを選択。(この後に同様にUDPでも作成してください。)
- 特定のローカルポートで53と入力。次へ。
- 接続を許可する を選択。次へ。
- プライベート を選択。次へ。
- 任意の名前をつける。完了。
- ③④での記載の通り、UDPでもローカルポート53で作成してください。
他のパソコンからUnboundを見る設定
- Unboundを設定したパソコンのIPアドレスを確認する。(192.168.1.100 だったと仮定)
- 他のパソコンのDNSに 192.168.1.100 と設定する。
コメント