vm.gowatana.jp

NEOにほんごVMware(仮)

NSX-T 3.0: DFW を VLAN セグメントで使用してみる。(後編)

NSX-T の分散ファイアウォール(DFW)を、VLAN セグメントで使用してみます。

前回は、簡単な動作確認をしてみました。

NSX-T 3.0: DFW を VLAN セグメントで使用してみる。(前編) - vm.gowatana.jp

今回は、vNIC のポートグループを「VLAN セグメント」と「分散ポートグループ」にそれぞれ切りかえて、DFW ルール適用の様子を確認してみます。

今回の DFW ルール

NSX Manager の「分散ファイアウォール」の画面を確認すると、ID 3048 の DFW ルールが作成されて、有効になっています。

このルールは、適用先が「分散ファイアウォール (DFW)」となっており、基本的には NSX 環境内のすべての VM、つまりホスト トランスポート ノード上で NSX によるセグメントに接続されているすべて VM に適用されます。(例外もありますが、今回は省略)

ちなみに、今回は DFW ルールの適用される様子を見るだけなので、通信は遮断しない(アクション: 許可)ルールにしてあります。

f:id:gowatana:20201127085207p:plain

「VLAN セグメント」接続の vNIC と DFW ルール

VM「vm01」の vNIC が、NSX-T による VLAN セグメント「seg-vlan-0006」に接続されています。この VLAN セグメントは前回の投稿で作成したもので、VLAN ID 6 が設定されています。

f:id:gowatana:20201127085236p:plain

それでは、vm01 が起動されている ESXi ホストに SSH 接続して、vNIC への DFW ルール適用の様子を確認します。まず に、DFW のルールが作成されている vNIC を確認しておきます。

ESXi に SSH ログインした状態です。

[root@lab-nsx-esxi-21:~] vmware -vl
VMware ESXi 7.0.0 build-16324942
VMware ESXi 7.0 GA

vm01 が起動しています。この VM の World ID(371855)を記録しておきます。

[root@lab-nsx-esxi-21:~] esxcli network vm list
World ID  Name  Num Ports  Networks
--------  ----  ---------  --------
  371855  vm01          1

summarize-dvfilter で、vm01 の vNIC に適用されている dvfilter を探します。赤字の部分が、vm01 の vNIC にあたります。

[root@lab-nsx-esxi-21:~] summarize-dvfilter
Fastpaths:
agent: dvfilter-generic-vmware, refCount: 1, rev: 0x1010000, apiRev: 0x1010000, module: dvfilter-generic-fastpath
agent: vmware-si, refCount: 1, rev: 0x1010000, apiRev: 0x1010000, module: nsxt-vsip-15945874
agent: vmware-sfw, refCount: 4, rev: 0x1010000, apiRev: 0x1010000, module: nsxt-vsip-15945874
agent: nsx_bridgelearningfilter, refCount: 1, rev: 0x1010000, apiRev: 0x1010000, module: nsxt-vdrb-15945874
agent: ESXi-Firewall, refCount: 3, rev: 0x1010000, apiRev: 0x1010000, module: esxfw
agent: dvfilter-faulter, refCount: 1, rev: 0x1010000, apiRev: 0x1010000, module: dvfilter

ServiceVMs:
serviceVM: 1, agent vmware-sfw, refCount: 2, rev: 0x4, apiRev: 0x4, capabilities: csum,tso
serviceVM: 2, agent vmware-sfw, refCount: 1, rev: 0x4, apiRev: 0x4, capabilities: csum,tso

Filters:
world 0 <no world="">
port 67108877 vmk0
  vNic slot 0
   name: nic-0-eth4294967295-ESXi-Firewall.0
   agentName: ESXi-Firewall
   state: IOChain Attached
   vmState: Detached
   failurePolicy: failOpen
   serviceVMID: none
   filter source: Invalid
   moduleName: esxfw
port 67108878 vmk1
  vNic slot 0
   name: nic-0-eth4294967295-ESXi-Firewall.0
   agentName: ESXi-Firewall
   state: IOChain Attached
   vmState: Detached
   failurePolicy: failOpen
   serviceVMID: none
   filter source: Invalid
   moduleName: esxfw
world 371855 vmm0:vm01 vcUuid:'50 07 76 2d a1 08 3d 62-94 8a 57 ce fd 77 9c aa'
port 67108883 vm01.eth0
  vNic slot 2
   name: nic-371855-eth0-vmware-sfw.2
   agentName: vmware-sfw
   state: IOChain Attached
   vmState: Attached
   failurePolicy: failClosed
   serviceVMID: 1
   filter source: Dynamic Filter Creation
   moduleName: nsxt-vsip-15945874

さきほど確認した、VM の World ID をもとにすると、vm01 のフィルタの名前を見つけやすいかなと思います。vm01 の 1つめの vNIC(ゲスト OS の種類に関係なく eth0)のフィルタ名「nic-371855-eth0-vmware-sfw.2」を見つけました。

[root@lab-nsx-esxi-21:~] summarize-dvfilter | grep 371855
world 371855 vmm0:vm01 vcUuid:'50 07 76 2d a1 08 3d 62-94 8a 57 ce fd 77 9c aa'
   name: nic-371855-eth0-vmware-sfw.2

そしてフィルタ名を指定して「vsipioctl getrules」コマンドを実行すると、DFW のルールが実際に設定されている様子がわかります。さきほど NSX Manager でも確認できた、ID 3048 のルールが表示されており、vm01 の vNIC に DFW ルールが適用されていることがわかります。

[root@lab-nsx-esxi-21:~] vsipioctl getrules -f nic-371855-eth0-vmware-sfw.2
ruleset mainrs {
  # generation number: 0
  # realization time : 2020-10-07T17:00:19
  # FILTER rules
  rule 3048 at 1 inout protocol any from any to any accept;
  rule 2 at 2 inout protocol any from any to any accept;
}

ruleset mainrs_L2 {
  # generation number: 0
  # realization time : 2020-10-07T17:00:19
  # FILTER rules
  rule 1 at 1 inout ethertype any stateless from any to any accept;
}

ちなみに、DFW が適用されていることは nsxcli コマンドでも確認できます。この ESXi で起動されている VM(の vNIC)が 1つだけなので、Firewall VIF が 1件表示されています。

[root@lab-nsx-esxi-21:~] nsxcli -c "get firewall vifs"
                            Firewall VIFs
----------------------------------------------------------------------
 
VIF count: 1
1   1db50096-f1b8-44a2-8639-8ed6ac641446

「vDS の分散ポートグループ」接続の vNIC と DFW ルール

続いて、NSX-T の VLAN セグメントと同じ VLAN ID の分散ポートグループを適用して、DFW ルールの変化を確認してみます。これは結果として DFW ルールが消えます。 

vDS「vds-21」に作成されている、分散ポートグループの一覧です。今回は NSX で利用している vDS に、VLAN セグメントと同様に、VLAN ID 6 の分散ポートグループ「dvpg-vlan-0006」を作成しました。

f:id:gowatana:20201127085300p:plain

vm01 の vNIC のポートグループを、分散ポートグループである「dvpg-vlan-0006」に変更します。

f:id:gowatana:20201127085310p:plain

分散ポートグループに変更されました。

f:id:gowatana:20201127085321p:plain

このポートグループ変更より、DFW ルールが即時変更されます。ESXi で summarize-dvfilter を実行してみると、vm01 の「nic-371855-eth0-vmware-sfw.2」フィルタは存在したままです。

[root@lab-nsx-esxi-21:~] summarize-dvfilter | grep 371855
world 371855 vmm0:vm01 vcUuid:'50 07 76 2d a1 08 3d 62-94 8a 57 ce fd 77 9c aa'
   name: nic-371855-eth0-vmware-sfw.2

しかし、vsipioctl getrules コマンドで確認すると、DFW ルールが消えて「No rules」になりました。

[root@lab-nsx-esxi-21:~] vsipioctl getrules -f nic-371855-eth0-vmware-sfw.2
No rules.

nsxcli コマンドでも 1件表示されていた VIF がなくなり、Firewall VIF のカウントがゼロになっています。

[root@lab-nsx-esxi-21:~] nsxcli -c "get firewall vifs"
                            Firewall VIFs
----------------------------------------------------------------------

VIF count: 0

このように、VM が起動する ESXi が NSX-T のホスト トランスポート ノードとして設定されていたとしても、vSS の標準ポートグループや vDS の分散ポートグループに接続された vNIC には、DFW ルールが適用されません。

DFW はオーバーレイ ネットワークでなくても使用できますが、VLAN ネットワークで使用する場合、vNIC には「VLAN セグメント」を割り当てる必要があります。

以上、DFW を VLAN セグメントで使用してみる話でした。