Chúng tôi thuê không gian địa chỉ IPV4 (mạng con) từ một vài ISP. Các mạng con được định tuyến đến nhóm máy chủ của chúng tôi thông qua các đường hầm GRE.Trang trại máy chủ của chúng tôi phục vụ các kết nối TCP gửi đến. Chúng tôi không kiểm soát thiết lập kết thúc GRE ở đầu ISP. Chúng tôi không chạy bộ cân bằng tải cho các dịch vụ độc quyền.
Vấn đề là có quá nhiều lưu lượng truy cập cố gắng đi qua các đường hầm GRE. Tỷ lệ mất gói thường là 1%, 2% hoặc cao hơn nhiều tùy thuộc vào đường hầm GRE. Chúng tôi đã thử sử dụng tính năng giới hạn hàm băm của iptables, đặt các gói SYN (yêu cầu kết nối mới) vào các nhóm theo địa chỉ IP nguồn và đặt giới hạn khoảng thời gian tùy ý trên mỗi nhóm của đường hầm [*]. Điều này đã làm giảm một chút tỷ lệ mất gói trên một số đường hầm, nhưng tỷ lệ mất gói 1% vẫn còn khá tệ trong các mạng trung tâm dữ liệu hiện đại.
Tôi đoán rằng giải pháp lý tưởng là thực hiện giới hạn tốc độ ở đầu xa của đường hầm GRE, bởi vì tôi nghĩ rằng vào thời điểm quá tải gói đến cuối đường hầm GRE của chúng ta, nó đã gây ra tắc nghẽn mạng. Tuy nhiên, chúng tôi không kiểm soát việc thiết lập ở cuối đường hầm.
Do tính chất của các dịch vụ, tốt hơn là các kết nối TCP được chấp nhận sẽ được xử lý hiệu quả hơn là xử lý nhiều kết nối không hiệu quả. Chúng tôi muốn loại bỏ các kết nối không thể xử lý nhanh chóng và khiến người yêu cầu quay lại.
Cách tiếp cận tốt nhất tôi có thể thực hiện để giảm tỷ lệ mất gói và cải thiện hiệu suất chức năng trên các kết nối được chấp nhận là gì? Có cách nào để tôi có thể gửi tín hiệu kiểm soát tắc nghẽn trở lại qua đường hầm GRE không?
Thiết lập giới hạn tốc độ iptables của chúng tôi trông như thế này:
# Tạo chuỗi quy tắc giới hạn tốc độ trống
iptables -t bộ lọc -N GRE2_RATE_LIMIT
# Chèn quy tắc để chuyển tiếp các gói kết nối mới (gói SYN) tới chuỗi quy tắc này
iptables -t filter -I FORWARD -i gre2 -m conntrack --ctstate NEW -j GRE2_RATE_LIMIT
# Trên thực tế áp dụng giới hạn
# Chấp nhận các gói SYN đến một tỷ lệ nhất định
iptables -A GRE2_RATE_LIMIT -m hashlimit --hashlimit-mode srcip --hashlimit-upto rate/time --hashlimit-burst rate --hashlimit-name gre2_rate_limit -j CHẤP NHẬN
# Từ chối mọi thứ khác
iptables -A GRE2_RATE_LIMIT -p tcp -j REJECT --reject-with tcp-reset