Score:0

พร็อกซีขาออกโดยใช้ที่อยู่ IP สาธารณะหลายรายการบน EC2

ธง br

เรามีเซิร์ฟเวอร์แบ็กเอนด์จำนวนมากในรูปแบบของอินสแตนซ์ EC2 ซึ่งอยู่ในซับเน็ตส่วนตัวใน AWS VPC ซึ่งจำเป็นต้องพูดคุยกับ API ของบุคคลที่สาม API นี้จำกัดคำขอที่เราสามารถส่งตามที่อยู่ IP ต้นทาง และในขณะที่ปรับขนาดการตั้งค่าของเรา เราได้เริ่มถึงขีดจำกัดบน IP ของเกตเวย์ NAT ที่ใช้สำหรับทราฟฟิกขาออกทั้งหมด

ดังนั้น ฉันจึงต้องการตั้งค่าพร็อกซีสำหรับทราฟฟิกขาออกโดยแนบ EIP หลายตัว สำหรับการทดสอบ ฉันกำลังใช้อินสแตนซ์ Amazon Linux 2 ที่มี ENI 2 ตัวพร้อมแนบ EIP 2 ตัวต่อตัวเซิร์ฟเวอร์ส่วนหลังเปิดอุโมงค์ SSH ไปยังพร็อกซีขาออกและแมป API ของบุคคลที่สามกับพอร์ตในเครื่อง รายการในไฟล์โฮสต์ของเซิร์ฟเวอร์เปลี่ยนเส้นทางการรับส่งข้อมูลทั้งหมดไปยังชื่อโฮสต์นั้นไปยัง localhost และการตั้งค่านี้ใช้งานได้ดีโดยทั่วไป แต่การรับส่งข้อมูลขาออกจาก พร็อกซีจะใช้เฉพาะ EIP แรกที่เกี่ยวข้องเสมอ

ดังนั้นการตั้งค่าของฉันจึงมีลักษณะดังนี้:

ENI1: eth0
IP1 ส่วนตัว: 10.0.11.81
IP2 ส่วนตัว: 10.0.11.82

ENI2: เอท1
IP3 ส่วนตัว: 10.0.11.52
IP4 ส่วนตัว: 10.0.11.53

ตารางเส้นทางเดิม:
ค่าเริ่มต้นผ่าน 10.0.11.1 dev eth0
ค่าเริ่มต้นผ่าน 10.0.11.1 dev eth1 metric 10001
10.0.11.0/24 dev eth0 ลิงก์ขอบเขตเคอร์เนลโปรโต src 10.0.11.81
10.0.11.0/24 dev eth1 ลิงก์ขอบเขตเคอร์เนลโปรโต src 10.0.11.52
169.254.169.254 พัฒนา eth0

ตอนนี้ฉันต้องการระบุเซิร์ฟเวอร์ส่วนหลังที่ใช้ EIP ใดเมื่อเรียก API ผ่านพร็อกซีขาออก การทดลองครั้งแรกของฉันมีดังต่อไปนี้:

  • ตั้งค่าผู้ใช้ที่แตกต่างกัน 4 รายบนโฮสต์พร็อกซี
  • เพิ่มกฎ iptable สำหรับผู้ใช้แต่ละคนดังนี้: iptables -t nat -m เจ้าของ --uid-เจ้าของ user1 -A POSTROUTING -j SNAT --to IP1 เป็นต้น
  • สิ่งนี้ใช้ได้กับ 2 IP ที่เชื่อมต่อกับ ENI หลัก (เช่น eth0 ในเครื่อง) แต่ใช้ไม่ได้กับ 2 IP ที่เชื่อมโยงกับ ENI ที่สอง (eth1)
  • การเพิ่ม -o eth1 คำสั่งไม่ได้ผลเช่นกัน

ความพยายามครั้งต่อไปของฉันคือการสร้างตารางเส้นทางที่กำหนดเองสำหรับแต่ละที่อยู่ IP และจับคู่กับกฎนโยบาย:

  • สร้างตารางเส้นทางที่กำหนดเอง เช่น สำหรับ IP3:
ค่าเริ่มต้นผ่าน 10.0.11.1 dev eth1
10.0.11.0/24 dev eth1 ลิงก์ขอบเขตโปรโตสแตติก src 10.0.11.52
169.254.169.254 ลิงก์ขอบเขต eth1 dev
  • สร้างกฎ iptables เพื่อทำเครื่องหมายการรับส่งข้อมูลที่มาจาก user3: -A OUTPUT -m เจ้าของ --uid เจ้าของ 1003 -j MARK --set-xmark 0x3/0xffffffff
  • สร้างกฎเพื่อใช้ตารางเส้นทางที่กำหนดเองสำหรับแพ็กเก็ตทั้งหมดที่มีเครื่องหมาย 3: 32763: จาก fwmark 0x3 ค้นหา ip3 ทั้งหมด
  • สิ่งนี้ใช้ไม่ได้อีกครั้ง แพ็คเก็ตจะได้รับการปฏิบัติที่แตกต่างกัน ผู้ใช้ทั้งหมดสามารถสื่อสารกับโลกได้ ยกเว้นผู้ใช้ 3 ในตัวอย่างข้างต้น

ผมทำอะไรผิดหรือเปล่า? มีอะไรเล็กน้อยที่ฉันขาดหายไปหรือวิธีการทั้งหมดของฉันถึงวาระที่จะล้มเหลว? ฉันยินดีรับฟังข้อเสนอแนะ ทั้งเกี่ยวกับการทำให้การตั้งค่านี้ใช้งานได้ตลอดจนแนวทางอื่นๆ...

ขอบคุณมากในล่วงหน้า!

Tim avatar
gp flag
Tim
สต็อปแกปที่ง่ายกว่าคือเกตเวย์ NAT หนึ่งรายการต่อซับเน็ต / AZ โดยมีการตั้งค่าการกำหนดเส้นทางอย่างเหมาะสม อินสแตนซ์ NAT แทนเกตเวย์ NAT จะมีราคาถูกกว่า แต่ต้องการการตั้งค่า / การบำรุงรักษาเพิ่มเติม คำตอบของ John น่าจะดีที่สุด แต่ให้เพิ่มขีดจำกัด
br flag
พร็อกซีขาออกคือจุดแวะพักของฉัน การจัดระเบียบซับเน็ตใหม่ การย้ายเซิร์ฟเวอร์ไปรอบๆ ฯลฯ นั้นง่ายกว่าการเปลี่ยนเส้นทางทราฟฟิกขาออกบางส่วนผ่านอุโมงค์ SSH ซึ่งสามารถทำได้กับเครื่องจักรที่มีอยู่โดยมีผลกระทบต่อสถาปัตยกรรมน้อยที่สุดและไม่มีการหยุดทำงาน
Score:3
ธง cn

ติดต่อองค์กรที่ใช้งาน API และอธิบายสถานการณ์ การสร้างความสัมพันธ์ทางธุรกิจเป็นการเริ่มต้นที่ดีในการแก้ปัญหา

ใช้ IPv6 เพื่อลดความซับซ้อนทางเทคนิค AWS จะให้ /64 ต่อเครือข่ายย่อยของพื้นที่สาธารณะ ซึ่งช่วยให้สามารถสื่อสารโดยตรงระหว่างอินสแตนซ์และ API ได้ ที่อยู่ที่ไม่ซ้ำต่ออินสแตนซ์ทำให้เห็นได้ชัดว่าคุณกำลังปรับขนาดออก การขอให้เน็ตของคุณได้รับอนุญาตโควต้าที่สูงขึ้นจะง่ายขึ้น เนื่องจากทั้งหมดอยู่ใน VPC /56 ของคุณ

br flag
ขอบคุณ! การเพิ่มขีดจำกัดจะเป็นทางเลือกที่ฉันยังไม่ได้พิจารณา น่าเสียดายที่พวกเขาไม่รองรับ IPv6 มิฉะนั้นนั่นจะเป็นตัวเลือกแรกของฉัน ฉันได้พิจารณาแบ่งส่วนเครือข่ายย่อยเพิ่มเติมเพื่อให้สามารถเพิ่มเกตเวย์ NAT ได้มากขึ้นและกระจายโหลด หรือแม้แต่ย้ายเซิร์ฟเวอร์แบ็กเอนด์ทั้งหมดไปยังเครือข่ายย่อยสาธารณะเพื่อให้สามารถกำหนด EIP แต่ละรายการให้กับพวกเขาได้โดยตรง แต่ฉันต้องการหลีกเลี่ยงการย้ายเซิร์ฟเวอร์แบ็กเอนด์ที่มีการเข้าถึงฐานข้อมูลไปยังซับเน็ตสาธารณะ และการแบ่งส่วนการตั้งค่าปัจจุบันก็เป็นความพยายามจำนวนมากเช่นกัน พร็อกซีขาออกดูเหมือนเป็นช่องว่างที่ดี
Score:0
ธง br

ฉันพบวิธีแก้ปัญหาด้วยตัวเองและบันทึกไว้ที่นี่: วิธีที่ดีที่สุดในการกำหนดเส้นทางการรับส่งข้อมูลตามผู้ใช้ที่เข้าสู่ระบบผ่านเส้นทางซ้ำซ้อนเฉพาะ

ในกรณีที่ smeone สะดุดกว่านี้ในอนาคต

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา