转发具有任何源地址的数据包

Forwarding packets with any source address

我有三台电脑:A、B、C。

我正在尝试通过 B 从 A 向 C 发送数据包。为此,我将 B 配置为 A 的默认网关,将 C 配置为 B 的默认网关。在 B 上,我激活了数据包转发(sysctl -w net.ipv4.ip_forward=1) 并将 iptables 的 FORWARD 策略配置为 "ACCEPT".

如果我像这样使用scapy从A发送数据包(MAC-Address是Bs接口连接到A的地址): sendp(Ether(dst="e8:39:35:0f:13:09")/IP(dst="12.34.56.78"), iface="eth2"),C 上的 tcpdump 显示数据包已到达。

但是一旦我将源地址添加到从 A 发送的数据包中,转发似乎不再起作用 - 没有数据包到达 C:sendp(Ether(dst="e8:39:35:0f:13:09")/IP(src="1.2.3.4",dst="12.34.56.78"), iface="eth2")

我错过了什么吗?非常欢迎任何意见!

一些离线帮助给了我解决这个问题的线索:关键字是Reverse Path Forwarding:这是一个帮助防止IP欺骗的功能。如果内核收到网络数据包,它会检查它是否可以通过数据包到达的接口到达数据包的源 IP。如果不是这种情况,则丢弃数据包。

根据 OS,这可能启用也可能不启用。查看cat /proc/sys/net/ipv4/conf/eth0/rp_filter的输出:0表示没有反向路径转发。