我以前问过这个问题,但没有得到合适的答案。我有一台 Debian 机器,它经常更换网络,所以我依赖 DHCP,无法设置静态路由。因此,DCHP 会自动创建两个 IP 路由:默认路由(0.0.0.0/0 → 网关)和一条用于本地网络的路由(例如 10.1.0.0/16 → 网关)。我的问题是我想通过 WireGuard 路由所有流量。这导致 WireGuard 路由(0.0.0.0/0 → wg0)和本地路由重叠。本地路由(例如 10.1.0.0/16)更具体,因此更受欢迎。有什么方法可以抑制这些路由器的创建吗?我已经找了好几天的解决方案了……
答案1
DHCP 是计算机用来从路由器获取 IP 地址的协议。路由器会响应计算机的 IP 地址、路由器的 IP 地址和子网大小,这样计算机便知道自己的 IP 地址以及如何将数据包转发到互联网。
子网大小由安装路由器的人决定。网络中的所有客户端设备都应使用相同的子网大小,以避免出现细微问题。
但是,如果您仍想删除本地子网路由,则需要设置另一个路由来告诉网络堆栈如何将数据包发送到路由器。您需要在 DHCP 客户端中创建一个钩子,该钩子执行以下操作:
示例 IP 地址:
路由器 192.168.10.1 计算机 192.168.10.2
- 计算覆盖路由器 IP 地址和计算机接收 IP 地址的最小子网。在示例中,覆盖这些地址的最小子网是
192.168.10.0/30
。 192.168.10.0/30
添加通过网络接口转发子网的路由。- 删除更宽的DHCP添加的路由。
即使使用此方法,您的家庭网络和您正在使用的网络连接之间仍可能存在地址重叠。我个人已通过172.16/12
在家庭网络中使用空间子网解决了此问题。据我所知,它是网络使用最少的前缀,因此冲突的可能性很小。
尽管可以实现缩小本地网络路线,但我不建议这样做,因为它可能会产生严重的副作用。
如果我是你,我会简单地重新编号我的本地网络,这样就不会发生冲突。
答案2
我现在通过创建一个可执行文件解决了这个问题:
#!/bin/bash
ip route del $(ip route | grep "dev ens18 proto kernel scope link" | head -1)
在 /etc/network/if-up.d/ 中。我知道这个解决方案不是很好,但我还没有找到更好的解决方案。