【问题标题】:Forwarding packets with any source address转发任何源地址的数据包
【发布时间】:2016-04-19 20:56:30
【问题描述】:

我有三台计算机:A、B 和 C。

我正在尝试通过 B 将数据包从 A 发送到 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")

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

【问题讨论】:

  • 真实网络还是虚拟网络?交换或混杂(集线器)。你回答 arp 吗?
  • 感谢您参与我的问题。详情请按我的回答。

标签: networking iptables scapy


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    • 2020-02-06
    相关资源
    最近更新 更多