WindowsServer2022 の DNS への URI レコードを登録作業
Powershell で Windows Server 2022 の DNS へ URI レコードを登録する作業について記載します。
注意事項
初めに重要なので言っておきます。
私はDNS良く分かりません。
私はDNS良く分かりません。
ここで使われている用語については雰囲気で書いてます。
それを踏まえて本編は以下の通りです。
はじめに
Windows で DNS の URI レコード登録作業でハマったのでメモとして残します。
本家のコマンドの説明へのリンクは以下の通りです。
- Adds a resource record of a specified type to a specified DNS zone.
しかし、上記の説明の中には URI レコードの登録についての example は記載されていません。
経緯
RHEL 標準の認証周りを提供するサービス FreeIPA (現在は Red Hat Identity Management) の検証時、FreeIPA で認証させたいサーバーは、Kerberos認証しているサーバーの SRV や URI の FQDN を解決する必要がありました。
Windowsを DNS サーバーとして利用する場合、URI レコードを登録する作業でハマったので記録として残しています。対応としては、RHELさんから出ているナレッジベースの情報が一番正しいと思われます。
- RHEL の Knowledgebase の情報
細かい認証周りの機構については、RHELさんの公式のマニュアルの「第12章 IdM で SSSD を使用した認証のトラブルシューティング」の項目に記載されています。ここでは FreeIPA(IdM) の認証の仕組みは説明しません。
URI レコードとは???
2015年ぐらいに RFC 上は登録されたレコードの種類とのこと。
RFCのアブストラクトをみると「ホスト名からURIへのマッピングを公開するために使用されます。」と一言ありますが、何に使うか DNS 素人の私は良く分かりませんでした。
本当にごめんなさい。わかる人がいたらコメントをください。。。
ここ数年は AWS の Route53 や、 OCI の DNS サービスで、雑にレコード登録をしており、オンプレは久々だったので、何ぞ?となっていました。ただ、FreeIPA(IdentityManagement) のインストール手順で、これらの FQDN の名前解決せよ!という指定があり、しぶしぶ DNS の設定をし始めました。
やったこと
1. Linux 上で登録したい URI レコードを確認するコマンド
ipa dns-update-system-records --dry-run
で表示されたレコード一覧の情報を元に以下のコマンドを実施し、WindowsServer の DNS に登録するレコードの情報を取得します。(おそらく dig の Answer セクションで表示されてほしい内容の一覧が並びます)
注意事項になりますが、 named-rrchecker を利用するには bind をインストールする必要があります。
$ echo 'IN URI 0 100 "krb5srv:m:tcp:idm.example.com."' | named-rrchecker -u
CLASS1 TYPE256 \# 34 000000646B7262357372763A6D3A7463703A69646D2E6578616D706C652E636F6D2E
$
2. Windows の DNS に URI レコードを登録するコマンド
WindowsServer の Powershell を管理者権限で実行し、以下のコマンドを実施します。
Add-DnsServerResourceRecord -ZoneName "idm.example.com" -Name "_kerberos" -Type 256 -RecordData "000000646B7262357372763A6D3A7463703A69646D2E6578616D706C652E636F6D2E"
WindowsServer上で以下のように表示されていれば成功です。
3. Linux 上で登録された URI レコードを引いてみる
$ dig _kerberos.idm.example.com URI
; <<>> DiG 9.18.12-0ubuntu0.22.04.2-Ubuntu <<>> _kerberos.idm.example.com URI
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5636
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;_kerberos.idm.example.com. IN URI
;; ANSWER SECTION:
_kerberos.idm.example.com. 3600 IN URI 0 100 "krb5srv:m:tcp:idm.example.com."
;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Sun Aug 20 13:29:54 UTC 2023
;; MSG SIZE rcvd: 100
$
色々、WindowsServerのDNSでハマった点
- Add-DnsServerResourceRecord
- URI レコードの登録時のみ、TTL, Priority, Weight のパラメータが利用できませんでした。Aレコード、PTRレコード、SRVレコードの追加のコマンドでは指定できました。
-
-Type
のパラメータを RHEL の Knowledgebase の情報では文字列型"256"
と指定していますが、マイクロソフトの公式の説明を見るとUInt16型となっています。-Type 256
でも登録作業はできました。 - SRV レコードの登録時に、 tcp や udp の指定があると思いますが、その場合は
-Name "_ldap._tcp"
のように指定することで意図した SRV レコード登録が可能になります。
- Windows Server の DNS での URI レコードはサポートしてない状況でした。Windowsだけではなく、一般的ではないレコードの種類のように感じました。
おわりに
- DNS の構築について
- WindowsServerでDNSを立てるより、FreeIPA(IdentityManagement) 付属の DNS サーバーを利用したほうが構築は楽になると思います。
- 既存の環境で WindowsServer の DNS を利用している人たち向けに書いてみました。
- リゾルバや BIND の実装について気になるようになりました。
- 久しぶりの RHEL について
- いろいろ変わっていていいですね。nmcli いい!!(今更?)
- SSSD(System Security Services Daemon) に感動を覚えました。
- グローバル変数おじさんではなく、sysconfig 編集おじさんになるところでした。
おまけ
調査中に使ったリンク集を張っておきます。
cloudflare さんの DNS の説明はすごく分かりやすくて良いなと思いました。
- CLOUDFLAREさんのDNSレコードについての説明です。
- DNS に関する RFC を一覧でまとめてくれている n-i-e さんの Qiita のページです。
- 裏どりは必要ですが、英語版の Wikipadia にもレコードの種類がまとまっていて助かりました。
- AWS の Route53 でサポートされるレコード一覧