เราเช่าพื้นที่ที่อยู่ IPV4 (ซับเน็ต) จาก ISP สองราย เครือข่ายย่อยจะถูกส่งไปยังฟาร์มเซิร์ฟเวอร์ของเราผ่านอุโมงค์ GREเซิร์ฟเวอร์ฟาร์มของเราให้บริการการเชื่อมต่อ TCP ขาเข้า เราไม่ได้ควบคุมการตั้งค่าการยกเลิก GRE ที่ส่วนท้ายของ ISP เราไม่ได้ใช้งานโหลดบาลานเซอร์สำหรับบริการที่เป็นกรรมสิทธิ์
ปัญหาคือมีการจราจรมากเกินไปที่พยายามจะข้ามอุโมงค์ GRE อัตราการสูญเสียแพ็กเก็ตมักจะอยู่ที่ 1%, 2% หรือสูงกว่านั้นขึ้นอยู่กับอุโมงค์ GRE เราได้ลองใช้คุณลักษณะการจำกัดแฮชของ iptables ใส่แพ็กเก็ต SYN (คำขอเชื่อมต่อใหม่) ลงในบัคเก็ตตามที่อยู่ IP ต้นทาง และตั้งค่าขีดจำกัดตามอำเภอใจต่อเวลา-ช่วงเวลาในแต่ละบัคเก็ตของอุโมงค์ [*] ซึ่งช่วยลดอัตราการสูญเสียแพ็กเก็ตได้เล็กน้อยในบางอุโมงค์ แต่อัตราการสูญเสียแพ็กเก็ต 1% ก็ยังค่อนข้างแย่ในเครือข่ายศูนย์ข้อมูลสมัยใหม่
ฉันเดาว่าทางออกที่ดีที่สุดคือการจำกัดอัตราที่ปลายสุดของอุโมงค์ GRE เพราะฉันคิดว่าเมื่อถึงเวลาที่แพ็กเก็ตโอเวอร์โหลดถึงจุดสิ้นสุดของอุโมงค์ GRE มันทำให้เกิดการอุดตันของเครือข่ายแล้ว อย่างไรก็ตาม เราไม่ได้ควบคุมการตั้งค่าที่ปลายสุดของอุโมงค์
เนื่องจากลักษณะของบริการ จึงเป็นการดีที่การเชื่อมต่อ TCP ที่ยอมรับจะได้รับการจัดการอย่างมีประสิทธิภาพ ดีกว่าการจัดการการเชื่อมต่อที่ไร้ประสิทธิภาพ เราค่อนข้างจะยกเลิกการเชื่อมต่อที่ไม่สามารถจัดการได้อย่างรวดเร็วและทำให้ผู้ร้องขอกลับมา
วิธีที่ดีที่สุดที่ฉันสามารถทำได้เพื่อลดอัตราการสูญเสียแพ็กเก็ตและปรับปรุงประสิทธิภาพการทำงานของการเชื่อมต่อที่ยอมรับคืออะไร มีวิธีใดบ้างที่ฉันสามารถส่งสัญญาณควบคุมความแออัดกลับผ่านอุโมงค์ GRE
การตั้งค่าการจำกัดอัตรา iptables ของเรามีลักษณะดังนี้:
# สร้างห่วงโซ่กฎการจำกัดอัตราว่าง
iptables -t ตัวกรอง -N GRE2_RATE_LIMIT
# แทรกกฎเพื่อส่งต่อแพ็คเก็ตการเชื่อมต่อใหม่ (แพ็คเก็ต SYN) ไปยังห่วงโซ่กฎนี้
iptables -t filter -I FORWARD -i gre2 -m conntrack --ctstate NEW -j GRE2_RATE_LIMIT
#ใช้วงเงินจริง
# ยอมรับแพ็กเก็ต SYN ในอัตราที่กำหนด
iptables -A GRE2_RATE_LIMIT -m hashlimit --hashlimit-mode srcip --hashlimit-upto rate/time --hashlimit-burst rate --hashlimit-name gre2_rate_limit -j ACCEPT
#ปฏิเสธทุกอย่าง
iptables -A GRE2_RATE_LIMIT -p tcp -j REJECT --reject-with tcp-reset