Linux는 항상 ICMP 리디렉션을 보냅니다.

Linux는 항상 ICMP 리디렉션을 보냅니다.

나는 라우터로 사용되는 여러 Debian Squeeze(최신 6.0.6)를 가지고 있습니다.
링크가 다운되면 ICMP 리디렉션을 로컬 호스트로 보냅니다. 이는 데비안과 다른 여러 버전의 기본 동작입니다. 따라서 링크가 다시 작동되면 재부팅될 때까지 호스트가 해당 링크에 액세스할 수 없습니다.

이 라우터에서 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

일반적인 접근 방식이 왜 작동하지 않는지 아시나요?
그리고 netfilter를 사용하지 않고 ICMP 리디렉션이 전송되는 것을 방지하는 방법은 무엇입니까?

답변1

올바른 명령은 다음과 같습니다. echo 0 | tee /proc/sys/net/ipv4/conf/*/send_redirects
비활성화하려면 "all" 및 "interface_name"에 0이 있어야 하기 때문입니다.

또는 이와 유사한 파일 에서는 /etc/sysctl.conf"모두" + "기본값"(또는 "모두" + "인터페이스"를 설정해야 하지만 이 파일을 처리할 때 인터페이스가 존재하지 않을 수 있음)을 설정해야 합니다.

관련 정보