ฉันมี Debian 11 VM บนเครื่อง Windows มีอะแดปเตอร์เครือข่าย 3 ตัว หนึ่งคือภายนอก (WAN) หนึ่งภายใน (LAN) และอีกหนึ่งส่วนตัว (ทดลอง)

ฉันใช้กล่องนี้เป็นเราเตอร์ซึ่งในทางกลับกันจะใช้เราเตอร์ DSL ของฉันกลับผ่าน WAN NIC ซึ่งเชื่อมต่อกับกล่อง Hyper-V จริงๆ ทุกอย่างทำงานตามเส้นทางที่ชาญฉลาด

สิ่งที่ฉันพยายามบรรลุ และการอ่านบทความจำนวนมากล้มเหลวจนถึงตอนนี้ คือ ฉันกำลังพยายามสกัดกั้นพอร์ตเดียว (4444) เช่น ไปยังที่อยู่ IP อินเทอร์เน็ตสาธารณะเพียงแห่งเดียว และเปลี่ยนเส้นทางกลับไปที่เครื่องของฉัน แลน. ฟังดูง่าย และฉันแน่ใจว่าใช่ แต่ฉันใช้งานไม่ได้

เพื่อความชัดเจน นี่ไม่ใช่การพยายามเปิดเผยพอร์ตสาธารณะและกำหนดเส้นทางภายใน นี่คือการสกัดกั้นพอร์ตเดียว (แอปพลิเคชันที่เป็นปัญหาเชื่อมต่อกับหลายพอร์ต) ฉันต้องการให้การสื่อสารทั้งหมดไปที่เซิร์ฟเวอร์เป้าหมายตามปกติ แต่ฉันต้องการให้พอร์ตนี้ส่งไปยังเครื่องของฉันโดยตรง โดยที่ฉันมีเซิร์ฟเวอร์ซ็อกเก็ตที่กำหนดค่าไว้เพื่อจัดการกับการสื่อสาร

ฉันรู้ว่าคำตอบเกี่ยวข้องกับ iptables แต่ฉันไม่สามารถรับคำสั่งได้อย่างถูกต้อง เมื่อไหร่ก็ตามที่ฉันทำ

iptables -t nat -A OUTPUT -p tcp --dport 4444 -j DNAT --to-destination 10.0.0.111:4444

มันไม่ปรากฏในiptables -Lไฟล์. เปิดใช้งานการส่งต่อ ฉันได้ลองด้วย:

iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 4444 -j DNAT --to-destination 10.0.0.111:4444

ฉันยังนำไปใช้กับ eth0 ซึ่งเป็นเกตเวย์เริ่มต้น

eth0 - WAN สาธารณะ

eth1 - LAN

eth2 - กำลังทดลองกำหนด IP สาธารณะที่เป็นปัญหา แต่สกรูนี้กำหนดเส้นทางสำหรับพอร์ตทั้งหมดจึงเลิกใช้

answer

ความผิดฉันเอง. ฉันซ่อมมัน. ดูเหมือนว่าถ้าคุณปล่อยให้เรา-d <destination address>จากการกำหนดเส้นทางล่วงหน้าของคุณจะถูกละเว้น

ฉันยังเพิ่มกฎ SNAT เพื่อให้ดูเหมือนว่าแพ็กเก็ตที่ส่งคืนมาจาก IP สาธารณะ

งานเสร็จแล้ว หวังว่านี่จะช่วยใครซักคนในวันหนึ่ง