觀點 · 資訊分享

AWS 網路負載平衡器能依 IPv4/IPv6 分流了:一台 NLB 就夠,不必再養兩台

AWS 的 Network Load Balancer 新增 Listener Rules,可以依來源 IP 的版本,把 IPv4 客人和 IPv6 客人分別送到同版本的伺服器群,原始 IP 兩邊都保留,不另收費。

發布
2026-07-23
篇幅
約 5 分鐘 · 2,194 字
結構
8 節 + 4 題常見問題
標籤
#AWS#Network Load Balancer#IPv6#Listener Rules
AWS 網路負載平衡器能依 IPv4/IPv6 分流了:一台 NLB 就夠,不必再養兩台

一句話看懂:AWS 的 Network Load Balancer 現在能依客人的 IP 版本分流,一台就能同時照顧 IPv4 與 IPv6 客人,還不會弄丟客人的原始 IP。

NLB 新增依來源 IP 類型分流資訊圖卡:一台雙協定 NLB,能把 IPv4 和 IPv6 客人分流到各自的伺服器群

先用白話講:Network Load Balancer 是什麼?

想像一間很紅的餐廳,門口有一位帶位員,負責把客人分到不同的區域。Network Load Balancer(NLB,網路負載平衡器)就是網路服務的帶位員:外面的連線進來,它決定轉給後面哪一組伺服器。

網路上的「門牌」有兩種格式:舊的 IPv4(像 203.0.113.5)和新的 IPv6(一長串英文數字)。現在有的客人用舊門牌、有的用新門牌,帶位員得兩種都會招呼。

問題出在後面的座位:每一組伺服器(目標群組)只能認一種門牌格式。結果帶位員要嘛得拆成兩個人,要嘛得把另一種門牌「翻譯」一下,翻譯完,後面的伺服器就看不到客人原本的門牌了。

發生什麼事

AWS 在 7 月 22 日(美國時間)宣布,NLB 支援 Listener Rules(監聽器規則)。規則的條件是「來源 IP 的版本」,符合就轉給指定的目標群組。

以前要同時服務兩種客人,官方部落格列出兩條路:

  • 架兩台 NLB:一台管 IPv4、一台管 IPv6,再用 DNS 把客人分開。每台都有自己的監聽器、健康檢查與計費,等於養兩套
  • 全部送進同一組,靠 PPv2 找回 IP:另一種 IP 會在負載平衡器被翻譯,伺服器看到的是負載平衡器的位址;要找回客人 IP,得開 Proxy Protocol v2,而且每個後端程式都要會解析它

現在一台雙協定(dual-stack)的 NLB 加兩條規則就解決:IPv4 客人送到 IPv4 目標群組,IPv6 客人送到 IPv6 目標群組,不用翻譯,兩邊的原始 IP 都保留。

以前和現在差在哪

做法 要養幾台 NLB 後端看得到客人原始 IP?
兩台 NLB 加 DNS 分流 2 台 看得到
一台 NLB,全送同一組 1 台 看不到,需另外用 PPv2
一台 NLB 加 Listener Rules 1 台 看得到

給開發者的技術細節

  • 條件:來源 IP 類型(ipv4 或 ipv6);支援 TCP、UDP、TCP_UDP、TLS 監聽器
  • 動作:轉到單一目標群組,或轉到多個加權目標群組(權重 0 到 999,0 代表不再接新連線),可用來做漸進式搬遷
  • 規則依優先順序評估,數字小的先比對;沒符合任何規則的連線走預設動作
  • 既有的雙協定 NLB 不用重建就能加規則,所有 AWS 商用區域與 GovCloud(US)都能用
  • 前提:VPC 與子網路要有 IPv6 CIDR、路由表要能走 IPv6;UDP 監聽器要有 IPv6 目標群組;每組目標各自用自己的 IP 版本做健康檢查,目標的安全群組要同時放行兩種版本的檢查流量

官方部落格的 CLI 範例(優先順序 10 為 IPv4 規則):

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

IPv6 規則同樣寫法,把 ipv4 換成 ipv6、目標群組換成 IPv6 那組即可。這組指令需要 AWS CLI 2.35.24 以上,版本太舊會報不認得 IpAddressType。

合併之前要想的事

官方部落格特別提醒一點:合併後,一台 NLB 要扛兩種 IP 的總流量;原本分開時,兩台 NLB 剛好形成「一種 IP 一台」的天然故障隔離,合併後就沒有了。建議先用每個目標群組的 CloudWatch 指標,在一小部分流量上驗證分流是否如預期,確認後再把 DNS 的 A 與 AAAA 紀錄都指到合併後的 NLB。

我的看法

這個功能不是什麼炫技,而是把「想服務 IPv6 客人又不想多養一套」的麻煩拿掉。IPv6 是大勢所趨,網站和服務遲早得雙邊都顧;我猜有些團隊因為怕麻煩、怕客人 IP 對不起來,才一直只開 IPv4,這種顧慮現在少了一大塊。

對接案或小團隊來說,我會注意兩件事。第一,要記錄客人 IP 做風控、封鎖或稽核的系統,這次最有感,因為不用再為了找回 IP 去改每一支後端程式。第二,不要為了省一台 NLB 就盲目合併:如果服務對可用性很敏感,兩台分開的隔離效果可能比省下的錢更值錢。先量流量、再決定。

名詞小辭典

  • 負載平衡器(Load Balancer):把進來的連線分配給多台伺服器的設備,像餐廳門口的帶位員。
  • IPv4/IPv6:網路位址的兩種格式,IPv6 是為了解決 IPv4 位址不夠用而生的新格式。
  • 雙協定(dual-stack):同時支援 IPv4 與 IPv6 的設定。
  • Proxy Protocol v2(PPv2):一種在連線前面多附一小段資料的做法,讓後端知道客人原本的 IP。

資料來源

常見問題

NLB 的 Listener Rules 是什麼?
在負載平衡器的監聽器上加幾條「如果客人是這種來源,就送去那一組伺服器」的規則。這次新增的條件是來源 IP 的版本,也就是 IPv4 還是 IPv6,在第 3 層判斷,跟 ALB 看網址路徑、主機名稱的第 7 層規則不同。
用了之後要多付錢嗎?
規則本身不另外收費,仍照一般的 NLB 計價,也就是依負載平衡器使用時數與 LCU 計費。
想用要先準備什麼?
要有雙協定的 NLB,所在的 VPC 與子網路要有 IPv6 CIDR,路由表也要能走 IPv6;用 AWS CLI 的話,官方部落格註明要 2.35.24 以上的版本,否則會出現不認得 IpAddressType 參數的錯誤。
不符合任何規則的流量會去哪?
會走監聽器的預設動作,所以預設動作要設成你希望當後備的那一種 IP 版本。
LINE