ฉันมีการตั้งค่าต่อไปนี้:
พรอกซ์ม็อกซ์ เจ้าภาพ เซิร์ฟเวอร์เฉพาะที่มี IP สาธารณะหนึ่งเครื่องและติดตั้ง IPTables และเครื่องเสมือนจำนวนมากที่ติดตั้งตัวเทียบท่า
ฉันใช้ iptables เพื่อส่งต่อพอร์ต 443 ไปยังหนึ่งใน VM ผ่าน DNAT และใช้งานได้ดีจากภายนอก เจ้าภาพ ได้แก่อินเทอร์เน็ต แต่ถ้าฉันพยายามเข้าถึงทรัพยากรภายใน VM ที่ทำงานบน VM ผ่าน IP สาธารณะ ก็จะไม่สามารถเข้าถึงได้
กรณีการใช้งาน: ฉันมี nginx พร้อม SSL เป็นพร็อกซีย้อนกลับสำหรับบริการที่ทำงานในนักเทียบท่าบน VM (แอปแบ็กเอนด์ + ส่วนหน้า) และจำเป็นต้องเข้าถึงแบ็กเอนด์จากส่วนหน้าผ่าน "สาธารณะ DNS, IP" เนื่องจากใบรับรอง SSL ถูกสร้างขึ้นสำหรับ DNS สาธารณะที่ชี้ไปยัง IP สาธารณะและพอร์ต ส่งต่อไปยัง nginx ของ VM
ฉันมีส่วนต่อประสานสาธารณะที่เชื่อมต่อกับ vmbr0 และอีก brige vmbr172 (172.20.0.0/16) สำหรับ VM
กฎ IPTables ปัจจุบันของฉัน:
iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to 172.20.2.9:443
iptables -t nat -A POSTROUTING -s '172.20.0.0/16' -o vmbr0 -j MASQUERADE
iptables -L -n -t แนท -v
เชน PREROUTING (นโยบายยอมรับแพ็กเก็ต 58449, 3018K ไบต์)
pkts bytes target prot เลือกใช้ปลายทางต้นทาง
1941 105K DNAT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 ถึง:172.20.2.9:443
Chain POSTROUTING (นโยบายยอมรับแพ็กเก็ต 5511, 332K ไบต์)
pkts bytes target prot เลือกใช้ปลายทางต้นทาง
212K 18M MASQUERADE ทั้งหมด -- * vmbr0 172.20.0.0/16 0.0.0.0/0
ฉันได้ลองเปลี่ยนอินเทอร์เฟซเป็น ใดๆ แต่ดูเหมือนว่าการเชื่อมต่อจะ "แฮงค์" และหมดเวลา เดาว่าฉันต้องการกฎ postrouting แต่ไม่สามารถเข้าใจได้ว่าควรมีลักษณะอย่างไร