conntrack là gì? vì sao return traffic bị lệch là fail

conntrack là connection tracking subsystem trong Linux kernel, dùng để track flow theo 5 tuple và lưu NAT mapping. Netfilter dựa vào conntrack để chạy stateful firewall, và để DNAT SNAT reverse translate đúng cho return traffic.

Trong DevOps và SRE, conntrack là chỗ hay tạo ra incident kiểu timeout theo burst, kết nối lúc được lúc không, health check đỏ hàng loạt khi connection rate tăng. Với Docker và Kubernetes, conntrack bị stress mạnh vì lượng flow lớn và endpoint churn cao.

Ví dụ: TCP flow 203.0.113.5 port 53122 kết nối tới 10.0.1.10 port 443 tạo một conntrack entry.

Entry này giúp kernel nhận ra packet thuộc cùng flow ở reply direction, từ đó match ctstate và apply NAT mapping nếu có.

conntrack cho biết điều gì

conntrack giúp bạn trả lời nhanh các câu hỏi vận hành:

  • Flow đang ở state nào như NEW hay ESTABLISHED
  • Có NAT mapping nào đang rewrite destination IP và port hoặc rewrite source IP và port không
  • conntrack table đang có bao nhiêu entries, có gần chạm giới hạn không
  • Drop và insert failed có đang tăng không

Khi L7 thấy timeout hoặc retry tăng, nhìn conntrack giúp bạn phân biệt được app issue với network dataplane issue.

conntrack entry gồm gì

Một conntrack entry thường có các dữ liệu mà on call hay cần:

  • Original direction với source IP, source port, destination IP, destination port, protocol
  • Reply direction tương ứng cho return traffic
  • State machine của TCP và timeout theo state
  • NAT mapping nếu có DNAT hoặc SNAT
  • Counters và mark tùy cấu hình

Điểm cần nhớ là NAT không chỉ là rule, NAT còn là state per flow nằm trong conntrack.

NEW ESTABLISHED RELATED INVALID đọc sao cho đúng

  • NEW Flow mới, thường vừa tạo state và chưa confirm đủ hai chiều
  • ESTABLISHED Flow đã confirm, đã thấy traffic hai chiều theo state machine
  • RELATED Flow liên quan tới một flow đã có, hay gặp khi có helper
  • INVALID Packet không match được state hợp lệ, thường bị drop sớm

Trong firewall thực chiến, allow ESTABLISHED và RELATED gần như là rule nền để return traffic không bị block.

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

conntrack và iptables ctstate

iptables ctstate match là policy layer, nó dựa hoàn toàn vào conntrack. Nếu conntrack không tạo được entry mới, ctstate NEW không hình thành, và flow fail dù rule nhìn có vẻ đúng.

Những lỗi hay gặp:

  • Allow NEW vào port nhưng thiếu allow ESTABLISHED,RELATED
  • Drop INVALID quá rộng, trong khi traffic có asymmetric path hoặc offload làm state bị lệch
  • NAT đã có nhưng FORWARD policy drop giữa đường

conntrack với DNAT và SNAT

DNAT và SNAT cần conntrack để giữ mapping theo từng flow, rồi reverse translate cho return traffic.

Ví dụ: Client truy cập 203.0.113.10 port 443, packet được DNAT sang 10.0.1.10 port 8443. Conntrack sẽ giữ mapping để response từ 10.0.1.10 port 8443 được reverse translate về 203.0.113.10 port 443.

Nếu return traffic bypass node đang làm NAT, reverse translate không xảy ra và client thường timeout dù backend vẫn nhận request.

conntrack table full và symptom hay gặp

Khi conntrack table full, kernel không insert được entry mới hoặc drop theo burst. Symptom bên ngoài rất giống packet loss hoặc app degrade.

  • Timeout tăng đồng loạt khi connection rate spike
  • SYN retransmit tăng, handshake fail tăng
  • Một nhóm node fail trước vì traffic dồn không đều, như NodePort hoặc ingress dồn về vài node

Bạn thường kiểm tra nhanh counters để xem insert failed và drop.

conntrack -S

nf_conntrack_max và nf_conntrack_buckets

Hai tham số phổ biến nhất khi sizing:

  • net.netfilter.nf_conntrack_max Giới hạn số entries
  • net.netfilter.nf_conntrack_buckets Số buckets của hash table, ảnh hưởng lookup cost và CPU

Sai sizing thường ra 2 kiểu:

  • nf_conntrack_max thấp, table full sớm, drop new connections
  • buckets nhỏ, collision nhiều, CPU spike khi traffic burst
sysctl net.netfilter.nf_conntrack_max
sysctl net.netfilter.nf_conntrack_buckets

Timeout tuning cho TCP và UDP

Timeout quyết định entry sống bao lâu khi idle. Workload nhiều short lived connections mà timeout quá dài sẽ làm table phình nhanh. UDP mà timeout quá ngắn sẽ tạo cảm giác chập chờn.

Pattern hay gặp:

  • netfilter giữ TCP established entry quá lâu, peak giờ cao điểm dễ full
  • UDP timeout ngắn làm DNS query hoặc telemetry UDP bị drop khi có idle gap
sysctl net.netfilter.nf_conntrack_tcp_timeout_established
sysctl net.netfilter.nf_conntrack_udp_timeout
sysctl net.netfilter.nf_conntrack_udp_timeout_stream

Troubleshooting conntrack

Ba bước hay dùng khi on call:

  • Xem thống kê tổng quan
conntrack -S
  • Lọc entries theo backend IP hoặc port
conntrack -L | grep 10.0.1.10
  • Check kernel message liên quan conntrack table full và drop
dmesg | tail

Nếu thấy insert failed tăng, ưu tiên xử lý capacity và connection churn trước, rồi mới đào sâu application.

conntrack trong Kubernetes

Trong Kubernetes, conntrack bị stress vì Service traffic thường đi qua NAT, và endpoints thay đổi liên tục.

Tình huống hay gặp:

  • Rollout làm endpoints churn, mapping cũ còn giữ theo timeout, traffic tạm thời đi sai backend
  • NodePort dồn traffic vào một subset node, conntrack trên các node đó full trước
  • L7 metrics không khớp connection attempts vì drop xảy ra ở node trước khi tới Pod

Checklist vận hành conntrack cho production

  • Monitor nf_conntrack_count và nf_conntrack_max, alert khi gần đầy
  • Sizing theo peak concurrent connections, không theo average
  • Review connection churn, nhất là client retry aggressive và job tạo short lived connections
  • Verify return path cho NAT, tránh asymmetric routing làm reverse translate fail
  • Chuẩn hóa playbook debug: conntrack -S, conntrack -L, iptables counters, tcpdump theo interface

Kết luận

conntrack là state table quyết định độ ổn định của stateful firewall và NAT trên Linux. Khi traffic lớn, churn cao, hoặc return traffic lệch path, conntrack thường là điểm gãy gây timeout ngẫu nhiên và drop theo burst.

Thông tin nổi bật

Sự kiện phát trực tiếp​

Event Thumbnail

Báo cáo quan trọng

Article Thumbnail
Article Thumbnail

Sự kiện đang hiện hành

Chia sẻ bài viết:
Theo dõi
Thông báo của
0 Góp ý
Được bỏ phiếu nhiều nhất
Mới nhất Cũ nhất
Phản hồi nội tuyến
Xem tất cả bình luận

Tiêu điểm chuyên gia