将流量路由到除 0.0.0.0 地址之外的 ipv4 路由?

将流量路由到除 0.0.0.0 地址之外的 ipv4 路由?

如何将流量路由到除 0.0.0.0 地址之外的 ipv4 路由,
因为我不希望它成为默认接口

默认通过 192.168.5.1 dev enp7s0 proto dhcp metric 100
169.254.0.0/16 dev enp7s0 范围链接指标 1000
192.168.5.0/24 dev enp7s0 原型内核范围链接 src 192.168.5.84 公制 100
192.168.60.0/24 dev vpn_softether proto 内核范围链接 src 192.168.60.50
209.80.36.170 通过 192.168.60.1 dev vpn_softether
216.117.82.227 通过 192.168.60.1 dev vpn_softether

我想将 vpn_softether 作为默认接口
我已经尝试过......

ip r 通过 0.0.0.0 dev vpn_softether 添加 0.0.0.0/1
ip r 通过 0.0.0.0 dev vpn_softether 添加 128.0.0.0/1

通过 192.168.5.1 添加 0.0.0.0/1
通过 192.168.5.1 添加 128.0.0.0/1

ip r 通过 192.168.60.1 添加默认值

ip r del 0.0.0.0/1 通过 192.168.60.1 dev vpn_softether
IP r del 128.0.0.0/1 通过 192.168.60.1 dev vpn_softether

ip r del 0.0.0.0/1 通过 192.168.5.1
ip r del 128.0.0.0/1 通过 192.168.5.1

ip r 通过 192.168.5.1 dev enp7s0 proto dhcp metric 100 添加 0.0.0.0/1
ip r 通过 192.168.5.1 dev enp7s0 proto dhcp metric 100 添加 128.0.0.1/1


ip r del 0.0.0.0/1 通过 192.168.5.1 dev enp7s0 原始 dhcp 指标 100
ip r del 默认通过 192.168.60.1 dev vpn_softether
ip r del 128.0.0.0/1 通过 192.168.5.1 dev enp7s0 原始 dhcp 指标 100

ip r del 0.0.0.0/1 通过 192.168.60.1 dev vpn_softether proto dhcp 指标 100
ip r del 默认通过 192.168.5.1 dev enp7s0
ip r del 128.0.0.0/1 通过 192.168.60.1 dev vpn_softether proto dhcp 指标 100

ip r 通过 192.168.60.1 dev vpn_softether 添加 0.0.0.0/1
ip r 通过 192.168.5.1 dev enp7s0 proto dhcp metric 100 添加默认值
通过 192.168.60.1 dev vpn_softether 添加 128.0.0.0/1

但它不起作用...还有其他方法吗?
谢谢。

答案1

请注意,您只能将“所有流量”路由至接口,而不是全部。

如果您想保留默认路由(无论出于何种原因),请保留默认路由,不要添加或删除它。如果可以添加或删除它,则无需保留默认路由...

所以,

ip route add 0.0.0.0/1 via 192.168.60.1 dev vpn_softether 
ip route add 128.0.0.0/1 via 192.168.60.1 dev vpn_softether 

应该完成这项工作,假设网关vpn_softether确实是192.168.60.1。请注意,您还需要一条规则来将您的 VPN 连接到的任何位置发送出去enp7s0,否则 VPN 将无法与其他端点通信,因此您根本不会有任何连接。所以像

ip route add 1.2.3.4/32 via 192.168.5.1 dev enp7s0

其中1.2.3.4是另一个端点的 IP 地址。遵守default此规则(如果这是您出现该情况的动机)将不是工作。

答案2

我想在之前的回答中补充一下:

ip route add 1.2.3.4/32 via 192.168.5.1 dev enp7s0

这是错误的做法。enp7s0关闭后该路线将消失。enp7s0上线时不会出现该路由。同时,您的 VPN 接口将在线,但无法工作,因为它无法访问1.2.3.4.

enp7s0一旦启动,您可以使用 netplan 动态创建此路由。但该路由由 IP 地址、网络接口名称和网关 IP 组成。这意味着它是无法跨不同网络移植。实践证明,这种方案过于痛苦,因此不推荐。您会忘记您在短期内向 netplan 添加了一条重要路由的事实。稍后,这条路线将成为你的一个问题。在大型网络上使用这种解决方案是完全不可能的。

1.2.3.4正确的解决方案是从您为 VPN 流量重定向创建的默认路由中排除。为了Wireguard 的示例解决方案。您需要1.2.3.4/32从 中排除0.0.0.0/0并将结果放入 中AllowedIPs。在线的计算器在这里。你可以读到有一段“更好的选择”,但作者错了,没有其他选择。

例如0.0.0.0/0减号1.2.3.4/32将是:

AllowedIPs = 0.0.0.0/8, 1.0.0.0/15, 1.2.0.0/23, 1.2.2.0/24, 1.2.3.0/30, 1.2.3.5/32, 1.2.3.6/31, 1.2.3.8/29, 1.2.3.16/28, 1.2.3.32/27, 1.2.3.64/26, 1.2.3.128/25, 1.2.4.0/22, 1.2.8.0/21, 1.2.16.0/20, 1.2.32.0/19, 1.2.64.0/18, 1.2.128.0/17, 1.3.0.0/16, 1.4.0.0/14, 1.8.0.0/13, 1.16.0.0/12, 1.32.0.0/11, 1.64.0.0/10, 1.128.0.0/9, 2.0.0.0/7, 4.0.0.0/6, 8.0.0.0/5, 16.0.0.0/4, 32.0.0.0/3, 64.0.0.0/2, 128.0.0.0/1

不幸的是,此解决方案并不理想:您可以拥有多个 VPN,因此您必须从每个 VPN 默认路由中排除所有端点 IP。

例如,如果您有 2 个 VPN,并且想要添加另一个 VPN,则必须从两个现有 VPN 配置的允许 IP 中排除第三个端点 IP。如果wireguard有内部计算器或DisallowedIPs功能会更好。

所以我的解决方案是省略AllowedIPs配置并自己创建默认路由。我正在使用以下计算器排除器用Python编写的。您需要执行以下操作:

  1. 从所有wireguard客户端配置收集所有端点。
  2. 解析所有端点。
  3. 0.0.0.0/0从(和)中排除目标端点::/0
  4. 为您从计算器收到的每个 IP 块添加默认路由。

PS 我建议您将这些路由添加到每个 VPN 接口的单独表中。因为这将是一群人。

PS我已经把我的route-up.client.shroute-down.client.sh公共要点在这里

Table = off
PostUp = /etc/wireguard/route-up.client.sh 51820 wg0 10.20.3.0/24 fd10:20:3::/64 10
PreDown = /etc/wireguard/route-down.client.sh 51820

相关内容