背景
上一个post提到我挂载在路由器下的NAS在校园网分配到10.0.0.0/8时无法访问,由于路由器下内网IP也是10.0.0.0/8,所以我怀疑IP冲突,于是将路由器内部IP改为了10.0.0.0/16,依然无法访问,但是已经可以ping通路由器。因此展开了大调查。
过程
在10.22.48.172/8下访问了路由器上的其他服务,运行正常,因此将问题定位到NAS本身。
在NAS上可以顺利ping通10.0.0.0/8,这其实是比较迷惑的,这说明NAS本身的路由策略没有问题。
对来自10.0.0.0/8源IP的数据进行抓包
20:13:54.806773 enp1s0 Out ARP, Request who-has 10.22.48.172 tell 10.10.2.200, length 28
这说明系统试图ARP查询10.22.48.172的MAC,显然这是不可能有回复的,因此回包丢失,访问失败。这其实是说明Linux在做neighbour解析时判断目标在本地链路。
解决方法
使用策略路由
ip rule add from 10.10.2.200 lookup 100
ip route add default via 10.10.0.1 dev enp1s0 table 100
并强制10/8走网关
ip route replace 10.0.0.0/8 via 10.10.0.1 dev enp1s0 metric 10
ip route flush cache
单纯开启ARP Filter是没有用的。
一点疑惑
为什么在NAS上可以顺利ping通10.0.0.0/8?我不知道。
AI:核心原因在于 Linux 在不同协议路径上的邻居解析行为不同。
好。ok。
其他问题
校园网下172网段的能ping通10的,但是反之不行,但是10网段仍可以访问172网段架设的访问。疑似是10的出口路由丢弃了ICMP包。