Firewall-Iptables-Linux : วิธีบังคับใช้พอร์ตต้นทางเดียวกันสำหรับแพ็กเก็ตขาออกทั้งหมด

ฉันกำลังพัฒนาแอปพลิเคชันด้วยภาษา tcl ที่ประกอบด้วยกระบวนการหลายอย่าง แต่ละกระบวนการจะต้องส่งข้อมูลโดยใช้ซ็อกเก็ต (IP, พอร์ต) ไปยังที่อยู่ IP ภายนอก ฉันควรใช้เฉพาะพอร์ต 5060 (เนื่องจากฉันกำลังจำลองเซิร์ฟเวอร์ SIP) ปัญหาคือมีเพียงเธรดเดียวเท่านั้นที่สามารถใช้พอร์ต 5060 ในแต่ละครั้งเมื่อใช้ซ็อกเก็ต (เธรดขนานที่ใช้พอร์ตต้นทางเดียวกันนั้นเป็นไปไม่ได้) ดังนั้นฉันจึงควรแก้ไขปัญหานี้ ฉันสงสัยว่าฉันสามารถใช้ linux iptables เพื่อเปลี่ยนพอร์ตต้นทางที่ใช้โดยแต่ละเธรดได้หรือไม่เมื่อหลายเธรดทำงานพร้อมกัน (แต่ละเธรดบนซ็อกเก็ตที่แตกต่างกัน) ==>แพ็กเก็ตที่ส่งทั้งหมดจากเครื่องนั้นมีพอร์ตต้นทางเดียวกัน 5060

ข้อเสนอแนะหรือข้อมูลใด ๆ ยินดีต้อนรับ (ฉันต้องการตัวอย่างที่เป็นรูปธรรมหากเป็นกรณีนี้) ขอบคุณล่วงหน้ามาก


person Abdelkarim Bezi    schedule 07.04.2016    source แหล่งที่มา
comment
IMHO คำถามนี้ตามที่เขียนอยู่นอกหัวข้อ แต่ FWIW ฉันไม่คิดว่ามีเหตุผลใด ๆ ที่คุณไม่ควรให้แต่ละเธรดใช้พอร์ตต้นทางเดียวกัน   -  person Alnitak    schedule 07.04.2016


คำตอบ (1)


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

เพื่อตอบคำถามที่ถาม... กฎ iptables นี้ควรเปลี่ยนเส้นทางแพ็กเก็ตขาออกทั้งหมดไปยังพอร์ตเฉพาะ

iptables -I OUTPUT -j REDIRECT --to-port 5060

หากคุณต้องการผูกสิ่งนี้กับอินเทอร์เฟซเฉพาะ

iptables -I OUTPUT -i eth0 -j REDIRECT --to-port 5060

หรือเฉพาะเมื่อพูดคุยกับจุดหมายปลายทางที่เฉพาะเจาะจงเท่านั้น

iptables -I OUTPUT -s www.xxx.yyy.zzz -j REDIRECT --to-port 5060
person Matt Clark    schedule 07.04.2016