调试数据包接收后消失

调试数据包接收后消失

我将尽力使这个解释尽可能简单,这让我陷入困境,因为我已经排除了我能想到的所有选项。

有两位主持人,我们称他们为 Alice 和 Bob。

  • 在 Alice 上,10.242.0.1/32 被分配给 lo,在 Bob 上,10.242.0.2/32 被分配给 lo。
  • Alice 和 Bob 之间有一条 gre 隧道,提供 10.242.0.101/32 到 10.242.0.102/32 的点对点,我们将a_b_gre在两侧调用此接口。
  • 此外,Alice 将 IP 地址 10.242.1.1/24 分配给网桥。

以 Bob 为例,它知道 10.242.0.1/32 和 10.242.1.0/24 都可以通过 10.242.0.101/32 到达。没有适当的防火墙规则,策略设置为“接受”。

所以这是我的问题:当 Alice 使用 10.242.1.1 的 src ip ping 10.242.0.2 时,数据包被接收但没有路由或回复。现在,对于我在调试过程中尝试过的许多事情中的一些:

  1. 从 10.242.0.101 ping 到 10.242.0.102:工作正常
  2. 从 10.242.0.1 ping 到 10.242.0.2:工作正常
  3. 从 10.242.1.1 ping 到 10.242.0.102:也不起作用
  4. tshark -pi any icmp:看到数据包到达,没有响应数据包
  5. tshark -i lo icmp: 没有看到数据包
  6. Sysctl 检查:

    net.ipv4.conf.all.forwarding = 1
    net.ipv4.ip_forward = 1
    net.ipv4.conf.all.accept_local = 1
    net.ipv4.conf.all.rp_filter = 0
    net.ipv4.conf.all.route_localnet = 1
    net.ipv4.conf.all.log_martians = 1
    
  7. iptables TRACE 规则:TRACE: filter:INPUT:policy:1 IN=a_b_gre OUT= MAC= SRC=10.242.1.1 DST=10.242.0.2 ...这表明它很好地通过了输入链。

  8. conntrack -L:icmp 1 29 src=10.242.1.1 dst=10.242.0.2 type=8 code=0 id=29499 [UNREPLIED] src=10.242.0.2 dst=10.242.1.1 type=0 code=0 id=29499 mark=0 use=1...所以肯定会到达那里...清除 conntrack 条目没有帮助。
  9. 路线查找检查:我们的调查表明......

    Bob # ip route get 10.242.0.2 from 10.242.0.1 iif a_b_gre
    local 10.242.0.2 from 10.242.0.1 dev lo table local
        cache <local>  iif a_b_gre
    Bob # ip route get 10.242.1.1 from 10.242.0.2 iif lo
    10.242.1.1 from 10.242.0.2 via 10.242.0.101 dev a_b_gre
        cache  iif lo
    

现在我没有主意了。 Bob 清楚地收到了数据包,并且似乎知道应该如何处理它,但似乎有什么东西让它丢弃数据包,而不是回复数据包或将其路由到环回。考虑到当我尝试沿着 的线路进行 ping 时看到相同的行为ping -I 10.242.0.1 10.242.0.2 10.242.0.3,其中 .3 属于与前两个类似的第三个主机设置,并再次ip route get给出正确的答案,我绝对对转发阶段表示怀疑。

哦,我还应该注意,我特别不想对地址进行 NAT。虽然这可以解决眼前的问题,但它也违背了让数据包正确路由的目标。

那么,有什么想法可以从这里开始吗?

相关内容