我有三台电脑:A,B和C.
我正在尝试将A上的数据包从B发送到C.为此,我将B配置为A和C的默认网关作为B的默认网关。在B上,我激活了数据包转发(sysctl -w net.ipv4.ip_forward=1
)和配置iptables' FORWARD政策到"接受"。
如果我使用scapy从A发送数据包(MAC地址是连接到A的Bs接口的地址):
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")
。
我错过了什么吗?任何意见都非常欢迎!
答案 0 :(得分:0)
一些离线帮助为我提供了解决此问题的线索:关键字为Reverse Path Forwarding:这是一项有助于防范IP欺骗的功能。如果内核获取网络数据包,它会检查它是否可以通过数据包到达的接口到达数据包的源IP。如果不是这种情况,则丢弃数据包。
根据操作系统的不同,可能启用也可能不启用。请参阅cat /proc/sys/net/ipv4/conf/eth0/rp_filter
的输出:0表示没有反向路径转发。