转发的数据包可通过 tcpdump 看到,但应用程序无法收到

转发的数据包可通过 tcpdump 看到,但应用程序无法收到

我有三台机器:

  • 10.8.0.8/24
  • B 10.8.0.13/24 10.248.0.34/23
  • 网络 10.8.0.40/24 10.248.0.12/23

在 AI 上,使用以下方法添加从 A 到 C 的路线:ip route add 10.248.0.12 via 10.8.0.13

然后我测试配置。在 CI 上输入nc -ul 2002。然后在 AI 上nc -u 10.248.0.12 2002发送一些数据包。

ncC 上未接收到数据包。

但是当我在 C 上使用时
tcpdump -n "(src host 10.8.0.8 and dst host 10.248.0.12) or (src host 10.248.0.12 and dst host 10.8.0.8)" -vv -i any
它读取的是
15:19:46.756649 IP (tos 0x0, ttl 63, id 47699, offset 0, flags [DF], proto UDP (17), length 29) 10.8.0.8.44254 > 10.248.0.12.2002: [udp sum ok] UDP, length 1

我该怎么做才能检查数据包发生了什么情况,显然数据包从 A 路由到 C,但由于某种原因它们被拒绝。

在 C 上:

iptables -t filter -L FORWARD -n

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
WEAVE-NPC  all  --  0.0.0.0/0            0.0.0.0/0            /* NOTE: this must go before '-j KUBE-FORWARD' */
NFLOG      all  --  0.0.0.0/0            0.0.0.0/0            state NEW nflog-group 86
DROP       all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
KUBE-FORWARD  all  --  0.0.0.0/0            0.0.0.0/0            /* kubernetes forwarding rules */
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            /* generated for LXD network fanbr0 */
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            /* generated for LXD network fanbr0 */
DOCKER-USER  all  --  0.0.0.0/0            0.0.0.0/0           
DOCKER-ISOLATION-STAGE-1  all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
DOCKER     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0     

iptables -t mangle -L -n

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
CHECKSUM   udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:68 /* generated for LXD network fanbr0 */ CHECKSUM fill

答案1

正如@AB 所指出的,解释是反向路径过滤。我通过禁用 C 上的 rp 过滤,使 10.248.0.12 可从 A 访问。

sysctl -w net.ipv4.conf.all.rp_filter=0
echo 0 > /proc/sys/net/ipv4/conf/*/rp_filter

答案2

我看到了规则

全部删除 -- 0.0.0.0/0 0.0.0.0/0

规则之前

接受全部 -- 0.0.0.0/0 0.0.0.0/0
接受全部 -- 0.0.0.0/0 0.0.0.0/0

因此 C 上转发的所有数据包都将被丢弃。

相关内容