隧道报告已连接,图标是绿色的,而家庭 LAN 上没有任何东西应答。这是 FRITZ!Box 远程访问最常见的抱怨,而且几乎从来不是隧道本身的问题。错的是地址规划、子网标识或客户端的路由表。你最终要排查其中哪一项,取决于你选的是 WireGuard 还是更老的 IPSec Fernzugang,所以先搞清楚自己实际配置的是哪一个。

隧道起来了,LAN 却毫无反应

建立成功的隧道只能证明密钥和端点是对的,并不能证明 客户端拿到的地址是盒子能路由过去的,也不能证明客户端知道哪些前缀属于这条隧道。这是两件互不相同的成功,只有第二件才让你够得着打印机。

先检查客户端的地址,再看它的路由表。

如果分配到的地址落在 LAN 子网之外,盒子就没有回程路由可走。如果落在 DHCP 范围内,盒子可能把同一个地址发给某台本地设备。两种情况都会得到一条能连上、但 LAN 对你视而不见的隧道。

每个选项到底配置了什么

IPSec 选项为一个用户生成配置文件,里面包含预共享密钥和地址。你把它导入会说同一套配置文件的客户端,而在 Windows 上这通常意味着厂商工具,而不是系统内置客户端。WireGuard 选项为一台设备生成一个对端:一对密钥、隧道内的一个地址和一个端点。

这一差别决定了你的维护方式。每台 WireGuard 设备都是带自己密钥的独立对端,所以吊销一部丢失的手机意味着删掉一个对端,其余照常工作。IPSec 靠更换共享密钥或用户配置来吊销,粒度更粗,会波及每一个使用它的设备。

两种选项都不过时。在对端跑不了 WireGuard 的地方,IPSec 这条路依然是受支持的那一条。

会让隧道变成死路的 IPSec 字段

有四个值必须与你的 LAN 一致,其中三个出错时看起来就像隧道坏了。

ValueWhat breaks when it is wrong
LAN subnetThe client routes nothing, or routes the wrong prefix
Network addressThe configuration looks valid and the tunnel never establishes
DHCP rangeNo address is left to assign to tunnel clients
DNS serverThe tunnel works and name resolution does not

真正让人栽跟头的是网络地址。子网以它的第一个地址来标识,这个地址通常以零结尾,在那里填一个主机地址,得到的配置看起来完全合理,却永远连不上。DHCP 范围之所以重要是另一个原因:隧道客户端通常从它上方分配,所以一个吃满整个子网的范围就没剩什么可发了。

子网重叠是另一个经典情况。如果你要加入的远端 LAN 和你所在的 LAN 用了同一个前缀,路由就分不清两者,唯一的真办法是把其中一侧重新编号。再多的客户端配置也解决不了。

为什么 WireGuard 失败的方式不一样

WireGuard 没有可以打错的预共享密钥,所以它的故障集中在对话端的定义上。允许 IP 列表漏掉 LAN 前缀,会得到一条什么都不承载的隧道,因为客户端永远不会把发往 LAN 的流量送进去。任何一侧用了过期的公钥,握手就永远完不成。缺少端点或端口填错,得到的是沉默而不是报错。

与其重新导入文件碰运气,不如逐字段对比两侧。

唯一的共同故障是子网冲突。WireGuard 会乐于把隧道建到与你本地网络重叠的网段上,然后由路由表决定两个相同前缀里谁说了算。

从外面证明它,然后给自己留一条回去的路

用移动网络测试,绝不要从 LAN 内部测试,因为从里面测的是一条根本不经过隧道的路径。在启用之前记下每个选项用哪个端口,并把那个端口转发到盒子上。

把生成的文件放在不用隧道也能拿到的地方,顺手记下盒子的外部名称。

从未从外部验证过的配置只是计划,不是能用的远程访问通路。测试 LAN 主机时用地址而不是名称,免得 DNS 故障被误当成路由故障。

相关文章