Score:1

ป้องกันการกำหนดเส้นทางการรับส่งข้อมูล DHCP

ธง ng

อันดับแรก ฉันทราบว่ามีการถามคำถามที่คล้ายกันกับฉันที่อื่น (ฉันได้อ่านโพสต์เหล่านั้นมามากแล้ว!) แต่ฉันไม่สามารถหาวิธีแก้ไขปัญหาของฉันได้ ดังนั้นฉันจึงขอความช่วยเหลือ

การตั้งค่าของฉัน

ฉันมีสองเครือข่ายบน LAN ของฉัน 192.168.0.0/24 และ 10.11.12.0/24 อันแรกมี DHCP ที่ทำงานบนเราเตอร์ WAN ของฉัน ส่วนอันหลังรัน dnsmasq บน Ubuntu Server 20.04 ในกล่องที่ทำหน้าที่เป็นเราเตอร์ระหว่างซับเน็ตทั้งสอง ฉันได้กำหนดค่า dnsmasq ให้ให้บริการ DHCP บนเครือข่าย 10.11.12.0/24 เท่านั้นด้วยตัวเลือก no-dhcp-interface=wlp3s0 โดย wlp3s0 เป็นอินเทอร์เฟซในด้าน

สรุป:

WAN Router (เกตเวย์ไปยัง WAN) คือ 192.168.0.1/24
  เรียกใช้ DHCP สำหรับไคลเอนต์บน 192.168.0.0/24

เราเตอร์ (b/w subnets):
  Ubuntu Server 20.04 พร้อมสองอินเตอร์เฟส
    wlp3s0: 192.168.0.2/24 (IP แบบคงที่)
    eno1: 10.11.12.1/24 (IP แบบคงที่)

ฉันได้กำหนดค่า iptables เป็น FWD และ NAT แล้ว

iptables -t nat -A โพสต์ -o wlp3s0 -j ​​MASQUERADE  
iptables -A FORWARD -i wlp3s0 -o eno1 -m state --state RELATED,ESTABLISHED -j ยอมรับ  
iptables -A ไปข้างหน้า -i eno1 -o wlp3s0 -j ​​ยอมรับ

ฉันอนุญาต DHCP ผ่านไฟร์วอลล์ด้วย ufw อนุญาต 67/udp:

ถึงการดำเนินการจาก
-- ------ ----
67/udp อนุญาตในทุกที่

ทุกอย่างดูเหมือนจะทำงานได้ดี อย่างไรก็ตาม จากประสบการณ์ ฉันทราบว่าการเรียกใช้เซิร์ฟเวอร์ DHCP สองเซิร์ฟเวอร์ในลักษณะนี้อาจทำให้เกิดข้อขัดแย้งได้ เว้นแต่จะแยกออกจากกันอย่างเคร่งครัด (ไคลเอนต์ที่มีไว้สำหรับเครือข่าย 192.168.0.0/24 จะไม่พอใจถ้า DHCP ให้ที่อยู่ IP บนเครือข่าย 10.11.12.0/24!)

การค้นพบปัญหา

ดังนั้นฉันจึงทำสิ่งต่อไปนี้เพื่อทดสอบฉันตั้งค่าการฟัง tcpdump บนอินเทอร์เฟซ wlp3s0 (192.168.0.2) และใช้ nmap เพื่อจำลองคำขอ DHCP Discover ที่มาจากอินเทอร์เฟซ eno1 (10.11.12.1/24) เช่น:

sudo tcpdump -i wlp3s0 -n udp พอร์ต 67 หรือพอร์ต 68

sudo nmap --script Broadcast-dhcp-ค้นพบ -e eno1

ตามที่คาดไว้ ฉันได้รับข้อเสนอ DHCP จาก dnsmasq ที่ทำงานบน 10.11.12.1 จนถึงตอนนี้ดีมาก!

รายละเอียดบางอย่างถูกตัดออกจากเอาต์พุตเพื่อความกระชับ (เขากล่าว)

เริ่ม Nmap 7.80 ( https://nmap.org ) เวลา 12-2021-2021 16:19 UTC
ผลลัพธ์ของสคริปต์ล่วงหน้า:
| ออกอากาศ dhcp ค้นพบ:
| ตอบกลับ 1 จาก 1:
| IP ที่ให้บริการ: 10.11.12.53
| ประเภทข้อความ DHCP: DHCPOFFER
| ตัวระบุเซิร์ฟเวอร์: 10.11.12.1
| ที่อยู่ออกอากาศ: 10.11.12.255
| ซับเน็ตมาสก์: 255.255.255.0
| เซิร์ฟเวอร์ชื่อโดเมน: 10.11.12.1
|_ เราเตอร์: 10.11.12.1

อย่างไรก็ตาม tcpdump แสดงว่าเซิร์ฟเวอร์ DHCP ทั้งสองตอบสนองต่อคำขอค้นพบ (อันที่จริง เราเตอร์ WAN ของฉันส่งการตอบกลับ 2 ครั้ง!)

16:19:43.517029 IP 10.11.12.1.68 > 255.255.255.255.67: BOOTP/DHCP คำขอจาก de:ad:c0:de:ca:fe ความยาว 316
16:19:46.486227 IP 10.11.12.1.67 > 255.255.255.255.68: BOOTP/DHCP ตอบกลับ ความยาว 321
16:19:46.794207 IP 192.168.0.1.67 > 255.255.255.255.68: BOOTP/DHCP ตอบกลับ ความยาว 323
16:19:46.794207 IP 192.168.0.1.67 > 255.255.255.255.68: BOOTP/DHCP ตอบกลับ ความยาว 323

ดูเหมือนว่าคำขอค้นพบ DHCP จะถูกส่งต่อไปยังเครือข่าย 192.168.0.0/24 ผ่านอินเทอร์เฟซ wlp3s0 เมื่อดูกฎ iptables และไฟร์วอลล์ของฉัน ฉันไม่เห็นเหตุผลที่จะต้องแปลกใจกับสิ่งนี้ อย่างไรก็ตามสิ่งที่ฉันกำลังดิ้นรนจริงๆคือการหาวิธีป้องกัน

สิ่งที่ฉันได้ลอง

ฉันได้ลองใช้การเรียงสับเปลี่ยนกฎต่างๆ ทั้งใน ufw และ iptables แต่ไม่สำเร็จ อาจเป็นเพราะฉันไม่เข้าใจทั้ง iptables หรือ ufw อย่างถ่องแท้ ตัวอย่างบางส่วนของสิ่งที่ฉันพยายาม:

(กฎ ufw/iptables ทั้งหมดถูกเพิ่มที่ด้านบนสุดของชุดกฎ/เชนที่เกี่ยวข้องเพื่อให้แน่ใจว่ากฎเหล่านั้นถูกโจมตี)

ufw:

# จำกัด 67/udp ไว้ที่หนึ่งอินเทอร์เฟซ
ufw อนุญาตใน eno1 proto udp จาก 0.0.0.0/0 ถึง 0.0.0.0/0 พอร์ต 67

# ปฏิเสธการกำหนดเส้นทาง
เส้นทาง ufw ปฏิเสธใน eno1 ออกบน wlp3s0 ถึง 0.0.0.0/0 พอร์ต 67 proto udp

iptables:

# ป้องกันการส่งต่อพอร์ต UDP 67/68
iptables -I FORWARD 1 -p udp --match multiport --dports 67,68 -j DROP

# วางพอร์ต UDP ขาออก 67
iptables -I OUTPUT 1 -p udp --match multiport --dports 67,68 -o wlp3s0 -j ​​DROP

ฉันต้องขาดความเข้าใจพื้นฐานบางอย่างเกี่ยวกับวิธีการทำงาน เนื่องจากไม่มีสิ่งที่กล่าวมาข้างต้นที่ป้องกันไม่ให้เราเตอร์ WAN DHCP รับการค้นพบและเสนอ IP บนซับเน็ต 192.168.0.0/24

ฉันอ่านที่ไหนสักแห่งว่าเซิร์ฟเวอร์ DHCP อาจฟังบนซ็อกเก็ตดิบ (หรือแพ็คเก็ต?) ซึ่งไม่อยู่ภายใต้ iptables นั่นไม่ใช่กรณีของ dnsmasq ตามที่บันทึกไว้ที่นี่ https://github.com/imp/dnsmasq/blob/master/FAQ#L195. ฉันยังพิสูจน์ด้วยการลบกฎ allow 67/udp ใน ufw หลังจากนั้น dnsmasq จะหยุดตอบสนองต่อการค้นพบ DHCP อาจเป็นเรื่องที่น่าแปลกใจ (หรือไม่) แม้จะลบกฎการอนุญาตใน ufw แล้ว เราเตอร์ WAN ของฉันยังคงรับและตอบสนองต่อการค้นพบ DHCP อาจเป็นเพราะฉันมีกฎ iptables ที่กำหนดค่าให้ส่งต่อการรับส่งข้อมูลทั้งหมด แต่ไม่มีกฎ INPUT ที่เทียบเท่า (จนกว่าฉันจะเพิ่มกฎโดยใช้ ufw)

สิ่งที่ฉันต้องการบรรลุ

ฉันต้องการป้องกันไม่ให้ DHCP ค้นพบการออกอากาศบนเครือข่าย 10.11.12.0/24 ไม่ให้ไปถึงเครือข่าย 192.168.0.0/24

หากพิสูจน์ได้ยาก ฉันยินดีที่จะป้องกันไม่ให้ข้อเสนอ DHCP จากเราเตอร์ WAN เข้าถึงเครือข่าย 10.11.12.0/24

โปรดทราบว่าฉันไม่มีปัญหากับเครือข่าย 192.168.0.0/24 เนื่องจากฉันได้กำหนดค่า dnsmasq ไม่ให้เสนอ DHCP บนอินเทอร์เฟซ wlp3s0 (192.168.0.2) ดูเหมือนว่าจะใช้งานได้และ DHCP ค้นพบใน wlp3s0 (192.168.0.2/24) ไม่ได้รับการตอบกลับจาก dnsmasq

แล้วฉันพลาดอะไรไป? ฉันทำสิ่งนี้ผิดไปทั้งหมดหรือฉันแค่ทำไม่ถูก? ความช่วยเหลือใด ๆ ที่ชื่นชมมาก

สุขสันต์วันหยุด!

อัปเดต

ในการตอบคำถามในความคิดเห็นจาก @sleepyhead นี่คือการตั้งค่า iptables nat ของฉัน

เชน PREROUTING (นโยบายยอมรับแพ็กเก็ต 13452, 4312K ไบต์)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง

Chain INPUT (นโยบายยอมรับ 48 แพ็กเก็ต, 12715 ไบต์)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง

Chain OUTPUT (นโยบายยอมรับ 87 แพ็กเก็ต, 10884 ไบต์)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง

Chain POSTROUTING (นโยบายยอมรับ 55 แพ็กเก็ต, 8622 ไบต์)
 pkts bytes target prot เลือกใช้ปลายทางต้นทาง
   32 2262 สวมหน้ากากทั้งหมด -- * wlp3s0 0.0.0.0/0 0.0.0.0/0

อัปเดต 2

เป็นไปได้ไหมว่านี่เป็นสิ่งประดิษฐ์จากวิธีการทดสอบของฉัน สิ่งที่ทำให้ฉันสงสัยคือ IP ต้นทางของเอาต์พุต tcpdump เป็นไปได้ไหมที่การเรียกใช้ DHCP Discover บนอินเทอร์เฟซที่มี IP อยู่แล้วให้ผลลัพธ์ที่แตกต่างจากที่ไม่มี อย่างไรก็ตาม หากฉันสามารถปรับเปลี่ยน Raspberry Pis อันใดอันหนึ่งใหม่ได้ ฉันจะทำการทดสอบนี้โดยใช้ไคลเอนต์ DHCP และดูว่าฉันได้ผลลัพธ์เดียวกันหรือไม่ แม้ว่าฉันจะสงสัยว่าจะทำหรือไม่

ru flag
สิ่งที่คุณต้องทำคือปิดใช้งานเซิร์ฟเวอร์ DHCP ตัวใดตัวหนึ่งและใช้กลไกการถ่ายทอด DHCP เพื่อถ่ายทอด DHCP จากเครือข่ายหนึ่งไปยังอีกเครือข่ายหนึ่ง วิธีเดียวที่จะทำได้คือใช้ NATting แบบพิเศษซึ่งอาจเป็นปัญหาได้ หรือตั้งค่ารีเลย์ DHCP ในส่วนของเครือข่ายที่คุณ *ต้องการให้* ไม่มีเซิร์ฟเวอร์ DHCP และส่งต่อไปยังเซิร์ฟเวอร์ DHCP อื่น นี่คือวิธีการทำงานในโลกปกติเมื่อคุณมีเซิร์ฟเวอร์ DHCP บนซับเน็ตอื่นจากเครือข่ายที่คุณกำลังสร้าง DHCP ให้
sleepyhead avatar
in flag
การตอบกลับ 2 รายการที่คุณเห็นจากเราเตอร์ wan เป็นคำตอบเดียวกัน คุณเห็นขาเข้าและขาออก อย่างไรก็ตาม อินเทอร์เฟซของคุณดูเหมือนจะเชื่อมโยงกัน เนื่องจากการออกอากาศไปยัง 255.255.255.255 ไม่ควรข้ามขอบเขตเครือข่าย แต่คุณทำ หากคุณรักษาสะพาน คุณต้องใช้ไฟร์วอลล์ L2 ที่มี ebtables อย่าปล่อยให้การสนทนาเกี่ยวกับซ็อกเก็ตดิบทำให้คุณสับสน มันเป็นการอภิปรายเกี่ยวกับการใช้งานระหว่างระบบปฏิบัติการมากกว่าการอธิบายปัญหาของคุณ ``` ไอพีแอดเดรส brctl แสดง ``` สิ่งเหล่านี้จะแสดงสะพานเชื่อมระหว่างอินเทอร์เฟซ
ng flag
ขอบคุณที่ตอบกลับ แต่ตาม brctl แสดงว่าไม่มีบริดจ์ (ไม่มีเอาต์พุตจากคำสั่งนั้น)
ng flag
ฉันหวังว่าจะหลีกเลี่ยงสิ่งนั้น เหตุผลหลักของฉันสำหรับการมี DHCP รองคือการจัดเตรียมการบูต PXE บนเครือข่าย 10.11.12.0 นอกจากนี้ยังมีความยุ่งยากเพิ่มเติมที่อินเทอร์เฟซ wi-fi ในกล่องนั้นค่อนข้างไม่สม่ำเสมอ ดังนั้นฉันจึงไม่ต้องการพึ่งพามันเพื่อให้บริการ DHCP สำหรับเครือข่ายหลัก (192) ของฉัน กรณีที่เลวร้ายที่สุดฉันอาจสามารถหลีกเลี่ยงสิ่งที่ฉันมีได้เนื่องจากดูเหมือนว่าจะมีความล่าช้าเพียงพอระหว่างข้อเสนอ DHCP สองรายการที่ DHCP ที่ฉันต้องการมักจะชนะเสมอ (?) บนเครือข่าย 10.11.12.0 และเครือข่าย 192.168.0.0 ไม่ขัดแย้งกับการตั้งค่าของฉัน
sleepyhead avatar
in flag
หากไม่ใช่บริดจ์ ทราฟฟิกก็จะถูกแน็ท รวมถึงการออกอากาศด้วย นั่นจะไม่ลดลงเลย คุณช่วยโพสต์เอาต์พุต iptables ได้ไหม iptable -L v -n -t แนท
ng flag
ฉันได้เพิ่มผลลัพธ์ให้กับคำถามของฉันด้านบนแล้ว ขอบคุณ
Score:0
ธง ng

All sorted, @sleepyhead was onto something about the routing but the issue was much more mundane (or idiotic!) than bridged interfaces etc. There's a switch on the 10.11.12.0/24 network and it turns out I'd left a cable in it that was connected to one of my mesh routers! So there were in fact two routes out of the box to the 192.168.0.0/24 network, one via the wlp3s0 interface (correctly blocked in iptables) and another out via eno1, which obviously was open. This explains why I kept receiving responses from the WAN router and also, I think, why they were duplicated.

Well, blunders aside I hope this will be helpful to someone given how many questions are asked about DHCP and routing.

โพสต์คำตอบ

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