Score:0

ทำไมการเปลี่ยนเส้นทางพอร์ตและ DNAT ไม่ทำงานกับ vxlan

ฉันต้องการสร้างการเชื่อมต่อ VXLAN ระหว่างคอมพิวเตอร์สองเครื่อง A (บน Debian ที่มี IP 192.168.30.1) และ B (บน archlinux ที่มี IP 192.168.30.3) สำหรับสิ่งนั้น ฉันได้:

  • บน:
  ลิงค์ sudo ip เพิ่ม vxlan1 ประเภท vxlan id 1 nolearning ระยะไกล 192.168.30.3 dstport 33333 dev ens4
  ลิงค์ sudo ip ตั้งค่า vxlan1 ขึ้น
  sudo ip addr เพิ่ม 10.0.0.106/24 dev vxlan1
  • บน B:
  ลิงค์ sudo ip เพิ่ม vxlan2 ประเภท vxlan id 1 nolearning ระยะไกล 111.111.111.111 dstport 33333 dev ens3
  ลิงค์ sudo ip ตั้งค่า vxlan2 ขึ้น
  sudo ip addr เพิ่ม 10.0.0.107/24 dev vxlan2

นอกจากนี้ บน PC B ฉันสร้างกฎ DNAT:

  sudo iptables -w -t nat -A OUTPUT -s 192.168.30.3 -d 111.111.111.111 -p udp --dport 33333 -j DNAT --to-destination 192.168.30.1:33333

จากนั้นฉันก็:

  • บนพีซี A: ปิง 10.0.0.107. สิ่งนี้ทำงานได้ตามที่คาดหวังด้วย ping ตอบกลับ
  • บนพีซี B: ปิง 10.0.0.106. สิ่งนี้ทำงานได้ตามที่คาดหวังด้วย ping ตอบกลับ
  • บนพีซี A: nc -u -lp 12345. บนพีซี B: nc -u 10.0.0.106 12345. ฉันคาดว่าจะอ่านข้อมูลบนแอปพลิเคชัน netcat บน PC A เมื่อส่งข้อมูลด้วยคำสั่ง netcat จาก PC B อย่างไรก็ตาม ฉันไม่ได้อ่านอะไรเลย.

ปัญหาของฉันอยู่ที่จุดสุดท้ายแล้ว ทำไมผู้ฟัง netcat ของฉันไม่ได้รับอะไรเลย เมื่อใช้ wireshark บนพีซี AI ฉันจะได้รับ:

[การถ่ายโอนข้อมูล wireshark บนพีซี A1

ข้อมูลเพิ่มเติมบางอย่าง

  • PC A ทำงานด้วย 'Linux debian 4.19.0-16-amd64 #1 SMP Debian 4.19.181-1 (2021-03-19) x86_64 GNU/Linux' (นี่คือผลลัพธ์ของ ชื่อ -a สั่งการ)

  • PC A IP บน ens4 คือ 192.168.30.1/24

  • PC B ทำงานด้วย 'Linux archlinux 5.13.9-arch1-1 #1 SMP PREEMPT อา. 08 ส.ค. 2564 11:25:35 +0000 x86_64 GNU/Linux' (นี่คือผลลัพธ์ของ ชื่อ -a สั่งการ)

  • PC B IP บน ens3 คือ 192.168.30.3/24

  • ทั้งสองเครื่องคือ Qemu VM ที่เริ่มต้นด้วย GNS3

  • ตาราง nat และตัวกรองของ netfilter บน PC A ว่างเปล่า:

seb@debian:~$ sudo iptables -t nat -L ; sudo iptables -t ตัวกรอง -L
ห่วงโซ่ PREROUTING (ยอมรับนโยบาย)
เป้าหมาย prot เลือกปลายทางต้นทาง         

เชนอินพุท (ยอมรับนโยบาย)
เป้าหมาย prot เลือกปลายทางต้นทาง         

ห่วงโซ่โพสต์ (ยอมรับนโยบาย)
เป้าหมาย prot เลือกปลายทางต้นทาง         

Chain OUTPUT (ยอมรับนโยบาย)
เป้าหมาย prot เลือกปลายทางต้นทาง         
เชนอินพุท (ยอมรับนโยบาย)
เป้าหมาย prot เลือกปลายทางต้นทาง         

ส่งต่อไปข้างหน้า (ยอมรับนโยบาย)
เป้าหมาย prot เลือกปลายทางต้นทาง         

Chain OUTPUT (ยอมรับนโยบาย)
เป้าหมาย prot เลือกปลายทางต้นทาง    
  • บน PC B ฉันมีเพียงกฎ DNAT และกฎที่จะปล่อยแพ็กเก็ต ICMP ประเภท 'พอร์ตที่ไม่สามารถเข้าถึงได้' (นี่เป็นกฎที่ฉันเพิ่มเพื่อจุดประสงค์อื่น):
[seb@archlinux vxlan]$ sudo iptables -t nat -L -n ; sudo iptables -t กรอง -L -n
ห่วงโซ่ PREROUTING (ยอมรับนโยบาย)
เป้าหมาย prot เลือกปลายทางต้นทาง         

เชนอินพุท (ยอมรับนโยบาย)
เป้าหมาย prot เลือกปลายทางต้นทาง         

Chain OUTPUT (ยอมรับนโยบาย)
เป้าหมาย prot เลือกปลายทางต้นทาง         
DNAT udp -- 192.168.30.3 111.111.111.111 udp dpt:33333 ถึง:192.168.30.1:33333

ห่วงโซ่โพสต์ (ยอมรับนโยบาย)
เป้าหมาย prot เลือกปลายทางต้นทาง         
เชนอินพุท (ยอมรับนโยบาย)
เป้าหมาย prot เลือกปลายทางต้นทาง         

ส่งต่อไปข้างหน้า (ยอมรับนโยบาย)
เป้าหมาย prot เลือกปลายทางต้นทาง         

Chain OUTPUT (ยอมรับนโยบาย)
เป้าหมาย prot เลือกปลายทางต้นทาง         
ดรอป icmp -- 0.0.0.0/0 0.0.0.0/0 icmptype 3
Michael Hampton avatar
cz flag
เหตุใดคุณจึงใช้ NAT ไม่ใช่การกำหนดเส้นทางปกติ
sebastien dontneedtoknowthat avatar
เหตุใดฉันจึงใช้ NAT แทนการกำหนดเส้นทางปกติไม่ได้ แน่นอน การใช้ NAT ที่นี่ไม่มีประโยชน์ แต่จริง ๆ แล้วคำถามของฉันเป็นเวอร์ชันที่เรียบง่ายของสิ่งที่ฉันต้องทำจริง ๆ และตำแหน่งที่ฉันต้องการ NAT โดยทั่วไป ในสถานการณ์ที่สมบูรณ์ คอมพิวเตอร์เครื่องหนึ่งของฉันอยู่เบื้องหลัง NAT (กล่องของ ISP ของฉัน) ดังนั้นคอมพิวเตอร์อีกเครื่องจึงไม่สามารถเข้าถึงเครื่องแรกได้โดยตรง และฉันไม่สามารถแก้ไขกฎ NAT ในกล่องได้ ดังนั้นฉันจึงกำลังแก้ไขปัญหานี้อยู่ สำหรับตอนนี้ ฉันประสบความสำเร็จในการทำให้ ping ทำงานโดยการเล่นกับจังหวะของกล่องคอนแทร็กของฉันเท่านั้น ในที่สุด ฉันต้องการใช้สิ่งนั้นเพื่อทำการรวมลิงก์
sebastien dontneedtoknowthat avatar
ฉันทราบดีว่าคำถามของฉันอาจเป็นวิธีดำเนินการเชื่อมต่อ VXLAN ระหว่างคอมพิวเตอร์สองเครื่อง A และ B ด้วยสองสมมติฐาน ประการแรก ทุกแพ็กเก็ตที่ส่งโดย A จะต้องผ่านเครื่อง NAT ที่เปลี่ยนข้อมูลต้นทางของแพ็กเก็ต ประการที่สอง ฉันไม่ต้องการแก้ไขเครื่องที่ทำ NAT (ดังนั้นฉันจึงไม่ต้องการเพิ่มกฎคงที่)อย่างไรก็ตาม ฉันยังสงสัยว่าเหตุใดการใช้ DNAT จึงใช้งานไม่ได้กับ VXLAN
A.B avatar
cl flag
A.B
แม้ว่าฉันจะไม่ได้รับมันในตอนแรก แต่ฉันได้รับปัญหา ลางสังหรณ์ดูเหมือนจะแก้ปัญหาได้: `ethtool --offload vxlan2 tx-checksum-ip-generic off` (และการเปิดอีกครั้งจะทำให้ปัญหากลับมา) ไม่มีคำอธิบายที่ดีจริงที่นี่
sebastien dontneedtoknowthat avatar
สิ่งนี้ใช้ได้กับฉันเช่นกัน ฉันไม่รู้จริง ๆ ว่าทำไมตั้งแต่ฉันไม่เห็นความแตกต่างระหว่างสองแพ็กเก็ตที่ส่งโดยมีและไม่มี tx-checksum-ip-generic แต่สำหรับตอนนี้ นี่คือคำตอบที่ดีที่สุดที่ฉันมี
A.B avatar
cl flag
A.B
หากคุณดูอย่างระมัดระวัง Wireshark บอกว่า *ไม่ได้* ตรวจสอบความถูกต้องของการตรวจสอบสำหรับโปรโตคอลที่ถูกห่อหุ้ม ฉันสามารถถือว่าเช็คซัมผิดและหากตรวจสอบแล้วก็จะแจ้งว่าเช็คซัมผิด

โพสต์คำตอบ

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