复制隧道的 /32 并不能路由办公室子网
VPN 分配给适配器的地址描述的是链路,而不是目标。把资源前缀加进配置文件,别动默认路由。
VPN 连上了,接口显示一个带三十二位掩码的地址,而办公室服务器仍然不可达。下一步往往是把这个掩码复用进一条路由,理由是接口描述了隧道能到达哪里。并不是。那个地址描述的是点对点链路的本地一端,你关心的目标位于另一侧的另一段前缀里。
有两件不同的事被混为一谈:隧道给你的地址,以及你想通过它到达的网络。
两个地址,两种职责
在点对点隧道里,客户端地址常常是单个主机地址,因为链路另一端恰好只有一个对端。没有共享网段,也没有 ARP,所以一个在以太网上显得荒唐的掩码,在这里完全正常。
目标前缀是关于办公室网络的事实,而不是关于隧道的事实。如果你只需要一台服务器,路由就是那台服务器的主机路由。如果你需要整个办公室子网,路由就是那个子网。这两个答案都无法从接口上读出来,而因为某个前缀出现在隧道地址旁边就选中它,正是把能用的配置弄坏的方式。
| What you need to reach | What to install |
|---|---|
| One server, nothing else | A host route for that address |
| The office subnet | A route for the subnet prefix |
| Everything in the private space | Only if the requirement says so, and only with the owner's approval |
第三行就是乐观变成中断的地方。把整个私有地址段路由进一条只服务一个站点的隧道,会把无关流量推进一条送不到的路,由此产生的故障看起来像 VPN 坏了,而不是路由太宽。
从需求中选出前缀
在动配置文件之前,把需求写成一句话:哪些主机必须可达,覆盖它们的最窄前缀是什么?单台服务器是主机路由。一个子网是子网路由。一组子网是汇总,而汇总是一个承诺,承诺其中每个地址都可达,这很少为真。
然后把这个数字和办公室实际使用的情况核对。不跟站点的编址方案确认,就从聊天消息里复制前缀,正是一条路由最终指向没人拥有的子网的方式。
还要记住,路由是路径,不是许可。网关仍然决定你的客户端能否使用该目标,服务也仍然可以拒绝你。正确安装路由能把数据包送到那里,却对授权什么也没回答。
向配置文件追加,绝不要替换
NetworkManager 配置文件里的路由是多值属性,设置和追加只差一个字符。用加号形式添加条目,并保留已经保存的一切。
nmcli connection modify uuid 11111111-2222-4333-8444-555555555555 \
+ipv4.routes "10.40.20.9/32"
没有加号时,赋值会替换整个列表。在已经带有若干前缀的配置上,这会悄悄删掉原本能用的那些,症状之后才出现,表现为某项以前能从这台笔记本访问的服务。
用 UUID 而不是名称。恢复之后名称会重复,而你正在编辑的连接可能不是承载流量的那个。先检查是否已有相同条目,因为追加重复项即使无害也不整洁。
该 路由属性参考 记录了已安装版本的目标、可选的下一跳、度量值和属性语法。在添加下一跳之前先读它,因为是否需要取决于集成方式和拓扑,而从接口列表的第一个地址去猜并不是方法。
默认路由和 DNS 是两个独立的决定
Adding an office prefix says nothing about where the rest of your traffic goes. If policy requires ordinary internet traffic to stay outside the tunnel, that is the ipv4.never-default decision, and it belongs to whoever owns the connection policy rather than to whoever is fixing one unreachable server.
自动路由是另一件不该随意打扰的东西。为了修好一个缺失条目而压制它们,可能删掉好几条原本能用的,而提出这个建议的人通常看的是另一个带有不同推送的配置。
DNS 有自己的路径和自己的故障。一个经由错误解析器解析到正确地址的名称,或者一个无法为私有区域作答的解析器,都会看起来像路由问题,而路由本身完美无缺。分别测试地址和名称,再判断到底是哪一层失败了。
确认实际应用了什么
保存的修改不等于已应用的修改。通过管理器支持的生命周期重新连接,然后查看目标地址的实际路由,以及决定查哪张表的路由策略规则。
如果前缀在,连接却仍然失败,你已经转到另一个问题:源地址选择、远端的回程路由,或者拒绝你客户端的服务。这些都比你已经修正过的配置文件更值得去看。