路由规则决定了哪些流量走 VPN
网络地址表示法解释:
· 10.0.0.0/32:只匹配 单个IP地址 10.0.0.0
· /32 表示子网掩码为 255.255.255.255(32位1)
· 这是网络地址(通常不分配给设备使用)
· 所以实际上 没有任何设备 符合这个路由
· 10.0.0.0/24:匹配 整个网段 10.0.0.0-10.0.0.255
· /24 表示子网掩码为 255.255.255.0(24位1)
· 覆盖你的 WireGuard 网络中的所有设备
具体发生了什么:
当设置为 /32 时:
- iPhone 想连接到 WireGuard 服务器(比如 10.0.0.1 或其他设备)
- 系统检查路由表:"目标 IP 10.0.0.1 是否匹配 10.0.0.0/32?"
- 答案:不匹配!因为 10.0.0.1 ≠ 10.0.0.0
- 流量走默认路由(直接上网),不进入 WireGuard 隧道
- 结果:握手包根本发不出去
当设置为 /24 时:
- iPhone 想连接到 WireGuard 服务器(10.0.0.1)
- 系统检查:"目标 IP 10.0.0.1 是否匹配 10.0.0.0/24?"
- 答案:匹配!因为 10.0.0.1 在 10.0.0.0-10.0.0.255 范围内
- 流量通过 WireGuard 接口发送
- 结果:握手成功,连接建立
实际场景类比:
想象一下邮递系统:
· /32 就像说:"我只给 门牌号0号 的房子寄信"
· /24 就像说:"我给 整个小区(0-255号)都寄信"
· 你要连接的其他设备都在这个小区里,但他们的门牌号不是0号
其他设备的配置为什么能通?
你的其他设备(MacBook、阿里云等)的服务器端配置中,它们的 AllowedIPs 都是单个IP(如 10.0.0.6/32),这是正确的,因为这是服务器允许这些设备使用的IP地址。
而 iPhone 客户端的 AllowedIPs(实际上是路由设置)应该是客户端要通过VPN访问的网段,而不是它自己的IP。
总结:
· 客户端的 AllowedIPs(路由):告诉系统 哪些目标IP要走VPN
· 服务器端的 AllowedIPs:告诉服务器 允许这个客户端使用哪些源IP
你的问题就是把客户端的路由表设置错了,导致系统不知道哪些流量应该进入 VPN 隧道。改成 /24 后,系统就知道所有 10.0.0.x 的流量都走 WireGuard,于是就能正常握手了。