NLBリスナールールの新機能「IpAddressType」でIPv4/IPv6を振り分けてみた

NLBリスナールールの新機能「IpAddressType」でIPv4/IPv6を振り分けてみた

Network Load Balancer(NLB)のリスナールールに `IpAddressType` が追加されました。デュアルスタックNLBで、送信元がIPv4かIPv6かに応じて異なるターゲットグループへ転送できる新機能です。IPv4/IPv6のアクセスでルールの動作を確認してみました。
2026.07.17

はじめに

NLBリスナールールの SourceIpConfigIpAddressType フィールドが追加されました。AWS CLI v2.35.24のChangeLogで案内されています。

2.35.24

  • api-change: elbv2: This release adds support for the IpAddressType field on SourceIpConfig, enabling Network Load Balancer listener rules to match traffic based on whether the source IP is IPv4 or IPv6.

AWS CLI v2.35.24 ChangeLog

https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-listeners.html#listener-rules

ALBの source-ip 条件はCIDRで送信元を指定します。一方デュアルスタックNLBでは IpAddressType でIPv4かIPv6かを条件に指定できます。本機能はデュアルスタックNLB専用です。

検証構成

Internet(デュアルスタッククライアント)


NLB (dualstack, TCP:80)
  ├─ ルール: source-ip / IpAddressType=ipv6 → TG-IPv6 (ALB:8080)
  └─ デフォルトアクション                    → TG-Default (ALB:8081)
        │                                        │
        └──────────────────┬─────────────────────┘

ALB (internal, dualstack)
  ├─ リスナー :8080 → fixed-response "IPv6 rule matched!"
  └─ リスナー :8081 → fixed-response "Default rule - IPv4"

NLBのリスナールールは forward アクションのみ対応しているため、バックエンドのALBでポート別に fixed-response を返す構成としました。

リソース作成とルール設定

デュアルスタックのinternet-facing NLB(TCP:80リスナー)と、バックエンドのinternal ALBを作成しました。ALBはポート8080/8081で fixed-response を返します。それぞれをターゲットグループに登録し、NLBリスナーのデフォルトアクションにTG-Defaultを設定しました。

IPv6送信元を条件とするルールを作成します。

aws elbv2 create-rule \
  --listener-arn <NLB_LISTENER_ARN> \
  --priority 10 \
  --conditions '[{"Field":"source-ip","SourceIpConfig":{"IpAddressType":"ipv6"}}]' \
  --actions '[{"Type":"forward","TargetGroupArn":"<TG_IPV6_ARN>"}]'

動作確認

ルール作成後、デュアルスタック環境のクライアントからIPv6とIPv4でそれぞれアクセスしました。

$ curl -6 http://<NLB_DNS_NAME>
IPv6 rule matched!
$ curl -4 http://<NLB_DNS_NAME>
Default rule - IPv4

IPv6アクセスは IpAddressType=ipv6 のルールに一致してTG-IPv6へ転送されました。それぞれ3回実行し、すべて同じ応答を確認しています。

アクセス 代表応答 3回の結果
IPv6(curl -6 IPv6 rule matched! 3/3で IPv6 rule matched!
IPv4(curl -4 Default rule - IPv4 3/3で Default rule - IPv4
ルール削除後のIPv6 Default rule - IPv4 90秒後は3/3で Default rule - IPv4(今回の検証では伝播に約60〜90秒)

ALB での IpAddressType 対応確認

ALBのリスナーに対して同じ IpAddressType=ipv6 条件でルールを作成できるか試してみました。

An error occurred (ValidationError) when calling the CreateRule operation:
IpAddressType is not supported for application load balancer

ValidationError により拒否されました。IpAddressType によるIPバージョン判定はNLB専用の機能です。

まとめ

IpAddressType=ipv6 の追加ルール1つとデフォルトアクションを組み合わせれば、CIDRを列挙せずにIPv4/IPv6の振り分けを実現できます。これまでIPバージョンごとに異なる転送先を使うために、IPv4用とIPv6用でNLBや接続先を分けていた構成では、1つのデュアルスタックNLBへ集約できる可能性があります。

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事