首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我启用net.ipv4.ip_forward=1时到底会发生什么?

当我启用net.ipv4.ip_forward=1时到底会发生什么?
EN

Unix & Linux用户
提问于 2021-10-17 13:17:37
回答 2查看 8.5K关注 0票数 6

假设我编写了一个程序来毒害两个设备(例如A和B)的ARP缓存,这两个设备都位于本地网络中,可以从设备M成功地运行MITM。当我允许使用设备M上的sysctl net.ipv4.ip_forward=1命令进行IP转发时,可以建立从设备A到设备B的HTTP连接,并且能够看到设备M上的通信量。

但是,在我禁用设备M上的sysctl net.ipv4.ip_forward=0命令IP转发后,ARP缓存被毒害的情况一样,无法从设备A到设备B建立HTTP连接,我可以在我的程序中看到来自设备M的设备A的TCP数据包,在我的程序中接收到设备M上的SYN数据包后,我用M的MAC地址(从A的MAC地址)和dst的MAC地址(从M的MAC地址)修改数据包中的src MAC地址,并将其注入网络。我不修改从网络层开始的任何东西。我可以用新的src和TCPdump命令看到B处的数据包,这意味着数据包到达B,但是B不响应那个包,这我不明白为什么。

那么,问题是,ip_forward=1有什么特殊之处使这种MITM的情况起作用呢?澄清一下,所有的机器都是linux。在设备M上启用转发,我不需要修改数据包中的MAC地址。我只是下了毒然后一切都好起来了。

EN

回答 2

Unix & Linux用户

发布于 2021-11-20 10:38:55

M的内核接收到一个数据包,其目标IP地址表明它不是为M准备的,它将做什么?

ip_forward=0的时候,它想:“我不知道为什么这封信被寄给我,我也不在乎。它会被扔到垃圾桶里!”

对于ip_forward=1,“嗯,这不是给我的。但是我知道收件人在哪里,所以我会用正确的MAC地址重新发送它。”

换句话说,使用ip_forward=1,您不必修改MAC地址,因为内核为您做了它。

票数 5
EN

Unix & Linux用户

发布于 2021-11-17 14:52:52

当您毒害ARP缓存时,A和B开始向M发送数据报,该M具有M的MAC-入口,但分别具有B和A的IP地址。因此,这些数据报针对第2层(以太网)中的M,而指向第3层(IP)中的其他设备。为了将这些数据报发送到第3层,接收者(根据IP地址)M必须进行IP转发。

使用net.ipv4.ip_forward=0可以禁用IP转发,使用net.ipv4.ip_forward=1可以启用它。

为什么需要IP转发?

看看OSI模型。在那里你能找到

  • HTTP在第7层
  • TCP在第4层
  • 第三层IP
  • 第二层以太网

你的ARP中毒会影响到第二层。

如果没有ARP中毒,则将从A到B的HTTP消息包装成TCP流(指向端口80),该流与IP一起发送到B的IP地址。B的IP地址与B的以太网地址相关联,数据报直接从A到B(通过集线器或交换机),反之亦然。没有必要转发IP。

当您毒化A和B的ARP缓存以指向M时,会发生以下情况。从A到B的HTTP消息被包装成TCP流(指向端口80),该流与IP一起发送到B的IP地址。B的IP地址与M的以太网地址相关联,而流向M的数据报不是这些数据报的预定接收方。

为了使HTTP连接工作,M必须将IP数据报从A转发到B,反之亦然。这可能是通过上面设置的内核发生的,也可能是通过一个特殊的程序来侦听这些数据报并重新发送它们。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/673573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档