Ubuntu

轉發的數據包對 tcpdump 可見,但應用程序不接收

  • August 9, 2018

我有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發送一些數據包。

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

正如@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 上所有轉發的數據包都將被丟棄。

引用自:https://serverfault.com/questions/925484