vm.gowatana.jp

NEOにほんごVMware(仮)

VMware Cloud Director 10.4 を PowerCLI で操作してみる。Part-06 Edge Gateway NAT Rule の操作

VMware Cloud Director 10.4(VCD)で、PowerCLI を使用して NSX(NSX-T)Edge Gateway の NAT ルールを操作してみます。しかしながら PowerCLI では NAT ルールを操作するコマンドレットが用意されていないようなので、PowerShell の Invoke-WebRequest で REST API をコールして操作しました。

VCD の REST API のリファレンスは下記です。

 

今回の内容です。

 

今回の環境

NAT ルールは、前回(下記)までに展開した vApp 仮想マシンがある前提で作成していますが、実際のところは仮想マシンが存在しなくても作成できます。

 

PowerShell / PowerCLI 操作の開始前の時点では、Edge Gateway には 2つの NAT ルールを作成してあります。

 

作成する NAT ルール

今回は、DNAT ルールを作成します。今回も、パラメータを記載したファイルを、スクリプトとは別に用意しておきます。

  • この後のスクリプトで、このファイルを共通利用します。
  • NAT ルールの下記の3項目以外は固定値にしてあります。

config_dnat-192.168.31.110.ps1

$vdc_name = "org-vdc-01"
$edge_gateway_name = "org-01-edge-01"
$nat_rule_name = "dnat-192.168.31.110"
$external_addresses = "192.168.31.110"
$internal_addresses = "10.0.1.110"

 

Edge Gateway NAT ルールの取得

NAT ルールを取得するスクリプトは、下記のように作成してみました。

11_get_edge_gateway_nat_rules.ps1

  • L16~: VDC サーバーに HTTPS 接続する際の証明書エラーは無視します。
  • L27~: Edge Gateway と NAT ルールを取得するファンクションです。
    • L37: Connect-CIServer による接続で取得した SessionSecret を利用します。
    • L39: PowerCLI モジュールではなく、PowerShell に標準で含まれている Invoke-WebRequest で VCD の REST API(VMware Cloud Director OpenAPI)をコールしています。

gist.github.com

 

スクリプトの実行前に、PowerCLI の Connect-CIServer で VDC サーバーに接続しておきます。

PS C:\> Connect-CIServer -Server lab-vcd-31.vcd.go-lab.jp -Org demo-org-01 -User org-01-admin -Password VMware1!

 

スクリプトにパラメータ ファイルを指定して実行すると、指定しておいた VDC と Edge Gateway の NAT ルールが表示されます。事前にテナント ポータルで確認したように、2件の NAT ルールが表示されています。

PS C:\> .\11_get_edge_gateway_nat_rules.ps1 .\config_dnat-192.168.31.110.ps1

id                       : d7496134-248a-428a-95de-3d3323ae9daa
name                     : dnat-01
description              :
enabled                  : True
ruleType                 : DNAT
type                     : DNAT
applicationPortProfile   :
externalAddresses        : 192.168.31.102
internalAddresses        : 10.0.1.100
dnatExternalPort         :
logging                  : False
systemRule               : False
snatDestinationAddresses :
firewallMatch            : MATCH_INTERNAL_ADDRESS
priority                 : 0
version                  : @{version=0}
appliedTo                :

id                       : a7d04cb5-b5f1-4fdd-b5ef-2adba00680ec
name                     : snat-01
description              :
enabled                  : True
ruleType                 : SNAT
type                     : SNAT
applicationPortProfile   :
externalAddresses        : 192.168.31.101
internalAddresses        : 10.0.0.0/16
dnatExternalPort         :
logging                  : False
systemRule               : False
snatDestinationAddresses :
firewallMatch            : MATCH_INTERNAL_ADDRESS
priority                 : 0
version                  : @{version=0}
appliedTo                :

 

Edge Gateway NAT ルールの作成(DNAT)

DNAT 作成については、下記のようなスクリプトを用意してみました。

ちなみに、これ以降のスクリプトで前掲のスクリプトとファンクション「get_edge_gateway_nat_rules」などが重複しています。これは別ファイルに分割してもかまいません。

12_add_edge_gateway_nat_rule.ps1

  • L33~: NAT ルールを定義する JSON は、処理を単純化するためあえて固定値にしています。
  • L89: NAT ルールの追加処理でも、専用のコマンドレットではなく Invoke-WebRequest を利用しました。
  • L96: NAT ルールの名前は一意ではないので、すでに同名ルールが存在する場合は、処理を中断しておきます。

gist.github.com

 

スクリプトを実行すると、下記のように NAT ルールが作成されます。

PS C:\> .\12_add_edge_gateway_nat_rule.ps1 .\config_dnat-192.168.31.110.ps1
Create Edge NAT Rule JSON: dnat-192.168.31.110
{
    "name":  "dnat-192.168.31.110",
    "description":  null,
    "enabled":  true,
    "ruleType":  "DNAT",
    "type":  "DNAT",
    "applicationPortProfile":  null,
    "externalAddresses":  "192.168.31.110",
    "internalAddresses":  "10.0.1.110",
    "dnatExternalPort":  null,
    "logging":  false,
    "systemRule":  false,
    "snatDestinationAddresses":  null,
    "firewallMatch":  "BYPASS",
    "priority":  0
}
Add Edge Firewall Rule: dnat-192.168.31.110
StatusCode:202

 

VCD のテナント ポータルで Edge Gateway を確認すると、DNAT ルールが追加作成されています。

 

Edge Gateway NAT ルールの削除

DNAT 作成については、下記のようなスクリプトを用意してみました。ルール取得 / 削除と同様に、 Invoke-WebRequest を利用しました。

13_delete_edge_gateway_nat_rule.ps1

gist.github.com

 

スクリプトを実行すると、下記のように NAT ルールが削除されます。

PS C:\> .\13_delete_edge_gateway_nat_rule.ps1 .\config_dnat-192.168.31.110.ps1
NAT Rule IDs:
3acd872f-c278-419d-a324-b9525605398a
Delete NAT Rule ID:3acd872f-c278-419d-a324-b9525605398a

 

以上、PowerShell で NAT ルールを操作してみる話でした。