Score:0

ใช้ fwmark ใน iptables บนคอนเทนเนอร์ที่ทำงานใน Azure K8S

ธง gl

ฉันมีกรณีการใช้งานแปลก ๆ ซึ่งพ็อดที่ทำงานใน Azure Kubernetes จำเป็นต้องกำหนดเส้นทางทราฟฟิกจากพอร์ตเฉพาะไปยังเป้าหมายเฉพาะผ่านอุโมงค์ VPN เฉพาะ แต่เป้าหมายเหล่านั้นเป็น IP ส่วนตัว ดังนั้นจึงสามารถมี IP เดียวกันสำหรับเป้าหมายที่แตกต่างกัน พ็อดนอกเหนือจากการกำหนดเส้นทางยังเป็นเซิร์ฟเวอร์ OpenVPN ที่เป้าหมายเชื่อมต่อด้วย ตัวอย่าง:

การสื่อสารที่มาถึงพอร์ต 10 จะถูกส่งไปยัง IP 10.0.0.4:80 ผ่าน VPN IP 10.118.0.2

และในเวลาเดียวกัน เราสามารถมี:

การสื่อสารที่มาถึงพอร์ต 20 จะถูกส่งไปยัง IP 10.0.0.4:80 ผ่าน VPN IP 10.118.0.3

แม้ว่า IP เป้าหมายจะเหมือนกัน แต่เป็นคนละเครื่องกัน ดังนั้นเพื่อให้บรรลุเป้าหมายนี้ ฉันจึงคิดวิธีแก้ปัญหาที่เป็นไปได้นี้:

/sbin/iptables --table mangle --insert PREROUTING --destination "192.168.0.100" -i eth0 -p tcp --dport "10" --jump MARK --set-mark "10"
/sbin/iptables --table nat --insert PREROUTING --destination "192.168.0.100" -i eth0 -p tcp --dport "10" --jump DNAT --to-destination "10.0.0.4:80"
/sbin/ip rule เพิ่ม prio "10" จากทั้งหมด fwmark "10" ค้นหา "10"
/sbin/ip เส้นทางเพิ่ม "10.0.0.4" ผ่าน "10.118.0.2" ตาราง 10

สิ่งนี้จะช่วยให้การสื่อสารทั้งสองทำงานพร้อมกันโดยที่ทราฟฟิกถูกส่งไปยังเครื่องที่ถูกต้อง แต่สิ่งที่ฉันเห็นคือมีการทำเครื่องหมายแพ็กเก็ตในตาราง mangle แต่ไปไม่ถึงตาราง NAT ฉันพบว่ามันเกี่ยวข้องกับ rt_filter เพิ่มเติมเกี่ยวกับด้านล่าง ตามที่เป็นอยู่ในขณะนี้และใช้งานได้ดังนี้:

/sbin/iptables --table nat --insert PREROUTING --destination "192.168.0.100" -i eth0 -p tcp --dport "10" --jump DNAT --to-destination "10.0.0.4:80"
เส้นทาง /sbin/ip เพิ่ม "10.0.0.4" ผ่าน "10.118.0.2"

อย่างไรก็ตาม หากมีการสร้างเส้นทางที่สอง เช่นในตัวอย่างแรก คำสั่งจะมีลักษณะดังนี้:

/sbin/iptables --table nat --insert PREROUTING --destination "192.168.0.100" -i eth0 -p tcp --dport "20" --jump DNAT --to-destination "10.0.0.4:80"
/sbin/ip เส้นทางเพิ่ม "10.0.0.4" ผ่าน "10.118.0.3"

สิ่งนี้จะสร้างเส้นทางอื่นในตารางเส้นทางหลักสำหรับเป้าหมายเดียวกัน แต่ผู้ใช้เมื่อเข้าถึง 192.168.0.100 อาจได้รับการกำหนดเส้นทางไปยังเครื่องที่เชื่อมต่อกับ 10.118.0.3 หรือ 10.118.0.2

นอกจากกฎนี้แล้ว สำหรับกฎทั้งหมดนี้มีการเปิดใช้งานเสมอเพื่อให้การรับส่งข้อมูลกลับไปที่อินเทอร์เฟซ tap0 ที่ซึ่งการสื่อสารไปยัง 10.118.0.X ไป:

iptables -t nat -A โพสต์ -o tap0 -j MASQUERADE

ขออภัย ฉันไม่สามารถทราบ IP ต้นทางของผู้ใช้ได้ ไม่เช่นนั้นจะแก้ปัญหาได้ง่ายๆ IP ต้นทางสำหรับการสื่อสารใดๆ ที่มาถึงพอร์ตนี้จะเหมือนกันเสมอ เนื่องจากการสื่อสารจำเป็นต้องผ่านบริการอื่นซึ่งปิดบัง IP ต้นทางจริง

ฉันเห็นหัวข้ออื่นๆ ในการทำเครื่องหมายแพ็กเก็ตขาเข้าในคอนเทนเนอร์/พ็อด ฉันต้องปิดใช้งาน rt_filter แต่ฉันทำไม่ได้ มันบอกว่ามันเป็นระบบไฟล์แบบอ่านอย่างเดียว และฉันไม่รู้ว่ามันเป็นไปได้ที่จะเปลี่ยนสิ่งนั้นใน Azure Kubernetes Clusters หรือไม่

มีวิธีอื่นนอกเหนือจากการทำเครื่องหมายแพ็คเก็ตหรือไม่? หรือมีอย่างอื่นที่ขาดหายไปเกี่ยวกับการทำเครื่องหมายแพ็คเก็ต?

neomax avatar
gl flag
แค่ต้องการเพิ่มกฎ/วิธีแก้ปัญหาชุดแรก ฉันสามารถดูการรับส่งข้อมูลด้วย tcpdump บนอินเทอร์เฟซ tap0 ที่เปลี่ยนจาก 10.118.0.1 เป็น 10.0.0.4 แต่ไม่ไปที่เครื่องที่เรียก 192.168.0.100:10 มันไม่ได้รับการตอบสนองใด ๆ
Score:1
ธง gl

ในที่สุดฉันก็ได้วิธีแก้ปัญหา ปัญหาเกิดขึ้นกับแพ็คเก็ตที่ยุ่งเหยิงใน PREROUTING แพ็กเก็ตที่ยุ่งเหยิงใน POSTROUTING (ดังนั้นเมื่อออกจาก eth0) พวกเขาสามารถกลับจาก tap0 เป็น eth0 และจากนั้นไปยังไคลเอ็นต์ ผลลัพธ์ที่ได้จะเป็นดังนี้:

/sbin/iptables --table mangle --insert POSTROUTING --destination "192.168.0.100" -o eth0 -p tcp --dport "10" --jump MARK --set-mark "10"
/sbin/iptables --table nat --insert PREROUTING --destination "192.168.0.100" -i eth0 -p tcp --dport "10" --jump DNAT --to-destination "10.0.0.4:80"
/sbin/ip rule เพิ่ม prio "10" จากทั้งหมด fwmark "10" ค้นหา "10"
/sbin/ip เส้นทางเพิ่ม "10.0.0.4" ผ่าน "10.118.0.2" ตาราง 10

โพสต์คำตอบ

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