Linux IPv4 上下文中“send_redirect”的定义

Linux IPv4 上下文中“send_redirect”的定义

我在脚本中遇到了这两行:

echo "1" > /proc/sys/net/ipv4/ip_forward/
echo "0" > /proc/sys/net/ipv4/conf/eth0/send_redirects

第一行打开 IP 转发,这使我的机器像路由器一样运行。

但我想确切地了解第二行的作用。它send_redirects在界面上关闭eth0,但这是什么意思?send_redirect在这种情况下是什么?

答案1

'ip_forward' 用于启用 IPv4 的数据包转发。

仅当节点充当路由器时,才会启用“发送重定向”。也就是说,主机不应发送 ICMP 重定向消息。路由器使用它来通知主机有关特定目的地可用的更好路由路径。此后,主机更新路由缓存条目,并通过 ICMP 重定向消息建议的最佳路径/路由直接转发后续数据包。

然而,这种路由信息更新机制是有风险的,并且受到安全社区的关注,因为 ICMP 重定向可能被恶意软件/攻击者篡改/伪造,以重定向到他们想要的路径。

有关更多详细信息和条款,请参阅 RFC 1122(第 3.3.1 节和附录 A),例如“如果重定向消息指定的新网关地址不在重定向到达的同一连接(子)网络上,或者重定向的源不是指定目的地的当前第一跳网关,则应默默丢弃重定向消息”

答案2

当同一 LAN 上有多个路由器时,就会发生重定向。例如,假设我们有一个包含一台主机和两台路由器的网络。主机可能会将数据包发送到路由器 A,然后路由器 A 可能需要通过同一 LAN 将该数据包发送到路由器 B,因为它的路由表告诉它这样做。然后路由器 A 可以向主机发送重定向消息,告知它如果将数据包直接发送到路由器 B 到特定目的地会更有效率。

当您关闭时,send_redirect您的路由器将不会发送此类重定向消息。

相关内容