轉發的數據包對 tcpdump 可見,但應用程序不接收
我有3台機器:
- 10.8.0.8/24
- B 10.8.0.13/24 10.248.0.34/23
- C 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
發送一些數據包。
nc
C上沒有收到數據包。但是,當我在 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
正如@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
我看到規則
全部刪除 – 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 上所有轉發的數據包都將被丟棄。