GCP上にDNSゾーンを一括処理で作ってみる

  • 緊急にDNSサーバを立ち上げなければならない場合を想定して作成しました
  • 『事前準備』と『作業環境構築』は(やっておいて損は無いので)事前に準備しておいて下さい
  • 『ゾーン作成』以降がイベント発生時の作業となります
  • CLIで流し込む方法を主に書いてあります
  • 2019/04時点での手順書です
  • whoisの更新は自由に出来るものとします

事前準備

Googleアカウントを作成します。

GCPコンソールにログインし、プロジェクトだけ作成しておいて下さい。

このテキストでは『my_zone』とします。

作業環境構築

WindowsPCを想定しています。

Node.jsやPythonを入れるのが面倒環境依存を排除するため、WSLで作成します。

ゾーン作成

GUIから可です。

CLIの場合は、(外部公開/非公開設定がbetaのみのため)betaコマンドで作成します。

gcloud beta dns managed-zones create --dns-name="my_domain." --visibility=public --description=my_zone my_zone
# ドメイン名
#   my_domain
# 外部公開
#   する
# ゾーン名
#   my_zone

ゾーン内容のフラッシュ

# 一括削除はCLIから行います
touch empty-file
gcloud dns record-sets import -z my_zone --delete-all-existing empty-file

ゾーンの削除

# ゾーンをクリアしてから削除します
touch empty-file
gcloud dns record-sets import -z my_zone --delete-all-existing empty-file
gcloud dns managed-zones delete my_zone

レコード一括追加

gcloud dns record-sets transaction start   -z=my_zone
gcloud dns record-sets transaction add     -z=my_zone --name="ns1.my_domain."  --type=A     --ttl=300 "192.168.0.1"
gcloud dns record-sets transaction add     -z=my_zone --name="ns2.my_domain."  --type=A     --ttl=300 "192.168.0.2"
gcloud dns record-sets transaction add     -z=my_zone --name="www.my_domain."  --type=A     --ttl=300 "192.168.0.3"
gcloud dns record-sets transaction add     -z=my_zone --name="mx1.my_domain."  --type=A     --ttl=300 "192.168.0.4"
gcloud dns record-sets transaction add     -z=my_zone --name="mx2.my_domain."  --type=A     --ttl=300 "192.168.0.5"
gcloud dns record-sets transaction add     -z=my_zone --name="test.my_domain." --type=CNAME --ttl=300 "www.my_domain."
gcloud dns record-sets transaction add     -z=my_zone --name="my_domain."      --type=MX    --ttl=300 "10 mx1.my_domain." "100 mx2.my_domain."
gcloud dns record-sets transaction execute -z=my_zone

レコード一括追加中断

# 一括処理中にエラーが出たり誤りを見付けた時
# 一旦中断しないと以後の作業に差し支えが出ます
gcloud dns record-sets transaction abort -z=my_zone

DNS上にSRVレコードが存在しないとき

DNS上にSRVレコードが存在せず、_ldap._tcp.example.com などが引けないとき。
某メーカーのNASをAD環境にJOINさせようとした時に謎エラーが出て気付きました。

まずはADサーバのipv4の設定を確認

  • この接続のアドレスをDNSに登録する、にチェックが入っていること
    入っていたときは、このポストは役立たずです✌(‘ω’✌ )
  • 入っていないときは、チェックをしたあと、
    net stop netlogon
    net start netlogon
    ipconfig /registerdns

    で登録

ちなみにDNSサーバ側で動的更新ができないときは

  1. スタート→プログラム→管理ツール→DNSを起動
  2. 左側のツリー画面を展開、使用している前方参照ゾーンもしくは逆引き参照ゾーンを表示
  3. 対象となるゾーン名を右クリックし、プロパティ
  4. 全般タブにある『動的更新を使用可能にしますか』のリストボックスで、“セキュリティで保護された更新のみ”を選択してから、OK

Windows10 1709用リモートサーバー管理ツール(RSAT)で『DNS』が消えている場合のリカバリ方法

色々検索して頑張って、最後にDLLの登録に失敗した方へ…。

64bit版での手順となります。
32bit版の場合は、コピー元のディレクトリ名(頭のamd64をx86に読み替え)と4~7のファイル名が違う(64を32に読み替え)だけで、あとは同じです。
8番以降の作業は管理者権限のコマンドプロンプトで行って下さい。

  1. KB 2693643 をアンインストールし、再起動する
  2. 適当な作業用ディレクトリを作成し、次のURLからRSATをダウンロードする
    https://www.microsoft.com/ja-JP/download/details.aspx?id=45520
  3. 次のURLを参考に、installx64.batunattend_x64.xmlを作成し、作業用ディレクトリに置く
    https://support.microsoft.com/ja-jp/help/4055558/rsat-missing-dns-server-tool-in-windows-10
  4. installx64.bat の最後のrmdirな行を削除またはコメントアウトする
  5. installx64.bat を実行
  6. dnsmgr.dlldns.lnk を、
    .\ex\ex\amd64_microsoft-windows-dns-server-snapin_31bf3856ad364e35_10.0.16299.2_none_946c2f555824ecef

    から取り出す

  7. dnsmgmt.mscdnsmgr.dll.mui
    .\ex\ex\amd64_microsoft-windows-d..er-snapin.resources_31bf3856ad364e35_10.0.16299.2_ja-jp_4a92b34b2bab1df4

    から取り出す

  8. dnsmgmt.mscdnsmgr.dllC:\Windows\System32 にコピーする
  9. dnsmgmt.mscdnsmgr.dll.muiC:\Windows\System32\ja-jp にコピーする
  10. dns.lnk
    C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools

    にコピーする

  11. regsvr32 c:\windows\system32\dnsmgr.dll にてDLLを登録する

以上