我有三台机器:
- 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
发送一些数据包。
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
答案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 上转发的所有数据包都将被丢弃。