如何接受ICMP重定向?

如何接受ICMP重定向?

tcpdump显示我的网络中有一些 ICMP 重定向(KVM 虚拟机、桥接网络)。我决定仔细研究它们以及我的系统的行为方式和外观。我发现它没有按预期工作:

假设我在1.1.1.1和我ping 2.2.2.2

# ping 2.2.2.2
PING 2.2.2.2 (2.2.2.2) 56(84) bytes of data.
64 bytes from 2.2.2.2: icmp_seq=1 ttl=63 time=0.569 ms
From 4.4.4.4: icmp_seq=2 Redirect Host(New nexthop: 3.3.3.3)
64 bytes from 2.2.2.2: icmp_seq=2 ttl=63 time=0.690 ms
From 4.4.4.4: icmp_seq=3 Redirect Host(New nexthop: 3.3.3.3)

正如你所看到的,我得到了多个重定向到3.3.3.3看起来不错,但由于某种原因我的主人(1.1.1.1) 忽略它。

# sysctl -a|grep accept_redirects
net.ipv4.conf.all.accept_redirects = 1
net.ipv4.conf.default.accept_redirects = 1
net.ipv4.conf.eth0.accept_redirects = 1
net.ipv4.conf.lo.accept_redirects = 1

并且没有该新路线的条目ip route list并且ip route list cache为空。

内核版本是:

# uname -a
Linux foo.bar 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt20-1+deb8u3 (2016-01-17) x86_64 GNU/Linux

改变/proc/sys/net/ipv4/conf/*/accept_redirects价值观0|1networking restart甚至reboot没有效果。

我希望接受ICMP 重定向 - 有什么想法吗?

更新:

# ip -d route

unicast default via 4.4.4.4 dev eth0  proto boot  scope global 
unicast 1.1.1.0/24 dev eth0  proto kernel  scope link  src 1.1.1.1
unicast 4.4.4.4 dev eth0  proto boot  scope link 

答案1

发送 ICMP 重定向是为了定义到目的地的更好的路由/网关。

由于您必须拥有与路由的网关/出口位于同一网络中的 IP 地址,因此只有满足以下所有条件时,该路由才会插入路由表中:

  • accept_redirects设置为 1
  • 有问题的机器有一个接口,其地址属于网关网络
  • 它没有与目的路由在同一网络中的 IP 地址。

否则该路由将被丢弃。

我不会盲目接受重定向,因为欺骗性 ICMP 重定向存在已知的安全隐患。 ICMP 重定向还可能掩盖瞬时网络故障或网络设计错误。

什么是 ICMP 重定向?是否应该阻止它们?

答案2

添加到 Rui F Ribeiro 的答案:

您可能还必须禁用 secure_redirects,因为它现在默认为 1,并拒绝尚未属于现有网关之一的重定向目的地。

或者,如果您可以将目标 IP 添加为同一接口的第二个默认网关(也许具有较低的指标),那也应该可行。如果有人知道如何做到这一点,请发表评论。

相关内容