Score:1

การเชื่อมต่อกับกล้องหลายตัวซึ่งแต่ละตัวทำหน้าที่เป็น WiFi Access Point

ธง id

ฉันมีกล้อง 7 ตัว แต่ละตัวทำหน้าที่เป็นจุดเข้าใช้งาน WiFi และฉันไม่สามารถเปลี่ยนการกำหนดค่าได้

Camera1 SSID: camera1, ผ่าน: 1234, มี IP แบบคงที่: 192.168.42.1 และเซิร์ฟเวอร์ DHCP ในตัว
Camera2 SSID: camera2, ผ่าน: 1234, มี IP แบบคงที่: 192.168.42.1 และเซิร์ฟเวอร์ DHCP ในตัว
..
Camera7 SSID: camera7, ผ่าน: 1234, มี IP แบบคงที่: 192.168.42.1 และเซิร์ฟเวอร์ DHCP ในตัว

จากโน้ตบุ๊ก windows ของฉัน โดยใช้อแด็ปเตอร์ WiFi ภายใน ฉันสามารถเชื่อมต่อกับ ssid ของ camera1 และรับวิดีโอได้ จากนั้นฉันต้องยกเลิกการเชื่อมต่อเชื่อมต่อกับ ssid ของ camera2 เพื่อรับวิดีโอจาก camera2 และคล้ายกับ 3,4..7

สิ่งที่ฉันต้องการ คือการได้รับวิดีโอจากพวกเขาทั้งหมดพร้อมกัน

สิ่งที่ฉันพยายาม: ฉันพยายามเสียบอะแดปเตอร์ USB WiFi 7 ตัวเข้ากับโน้ตบุ๊กของฉัน และอะแดปเตอร์แต่ละตัวกำหนดค่าให้เชื่อมต่อกล้องที่แตกต่างกัน ในกรณีนี้ windows จะแสดงอินเทอร์เฟซอีเทอร์เน็ต 7 แบบและแต่ละรายการได้รับ IP จากเซิร์ฟเวอร์ dhcp ของกล้องที่เกี่ยวข้อง แต่กล้องทั้งหมดใช้ IP เดียวกันคือ 192.168.42.1 เช่นเดียวกับที่ฉันได้เรียนรู้ว่า Windows รองรับอแด็ปเตอร์ WiFi USB หลายตัว แต่ไม่รองรับโดย MACOS

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

ขอบคุณ.

การทดสอบเพิ่มเติม: ฉันเชื่อว่าฉันใกล้จะหาทางออกได้แล้ว แต่ก็ยังต้องการความช่วยเหลือ ฉันใช้ Raspberry Pi 4 ซึ่งใช้งาน Ubuntu ได้ ฉันตั้งใจจะใช้เป็นเราเตอร์ โดยค่าเริ่มต้นฮาร์ดแวร์ PI มาพร้อมกับ 2 อินเทอร์เฟซอีเธอร์เน็ต

  1. eth0 -> การเชื่อมต่อสายเคเบิล 1Gbit
  2. wlan0 -> อินเทอร์เฟซ WiFi ในตัว

ฉันเสียบดองเกิล USB WiFi พิเศษสองตัว และตอนนี้ก็มีอินเทอร์เฟซอีเธอร์เน็ตอีกสองชื่อ wlxb8b7f16a0602 และ wlxb8b7f16a04cd. ดองเกิล USB WiFi แต่ละตัวเชื่อมต่อกับกล้องตัวอื่น ที่นี่คือ ifconfig เอาต์พุต:

pi@pi:~$ ifconfig -a
eth0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
        อีเธอร์ dc:a6:32:48:55:70 txqueuelen 1000 (อีเธอร์เน็ต)
        แพ็คเก็ต RX 0 ไบต์ 0 (0.0 B)
        ข้อผิดพลาด RX 0 หลุด 0 โอเวอร์รัน 0 เฟรม 0
        แพ็กเก็ต TX 0 ไบต์ 0 (0.0 B)
        ข้อผิดพลาด TX 0 หลุด 0 โอเวอร์รัน 0 พาหะ 0 ชนกัน 0

wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
        inet 192.168.0.205 netmask 255.255.255.0 ออกอากาศ 192.168.0.255
        inet6 fe80::2c43:aa7a:a4c8:47eb คำนำหน้า 64 scopeid 0x20<ลิงค์>
        inet6 2a02:aa14:c480:6c80:9deb:968e:785d:159c คำนำหน้าlen 64 scopeid 0x0<ทั่วโลก>
        inet6 2a02:aa14:c480:6c80:10b7:8a65:dce6:1f5c คำนำหน้าlen 64 scopeid 0x0<ทั่วโลก>
        อีเธอร์ dc:a6:32:48:55:71 txqueuelen 1000 (อีเธอร์เน็ต)
        แพ็คเก็ต RX 10535 ไบต์ 2218695 (2.2 MB)
        ข้อผิดพลาด RX 0 หลุด 0 โอเวอร์รัน 0 เฟรม 0
        แพ็กเก็ต TX 44536 ไบต์ 63167704 (63.1 MB)
        ข้อผิดพลาด TX 0 หลุด 0 โอเวอร์รัน 0 พาหะ 0 ชนกัน 0

wlxb8b7f16a0602: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
        inet 192.168.42.24 netmask 255.255.255.0 ออกอากาศ 192.168.42.255
        inet6 fe80::6523:f6cd:520b:ee0 คำนำหน้า 64 scopeid 0x20<link>
        อีเธอร์ b8:b7:f1:6a:06:02 txqueuelen 1,000 (อีเธอร์เน็ต)
        แพ็คเก็ต RX 9 ไบต์ 1495 (1.4 KB)
        ข้อผิดพลาด RX 0 หลุด 0 โอเวอร์รัน 0 เฟรม 0
        แพ็กเก็ต TX 47 ไบต์ 9334 (9.3 KB)
        ข้อผิดพลาด TX 0 หลุด 0 โอเวอร์รัน 0 พาหะ 0 ชนกัน 0

wlxb8b7f16a04cd: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
        inet 192.168.42.170 netmask 255.255.255.0 ออกอากาศ 192.168.42.255
        inet6 fe80::ad02:2e2e:cc11:c309 คำนำหน้า 64 scopeid 0x20<link>
        อีเธอร์ b8:b7:f1:6a:04:cd txqueuelen 1000 (อีเธอร์เน็ต)
        แพ็คเก็ต RX 60 ไบต์ 6531 (6.5 KB)
        ข้อผิดพลาด RX 0 หลุด 0 โอเวอร์รัน 0 เฟรม 0
        แพ็กเก็ต TX 130 ไบต์ 19353 (19.3 KB)
        ข้อผิดพลาด TX 0 หลุด 0 โอเวอร์รัน 0 พาหะ 0 ชนกัน 0

ในการกำหนดค่านี้

  • eth0 -> ไม่ได้เชื่อมต่อ
  • wlan0 -> เชื่อมต่อกับโมเด็มอินเทอร์เน็ตของฉัน (ใช้สำหรับ ssh ถึง pi เท่านั้น)
  • wlxb8b7f16a0602 -> เชื่อมต่อกับ Camera1
  • wlxb8b7f16a04cd -> เชื่อมต่อกับ Camera2

แม้ว่ากล้องแต่ละตัวจะมี IP เดียวกันคือ 192.168.42.1 เนื่องจากพวกมันเชื่อมต่อกับอินเทอร์เฟซที่แตกต่างกัน ฉันสามารถ ping ได้สำเร็จโดยใช้ -ฉัน พารามิเตอร์ด้านล่าง:

สำหรับ Camera1:

pi@pi:~$ ปิง -I wlxb8b7f16a0602 192.168.42.1
PING 192.168.42.1 (192.168.42.1) จาก 192.168.42.24 wlxb8b7f16a0602: 56(84) ไบต์ของข้อมูล
64 ไบต์จาก 192.168.42.1: icmp_seq=2 ttl=64 เวลา=3.77 ms

สำหรับ Camera2:

pi@pi:~$ ปิง -I wlxb8b7f16a04cd 192.168.42.1
PING 192.168.42.1 (192.168.42.1) จาก 192.168.42.170 wlxb8b7f16a04cd: ข้อมูล 56(84) ไบต์
64 ไบต์จาก 192.168.42.1: icmp_seq=2 ttl=64 เวลา=2.03 ms

จากตรงนี้ สมมติว่าฉันกำหนด IP แบบคงที่ให้กับอินเทอร์เฟซ eth0 ซึ่งก็คือ 192.168.42.250

ฉันต้องการส่งคำขอมาจาก

  • 192.168.42.250:443 ที่ eth0 ถึง 192.168.42.1:443 ที่ wlxb8b7f16a0602
  • 192.168.42.250:444 ที่ eth0 ถึง 192.168.42.1:443 ที่ wlxb8b7f16a04cd

ถ้าคุณช่วยฉันในประเด็นที่เหลือนี้ ฉันยอมรับคำตอบของคุณ

ถึง @A.B:

pi@pi:~$ iw phy phy0 |grep netns
        phy <ชื่อ> ตั้ง netns { <pid> | ชื่อ <ชื่อ> }
                    <nsname> - เปลี่ยนเนมสเปซเครือข่ายตามชื่อจาก /run/netns
                               หรือตามเส้นทางที่แน่นอน (man ip-netns)


pi@pi:~$ ll /sys/class/ieee80211
รวม 0
drwxr-xr-x 2 รูท รูท 0 พฤษภาคม 27 17:13 ./
drwxr-xr-x 78 รูท 0 1 ม.ค. 1970 ../
lrwxrwxrwx 1 รูทรูท 0 27 มิ.ย. 20:18 phy0 -> ../../devices/platform/soc/fe300000.mmcnr/mmc_host/mmc1/mmc1:0001/mmc1:0001:1/ieee80211/phy0/
lrwxrwxrwx 1 รูท root 0 เชียงใหม่ 27 17:13 phy1 -> ../../devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1 /1-1.2/1-1.2:1.0/ieee80211/phy1/
lrwxrwxrwx 1 รูท root 0 เชียงใหม่ 27 17:13 phy2 -> ../../devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1 /1-1.3/1-1.3:1.0/ieee80211/phy2/
Michael Hampton avatar
cz flag
คุณเคยคิดที่จะส่งคืนขยะเหล่านี้และซื้อโซลูชันกล้องที่เหมาะสมกว่านี้หรือไม่?
Mehmet Fide avatar
id flag
@MichaelHampton น่าเสียดายที่มันเป็นไปไม่ได้ ไม่มีเราเตอร์ชนิดใดที่สามารถเชื่อมต่อกับจุดเชื่อมต่อ wifi ที่แตกต่างกันในเวลาเดียวกันและรวมเข้าด้วยกันภายใต้เครือข่ายเดียว? ในทางทฤษฏีน่าจะทำได้
Ron Trunk avatar
in flag
@MehmetFide เป็นไปไม่ได้หากอุปกรณ์ทั้งหมดของคุณมีที่อยู่เดียวกัน ลองนึกภาพว่าถ้าเพื่อน/ครอบครัวของคุณทุกคนมีหมายเลขโทรศัพท์เดียวกัน
A.B avatar
cl flag
A.B
@RonTrunk ฉันจะบอกว่าเป็นไปได้ (อาจไม่ใช่ใน Windows) ด้วยการกำหนดเส้นทางนโยบาย (ด้วยอินเทอร์เฟซเป็นตัวเลือกแทนที่จะเป็นที่อยู่ IP) จากนั้นเป็นตัวอย่างบน Linux ที่มีโซน conntrack เพื่อแยกโฟลว์ที่ดูเหมือนกันใน NAT ที่ตามมา หรือด้วยเนมสเปซเครือข่าย + NAT แต่นั่นจะเป็นเรื่องที่น่าอึดอัดใจมากในการดำเนินการ
Ron Trunk avatar
in flag
@AB ฉันคิดว่าใครสามารถคิดฮาร์ดแวร์ / ซอฟต์แวร์ที่กำหนดเองขึ้นมาได้ทำทุกอย่างที่คุณต้องการ แต่ก็ไม่สามารถใช้งานได้จริง ฉันคิดว่าถ้าเมห์เม็ตมีความสามารถแบบนั้น เขาคงไม่ถามคำถามนี้
Mehmet Fide avatar
id flag
ตัวอย่างเช่น วิธีแก้ปัญหาใด ๆ ที่มีราสเบอร์รี่ 4 เป็นเราเตอร์ซึ่งทำงานบน Linux และต่อดองเกิล USB WiFi 7 ตัวไว้บนนั้นจะได้รับการพิจารณาเป็นพิเศษ มันจะต้องเป็นที่ยอมรับของฉันอย่างแน่นอน ด้วยการกำหนดค่า ฉันจะมีพอร์ตอีเธอร์เน็ต 1Gbit หนึ่งพอร์ตพร้อมสายเคเบิล (ที่สามารถไปที่ windows หรือ macos) และอแด็ปเตอร์ WiFi 7 ตัวที่เชื่อมต่อกับกล้องคนละตัว แต่การตั้งค่าเครือข่ายที่เหมาะสมสำหรับสิ่งนั้นคืออะไร
Mehmet Fide avatar
id flag
@A.B ฉันใช้คำว่า "กล้อง" เพราะฉันพบว่ามันง่ายกว่าที่จะอธิบายปัญหาของฉันกับมัน ในความเป็นจริงมันเป็นอุปกรณ์ประกอบการวัดพิเศษที่สตรีมข้อมูลการวัดตามเวลาจริงผ่านพอร์ต 443ขออภัยด้วย :) แต่ความจริงก็คือเหมือนกัน ไม่สามารถกำหนดค่าได้ ผู้ผลิตไม่คิดว่าจะมีใครมาพยายามเชื่อมต่อโพรบหลายตัวจากพีซีหรือ MAC เครื่องเดียว
A.B avatar
cl flag
A.B
การใช้ระบบไร้สายไม่ได้ช่วยอะไรเพราะการตั้งค่าระบบไร้สายนั้นยุ่งยากกว่าอีเธอร์เน็ต โดยเฉพาะอย่างยิ่งเมื่อพิจารณาใช้เนมสเปซเครือข่าย คุณสามารถใช้ที่อยู่ IP แบบคงที่แทน DHCP เพื่อเชื่อมต่อกับ "กล้อง" ได้สำเร็จหรือไม่ หรือคุณสามารถกำหนดค่า wpa_supplicant ด้วยตนเองได้หรือไม่ คุณสามารถระบุการกำหนดค่า wpa_supplicant ที่เป็นผลลัพธ์สำหรับอุปกรณ์ทั้งสองของคุณได้หรือไม่ ขณะนี้มีกระบวนการ wpa_supplicant เดียวหรือสองกระบวนการ (หนึ่งรายการต่ออุปกรณ์)
A.B avatar
cl flag
A.B
คำตอบของ `iw phy phy0 |grep netns` รวมถึง `* set_wiphy_netns` และมีสองรายการใน /sys/class/ieee80211/ หรือไม่
A.B avatar
cl flag
A.B
ฉันอยากรู้อยากเห็นและใช้วิธีไม่ใช้เนมสเปซเครือข่าย เนมสเปซเครือข่ายควรได้รับการสนับสนุนและให้ผลลัพธ์ที่มีประสิทธิภาพมากกว่า แต่ฉันไม่เห็นวิธีสร้างคำตอบด้วยเนมสเปซโดยไม่ต้องถามคำถามประเภทที่ฉันถามไปแล้วด้านบนและอีกมากมาย
Score:3
ธง cl
A.B

การนำเสนอ

ปัญหานี้สามารถแก้ไขได้โดยใช้เนมสเปซของเครือข่าย ดังนั้นจึงแยกระบบ Pi เดี่ยวออกเป็นเราเตอร์ X ที่ทำ NAT นั่นคือสิ่งที่ควรทำ อนิจจาฉันไม่รู้วิธีเขียนคำตอบที่ไม่เพียงต้องรวมวิธีย้ายอินเทอร์เฟซ Wifi ไปยังเนมสเปซเครือข่ายใหม่ (ต้องใช้ไดรเวอร์ที่เข้ากันได้และ iw phy phyX ตั้งค่าเน็ต ... แทน ip link ตั้ง wlanX ... netns ...) แต่โดยเฉพาะอย่างยิ่ง ที่เกี่ยวข้องของพวกเขา wpa_supplicant และดีมอนไคลเอ็นต์ DHCP พร้อมการปรับแต่งการรวมระบบที่สอดคล้องกัน สิ่งนี้ต้องการความรู้ที่ดีเกี่ยวกับการกำหนดค่าระบบเฉพาะด้วยระบบไร้สายและ DHCP

คำตอบนี้หลีกเลี่ยงการใช้เนมสเปซเครือข่ายและหลีกเลี่ยงการกำหนดค่าการจัดการใหม่ wpa_supplicant และไคลเอ็นต์ DHCP: ใช้การกำหนดเส้นทางนโยบาย

เครื่องหมายที่เกี่ยวข้องในการกำหนดเส้นทางนโยบายเป็นสิ่งที่หลีกเลี่ยงไม่ได้สำหรับกรณีนี้ ซึ่งสแต็กการกำหนดเส้นทางจะเห็นเฉพาะพอร์ตปลายทาง 443 แทนที่จะเป็น 4431/4432 (DNAT เปลี่ยนไปก่อนหน้านี้แล้ว) เครื่องหมายจะเป็นผู้ใช้ในการตั้งค่าโซน conntrack (ตอบกลับ) เพื่อให้แน่ใจว่าจะจัดการกับกรณีที่กล้องหลายตัวกำหนดที่อยู่ IP เดียวกันให้กับอินเทอร์เฟซโฮสต์ที่ตรงกัน

การส่งต่อเส้นทางย้อนกลับที่เข้มงวด (SRPF) จะต้องเป็น ผ่อนคลาย ถึง RPF หลวม ในกรณีที่ตั้งค่า Strict เป็นค่าเริ่มต้น เนื่องจากการจัดการ ARP จะไม่ได้รับเครื่องหมายและอาจถูกบล็อกได้

เนื่องจากกล้องอาจไม่ได้ตั้งค่าเส้นทางเริ่มต้นไปยังไคลเอนต์ แต่อาจมีเพียงเส้นทาง LAN ดังนั้น NAT สองเท่า (ต้นทางและปลายทาง) จะถูกดำเนินการด้วย

ติดตั้ง

เนื่องจาก OP ไม่ได้จัดเตรียมไว้เลย eth0 การตั้งค่า ไม่มีที่นี่ คำตอบพยายามไม่ขึ้นอยู่กับสิ่งนี้มากเกินไป แต่ OP จะต้องปรับเปลี่ยนหากจำเป็น (โดยเฉพาะอย่างยิ่งหากอินเทอร์เฟซไร้สาย 7 รายการไม่ได้มีชื่อขึ้นต้นด้วย wlx).

มาปรับเป้าหมายกัน:

192.168.42.0/24 แสดงถึงเครือข่าย IP ที่ทับซ้อนกันหลายเครือข่ายที่ต้องไม่เข้าถึงโดยตรง เพื่อป้องกันไคลเอ็นต์ภายนอกจากความซับซ้อนในการกำหนดเส้นทางที่เป็นไปได้ทั้งหมด

ดังนั้นที่อยู่ 192.168.42.250 จะไม่ถูกใช้ ที่อยู่ที่มองเห็นได้ของ Pi 192.168.0.205 จะถูกใช้จากไคลเอนต์ระยะไกล

การเข้าถึง HTTPS ใด ๆ จะได้รับใบรับรองที่ไม่ถูกต้อง จัดการกับมัน: ฉันให้คำตอบตามการตั้งค่าเครือข่ายที่ปรับแต่ง แต่จะไม่รวมการตั้งค่าพร็อกซีย้อนกลับเพื่อซ่อนปัญหาใบรับรอง การเพิ่มพร็อกซีย้อนกลับนั้นต้องการการปรับแต่งเครือข่ายเพิ่มเติม (เพิ่มเป็นตัวเลือกในตอนท้าย) การทดสอบสามารถทำได้จากไคลเอนต์ (แต่ไม่ใช่ RPi) ด้วย:

ขด --ไม่ปลอดภัย https://192.168.0.205:4431/
ขด --ไม่ปลอดภัย https://192.168.0.205:4432/

นอกจากนี้ เพื่อแสดงตัวอย่างด้านล่าง ฉันใช้กรณีที่กล้องทั้งสองตัวกำหนดที่อยู่ IP เดียวกันให้กับโฮสต์ ดังนั้นมันจึงปรากฏบนสองอินเทอร์เฟซ เพื่อยกระดับมาตรฐาน มันไม่สำคัญ การตั้งค่าเหล่านี้ส่วนใหญ่ต้องทำหลังจากการเชื่อมต่อไร้สายเสร็จสิ้นแทนที่จะเป็นก่อนหน้านี้ ฉันจะไม่จัดการกับวิธีการรวมสิ่งนี้กับระบบปฏิบัติการ Linux เฉพาะที่จัดการ

คำสั่งทั้งหมดควรรันในฐานะรูท

ตัวอย่างขึ้นอยู่กับ:

# เส้นทางไอพี
เริ่มต้นผ่าน 192.168.0.1 dev wlan0 
192.168.0.0/24 dev wlan0 โปรโตเคอร์เนลขอบเขตลิงก์ src 192.168.0.205 
192.168.42.0/24 dev wlxb8b7f16a0602 โปรโตเคอร์เนลขอบเขตลิงก์ src 192.168.42.10 เมตริก 600 
192.168.42.0/24 dev wlxb8b7f16a04cd โปรโตเคอร์เนลขอบเขตลิงก์ src 192.168.42.10 เมตริก 600 

กฎการกำหนดเส้นทางเพื่อเลือกตารางเส้นทางเพิ่มเติมที่จะแยก LAN ของกล้องแต่ละตัวที่ซ้ำกันออกจาก LAN ของกล้องอื่น:

กฎ ip เพิ่ม fwmark 1 ค้นหา 4431
กฎ ip เพิ่ม fwmark 2 ค้นหา 4432

เส้นทาง ip เพิ่ม 192.168.42.0/24 dev wlxb8b7f16a0602 ตาราง 4431
เส้นทาง ip เพิ่ม 192.168.42.0/24 dev wlxb8b7f16a04cd ตาราง 4432

ซึ่งจะทำให้การกำหนดเส้นทางจากไคลเอ็นต์ไปยังกล้องทำงานได้ (หาก RPi ไม่มีเส้นทางเริ่มต้น ตัวอย่างด้านล่างที่ใช้ 192.0.2.2 เพื่อทดสอบเส้นทางอาจใช้ 192.168.0.101 แทน):

# เส้นทาง ip รับเครื่องหมาย 2 จาก 192.0.2.2 iif wlan0 192.168.42.1
192.168.42.1 จาก 192.0.2.2 dev wlxb8b7f16a04cd ตาราง 4432 เครื่องหมาย 2 
    แคช iif wlan0 

แต่ยังไม่ตอบกลับหากเปิดใช้งาน SRPF:

# เส้นทาง ip รับเครื่องหมาย 2 จาก 192.168.42.1 iif wlxb8b7f16a04cd 192.0.2.2
คำตอบ RTNETLINK: ลิงก์ข้ามอุปกรณ์ไม่ถูกต้อง

ดังนั้น เกือบจะไม่มีเอกสารธง จะต้องตั้งค่าบนอินเทอร์เฟซของกล้อง:

sysctl -w net.ipv4.conf.wlxb8b7f16a0602.src_valid_mark=1
sysctl -w net.ipv4.conf.wlxb8b7f16a04cd.src_valid_mark=1

ที่จะได้รับตอนนี้:

# เส้นทาง ip รับเครื่องหมาย 2 จาก 192.168.42.1 iif wlxb8b7f16a04cd 192.0.2.2
192.0.2.2 จาก 192.168.42.1 ผ่าน 192.168.0.1 dev wlan0 เครื่องหมาย 2 
    แคช iif wlxb8b7f16a04cd 

แต่ที่จริงแล้ว ถึงอย่างไร ARP (จากกล้องไปยังโฮสต์) ยังคงหยุดชะงักเมื่อตั้งค่า SRPF เนื่องจาก ARP ไม่ได้รับเครื่องหมายของ iptables

ดังนั้นเพียงแค่ใช้ Loose RPF (rp_filter=2) แทน (แล้วการตั้งค่าสำหรับ src_valid_mark ด้านบนไม่จำเป็นอีกต่อไป) เพื่อแก้ปัญหา ใช้งานได้ไม่ว่าจะปิดใช้งาน RPF หรือตั้งค่าเข้มงวดก่อน:

sysctl -w net.ipv4.conf.wlxb8b7f16a0602.rp_filter=2
sysctl -w net.ipv4.conf.wlxb8b7f16a04cd.rp_filter=2

เพิ่มเครื่องหมายการตั้งค่ากฎ iptables เพื่อให้ส่วนการกำหนดเส้นทางเสร็จสมบูรณ์ ตลอดจนจัดการกับที่อยู่ที่ขัดแย้งกันใน NAT ในภายหลังโดยการตั้งค่าตัวเลือกโซนตอบกลับ

iptables -t raw -A PREROUTING ! -i wlx+ -p tcp --dport 4431 -j MARK --set-mark 1
iptables -t raw -A PREROUTING -i wlxb8b7f16a0602 -j MARK --set-mark 1
iptables -t raw -A PREROUTING -m เครื่องหมาย --mark 1 -j CT --zone-reply 1

iptables -t raw -A PREROUTING ! -i wlx+ -p tcp --dport 4432 -j MARK --set-mark 2
iptables -t raw -A PREROUTING -i wlxb8b7f16a04cd -j MARK --set-mark 2
iptables -t raw -A PREROUTING -m เครื่องหมาย --mark 2 -j CT --zone-reply 2

เพิ่มกฎเหล่านั้นใน NAT ไปยัง IP เป้าหมายและพอร์ต (ซึ่งเหมือนกันเสมอ) จากนั้นอินเทอร์เฟซที่ถูกต้องจะถูกเลือกโดยสแต็กการกำหนดเส้นทางด้วยการตั้งค่าก่อนหน้านี้:

iptables -t nat -A PREROUTING ! -i wlx+ -p tcp -m เครื่องหมาย ! --mark 0 -j DNAT --to-ปลายทาง 192.168.42.1:443
iptables -t nat -A โพสต์ -o wlx+ -j MASQUERADE

ควรเพิ่มอินเทอร์เฟซที่ 3 ที่เรียกว่า wlx3 ต่อไปนี้เป็นขั้นตอน สามารถสรุปได้ในลักษณะเดียวกันเพิ่มเติม:

เพิ่มกฎ ip ใหม่ที่เลือกด้วยเครื่องหมายใหม่ (3) ที่จะใช้ตารางเส้นทางใหม่ (4433):

กฎ ip เพิ่ม fwmark 3 ค้นหา 4433

เพิ่มตารางเส้นทางใหม่ที่ตรงกับรายการที่ซ้ำกันไม่มากก็น้อยจากเส้นทางของ LAN ตารางหลักสำหรับอินเทอร์เฟซใหม่:

เส้นทาง ip เพิ่ม 192.168.42.0/24 dev wlx3 ตาราง 4433

คลาย RPF บนอินเทอร์เฟซนี้หากค่าเริ่มต้นของ OS คือ SRPF (ตามที่บอก src_valid_mark ไม่จำเป็นในตอนท้าย):

sysctl -w net.ipv4.conf.wlx3.rp_filter=2

เลือกพอร์ตใหม่ (4433) และเพิ่ม 3 ใหม่ raw/PREROUTING iptables กฎที่รวมถึงพอร์ตใหม่ เครื่องหมายใหม่ และอินเทอร์เฟซใหม่:

iptables -t raw -A PREROUTING ! -i wlx+ -p tcp --dport 4433 -j MARK --set-mark 3
iptables -t raw -A PREROUTING -i wlx3 -j MARK --set-mark 3
iptables -t raw -A PREROUTING -m เครื่องหมาย --mark 3 -j CT --zone-reply 3

(หากชื่ออินเทอร์เฟซใหม่ไม่ได้ขึ้นต้นด้วย wlx เพิ่มใหม่ แนท ตามกฎ)

นี่คือตัวอย่างของ คอนแทรค การจัดการเมื่อไคลเอ็นต์เชื่อมต่อสองครั้ง แม้จะใช้พอร์ตต้นทางเดียวกันกับพอร์ตทั้งสองในขณะที่ RPi ได้รับที่อยู่ IP เดียวกันมากซึ่งกำหนดให้กับอินเทอร์เฟซไร้สาย wlx ทั้งสอง เดอะ คอนแทรค โซนรวมอยู่ในการเลือกโฟลว์และอนุญาตให้จัดการ NAT ได้อย่างถูกต้องแม้ว่าด้านใดด้านหนึ่งของโฟลว์จะเห็นที่อยู่และพอร์ตเดียวกันทุกประการ:

# conntrack -E
    [ใหม่] tcp 6 120 SYN_SENT src=192.168.0.101 dst=192.168.0.205 sport=6666 dport=4431 [ไม่ได้ตอบ] src=192.168.42.1 dst=192.168.42.10 sport=443 dport=6666 zone-reply=10
 [อัพเดท] tcp 6 60 SYN_RECV src=192.168.0.101 dst=192.168.0.205 sport=6666 dport=4431 src=192.168.42.1 dst=192.168.42.10 sport=443 dport=6666 zone-reply=1
 [อัพเดท] tcp 6 432000 ESTABLISHED src=192.168.0.101 dst=192.168.0.205 sport=6666 dport=4431 src=192.168.42.1 dst=192.168.42.10 sport=443 dport=6666 zone-reply=1 [มั่นใจ]
    [ใหม่] tcp 6 120 SYN_SENT src=192.168.0.101 dst=192.168.0.205 sport=6666 dport=4432 [ไม่ได้ตอบ] src=192.168.42.1 dst=192.168.42.10 sport=443 dport=6662 zone-reply=
 [อัพเดท] tcp 6 60 SYN_RECV src=192.168.0.101 dst=192.168.0.205 sport=6666 dport=4432 src=192.168.42.1 dst=192.168.42.10 sport=443 dport=6666 zone-reply=2
 [อัพเดท] tcp 6 432000 ESTABLISHED src=192.168.0.101 dst=192.168.0.205 sport=6666 dport=4432 src=192.168.42.1 dst=192.168.42.10 sport=443 dport=6666 zone-reply=2 [มั่นใจ]

เบ็ดเตล็ด

  • อื่น ๆ 1

    เพื่อให้กล้องสามารถ ping โฮสต์หรือรับข้อผิดพลาด ICMP จากโฮสต์ได้ จะต้องเพิ่มการตั้งค่านี้ (ส่วนกลาง):

    sysctl -w net.ipv4.fwmark_reflect=1
    

    มิฉะนั้นคำตอบ ICMP จะไม่เป็นไปตามการกำหนดเส้นทางนโยบาย วิธีอื่นที่ดีกว่าคือการใช้ คอนมาร์ค/คอนมาร์คแต่จะทำให้คำตอบซับซ้อนขึ้นโดยไม่จำเป็น

  • อื่นๆ 2

    ผลลัพธ์การทำงานไม่สามารถทดสอบได้อย่างถูกต้องจาก RPi เอง แต่จากไคลเอนต์บน LAN เท่านั้น (หรือบนอินเทอร์เน็ตด้วยการสนับสนุนจากเราเตอร์ของ RPi) การตั้งค่าเฉพาะสำหรับกรณีการกำหนดเส้นทาง

    เป็นทางเลือกเพื่อให้โฮสต์สามารถทำงานได้ (และอนุญาตให้ใส่พร็อกซีย้อนกลับ) สามารถเพิ่มการตั้งค่าเพิ่มเติมเหล่านี้ได้:

    เลือกอินเทอร์เฟซที่ถูกต้องก่อนที่ NAT จะเกิดขึ้น (ต้องการเคอร์เนล >= 4.17) มิฉะนั้นซ็อกเก็ตจะเลือกที่อยู่ต้นทางที่ไม่ถูกต้อง (ของอินเทอร์เฟซอื่น) ในภายหลัง:

    กฎ ip เพิ่ม iif lo ipproto tcp dport 4431 ค้นหา 4431
    กฎ ip เพิ่ม iif lo ipproto tcp dport 4432 ค้นหา 4432
    

    ปลายทางจะต้องมี DNATed ใน nat/OUTPUT ไม่ต้องการชื่อ wlx ที่แน่นอนที่นี่ เส้นทางขาออกที่ถูกต้องได้รับการเลือกแล้วโดยสแต็กการจัดเส้นทางพร้อมกฎการกำหนดเส้นทางใหม่ (การตอบกลับยังคงต้องการส่วนหนึ่งของกฎ iptables raw/PREROUTING จากคำตอบหลัก) และ ก คอนแทรค โซนตอบกลับยังจำเป็นใน raw/OUTPUT เพื่อจัดการกับกรณีการปะทะกันที่หายาก

    iptables -t raw -A OUTPUT -o wlx+ -p tcp --dport 4431 -j MARK --set-mark 1
    iptables -t raw -A OUTPUT -m เครื่องหมาย --mark 1 -j CT --zone-reply 1
    
    iptables -t raw -A OUTPUT -o wlx+ -p tcp --dport 4432 -j MARK --set-mark 2
    iptables -t raw -A OUTPUT -m เครื่องหมาย --mark 2 -j CT --zone-reply 2
    
    iptables -t nat -A OUTPUT -p tcp -m เครื่องหมาย ! --mark 0 -j DNAT --to-ปลายทาง :443
    

    การทดสอบในกรณีนี้ควรทำจาก RPi ด้วย:

    ขด --ไม่ปลอดภัย https://192.168.42.1:4431/
    ขด --ไม่ปลอดภัย https://192.168.42.1:4432/
    
  • เบ็ดเตล็ด 3

    การตั้งค่าใน เบ็ดเตล็ด 2 หากปรับให้เหมาะกับการจัดการ UDP ในเครื่องสำหรับกรณีที่แตกต่างจาก OP อาจไม่เพียงพอสำหรับบางกรณี: UDP ต้องการการสนับสนุนจากแอปพลิเคชันในเครื่องเสมอเมื่ออยู่ในสภาพแวดล้อมแบบหลายบ้าน

Score:1
ธง id

ฉันคิดไม่ออกว่าจะทำอย่างไรกับ iptables แต่ฉันแก้ปัญหาโดยใช้ โซแคท ทำงานได้ดีสำหรับฉัน:

sudo socat TCP-LISTEN:443,interface=eth0,FORK TCP:192.168.42.1:443,interface=wlxb8b7f16a0602
sudo socat TCP-LISTEN:444,interface=eth0,FORK TCP:192.168.42.1:443,interface=wlxb8b7f16a04cd

คำขอทั้งหมดมาที่พอร์ต 443 ที่ eth0 อินเทอร์เฟซจะถูกเปลี่ยนเส้นทางไปที่ 192.168.42.1:443 ที่ wlxb8b7f16a0602 อินเตอร์เฟซ.

และในทำนองเดียวกันคำขอก็มาถึงพอร์ต 444 ที่ eth0 อินเทอร์เฟซจะถูกเปลี่ยนเส้นทางไปที่ 192.168.42.1:443 ที่ wlxb8b7f16a04cd อินเตอร์เฟซ.

A.B avatar
cl flag
A.B
ดูง่ายกว่าด้วยเครื่องมือที่สามารถเชื่อมโยงกับอินเทอร์เฟซ

โพสต์คำตอบ

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