สิ่งนี้ทำให้ฉันสับสน:
ฉันมีไฟร์วอลล์ pfSense (ขอเรียกว่า pfs) และเบื้องหลังเซิร์ฟเวอร์หลายตัว
ฉัน NAT บริการต่างๆ จาก IP สาธารณะของฉันไปยังเซิร์ฟเวอร์ต่างๆ บน LAN โดยไม่มีปัญหาใดๆ
บนเซิร์ฟเวอร์เครื่องใดเครื่องหนึ่ง (ขอเรียกว่า s1) ฉันกำลังเรียกใช้ก พเนจร (กับ libvirt) VM (ขอเรียกว่า v1) กับ สาธารณะ กำหนดค่าเครือข่ายซึ่งได้รับ IP 192.168.1.159 ทาง pfsเซิร์ฟเวอร์ DHCP
ตอนนี้ฉันกำหนดค่า NAT อย่างง่ายบน pfs ในการเข้าถึง s1SSH ของพูด <wan>:6622 -> s1:22 และเข้าถึงได้บน mydomain.com:6622. ไม่มีปัญหา.
เข้าได้ยังครับ v1:22 (หรือเทียบเท่า 192.168.1.159:22) กับผู้ใช้ ssh ที่ถูกต้อง จากในระบบ LAN โดยไม่มีปัญหา
ตอนนี้ฉันเพิ่ม NAT อย่างง่ายบน pfs, พูด <wan>:6722 -> v1:22. ตอนนี้กำลังพยายามเข้า mydomain.com:6722 ไม่ งาน?!
วัตถุประสงค์คือเพื่อเพิ่ม "เลเยอร์อื่น" แม้กระทั่ง: รันคอนเทนเนอร์ด้วยพอร์ตสาธารณะ เช่น --เผยแพร่ 9980:80 บน v1 และเข้าถึงได้เช่น v1:9980 และจาก mydomain.com:9980 โดยเปิด NAT ที่เกี่ยวข้อง pfs ชอบ <วัน>:9980 -> v1:9980. จากระบบแลน สิ่งนี้ยังใช้งานได้ตามที่คาดไว้ (เช่นฉันสามารถเข้าถึงได้ v1:9980 จาก LAN) แต่เป็น NAT ผ่าน pfs ไม่ใช่.
ฉันมีการตั้งค่าที่คล้ายกันซึ่งทำงานภายในเครือข่ายเดียวกันบนเครื่องต่างๆ โดยไม่มีปัญหา ฉันยังมีอีก (ไม่ใช่คนจรจัด แต่ก็เช่นกัน libvirt) เปิด VM s1 ซึ่งฉันสามารถ ssh ผ่าน NAT ผ่าน IP สาธารณะของฉันได้อย่างสมบูรณ์ แต่อย่างใดข้างต้นใช้ไม่ได้กับ พเนจร เครื่องจักร และฉันกำลังสูญเสียสิ่งที่อาจเป็นสาเหตุของปัญหานี้ (FWIW ฉันมี net.ipv4.forward เปิดใช้งานอยู่ v1).
แก้ไข:
ฉันเข้าใกล้ไปอีกขั้น: ถ้าฉันทำลาย NIC ที่มีอยู่ตัวแรกของ พเนจร VM ที่ใช้ ผู้จัดการ virtและตั้งค่า VM ที่สองเป็น rtl8139 แทน อัจฉริยะ (แล้วรีสตาร์ท) ฉันแพ้ ssh คนจรจัด ความสามารถ แต่ NAT ก็ใช้งานได้ ดังนั้นคำถามจึงกลายเป็น: วิธีกำหนดค่าผ่าน พเนจร การจัดเตรียมเพื่อให้เรามีการกำหนดค่าที่คล้ายกัน ฉันคิดว่านั่นหมายความว่าเครือข่ายสาธารณะต้องอยู่ในอินเทอร์เฟซเริ่มต้นใช่หรือไม่