CLOUD TESTING

Kiểm thử cloud NAT và SNAT port exhaustion: khi outbound connection lỗi dù băng thông còn dư

31/7/2026 · 16 phút

Nhiều workload private cloud dùng chung NAT IP và source port để kết nối dịch vụ ngoài Internet
Mục lục bài viết 9 phần

Cloud workload có thể vẫn ping được và NAT gateway còn dư throughput nhưng API call bắt đầu timeout vì không cấp được source port. Bài đo phải thay đổi connection rate, concurrent flow, destination tuple, keep-alive và timeout, đồng thời đối chiếu lỗi ứng dụng với NAT metric và flow log.

ĐỌC NHANH

Bài viết giúp bạn

  • Bài toán SNAT port exhaustion
  • Topology và điểm đo
  • Biến số phải kiểm soát
Tùy chỉnh đọc
01

Bài toán SNAT port exhaustion

#

Khi nhiều host private truy cập bên ngoài qua một hoặc vài NAT IP, gateway phải duy trì mapping gồm protocol, địa chỉ/port nguồn sau dịch và destination tuple. Port pool hữu hạn và cách cấp phát khác nhau theo nền tảng. Nhiều kết nối ngắn, retry storm hoặc tập trung vào một destination có thể làm allocation fail trước khi đạt giới hạn băng thông.

Dấu hiệu ứng dụng thường là connect timeout, reset, DNS/API chập chờn hoặc latency tăng. Nếu chỉ nhìn CPU và Gbit/s, đội vận hành có thể quy sai cho server đích. Mục tiêu test là tìm quan hệ giữa connection lifecycle, port allocation metric, failure rate và thời gian giải phóng mapping.

Không dùng một con số port chung cho mọi dịch vụ. AWS và Google Cloud mô tả mô hình/giới hạn khác nhau; NAT appliance, Kubernetes node SNAT và load balancer cũng khác. Luôn đối chiếu tài liệu đúng nền tảng, region và cấu hình.

02

Topology và điểm đo

#

Topology gồm nhiều client VM/pod trong private subnet, NAT gateway, một hoặc nhiều public test server do đội kiểm thử kiểm soát. Tạo nhiều destination IP/port để so với trường hợp tất cả client dồn vào một endpoint. Không dùng dịch vụ Internet bên thứ ba làm mục tiêu tải.

Thu client socket/error, NAT metrics/log, VPC flow log, server accept count và packet capture nếu khả dụng. Đồng bộ clock để nối SYN, NAT allocation error và application timeout. Ghi route table, NAT IP count, port allocation mode, timeout và connection tracking configuration.

Topology kiểm thử SNAT port exhaustion trong cloud
Topology kiểm thử SNAT port exhaustion trong cloud
03

Biến số phải kiểm soát

#

Traffic profile cần connection attempts/s, concurrent connections, connection duration, keep-alive reuse, protocol, destination IP/port cardinality và graceful close/reset. HTTP request/s không thay thế connection rate vì HTTP/2 hoặc keep-alive có thể ghép nhiều request vào ít connection.

Khóa số client, source IP, worker/thread, ephemeral-port range và OS conntrack. Client tự hết ephemeral port có triệu chứng gần giống NAT exhaustion. Đối chiếu `ss`, socket error và local port usage để phân biệt.

  • Biến: Destination · Mức thử: 1, 4, nhiều IP:port · Tác động: Kiểm tra concentration
  • Biến: Connection rate · Mức thử: Step/ramp/burst · Tác động: Allocation pressure
  • Biến: Duration · Mức thử: Ngắn/dài/mixed · Tác động: Port holding time
  • Biến: Keep-alive · Mức thử: Tắt/bật · Tác động: Port reuse
  • Biến: Close · Mức thử: FIN/RST/timeout · Tác động: Mapping release
  • Biến: Protocol · Mức thử: TCP/UDP · Tác động: Pool/timeout riêng
  • Biến: NAT IP · Mức thử: Baseline/tăng thêm · Tác động: Capacity thay đổi
04

KPI và tín hiệu quan sát

#

KPI ứng dụng gồm connection success ratio, connect latency p95/p99, timeout/reset, transaction success và retry. KPI NAT gồm allocation error, active connection, dropped packet, idle timeout, bytes/packets và port utilization nếu nền tảng cung cấp.

AWS tài liệu hóa `ErrorPortAllocation`, `IdleTimeoutCount` và `PacketsDropCount` cho NAT gateway. Google Cloud mô tả static/dynamic port allocation, minimum ports per VM và log/metric tương ứng. Tên metric không được suy rộng từ cloud này sang cloud khác.

Bằng chứng tốt là timeline: offered connection rate tăng → allocation metric tăng → SYN/transaction failure → giảm tải hoặc tăng NAT IP → recovery. Chỉ một dashboard đỏ chưa chứng minh root cause nếu client hoặc server đã bão hòa trước.

05

Ma trận test

#

Tạo load theo bậc, giữ mỗi mức đủ lâu để ổn định. Dừng khi error vượt ngưỡng an toàn hoặc ảnh hưởng ngoài test environment. Không cố “làm sập” shared NAT của production.

  • Test: Baseline · Destination: Nhiều · Connection pattern: Keep-alive · Mục tiêu: Xác minh network/app
  • Test: Concentration · Destination: Một tuple · Connection pattern: Short-lived · Mục tiêu: Tìm per-destination limit
  • Test: Spread · Destination: Nhiều tuple · Connection pattern: Cùng offered rate · Mục tiêu: So allocation
  • Test: Long-lived · Destination: Một/nhiều · Connection pattern: Giữ connection · Mục tiêu: Active-state capacity
  • Test: Burst · Destination: Một tuple · Connection pattern: Spike ngắn · Mục tiêu: Buffer/allocation response
  • Test: Retry storm · Destination: Một tuple · Connection pattern: Retry có giới hạn · Mục tiêu: Amplification
  • Test: Scale-out · Destination: Nhiều client · Connection pattern: Cùng tổng rate · Mục tiêu: Fairness per VM
  • Test: Recovery · Destination: Giảm tải/add IP · Connection pattern: Theo timeline · Mục tiêu: Release/recovery time
06

Kịch bản exhaustion và recovery

#

Bắt đầu với keep-alive để xác lập application capacity. Sau đó giảm reuse, tăng connection rate vào một destination do lab kiểm soát. Ghi điểm đầu tiên xuất hiện allocation error, connect timeout và retry. Lặp với nhiều destination để biết giới hạn gắn với tuple hay toàn gateway.

Thử recovery bằng dừng generator, graceful close, reset và chờ idle timeout. Đo thời gian error trở về zero và connection success phục hồi. Sau đó đánh giá một biện pháp mỗi lần: connection pooling, tăng destination/address diversity hợp lệ, thêm NAT IP/gateway, điều chỉnh port allocation hoặc phân tách workload.

Trên AWS, tài liệu nêu mỗi IPv4 address có thể hỗ trợ số lượng kết nối đồng thời nhất định tới mỗi unique destination và khuyến nghị theo dõi `ErrorPortAllocation`; con số phải lấy từ tài liệu hiện hành khi thiết kế. Google Cloud nêu mỗi NAT IP có 64.512 TCP source port và 64.512 UDP source port sử dụng được, nhưng allocation per VM và mode quyết định capacity thực.

Tương quan SNAT port allocation error với connection failure và recovery
Tương quan SNAT port allocation error với connection failure và recovery
07

Runbook thực hành

#

Pass/fail nên ghi: target connection rate; concurrent connection; destination profile; success ratio; p99 connect latency; zero allocation error ở operating envelope; recovery time và headroom.

  • 1. Khoanh vùng test server và quyền tạo tải.
  • 2. Ghi cloud, region, NAT mode/IP, route và timeout.
  • 3. Đo client ephemeral port/conntrack baseline.
  • 4. Chạy keep-alive tải thấp xác minh application.
  • 5. Tăng connection rate theo bậc tới một destination.
  • 6. Lặp với nhiều destination.
  • 7. Thử long-lived, burst và retry có giới hạn.
  • 8. Thu NAT metric/log và server accept.
  • 9. Giảm tải, đo release/recovery.
  • 10. Thử từng biện pháp và chạy regression.
08

Cách đọc kết quả và lựa chọn xử lý

#

Client hết ephemeral port: local bind/connect error tăng, port range đầy nhưng NAT allocation metric có thể không tăng. Server backlog đầy: SYN đến server nhưng accept/response giảm. Network policy/firewall: failure theo rule/path, không theo port pressure timeline. NAT exhaustion: allocation/dropped metric tăng tương quan với connect failure.

Connection pooling/HTTP/2 thường giảm port churn nhưng cần đo tác động head-of-line, load balancing và connection lifetime. Thêm NAT IP tăng pool trong phạm vi nền tảng nhưng không sửa retry storm. Phân tách workload giảm blast radius nhưng tăng kiến trúc và chi phí.

Đừng đặt timeout quá dài chỉ để giảm churn; mapping bị giữ lâu có thể làm pool cạn nhanh hơn. Tối ưu phải dựa trên traffic lifecycle thật.

09

Giới hạn của kết luận

#

Managed NAT là dịch vụ cloud có triển khai nội bộ không quan sát hết. Kết quả đại diện region, cấu hình, loại workload và thời điểm đo. Quota hoặc behavior có thể thay đổi; phải đối chiếu tài liệu trước nghiệm thu.

Test synthetic TCP không đại diện DNS/UDP, QUIC, proxy mesh hoặc application connection pool. Chạy thêm end-to-end transaction sau khi xác định network limit.

THUẬT NGỮ NHANH

Khái niệm cần nhớ

DUT / SUT
Thiết bị hoặc toàn bộ hệ thống đang là đối tượng của bài kiểm thử.
Steady state
Giai đoạn tải đã ổn định và đủ điều kiện để lấy số liệu đại diện.
Pass / fail
Kết luận dựa trên ngưỡng đã thống nhất, luôn đi cùng topology, cấu hình và điều kiện đo.
TÀI LIỆU ĐỐI CHIẾUTài liệu tham khảo5 nguồn

Nội dung được biên soạn độc lập, theo hướng vendor-neutral và đối chiếu các tài liệu gốc dưới đây. Tính năng sản phẩm cần được kiểm tra lại theo phiên bản đang sử dụng.

Nguyên tắc biên tập

NetVali ưu tiên nguồn tiêu chuẩn và tài liệu chính thức; phân biệt khuyến nghị triển khai với yêu cầu của tiêu chuẩn; không công bố thông số sản phẩm chưa gắn với phiên bản và điều kiện đo.

Thông số và khả năng sản phẩm có thể thay đổi theo phiên bản. Hãy đối chiếu tài liệu chính thức trước khi xây dựng cấu hình hoặc tiêu chí nghiệm thu.
BẮT ĐẦU TỪ BÀI TOÁN

Cần chuyển kiến thức thành test plan?

Chia sẻ mục tiêu, topology và ràng buộc kỹ thuật. NetVali sẽ cùng bạn xác định bài đo phù hợp.

Trao đổi yêu cầu kỹ thuật