dns

PowerShell で DNS 操作

現在、俺々 Lab に vCloud Director (vCD) モドキを vCenter Orchestrator (vCO) で作成しています。その作業の中で、Windows の DNS サーバーの A レコード作成が手間だったので PowerShell 化したので、その過程を記録に残します。

作成中 の vCD モドキは、同一の環境を 2 分程度でコピーできることを目的としています。

  • SID 同一
  • SSH の各種鍵 同一
  • IP アドレス 同一
  • MAC アドレス 同一
  • Gateway は IP Masquerade で同一 * 環境を隠蔽

VMware 製品を簡単に試せる ProjectNee や、vCD を使った PC 教室と同様の実装になります。直ぐに試したい製品で必要な IP アドレスは 100 近くになるため、UI で A レコード、PTR レコードを追加するのはマゾい作業です。ホスト名、IP アドレス、MAC アドレスを管理するためのスプレッドシートから、ホスト名、IP アドレスの CSV ファイルを作成し、これを入力とする PowerShell を作成したいと思います。

まず、PowerShell に DNS 管理用のモジュールを追加します。PowerShell のプロンプトから以下を実行します。

> Get-Command -Module DnsServer
> update-help

DnsServer モジュールは、TechNet によると Windows 2012、Windows 8 以上が必要のようです。
DNS Server Comdlets in Windows PowerShell

CSV からホスト名と IP アドレスを拾って DNS に登録していくスクリプトはこちら。

$ZoneName = "corp.local"
$CsvFile = "C:Tempip-address-list.csv"

$HostInfos = Import-Csv $CsvFile

$HostInfos | ForEach-Object {
  $HostInfo = $_
  $Record = $false

  # With "-ErrorAction Ignore", if a value of -Name doesn't exist in the Zone, then Get-DnsServerResourceRecord returns $null
  # Otherwise, you get an exception which stops this script.
  $Record = Get-DnsServerResourceRecord -ZoneName $ZoneName -Name $HostInfo.Hostname -ErrorAction Ignore
  If ( ! $Record ) {
    Add-DnsServerResourceRecordA -ZoneName $ZoneName -Name $HostInfo.Hostname -IPv4Address $HostInfo.IpAddr -CreatePtr
  }
}

スクリプトに喰わせる CSV は以下になります。ProjectNee と違うのはご容赦を…完全に個人の好みです。同じ IP アドレスがあるのは、全環境で同じ DNS サービスを使い回すためです。Windows の vCenter Server を利用するときもあれば、仮想アプライアンスの vCenter Server を利用する時もあるためです。この手間は仕方ないとして、実際に利用し始める前に不要な PTR レコードは削除しています。

Hostname,IpAddr
controlcenter,192.168.110.1
vc-l-01a,192.168.110.11
vc-w12-01a,192.168.110.11
vco-l-01a,192.168.110.12
vcd-l-01a,192.168.110.21
vcd-l-02a,192.168.110.22
vcns-l-01a,192.168.110.31
nsx-l-01a,192.168.110.31
vcops-l-01a,192.168.110.41
vcops-l-02a,192.168.110.42
srm-w8-01a,192.168.110.51
srm-w12-01a,192.168.110.51
srm-w8-02a,192.168.110.52
srm-w12-02a,192.168.110.52
vr-l-01a,192.168.110.55
vr-l-02a,192.168.110.56
vcli-l-01a,192.168.110.52
vcac-l-01a,192.168.110.61
iaas-w8-01a,192.168.110.65
iaas-w12-01a,192.168.110.65
appd-l-01a,192.168.110.66
itfm-l-01a,192.168.110.67
bde-l-01a,192.168.110.71
....

小ネタ

vSphere Web Client (あるいは vSphere Client) から MAC アドレスを固定すると、MAC アドレスの先頭 3 オクテット (OUI: Organizationally Unique Identifier) は 00:50:56 となります。HomeLab などで MAC アドレスもコントロールしたい場合は、IP アドレスは Class B のアドレス体系にして、その IP アドレスとMAC アドレスの後半の 3 オクテットを 10 進数でマッピングすると管理しやすいと思いますよ。

IP アドレスを見て瞬時に脳内で 10 進数 ➡ 16 進数 の変換が出来る人は Class A のアドレス体系でも不自由ないかも知れません。

関連記事

  1. powercli

    PowerCLI – オブジェクトの変換

    vSphere Web Services SDK (SDK) と vS…

  2. powershell

    PowerShell -Split 演算子で “.” (ピリオド) を区切り…

    まとめ-Split 演算子の 2 項目は正規表現ピリオドを区切…

  3. powershell

    PowerCLI – ダブルクォート内での配列型の変数の展開

    PowerCLI に限った話ではないのですが、PowerCLI のスク…

  4. powershell

    PowerCLI – PowerShell on Mac

    祝 !! OSS 化。PowerShell が OSS 化され L…

  5. powercli

    PowerShell スクリプト コマンドレットのパラメータに補完機能を

    まとめスクリプト コマンドレット パラメーターの補完は極めて便利…

  6. powercli

    Details of host Advanced settings

    まとめESXi ホストの詳細設定一覧を CSV で出力ホストの…

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。










  1. vmotion

    vMotion の歴史 (3) – vCenter Server 4…
  2. 未分類

    KDDI による Soracom 子会社化に思うこと
  3. VMConAWS

    VMware Cloud on AWS 事始め
  4. powershell

    PowerCLI – ダブルクォート内での配列型の変数の展開
  5. host client

    ESXi と Host Client のバージョンの組み合わせ
PAGE TOP
Translate »