Score:4

Linux: ทำให้ทราฟฟิกจากโฮสต์เดียวกันดูเหมือนว่ามาจากที่อยู่ IP ที่แตกต่างกัน

ธง cn

ฉันกำลังใช้ไลบรารีไคลเอนต์ (https://github.com/Beckhoff/ADS) เพื่อเชื่อมต่อกับ PLC จากเครื่อง Linux ผ่าน TCP อย่างไรก็ตาม ไลบรารีสามารถทำการเชื่อมต่อเพียงครั้งเดียวระหว่าง IP ต้นทางและที่อยู่ IP ปลายทางของ PLC เป้าหมายของฉันคือการเชื่อมต่อกับ IP/PLC ระยะไกลกับไคลเอ็นต์หลายเครื่อง เช่น PLC ระยะไกลต้องสามารถแยกความแตกต่างของการเชื่อมต่อไคลเอ็นต์ตามที่อยู่ IP (ที่แตกต่างกัน) ของไคลเอ็นต์

ฉันหวังว่าจะทำสิ่งนี้ให้สำเร็จด้วยความฉลาด iptables กฎ; อีกทางหนึ่ง เนมสเปซเครือข่าย Linux อาจทำงานได้เช่นกัน

สำหรับ iptables เส้นทาง (เล่นสำนวน?) แผนของฉันคือกำหนดที่อยู่ IP หลายรายการให้กับ NIC เดียวกันบนเครื่อง Linuxเนื่องจากบริการระยะไกลรับฟังพอร์ตเดียว (48898) ฉันจึงไม่สามารถใช้พอร์ตปลายทางอื่นใน iptables กฎ. ดังนั้นฉันจึงคิดดังนี้:

PLC ระยะไกล: 192.168.1.10/24
Linux PC: 192.168.1.20/24 (ip addr เพิ่ม 192.168.1.20/24 dev enp2s0)
Linux PC: 192.168.1.21/24 (ip addr เพิ่ม 192.168.1.21/24 dev enp2s0)

  • Client-A เพียงเชื่อมต่อจาก 192.168.1.20 ถึง 192.168.1.10
  • Client-A เพียงเชื่อมต่อจาก 192.168.1.21 ถึง (เสมือน) 192.168.1.11

ด้วยการใช้ที่อยู่ IP "เสมือน" สำหรับ PLC ระยะไกล ฉันต้องการให้แยกแยะการเชื่อมต่อ TCP ได้ ดังนั้นฉันจึงรู้ว่าแพ็กเก็ตใดที่มาจากไคลเอ็นต์-A และแพ็กเก็ตใดที่มาจากไคลเอ็นต์-B ตอนนี้ฉันต้องทำบางอย่าง iptables มายากลตามเส้น:

  1. ขาออก: ถ้าที่อยู่ IP ปลายทาง == 192.168.1.11 1.1 -> เขียนใหม่ไปยังที่อยู่ IP ปลายทาง 192.168.1.10 1.1 -> เขียนใหม่/ตรวจสอบให้แน่ใจว่าที่อยู่ IP ต้นทางคือ 192.168.1.21

  2. ขาเข้า: ถ้าที่อยู่ IP ปลายทาง == 192.168.1.21 2.1 -> เขียนที่อยู่ IP ต้นทางใหม่เป็น 192.168.1.11 (IP เสมือนของ PLC ระยะไกล)

อาจเป็นไปได้ที่จะ "แท็ก" การเชื่อมต่อ TCP เพื่อให้แยกแยะได้ง่ายขึ้นว่าอันไหนอันไหน (ขั้นตอนที่ 2)

Score:5
ธง cl
A.B

สำหรับกรณีนี้ คอนแทรคNAT ของก็เพียงพอที่จะแก้ไข แท็ก และจัดการการรับส่งข้อมูลตอบกลับอย่างถูกต้องสำหรับการเชื่อมต่อ เราสามารถใช้ทั้ง DNAT และ SNAT และรวมการใช้งานเข้าด้วยกันหรือใช้ DNAT ผสมกันและเส้นทางที่เพียงพอ

ดีเอ็นเอท

เป้าหมายนี้ใช้ได้เฉพาะในตาราง nat ใน การเตรียมการ และ เอาต์พุต เชนและเชนที่ผู้ใช้กำหนดซึ่งเรียกจากเท่านั้น โซ่เหล่านั้น เป็นการระบุว่าที่อยู่ปลายทางของแพ็กเก็ต ควรแก้ไข (และแพ็กเก็ตในอนาคตทั้งหมดในการเชื่อมต่อนี้จะ เละเทะด้วย)และกฎควรยุติการตรวจสอบ [...]

สแนท

เป้าหมายนี้ใช้ได้เฉพาะในตาราง nat ใน โพสต์ และ ป้อนข้อมูล เชนและเชนที่ผู้ใช้กำหนดซึ่งเรียกจากสิ่งเหล่านั้นเท่านั้น ห่วงโซ่. ก็ระบุไว้ว่า ที่อยู่ต้นทางของแพ็กเก็ตควรเป็น แก้ไข (และแพ็กเก็ตในอนาคตทั้งหมดในการเชื่อมต่อนี้จะเป็น แหลกเหลว)และกฎควรยุติการตรวจสอบ [...]

iptables -t nat -A OUTPUT -d 192.168.1.11 -j DNAT --to-ปลายทาง 192.168.1.10
iptables -t nat -A OUTPUT -d 192.168.1.12 -j DNAT --to-ปลายทาง 192.168.1.10
iptables -t nat -A OUTPUT -d 192.168.1.13 -j DNAT --to-ปลายทาง 192.168.1.10
iptables -t nat -A OUTPUT -d 192.168.1.14 -j DNAT --to-ปลายทาง 192.168.1.10

ตั้งค่าที่อยู่แหล่งที่มาเพิ่มเติมบนไคลเอนต์:

ที่อยู่ IP เพิ่ม 192.168.1.21/24 dev enp2s0
ที่อยู่ IP เพิ่ม 192.168.1.22/24 dev enp2s0
ที่อยู่ IP เพิ่ม 192.168.1.23/24 dev enp2s0
ที่อยู่ IP เพิ่ม 192.168.1.24/24 dev enp2s0
  • และผูกการดำเนินการ SNAT อย่างมีเงื่อนไขกับ อักษรย่อ ที่อยู่ปลายทาง (ก่อนทำ DNAT) โดยใช้ตัวกรองที่เพียงพอกับ iptables' คอนแทรค จับคู่:

    iptables -t nat -A POSTROUTING -m conntrack --ctorigdst 192.168.1.11 -j SNAT --to-source 192.168.1.21
    iptables -t nat -A POSTROUTING -m conntrack --ctorigdst 192.168.1.12 -j SNAT --to-source 192.168.1.22
    iptables -t nat -A POSTROUTING -m conntrack --ctorigdst 192.168.1.13 -j SNAT --to-source 192.168.1.23
    iptables -t nat -A POSTROUTING -m conntrack --ctorigdst 192.168.1.14 -j SNAT --to-source 192.168.1.24
    
  • หรือแทนที่จะใช้ SNAT ซึ่งสะอาดกว่ามาก ให้ใช้เส้นทางที่บอกใบ้ที่อยู่ต้นทางโดยตรงสำหรับปลายทางแต่ละแห่ง (แม้ว่า nat/OUTPUT จะเปลี่ยนเส้นทาง ที่อยู่ต้นทางจะไม่เปลี่ยนแปลงอีกต่อไปเมื่อตั้งค่าแล้ว) ซึ่งจะทำให้ลูกค้าและ ss -tn พอร์ต == 48898 เพื่อทราบและแสดงที่อยู่ต้นทางที่ถูกต้องสิ่งนี้จะกลายเป็น:

    เส้นทาง ip เพิ่ม 192.168.1.11/32 dev enp2s0 src 192.168.1.21
    เส้นทาง ip เพิ่ม 192.168.1.12/32 dev enp2s0 src 192.168.1.22
    เส้นทาง ip เพิ่ม 192.168.1.13/32 dev enp2s0 src 192.168.1.23
    เส้นทาง ip เพิ่ม 192.168.1.14/32 dev enp2s0 src 192.168.1.24
    

จะต้องทำเช่นนี้: ทีละที่อยู่ (DNAT สามารถทำให้ง่ายขึ้น / แยกตัวประกอบ แต่ไม่ใช่ส่วนที่สองที่เกี่ยวข้องกับแหล่งที่มา)

การเชื่อมต่อกับของจริง 192.168.1.10 ที่อยู่ไม่เปลี่ยนแปลง

cn flag
ขอบคุณมาก @a-b - วิธีแก้ปัญหาและคำอธิบายที่ยอดเยี่ยม - ด้วยวิธีนี้ฉันจัดการเพื่อให้ทุกอย่างทำงานได้ !!

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา