將流量路由到 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 加入預設值
IP r 透過 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

相關內容