สิ่งนี้ทำให้ฉันสับสน:
ฉันมีไฟร์วอลล์ pfSense (ขอเรียกว่า pfs
) และเบื้องหลังเซิร์ฟเวอร์หลายตัว
ฉัน NAT บริการต่างๆ จาก IP สาธารณะของฉันไปยังเซิร์ฟเวอร์ต่างๆ บน LAN โดยไม่มีปัญหาใดๆ
บนเซิร์ฟเวอร์เครื่องใดเครื่องหนึ่ง (ขอเรียกว่า s1
) ฉันกำลังเรียกใช้ก พเนจร
(กับ libvirt
) VM (ขอเรียกว่า v1
) กับ สาธารณะ กำหนดค่าเครือข่ายซึ่งได้รับ IP 192.168.1.159
ทาง pfs
เซิร์ฟเวอร์ DHCP
ตอนนี้ฉันกำหนดค่า NAT อย่างง่ายบน pfs
ในการเข้าถึง s1
SSH ของพูด <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 ก็ใช้งานได้ ดังนั้นคำถามจึงกลายเป็น: วิธีกำหนดค่าผ่าน พเนจร
การจัดเตรียมเพื่อให้เรามีการกำหนดค่าที่คล้ายกัน ฉันคิดว่านั่นหมายความว่าเครือข่ายสาธารณะต้องอยู่ในอินเทอร์เฟซเริ่มต้นใช่หรือไม่