Linux ส่งการเปลี่ยนเส้นทาง ICMP เสมอ


14

ฉันมี Debian Squeeze หลายตัว (6.0.6 ทันสมัย) ที่ใช้เป็นเราเตอร์
เมื่อลิงก์หยุดทำงานพวกเขาจะส่งการเปลี่ยนเส้นทาง ICMP ไปยังโฮสต์ในเครื่อง นี่คือพฤติกรรมเริ่มต้นของ Debian และอีกหลายคน ดังนั้นเมื่อลิงก์กลับมามีชีวิตโฮสต์จะไม่สามารถเข้าถึงได้จนกว่าจะรีบูต

ฉันไม่ต้องการให้มีการเปลี่ยนเส้นทาง ICMP จากเราเตอร์เหล่านั้น

ฉันทดสอบecho 0 > /proc/sys/net/ipv4/conf/all/send_redirectsและsysctl -w net.ipv4.conf.all.send_redirects=0ใส่net.ipv4.conf.all.send_redirects=0ลงใน/etc/sysctl.d/local.conf
โซลูชันเหล่านั้นทุกอันใส่ค่าที่ถูกต้อง/proc/sys/net/ipv4/conf/all/send_redirects

แต่ ...
เคอร์เนลส่งการเปลี่ยนเส้นทาง ICMP ไปเรื่อย ๆ แม้หลังจากรีบูต:

$ tcpdump -n -i eth0
00:56:17.186995 IP 192.168.0.254 > 192.168.0.100: ICMP redirect 10.10.13.102 to host 192.168.0.1, length 68

และตารางเส้นทางของโฮสต์ท้องถิ่น (คอมพิวเตอร์ Windows) จะปนเปื้อน

ฉันสามารถป้องกันสิ่งนี้ด้วย netfilter:
iptables -t mangle -A POSTROUTING -p icmp --icmp-type redirect -j DROP

มีความคิดเห็นใดเกี่ยวกับสาเหตุที่วิธีการปกติไม่ทำงาน
และจะป้องกันไม่ให้ส่ง ICMP redirect โดยไม่ใช้ netfilter ได้อย่างไร

คำตอบ:


14

คำสั่งที่ถูกต้องคือ: echo 0 | tee /proc/sys/net/ipv4/conf/*/send_redirects
เพราะคุณต้องมี 0 ใน 'ทั้งหมด' และ 'interface_name' เพื่อปิดการใช้งาน

ใน/etc/sysctl.confไฟล์ที่คล้ายกันคุณจะต้องตั้งค่า 'all' + 'default' (หรือ 'all' + 'interface' แต่ interface อาจไม่ได้อยู่แล้วเมื่อประมวลผลไฟล์นี้)


5
จุดของไดเรกทอรี "ทั้งหมด" คืออะไร? ฉันมีความประทับใจที่คลุมเครือมันจะเขียนทับค่าของรายการอื่น ๆ ทั้งหมดหรือไม่
Elrond

@Elrond allไม่เขียนทับมันเป็นการทำงานแบบ bitwise ดูคำตอบนี้เกี่ยวalldefaultกับ send_redirectsเป็นORพารามิเตอร์ดังนั้นการตั้งค่าall.send_redirectsเป็น 0 จะถูกส่งเสียงโดยการตั้งค่าของอินเทอร์เฟซ
Leif Arne Storset
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.