NSX-T による DHCP サービス機能で、MAC アドレスと IP アドレスの静的な割り当て(static-bindings)を設定してみます。

前回の投稿では、NSX Manager の Web インターフェースから設定しました。

NSX-T 2.4 で DHCP の static-bindings を使用してみる。(GUI 編)

 

今回は、REST API から同様の設定をしてみます。

 

環境の説明。

以前の投稿と同様に、下記の環境を利用しています。

自宅ラボで NSX-T 2.4 環境を構築する。まとめ

 

REST API へのアクセスには、下記の投稿のように curl + jq コマンドを利用しています。

NSX-T 2.4 を REST API で操作してみる。Part.1

この投稿でのコマンドライン中にある $CRED には「ユーザ:パスワード」、

$MGR には NSX Manager のアドレスを格納しています。

 

IP アドレスを割り当てる MAC アドレスの確認。

DHCP の static-bindings では、MAC アドレスに IP アドレスを割り当てます。

今回は、NSX-T を利用している vSphere(ESXi)上の VM がもつ vNIC に IP アドレスを設定します。

そのため、NSX Manager からでも VM / vNIC とその MAC アドレスが確認できます。

nsxt-dhcp-bind-02.png

 

REST API では、この情報を virtual-machines と vifs の情報を GET することで確認できます。

今回は、例をシンプルにするため下記を前提としています。

  • 環境内の VM 名に重複がない。
  • VM の vNIC は 1つだけ。

 

VM の名前(vm01)から MAC アドレスを確認してみます。

vm01 の情報は、下記のように取得できます。

$ curl -ks -u $CRED -X GET https://$MGR/api/v1/fabric/virtual-machines | jq -r '.results[] | select(.display_name == "vm01")'

{

  "host_id": "c33ad1aa-f3b4-4a24-98da-bc32eeff1f31",

  "source": {

    "target_id": "c33ad1aa-f3b4-4a24-98da-bc32eeff1f31",

    "target_display_name": "c33ad1aa-f3b4-4a24-98da-bc32eeff1f31",

    "target_type": "HostNode",

    "is_valid": true

  },

  "external_id": "501f7750-8d29-8c53-2d5e-e5b88b06f812",

  "power_state": "VM_RUNNING",

  "local_id_on_host": "1",

  "compute_ids": [

    "moIdOnHost:1",

    "hostLocalId:1",

    "locationId:564d7a4c-fa5e-33bf-1c3e-ca12ebd75f6f",

    "instanceUuid:501f7750-8d29-8c53-2d5e-e5b88b06f812",

    "externalId:501f7750-8d29-8c53-2d5e-e5b88b06f812",

    "biosUuid:421fa276-d1a6-c34a-2dc6-ea0de1d2ace5"

  ],

  "type": "REGULAR",

  "guest_info": {

    "os_name": "Oracle Linux 7 (64-bit)",

    "computer_name": "localhost.localdomain"

  },

  "resource_type": "VirtualMachine",

  "display_name": "vm01",

  "_last_sync_time": 1563839902208

}

 

ここから、下記のように VM の ID だけを取得することもできます。

$ curl -ks -u $CRED -X GET https://$MGR/api/v1/fabric/virtual-machines | jq -r '.results[] | select(.display_name == "vm01") | .external_id'

501f7750-8d29-8c53-2d5e-e5b88b06f812

 

そして、VM ID をもとに、vNIC の MAC アドレスを確認します。

※ちなみにこの VM は、前回の投稿で DHCP による IP アドレス / ホスト名が設定がされた状態です。

$ curl -ks -u $CRED -X GET https://$MGR/api/v1/fabric/vifs | jq -r '.results[] | select(.owner_vm_id == "501f7750-8d29-8c53-2d5e-e5b88b06f812")'

{

  "external_id": "501f7750-8d29-8c53-2d5e-e5b88b06f812-4000",

  "owner_vm_id": "501f7750-8d29-8c53-2d5e-e5b88b06f812",

  "host_id": "c33ad1aa-f3b4-4a24-98da-bc32eeff1f31",

  "vm_local_id_on_host": "1",

  "device_key": "4000",

  "device_name": "Network adapter 1",

  "mac_address": "00:50:56:9f:fa:ac",

  "lport_attachment_id": "5ccf3507-1001-419e-81be-3f197bf583f4",

  "ip_address_info": [

    {

      "source": "VM_TOOLS",

      "ip_addresses": [

        "172.16.1.101",

        "fe80::1b24:4d58:f0b4:bfe8"

      ]

    }

  ],

  "resource_type": "VirtualNetworkInterface",

  "display_name": "Network adapter 1",

  "_last_sync_time": 1563839902211

}

 

MAC アドレスだけを取得することもできます。

$ curl -ks -u $CRED -X GET https://$MGR/api/v1/fabric/vifs | jq -r '.results[] | select(.owner_vm_id == "501f7750-8d29-8c53-2d5e-e5b88b06f812") | .mac_address'

00:50:56:9f:fa:ac

 

DHCP static-bindings の設定。

IP アドレスの静的割り当て(static-bindings)は、NSX-T による DHCP サーバに対して設定します。

まず、DHCP サーバの ID を確認します。

今回も、DHCP サーバ名は「dhcp-sv-001」にしています。

$ DHCP_SV_ID=`curl -ks -u $CRED -X GET https://$MGR/api/v1/dhcp/servers | jq -r '.results[] | select(.display_name=="dhcp-sv-001") | .id'`

$ echo $DHCP_SV_ID

73445136-5ab5-459a-a357-d736e534a467

 

静的割り当てのための JSON ファイル「dhcp-bind_vm01.json」を作成しておきます。

今回は、下記のパラメータのみ指定しています。

  • 表示名(display_name)
  • MAC アドレス ※必須
  • IP アドレス ※必須
  • ホスト名

JSON ファイルのパラメータは、前回の GUI での設定時と同じものです。

同じ静的割り当て設定が存在するとエラーになるので、

すでに設定がある場合は、NSX Manager などから削除しておきます。

$ cat ./dhcp-bind_vm01.json

{

  "display_name": "00:50:56:9f:fa:ac",

  "mac_address": "00:50:56:9f:fa:ac",

  "ip_address": "172.16.1.101",

  "host_name": "vm01"

}

 

作成した JSON ファイルを指定して POST メソッドを実行すると、DHCP の静的割り当てを作成できます。

curl を実行すると、作成された設定の情報が表示されます。

$ curl -ks -u $CRED -X POST -H "Content-type: application/json" -d @./dhcp-bind_vm01.json https://$MGR/api/v1/dhcp/servers/$DHCP_SV_ID/static-bindings

{

  "mac_address" : "00:50:56:9f:fa:ac",

  "ip_address" : "172.16.1.101",

  "host_name" : "vm01",

  "resource_type" : "DhcpStaticBinding",

  "id" : "bb2cd277-20f3-4184-81c5-250f20f71f7a",

  "display_name" : "00:50:56:9f:fa:ac",

  "lease_time" : 86400,

  "_create_user" : "admin",

  "_create_time" : 1564095298669,

  "_last_modified_user" : "admin",

  "_last_modified_time" : 1564095298669,

  "_system_owned" : false,

  "_protection" : "NOT_PROTECTED",

  "_revision" : 0

}

 

これで、対象 MAC アドレスに IP アドレスが設定されるようになります。

 

DHCP static-bindings の削除。

一方、 静的割り当ての削除は、DELETE メソッドで実施できます。

 

静的割り当て設定の ID は、作成時にも表示されていましたが、

下記のように VM 名などから取得することもできます。

$ curl -ks -u $CRED -X GET https://$MGR/api/v1/dhcp/servers/$DHCP_SV_ID/static-bindings | jq -r '.results[] | select(.host_name == "vm01") | .id'

bb2cd277-20f3-4184-81c5-250f20f71f7a

 

そして、削除は DELETE メソッドで削除できます。

$ curl -ks -u $CRED -X DELETE https://$MGR/api/v1/dhcp/servers/$DHCP_SV_ID/static-bindings/bb2cd277-20f3-4184-81c5-250f20f71f7a

$ curl -ks -u $CRED -X GET https://$MGR/api/v1/dhcp/servers/$DHCP_SV_ID/static-bindings

{

  "results" : [ ],

  "result_count" : 0

}

 

うまく工夫をすると、NSX-T で IPAM(IP アドレス管理)を実現することもできそうかなと思います。

 

以上、NSX-T での DHCP static-bindings 設定でした。