[Amazon FSx for NetApp ONTAP] エンドポイントIPアドレスにVPCのCIDR範囲内のIPアドレスを指定する場合はNLBで接続する方式が使えない件

ターゲットグループのVPCのCIDR内だが、サブネットのCIDR外のIPアドレスをターゲットに指定すると怒られます
2023.08.06

「Network Load Balancer のターゲットグループを作成する際に、ターゲット IP で指定した VPC のサブネットの一部であるかを確認するため、本記事で説明した手法は採用できなくなりました。」って本当?

こんにちは、のんピ(@non____97)です。

以前、Amazon FSx for NetApp ONTAP(以降FSxN)において、Multi-AZ構成とする場合にTransit Gatewayの用意が難しければNLBでも対応できるという記事を書きました。

その後AWS Blogsで類似のブログ記事が投稿されました。

こちらの記事の冒頭を見ると以下のような記載がありました。

更新(2023 年 3 月 13 日):Network Load Balancer のターゲットグループを作成する際に、ターゲット IP で指定した VPC のサブネットの一部であるかを確認するため、本記事で説明した手法は採用できなくなりました。

本当にそうなのでしょうか。

手を動かさずに鵜呑みするのもアレなので検証します。

いきなりまとめ

  • エンドポイントIPアドレスとしてVPCのCIDR内を選択した場合はNLBで接続できない
    • ターゲットグループのVPCのCIDR内だが、サブネットのCIDR外のIPアドレスをターゲットに指定するとIP アドレスは既存のサブネットに属している必要がありますとエラーになる
    • その他のプライベートIPアドレスを指定してもThe IP address 'IPアドレス' is within the VPC, but is not within a VPC subnet so it can't be registeredとエラーになる
  • エンドポイントIPアドレスとしてVPCのCIDR外のCIDRを指定した場合はNLBで接続できる
    • PrivateLinkでの接続も可能
  • エンドポイントIPアドレスでVPC内のCIDRを指定した際に、別ネットワークから接続する場合は必然的にTransit Gatewayが必要になる
  • エンドポイントIPアドレスの範囲はFSxNファイルシステム作成後変更することはできないので、Transit Gateway と NLBどちらで接続するのかよく考えた上で設定をすること

やってみる

検証環境

検証環境は以下のとおりです。

エンドポイントIPアドレスにVPCのCIDR範囲内のIPアドレスを指定する場合はNLBで接続する方式は使えない件検証環境構成図

Multi-AZ構成のFSxNファイルシステムを作成します。それぞれエンドポイントIPアドレスがVPC内、VPC外となるように設定します。

FSxNファイルシステムの作成

それではFSxNファイルシステムの作成を行います。珍しくマネジメントコンソールから作成してみました。

作成する際は、デプロイタイプでマルチAZを選択します。

FSxNファイルシステムの作成

また、エンドポイントIPアドレス範囲はVPCから未割り当てのIPアドレス範囲を選択します。

VPC から未割り当ての IP アドレス範囲

こちらを選択すると、VPCのCIDR末尾64個のIPアドレスが指定されます。こちらのアップデートは以下記事でも解説しているので併せてご覧ください。

作成後のFSxNファイルシステムは以下のとおりです。

作成したVPC内のエンドポイントを持つFSxNファイルシステムの確認

VPCのCIDRは10.0.0.0/20 (10.0.0.0 - 10.0.15.255)です。確かにエンドポイント IP アドレス範囲として10.0.15.255/26とVPCのCIDR末尾64個(6bit)のCIDRが指定されていますね。

SVMのエンドポイントも確認しておきましょう。

VPC内のエンドポイントを持つSVM

10.0.15.206とエンドポイント IP アドレス範囲の10.0.15.255/26内のIPアドレスになっていますね。

同じ要領でエンドポイントIPアドレス範囲がVPC外のFSxNファイルシステムを作成します。

VPC外のIPアドレスレンジを指定

IPアドレスの範囲はVPC外であれば何でも良いという訳ではありません。ターゲットグループに指定可能なIPアドレスには制限があります。

  • ターゲットグループの VPC のサブネット
  • 10.0.0.0/8 (RFC 1918)
  • 100.64.0.0/10 (RFC 6598)
  • 172.16.0.0/12 (RFC 1918)
  • 192.168.0.0/16 (RFC 1918)

抜粋 : Network Load Balancers のターゲットグループ - Elastic Load Balancing

また、FSxNとしても指定可能なCIDRに制限があります。

次の CIDR 範囲に該当するものは、 FSx for ONTAP と互換性がないため選択しないでください。

  • 0.0.0.0/8
  • 127.0.0.0/8
  • 198.19.0.0/20
  • 224.0.0.0/4
  • 240.0.0.0/4
  • 255.255.255.255/32

FSx for ONTAP ファイルシステムの作成 - FSx for ONTAP

今回は100.64.0.0/27にしました。

作成後のFSxNファイルシステムを確認します。

作成したVPC外のエンドポイントを持つFSxNファイルシステムの確認

VPC外のエンドポイントを持つSVM

指定した範囲内で管理IPアドレスやNFS IPアドレスが割り当てられていますね。

ちなみに、FSxNファイルシステム作成時に選択したルートテーブルのルートは以下のようになっています。

ルートテーブルの確認

エンドポイント IP アドレス範囲内のIPアドレスはフローティングIPアドレスとなります。そのため、ENIに到達できるように明示的にルーティング情報を定義する必要があります。

ここの挙動は以下記事の「本当に「VPCのCIDR : local」のルートはENIに紐づいていないIPアドレスに対してルーティングできないのか」という章でも検証しています。

ターゲットグループのターゲットとしてIPアドレスを指定してみる

それでは、ターゲットグループのターゲットとしてIPアドレスを指定してみます。

まず、ターゲットグループを作成します。ターゲットタイプにはIPアドレスを選択し、ターゲットとするプロトコルはTCP/22にしました。また、VPCのFSxNのVPCと同じものを選択しました。

ターゲットグループの作成

IPアドレスにVPC内のエンドポイントIPアドレスである10.0.15.208を選択します。

すると、IP アドレスは既存のサブネットに属している必要がありますとエラーになってしまいました。

IP アドレスは既存のサブネットに属している必要があります。

ネットワークをその他のプライベートIPアドレスに変更して再チャレンジします。

しかし、こちらもThe IP address '10.0.15.208' is within the VPC, but is not within a VPC subnet so it can't be registeredとエラーになりました。

The IP address '10.0.15.208' is within the VPC, but is not within a VPC subnet so it can't be registered

どうやら、指定したIPアドレスがVPCのCIDR内に含まれるかどうか、指定したIPアドレスを含むCIDRのサブネットがあるかどうかのチェックをするようです。

これが冒頭のAWS公式ブログの伝えたかったことでしょうか。

IPアドレスにVPC外のエンドポイントIPアドレスである100.64.0.17を選択します。

VPC外のIPアドレスであれば登録できる

Target group is not configured to receive traffic from the load balancer

問題なくターゲットグループのターゲットIPアドレスとして指定できました。

つまりはエンドポイントIPアドレスにVPCのCIDR内のものを選択した場合はNLBで接続できないようです。

NLBの作成

NLBの作成をします。作成する際に先ほど作成したターゲットグループを指定します。

NLBの作成

NLBの作成2

作成後、しばらくするとNLBのステータスがアクティブになりました。

NLB作成完了

また、ターゲットのIPアドレスもhealthyとなりました。

ターゲットがhealthyになっていることを確認

NLB経由でのアクセス

それでは、NLB経由でアクセスしてみましょう。

事前にFSxNファイルシステムの管理者パスワードを設定しておきます。

ONTAP 管理者認証情報の更新

設定後、同じVPCのEC2インスタンスからNLBのDNS名を指定してSSHします。

$ ssh fsxadmin@nlb-fsxn-42959afaed71c11e.elb.us-east-1.amazonaws.com
The authenticity of host 'nlb-fsxn-42959afaed71c11e.elb.us-east-1.amazonaws.com (10.0.9.32)' can't be established.
ECDSA key fingerprint is SHA256:1oXwNWIJOh2qWosg3eZCC/KfjEOQ37xyM0m3Wcp3mFY.
ECDSA key fingerprint is MD5:a5:4f:97:66:57:6b:13:4b:69:5c:07:26:94:16:7e:bf.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'nlb-fsxn-42959afaed71c11e.elb.us-east-1.amazonaws.com,10.0.9.32' (ECDSA) to the list of known hosts.
Password:

This is your first recorded login.
FsxId069bcd83ab561b56c::> vserver show
                               Admin      Operational Root
Vserver     Type    Subtype    State      State       Volume     Aggregate
----------- ------- ---------- ---------- ----------- ---------- ----------
svm         data    default    running    running     svm_root   aggr1

FsxId069bcd83ab561b56c::> lif show
  (statistics lif show)

FsxId069bcd83ab561b56c : 8/6/2023 07:31:53
                                    *Recv                Sent
                               Recv  Data   Recv   Sent  Data   Sent Current
                 LIF Vserver Packet (Bps) Errors Packet (Bps) Errors    Port
-------------------- ------- ------ ----- ------ ------ ----- ------ -------
nfs_smb_management_1     svm      0     0      0      0     0      0     e0e
             iscsi_2     svm      0     0      0      0     0      0     e0e
             iscsi_1     svm      0     0      0      0     0      0     e0e
             inter_2 FsxId069bcd83ab561b56c
                                  0     0      0      0     0      0     e0e
             inter_1 FsxId069bcd83ab561b56c
                                  0     0      0      0     0      0     e0e
            fsxadmin FsxId069bcd83ab561b56c
                                  0     0      0      0     0      0     e0e
FsxId069bcd83ab561b56c-02_mgmt1
                     FsxId069bcd83ab561b56c
                                  0     0      0      0     0      0     e0a
FsxId069bcd83ab561b56c-02_clus_2
                     Cluster      0     0      0      0     0      0 e0a.pv1
FsxId069bcd83ab561b56c-01_mgmt1
                     FsxId069bcd83ab561b56c
                                  0     0      0      0     0      0     e0a
FsxId069bcd83ab561b56c-01_clus_1
                     Cluster      0     0      0      0     0      0 e0a.pv1

問題なく接続でき、ONTAP CLIも叩けていますね。

接続元のIPアドレスも確認してみましょう。

::> security audit log show -fields timestamp, node, application, vserver, username, input, state, message, location -application ssh -state Error|Success
timestamp                  node                      application location  vserver                username input      state   message
-------------------------- ------------------------- ----------- --------- ---------------------- -------- ---------- ------- -------
"Sun Aug 06 07:31:26 2023" FsxId069bcd83ab561b56c-01 ssh         10.0.9.32 FsxId069bcd83ab561b56c fsxadmin Logging in Success -
"Sun Aug 06 07:31:53 2023" FsxId069bcd83ab561b56c-01 ssh         10.0.9.32 FsxId069bcd83ab561b56c fsxadmin statistics lif show
                                                                                                                      Success -
2 entries were displayed.

10.0.9.32というのはNLBのENIのIPアドレスです。

ターゲットグループのターゲットタイプをIPアドレスで、プロトコルがTCPの場合のデフォルトの「クライアントIPアドレスの保持」は「無効」です。

デフォルトでは、UDP プロトコルと TCP_UDP プロトコルを使用するインスタンスおよび IP タイプのターゲットグループに対して、クライアント IP の保存が有効になっています (無効にすることはできません)。ただし、preserve_client_ip.enabled ターゲットグループ属性を使用して、TCP および TLS ターゲットグループのクライアント IP の保存を有効または無効にできます。

デフォルト設定

  • インスタンスタイプのターゲットグループ: 有効
  • IP タイプのターゲットグループ (UDP、TCP_UDP): 有効
  • IP タイプのターゲットグループ (TCP、TLS): 無効

Network Load Balancers のターゲットグループ - Elastic Load Balancing

セキュリティグループやエクスポートポリシーでIPアドレスを制御する場合は意識しておくと良いでしょう。

エンドポイントサービスの作成

せっかくなので、PrivateLinkで接続できるかも検証してみましょう。

図にすると以下のとおりです。

PrivateLinkで接続する際の構成図

PrivateLinkを使うことで送信元、送信先のVPCのCIDRが重複していても接続することが可能になります。

まず、エンドポイントサービスを作成します。

エンドポイントサービスの作成

作成後のエンドポイントサービスは以下のとおりです。

作成したエンドポイントサービス

VPCエンドポイントの作成

続いて、先ほど作成したエンドポイントサービスのVPCエンドポイントを作成します。

VPCエンドポイントの作成

作成後のVPCエンドポイントは以下のとおりです。ステータスが承認の保留中となっていますね。

作成したVPCエンドポイントの確認

エンドポイントサービスのエンドポイント接続タブから承認をしてあげます。

エンドポイント接続リクエストの承諾

エンドポイント接続リクエストの承諾2

承認をすると、VPCエンドポイントのステータスが使用可能になりました。

VPCエンドポイントのステータスが使用可能になったことを確認

動作確認

VPCエンドポイントがあるVPC上のEC2インスタンスからVPCエンドポイントのDNS名に対してSSHをします。

$ ssh fsxadmin@vpce-047c35f984d5235d0-tukm5csr.vpce-svc-03055408cd8736619.us-east-1.vpce.amazonaws.com
The authenticity of host 'vpce-047c35f984d5235d0-tukm5csr.vpce-svc-03055408cd8736619.us-east-1.vpce.amazonaws.com (10.0.0.30)' can't be established.
ED25519 key fingerprint is SHA256:OSABO3q+vJenLabRqYf9pHuurcKGt/ML7QZuD9vWFos.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'vpce-047c35f984d5235d0-tukm5csr.vpce-svc-03055408cd8736619.us-east-1.vpce.amazonaws.com' (ED25519) to the list of known hosts.
(fsxadmin@vpce-047c35f984d5235d0-tukm5csr.vpce-svc-03055408cd8736619.us-east-1.vpce.amazonaws.com) Password:

Last login time: 8/6/2023 07:45:12
FsxId069bcd83ab561b56c::>
FsxId069bcd83ab561b56c::> vserver show
                               Admin      Operational Root
Vserver     Type    Subtype    State      State       Volume     Aggregate
----------- ------- ---------- ---------- ----------- ---------- ----------
svm         data    default    running    running     svm_root   aggr1

FsxId069bcd83ab561b56c::>
FsxId069bcd83ab561b56c::> security audit log show -fields timestamp, node, application, vserver, username, input, state, message, location -application ssh -state Error|Success
timestamp                  node                      application location  vserver                username input      state   message
-------------------------- ------------------------- ----------- --------- ---------------------- -------- ---------- ------- -------
"Sun Aug 06 07:31:26 2023" FsxId069bcd83ab561b56c-01 ssh         10.0.9.32 FsxId069bcd83ab561b56c fsxadmin Logging in Success -
"Sun Aug 06 07:31:53 2023" FsxId069bcd83ab561b56c-01 ssh         10.0.9.32 FsxId069bcd83ab561b56c fsxadmin statistics lif show
                                                                                                                      Success -
"Sun Aug 06 07:45:12 2023" FsxId069bcd83ab561b56c-01 ssh         10.0.9.32 FsxId069bcd83ab561b56c fsxadmin Logging in Success -
"Sun Aug 06 08:02:47 2023" FsxId069bcd83ab561b56c-01 ssh         10.0.9.32 FsxId069bcd83ab561b56c fsxadmin Logging out
                                                                                                                      Success -
"Sun Aug 06 08:03:00 2023" FsxId069bcd83ab561b56c-01 ssh         10.0.8.55 FsxId069bcd83ab561b56c fsxadmin Logging in Success -
5 entries were displayed.

接続できましたね。SSHの接続元IPとして記録されている10.0.8.55というのはNLBのENIのIPアドレスです。

FSx for ONTAPファイルシステムをフェイルオーバーさせてみる

ついでにFSxNファイルシステムをフェイルオーバーした後も接続できるのか確認します。

まず、現在のネットワークインターフェイスの状態を確認します。

::> network interface show -fields vserver, lif, address, is-vip, home-node, home-port, curr-node, curr-port, status-oper, is-home, failover-policy, auto-revert, failover-group
vserver                lif      address     is-vip home-node                 home-port curr-node                 curr-port status-oper is-home failover-policy       auto-revert failover-group
---------------------- -------- ----------- ------ ------------------------- --------- ------------------------- --------- ----------- ------- --------------------- ----------- --------------
FsxId069bcd83ab561b56c fsxadmin 100.64.0.17 false  FsxId069bcd83ab561b56c-01 e0e       FsxId069bcd83ab561b56c-01 e0e       up          true    broadcast-domain-wide true        Fsx
FsxId069bcd83ab561b56c inter_1  10.0.8.205  false  FsxId069bcd83ab561b56c-01 e0e       FsxId069bcd83ab561b56c-01 e0e       up          true    disabled        false       Fsx
FsxId069bcd83ab561b56c inter_2  10.0.9.98   false  FsxId069bcd83ab561b56c-02 e0e       FsxId069bcd83ab561b56c-02 e0e       up          true    disabled        false       Fsx
svm                    iscsi_1  10.0.8.229  false  FsxId069bcd83ab561b56c-01 e0e       FsxId069bcd83ab561b56c-01 e0e       up          true    disabled        false       Fsx
svm                    iscsi_2  10.0.9.252  false  FsxId069bcd83ab561b56c-02 e0e       FsxId069bcd83ab561b56c-02 e0e       up          true    disabled        false       Fsx
svm                    nfs_smb_management_1
                                100.64.0.8  false  FsxId069bcd83ab561b56c-01 e0e       FsxId069bcd83ab561b56c-01 e0e       up          true    system-defined        true        Fsx
6 entries were displayed.

スループットキャパシティを変更してフェイルオーバーさせます。

すると、すぐ以下のメッセージを出力しSSHのセッションが切れてしまいました。

::> client_loop: send disconnect: Broken pipe

再接続します。

$ ssh fsxadmin@vpce-047c35f984d5235d0-tukm5csr.vpce-svc-03055408cd8736619.us-east-1.vpce.amazonaws.com
(fsxadmin@vpce-047c35f984d5235d0-tukm5csr.vpce-svc-03055408cd8736619.us-east-1.vpce.amazonaws.com) Password:

Last login time: 8/6/2023 08:03:00
Unsuccessful login attempts since last login: 1
FsxId069bcd83ab561b56c::>
FsxId069bcd83ab561b56c::> network interface show -fields vserver, lif, address, is-vip, home-node, home-port, curr-node, curr-port, status-oper, is-home, failover-policy, auto-revert, failover-group
vserver                lif      address     is-vip home-node                 home-port curr-node                 curr-port status-oper is-home failover-policy       auto-revert failover-group
---------------------- -------- ----------- ------ ------------------------- --------- ------------------------- --------- ----------- ------- --------------------- ----------- --------------
FsxId069bcd83ab561b56c fsxadmin 100.64.0.17 false  FsxId069bcd83ab561b56c-01 e0e       FsxId069bcd83ab561b56c-02 e0e       up          false   broadcast-domain-wide true        Fsx
FsxId069bcd83ab561b56c inter_1  10.0.8.205  false  FsxId069bcd83ab561b56c-01 e0e       FsxId069bcd83ab561b56c-01 e0e       -           true    disabled        false       Fsx
FsxId069bcd83ab561b56c inter_2  10.0.9.98   false  FsxId069bcd83ab561b56c-02 e0e       FsxId069bcd83ab561b56c-02 e0e       up          true    disabled        false       Fsx
svm                    iscsi_1  10.0.8.229  false  FsxId069bcd83ab561b56c-01 e0e       FsxId069bcd83ab561b56c-01 e0e       -           true    disabled        false       Fsx
svm                    iscsi_2  10.0.9.252  false  FsxId069bcd83ab561b56c-02 e0e       FsxId069bcd83ab561b56c-02 e0e       up          true    disabled        false       Fsx
svm                    nfs_smb_management_1
                                100.64.0.8  false  FsxId069bcd83ab561b56c-01 e0e       FsxId069bcd83ab561b56c-02 e0e       up          false   system-defined        true        Fsx
6 entries were displayed.

再接続をすると、fsxadmincurr-nodeが変更され、フェイルオーバーしていることが分かります。

ターゲットグループのVPCのCIDR内だが、サブネットのCIDR外のIPアドレスをターゲットに指定すると怒られます

エンドポイントIPアドレスにVPCのCIDR範囲内のIPアドレスを指定する場合はNLBで接続する方式が使えないことを検証しました。

つまりは、PrivateLinkで別ネットワークから接続することもできなくなります。

エンドポイントIPアドレスでVPC内のCIDRを指定した際に、別ネットワークから接続する場合は必然的にTransit Gatewayが必要になります。

エンドポイントIPアドレスの範囲はFSxNファイルシステム作成後変更することはできません。Transit Gateway と NLBどちらで接続するのかよくよく考えてから選択しましょう。

この記事が誰かの助けになれば幸いです。

以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!