ตกลงนี่เป็นวิธีแก้ปัญหา ก่อนสรุป:
นี่คือแผนเครือข่ายพื้นฐานของฉัน:
eth0 10.10.10.2 netmask 255.255.255.248
eth1 10.10.10.3 netmask 255.255.255.248
eth2 10.10.10.4 netmask 255.255.255.248
eth3 10.10.10.5 netmask 255.255.255.248
อินเตอร์เฟสทั้งหมดทับซ้อนกัน นี่เป็นเทคนิคที่ผิดและแหล่งที่มาของความทุกข์ทั้งหมดของฉัน ... แต่ฉันต้องทำเพราะประตูที่อยู่อาศัยที่โง่นี้
ก่อนอื่นให้ส่งคำขอ ARP ออกอากาศไปที่สิ่งเหล่านี้ เนื่องจาก IP ทั้งหมด 4 รายการเป็นที่อยู่ภายในเครื่องที่ถูกต้องทั้ง 4 อินเตอร์เฟสจะพยายามตอบกลับ
1) ติดตั้งarptables เพิ่มสถานที่แห่งนี้ในระหว่างการบู๊ต ( /etc/rc.localที่นี่):
arptables -F INPUT
arptables -A INPUT -i eth0 --destination-ip ! 10.10.10.2 -j DROP
arptables -A INPUT -i eth1 --destination-ip ! 10.10.10.3 -j DROP
arptables -A INPUT -i eth2 --destination-ip ! 10.10.10.4 -j DROP
arptables -A INPUT -i eth3 --destination-ip ! 10.10.10.5 -j DROP
การทำเช่นนี้จะช่วยป้องกันไม่ให้มีการออกอากาศไปยังส่วนต่อประสานที่ไม่ถูกต้อง ดังนั้นอินเทอร์เฟซที่ถูกต้องจะเป็นเพียงการตอบกลับเท่านั้น
ว่าด้วยตัวเองไม่เพียงพอ บิตถัดไปเป็นปัญหาตาราง ARP พีซีที่ร้องขออาจมีรายการตาราง ARP อยู่แล้วดังนั้น Linux จึงจะใช้ส่วนต่อประสานที่เกี่ยวข้อง จนกว่ารายการตาราง ARP นั้นจะหมดอายุมันจะพยายามส่งการตอบกลับ ARP โดยใช้อินเตอร์เฟสของรายการนั้นไม่ใช่รายการที่เกี่ยวข้องกับคำขอ ARP
ตัวเลือก sysctl rp_filterดูเหมือนจะปฏิเสธแพ็กเก็ตตอบกลับ ARP ขาออกหากอยู่ในอินเตอร์เฟสที่ไม่ถูกต้อง ดังนั้น...
2) ปิดการใช้งานrp_filter
บน Debian / Ubuntu, ที่นี้หมายถึงการแสดงความคิดเห็นออกมาทั้งสองrp_filterเส้นใน/etc/sysctl.d/10-network-security.conf
ตัวเลือกนี้ถูกเปิดใช้งานด้วยเหตุผล ... คือเพื่อช่วยป้องกันการโจมตีการปลอมแปลงอินเทอร์เฟซ ฉันอ่านมันตรวจสอบว่าแพ็คเก็ตนั้นถูกกฎหมายสำหรับอินเทอร์เฟซที่กำลังจะเข้าหรือออกไป (โดยการสลับ MAC และ IP และดูว่ามันยังคงเส้นทางผ่านอินเตอร์เฟซเดียวกัน) ดังนั้นโดยปกติจะเป็นการดีหากปิดเครื่อง ในกรณีของฉันอินเตอร์เฟสทั้งหมดอยู่ในเครือข่ายเดียวกัน ... ดังนั้นการตรวจสอบจึงไม่สำคัญเลย
ถ้าฉันจะเพิ่มอินเตอร์เฟซที่อื่นและต้องป้องกันการปลอมแปลงที่อาจจะสามารถฝีมือบางarptables / iptablesรายการที่จะทำในสิ่งเดียวกัน