ฉันกำลังพยายามทำความเข้าใจกับ iptables และต้องการทดสอบอย่างง่ายในเครือข่ายในบ้านของฉัน ฉันต้องการเข้าถึงบางเว็บไซต์ที่ทำงานบน RPI ในขณะที่เข้าถึง ผ่านเดสก์ท็อป Ubuntu ของฉัน.
หมายเหตุ: ฉันอนุญาตทุกอย่างในกฎ FORWARD ของฉันบนเดสก์ท็อปพีซี Ubuntu (สำหรับการทดสอบนี้เท่านั้น)ฉันรู้ว่ามันน่ากลัวสำหรับความปลอดภัย แต่สำหรับตอนนี้ฉันไม่สนใจ ฉันแค่ต้องเข้าใจว่าฉันต้องทำอะไรอย่างน้อยที่สุดเพื่อรับแพ็กเก็ตผ่าน Ubuntu PC ในฐานะคนกลาง
ฉันพยายามบรรยายเส้นทางในภาพถัดไป (อย่างน้อย ฉันคิดว่ามัน/ควรจะทำงานอย่างไร)
ตามที่ระบุไว้ ตอนนี้ฉันเพิกเฉยต่อห่วงโซ่ FORWARD โดยยอมรับทุกอย่าง สิ่งเดียวที่ฉันต้องดูแลคือ DNAT และ SNAT
ดังนั้นในข้อความ:
สิ่งนี้ทำได้ด้วยคำสั่ง iptables สองคำสั่ง
# DNAT ปลายทาง 192.168.1.10:8080
sudo iptables -t nat -I PREROUTING 1 -p tcp -d 192.168.1.112 --dport 1234 -j DNAT --to 192.168.1.10:8080
# SNAT มาจาก 192.168.1.112
sudo iptables -t nat -I โพสต์ 1 -p tcp -d 192.168.1.123 -j SNAT --to 192.168.1.112
คำถามที่ 1: ใครสามารถยืนยันได้ว่าข้างต้นถูกต้อง ถ้าไม่ โปรดอธิบายว่าฉันทำผิดอะไร
คำถามที่ 2: ฉันถูกต้องหรือไม่ที่ฉันไม่จำเป็นต้องเพิ่มกฎ FORWARD (เพราะฉันยอมรับทั้งหมดตามค่าเริ่มต้นแล้ว)
ส่วนถัดไปยังไม่ชัดเจนสำหรับฉัน ตอนนี้เซิร์ฟเวอร์บน [email protected] จะตอบกลับ เนื่องจากฉัน SNAT-ed แพ็คเก็ต การตอบกลับจะถูกส่งไปที่ 192.168.1.112 ฉันคิดที่พอร์ต 8080 ด้วย เนื่องจากเป็นพอร์ตที่เราส่งข้อมูลไป
หากถูกต้องและได้รับการตอบกลับใน [email protected]:8080 จริง ๆ แล้ว ฉันไม่รู้ว่าเคอร์เนล (บน [email protected]) เป็นอย่างไร ก็จะเข้าใจได้อย่างน่าอัศจรรย์ว่าการตอบกลับนี้ไม่ใช่สำหรับเขา แต่ในความเป็นจริง ควรโอนไปยังไคลเอนต์ที่ร้องขอดั้งเดิม: [email protected]
คำถามที่ 3: ฉันจำเป็นต้องเพิ่มกฎเพื่อให้เส้นทาง "ตอบกลับ" ผ่านหรือไม่ หรือสิ่งนี้ทำโดยเคอร์เนลอย่างน่าอัศจรรย์จริง ๆ ?
ผลลัพธ์สุดท้ายคือการหมดเวลาการเชื่อมต่อ
ฉันขอขอบคุณคำแนะนำที่นี่ คำอธิบายที่ละเอียดยิ่งขึ้นและหวังว่าจะเข้าใจวิธีการทำงานนี้อย่างแท้จริงในที่สุด..