ฉันมีเซิร์ฟเวอร์ GNS3 และฉันกำลังพยายามเพิ่มกฎ iptable เพื่อให้เมื่อมีคนในทีมของฉันเชื่อมต่อที่พอร์ต 1100 พวกเขาจะถูกส่งไปยัง IP ภายใน เช่น 192.168.122.2:22 IP ภายในนี้เป็นของโฮสต์ป้อมปราการของโครงการ GNS3 เป้าหมายสุดท้ายคือสามารถ shh เข้าสู่ที่อยู่ IP ภายในจากเครื่องท้องถิ่น
นี่คือลักษณะของ IPTABLE ของฉัน (โดยใช้ IP สาธารณะปลอม 1.2.3.4 เพื่อเป็นตัวอย่าง):
ห่วงโซ่ PREROUTING (ยอมรับนโยบาย)
num target prot เลือกปลายทางต้นทาง
1 DNAT tcp -- 0.0.0.0/0 1.2.3.4 tcp dpt:1100 ถึง:192.168.122.2:22
เชนอินพุท (ยอมรับนโยบาย)
num target prot เลือกปลายทางต้นทาง
Chain OUTPUT (ยอมรับนโยบาย)
num target prot เลือกปลายทางต้นทาง
ห่วงโซ่โพสต์ (ยอมรับนโยบาย)
num target prot เลือกปลายทางต้นทาง
1 สวมหน้ากากทั้งหมด -- 0.0.0.0/0 0.0.0.0/0
Chain DOCKER (อ้างอิง 0 รายการ)
num target prot เลือกปลายทางต้นทาง
เชน LIBVIRT_PRT (อ้างอิง 0 รายการ)
num target prot เลือกปลายทางต้นทาง
จากเครื่องโลคัลของฉัน ฉันรันคำสั่ง ssh อูบูนัท@1.2.3.4 -p1100
.
Ubuntu เป็นชื่อผู้ใช้ที่จำเป็นในการเข้าถึง IP ภายในโครงการ GNS3
หลังจากดำเนินการคำสั่งนี้ ฉันได้รับผลลัพธ์ต่อไปนี้บนเซิร์ฟเวอร์ GNS3 (1.2.3.4):
cloud@gns3:~$ connect_to 192.168.122.2 พอร์ต 1100: ล้มเหลว
ดูเหมือนว่าคำสั่ง SSH ของฉันกำลังเข้าถึงเซิร์ฟเวอร์ GNS3 และพยายามส่งต่อพอร์ต อย่างไรก็ตาม กำลังพยายามส่งต่อไปยังพอร์ต 1100 แทนที่จะเป็น 22 ด้วยเหตุผลบางประการ ใครสามารถระบุได้ว่าทำไม?
นี่คือสิ่งที่ฉันพยายามทำ:
- ตั้งค่าการส่งต่อพอร์ต ipv4 เป็น 1
- ตั้งค่า GatewayPorts และ AllowTcpForwarding เป็น 1 นิ้ว
- วิ่งบนเครื่องโลคัล (ฉันคิดว่าสิ่งนี้เปลี่ยนการกำหนดค่าบางอย่างบนเซิร์ฟเวอร์) -
ssh -R 1.2.3.4:1100:192.168.122.2:22 [email protected]
- เพิ่มกฎให้กับ IPtables โดยใช้คำสั่ง
sudo iptables --table nat --append PREROUTING --protocol tcp --destination 1.2.3.4 --dport 1100 --jump DNAT --to-destination 192.168.122.2:22
- เพิ่มการปลอมตัวด้วย:
sudo /sbin/iptables -t nat -A POSTROUTING -j MASQUERADE