ฉันลบคำตอบดั้งเดิมของฉันเพราะฉันไม่มั่นใจอย่างเต็มที่ว่าถูกต้อง ฉันมีเวลาพอที่จะตั้งค่าเครือข่ายเสมือนเล็ก ๆ ของ VM เพื่อจำลองเครือข่ายที่เป็นปัญหา นี่คือชุดของกฎไฟร์วอลล์ที่เหมาะกับฉัน (ในiptables-save
รูปแบบสำหรับnat
ตารางเท่านั้น):
-A PREROUTING -d 89.179.245.232/32 -p tcp -m multiport --dports 22,25,80,443 -j DNAT --to-destination 192.168.2.10
-A POSTROUTING -s 192.168.2.0/24 -o ppp0 -j MASQUERADE
-A POSTROUTING -s 192.168.2.0/24 -d 192.168.2.10/32 -p tcp -m multiport --dports 22,25,80,443 -j MASQUERADE
POSTROUTING
กฎข้อแรกคือวิธีการแบ่งปันการเชื่อมต่ออินเทอร์เน็ตกับ LAN อย่างตรงไปตรงมา ฉันทิ้งไว้ที่นั่นเพื่อความสมบูรณ์
PREROUTING
กฎและครั้งที่สองPOSTROUTING
กฎร่วมกันสร้างแน็ที่เหมาะสมเพื่อให้การเชื่อมต่อที่ไปยังเซิร์ฟเวอร์ผ่านทางที่อยู่ IP ภายนอกสามารถเกิดขึ้นได้โดยไม่คำนึงว่าการเชื่อมต่อมาจากภายนอกหรือจากภายในระบบ LAN เมื่อไคลเอนต์บน LAN เชื่อมต่อกับเซิร์ฟเวอร์ผ่านที่อยู่ IP ภายนอกเซิร์ฟเวอร์จะเห็นการเชื่อมต่อที่มาจากที่อยู่ IP ภายในของเราเตอร์ (192.168.2.1)
ที่น่าสนใจก็คือปรากฎว่ามีกฎการ POSTROUTING ที่สองที่สามารถใช้งานได้หลายรูปแบบ หากเป้าหมายถูกเปลี่ยนเป็น-j SNAT --to-source 192.168.2.1
เอฟเฟกต์คือ (ไม่น่าแปลกใจ) เหมือนกับMASQUERADE
: เซิร์ฟเวอร์จะเห็นการเชื่อมต่อจากไคลเอนต์ LAN ในพื้นที่ว่าเกิดจากที่อยู่ IP ภายในของเราเตอร์ ในทางกลับกันหากเป้าหมายถูกเปลี่ยน-j SNAT --to-source 89.179.245.232
เป็น NATs ยังคงใช้งานได้ แต่ในเวลานี้เซิร์ฟเวอร์จะเห็นการเชื่อมต่อจากไคลเอนต์ LAN ในพื้นที่ว่ามาจากที่อยู่ IP ภายนอกของเราเตอร์(89.179.245.232)
สุดท้ายโปรดทราบว่าต้นฉบับPREROUTING
/ DNAT
กฎของคุณด้วย-i ppp0
ไม่ทำงานเนื่องจากกฎไม่ตรงกับแพ็กเก็ตที่มาจากไคลเอนต์ LAN (เนื่องจากสิ่งเหล่านั้นไม่ได้ป้อนเราเตอร์ผ่านทางppp0
อินเทอร์เฟซ) มันเป็นไปได้ที่จะทำให้มันทำงานได้โดยการเพิ่มPREROUTING
กฎข้อที่สองสำหรับไคลเอนต์ LAN ภายใน แต่มันจะไม่เหมาะสม (IMO) และจะต้องอ้างถึงที่อยู่ IP ภายนอกอย่างชัดเจน
ตอนนี้แม้หลังจากวาง "กิ๊บ NAT" (หรือ "วนรอบ NAT" หรือ "NAT reflection" หรืออะไรก็ตามที่ใครอยากโทรหา) วิธีแก้ปัญหาอย่างละเอียดฉันก็ยังเชื่อว่าโซลูชัน DNS แบบแยกส่วน - - ด้วยไคลเอนต์ภายนอกการแก้ไข IP ภายนอกและไคลเอนต์ภายในการแก้ไขกับ IP ภายใน --- จะเป็นเส้นทางที่แนะนำให้เลือกมากกว่า ทำไม? เพราะผู้คนจำนวนมากเข้าใจว่า DNS ทำงานอย่างไรมากกว่าเข้าใจว่า NAT ทำงานอย่างไรและส่วนใหญ่ของการสร้างระบบที่ดีคือการเลือกใช้ชิ้นส่วนที่สามารถบำรุงรักษาได้ มีความเป็นไปได้ที่จะเข้าใจการตั้งค่า DNS และทำการบำรุงรักษาอย่างถูกต้องมากกว่าการตั้งค่า NAT แบบลับ (IMO)