Routing

通過 Wireguard 對等體路由所有流量

  • August 19, 2021

我有一個 Wireguard VPN 設置,基本上如下所示:

P1 ---- S ---- P ---- LAN
Px -----|
  • S (ip 192.168.60.1) 是在 Ubuntu 20.04 上執行的 WG 伺服器,啟用了 ufw,具有公共 IP(使用 wg0 介面)。
  • P (ip 192.168.60.2) 是在 CGNAT 後面執行的 WG 對等體,沒有公共 IP,連接到自己的 LAN。
  • P1..Px 是其他 WG 對等點(ip 192.168.60.1x)。

ufw有如下配置:

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
51820/udp                  ALLOW       Anywhere

Anywhere on eth0           ALLOW FWD   Anywhere on wg0
Anywhere on wg0            ALLOW FWD   Anywhere on eth0
Anywhere on wg0            ALLOW FWD   Anywhere on wg0

我想實現來自 P1..Px 對等方的所有流量都通過 P 路由。

我嘗試了以下方法,但沒有成功:

  • 在 P1 上,我將 S 的 AllowedIPs 設置為 0.0.0.0/0。在 SI 上,將 P 的 AllowedIPs 設置為 0.0.0.0/0。- 此配置使 S 無法通過 eth0 訪問(並且仍然不會將任何內容路由到 P)。
  • 在 P1 上,我將 S 的 AllowedIPs 設置為 0.0.0.0/0。在 SI 上嘗試根據源 IP 配置基於策略的路由:
sudo ip rule add from 192.168.60.0/24 lookup 200
sudo ip route add default via 192.168.60.2 dev wg0 table 200

這可以防止 P1 連接到 192.168.60.0/24 以外的任何地方。

您可能應該首先Table=off在 S 和 P 上的 wg-quick conf 中使用。 的值AllowedIPs=不會導致更改它們上的路由/策略路由規則。

編輯:實際上,Table=在 P 上保持不變應該沒問題,除非您出於某些原因需要AllowedIPs=S,0.0.0.0/0而不是192.168.60.0/24因為某些原因,例如需要流量源自自身以被路由 S。您不需要弄亂路由和路由自己對 P 進行規則,因為即使是前綴 inAddress=192.168.60.2/24也應該配置必要的路由。下一段可能不適用於您所需要的——儘管它可能會給您一些關於事情如何工作的額外見解。

您可能應該為S 和 P使用額外的 IP 子網,例如192.168.59.0/30。這將為您省去需要額外 ip 規則的麻煩。請記住192.168.60.0/24在 P 上添加子網路由,與 一樣Table=off,核心只會為Address=欄位中的前綴添加前綴路由。好好利用PostUp=(和PreDown=)順便說一句。

我不認為您想將源自 S 本身的流量路由到 P,因此您可能需要以下 ip 規則:

# ip rule add iif wg0 from 192.168.60.0/24 lookup 200

如果您確實需要將 ssh 和wireguard 伺服器回復以外的流量路由到 P,您還可以擁有:

# ip rule add iif lo lookup 200
# ip rule add iif lo ipproto tcp sport 22 lookup main
# ip rule add iif lo ipproto udp sport 51820 lookup main

注意:您不能只匹配from 192.168.60.1第一條規則中的添加而忽略其他兩條,因為對於非回复流量,源地址通常(如果不總是)根據確定的路由選擇 - 它尚未設置為這點。

請注意,命令的順序通常決定優先級,因此請確保在“子集”規則之前添加“超集”規則,否則後者將被前者覆蓋。

此外,最好保持table 200空白,直到所有期望規則都到位,否則可能會切斷主機的遠端訪問。

最後 nexthop 在通往 L3 隧道的路由中沒有任何意義:

# ip route add default dev wg0 table 200

PS 確保您不僅在防火牆中允許 IP 轉發,而且還使用 sysctl 啟用它。

引用自:https://serverfault.com/questions/1074729