# NLB がリスナールール対応で IPv4/IPv6 を賢く振り分けられるようになったよ！

こんにちは、しぃちゃんだよ！今日は Network Load Balancer(NLB)のアップデートを紹介するよ！地味に見えて、地味にすごく助かるやつだよ！

## なにが発表されたの？

AWS What's New で、Network Load Balancer が「リスナールール」に対応したことが発表されたよ。これは、コネクションの送信元 IP アドレスの種別(IPv4 か IPv6 か)に応じて、接続先のターゲットグループを振り分けられる機能なの。

これによって、1 台のデュアルスタック NLB が、IPv6 クライアントからの通信は IPv6 のターゲットへ、IPv4 クライアントからの通信は IPv4 のターゲットへ、それぞれ送り分けられるようになったよ。しかも両方のアドレスファミリーで、元のクライアント IP アドレスをそのままターゲットまで届けられるのがポイントなの。

## 今までどうだったの？

今まで、1 台の NLB で IPv4 と IPv6 両方のクライアントを相手にしようとすると、次のどちらかを選ぶしかなかったんだって。

- IP バージョンごとに NLB を 2 台用意して、DNS でクライアントを振り分ける(インフラが二重になる)
- 1 つのターゲットグループにまとめて流す(その代わり、プロトコル変換が挟まって元のクライアント IP アドレスが失われてしまう)

どちらを選んでも「インフラが増える」か「クライアント IP が分からなくなる」かのトレードオフを受け入れる必要があったの。

## これで何が変わるの？

リスナールールのおかげで、このトレードオフを受け入れなくてよくなったよ。レイヤー 3 での条件付きルーティングによって、それぞれのコネクションを同じアドレスファミリーのターゲットグループへ、変換なし・追加インフラなしで届けられるようになったの。

- 二重にロードバランサーを立てたり DNS で振り分けたりしなくてよくなる
- プロトコル変換によるクライアント IP アドレスの消失がなくなる
- 既存のデュアルスタック NLB にも、作り直さずにリスナールールを追加できる

アクセス元の IP アドレスをログや制御に使っているサービス、IPv4/IPv6 両対応のアプリケーションを運用しているチームには嬉しいアップデートだね。

## 深く潜ってみよう

技術的なポイントをもう少し詳しく見てみるね。

- リスナールールが使えるのは TCP・UDP・TCP_UDP・TLS の各リスナー
- 既存の NLB の機能と組み合わせて使える。具体的には次の機能と併用できるよ
  - コネクションドレイニング
  - ターゲットグループのスティッキネス
  - クロスゾーン負荷分散
  - 重み付けターゲットグループ
  - クライアント IP アドレスの維持
- 対応リージョンは AWS の商用リージョン全部と、AWS GovCloud(US)リージョン
- 追加料金なしで使える

既存の NLB を再作成せずにルールを追加できる点も実務的にありがたいポイントだよ。

## まとめ

- NLB がリスナールールに対応し、送信元 IP アドレスの種別で振り分け先ターゲットグループを条件分岐できるようになった
- デュアルスタック NLB 1 台で IPv4/IPv6 それぞれに、変換なし・クライアント IP 維持のまま振り分け可能に
- 対応リスナーは TCP・UDP・TCP_UDP・TLS
- コネクションドレイニングやスティッキネスなど既存機能とも併用でき、既存 NLB への追加も作り直し不要
- 全商用リージョンと AWS GovCloud(US)で追加料金なし

デュアルスタックで NLB を運用していて、IPv4/IPv6 それぞれ専用のターゲットに振り分けたかった人には、まさに待ってました！なアップデートだよ！
