WireGuard 基于策略的路由

WireGuard 基于策略的路由

这个问题是关于配置一个 WireGuard 中继,将其所有对等方的流量路由到另一个 WireGuard 服务器,但中继本身不使用该 WireGuard 服务器作为默认网关。

我正在做一些自托管的事情。目前我的网络包含三个节点、一个网关、一个 ownCloud 服务器和我的手机。这些节点以网状连接。网关托管在 VPS 上,手机将使用它来访问互联网。

一切正常。但是当我将 Windows 节点添加到此网络时,问题就出现了,因为 WireGuard Windows 客户端的终止开关功能要求配置只有一个对等体,并且允许的 IP 为 0.0.0.0/0。出于安全原因,我不希望 VPS 位于 Windows 节点和 ownCloud 服务器之间,因此路由应该是:

Windows 节点 -> ownCloud 服务器 -> 网关 -> Internet

此外,ownCloud 服务器将每小时运行一次 restic 备份。出于速度原因,我不希望此流量路由到网关。

我已经尝试基于策略的路由大约几个小时了,但仍然无法正常工作。有人能帮忙吗?谢谢。以下是正在运行的配置。

网关

WG0

[Interface]
Address = 10.0.0.1/32
ListenPort = 51820

[Peer]
PublicKey = (ownCloud server's public key)
AllowedIPs = 10.0.0.2/32

[Peer]
PublicKey = (mobile's public key)
AllowedIPs = 10.0.0.3/32

nftables

    chain postrouting {
        type nat hook postrouting priority srcnat;
        ip saddr 10.0.0.0/24 oif eth0 masquerade
    }
    chain forward {
        type filter hook forward priority filter; policy drop;
        ct state established,related accept
        ip saddr 10.0.0.0/24 accept
    }

ownCloud 服务器

[Interface]
Address = 10.0.0.2/32
ListenPort = 51820

[Peer]
PublicKey = (gateway's public key)
Endpoint = $gateway_ip_address:51820
AllowedIPs = 10.0.0.1/32
PersistentKeepalive = 25

[Peer]
PublicKey = (mobile's public key)
AllowedIPs = 10.0.0.3/32
PersistentKeepalive = 25

移动的

[Interface]
Address = 10.0.0.3/32
ListenPort = 51820
DNS = 10.0.0.2

[Peer]
PublicKey = (gateway's public key)
Endpoint = $gateway_ip_address:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

[Peer]
PublicKey = (ownCloud server's public key)
Endpoint = (ownCloud server's domain name):51820
AllowedIPs = 10.0.0.2/32
PersistentKeepalive = 25

答案1

是的,策略路由正是您想要的 ownCloud 服务器。请尝试为您的 ownCloud 服务器执行以下 WireGuard 配置:

[Interface]
PrivateKey = (ownCloud server's private key)
Address = 10.0.0.2/24
ListenPort = 51820
Table = 123

PreUp = sysctl -w net.ipv4.ip_forward=1
PreUp = ip rule add iif %i table 123 priority 456
PostDown = ip rule del iif %i table 123 priority 456

[Peer]
PublicKey = (gateway's public key)
Endpoint = $gateway_ip_address:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

[Peer]
PublicKey = (mobile's public key)
AllowedIPs = 10.0.0.3/32

[Peer]
PublicKey = (windows node's public key)
AllowedIPs = 10.0.0.4/32
  • 使用/24网络掩码作为其 WireGuard 地址将会把10.0.0.0/24您的 WireGuard 网络的路由添加到其主路由表中。
  • 指定Table = 123将触发 wg-quick 在为 WireGuard 对等体添加路由时使用自定义123路由表而不是主表。
  • 策略路由规则iff i% table 123 priority 456将确保通过 WireGuard 接口进入的所有流量都使用此自定义表而不是主表(而系统本身产生的传出流量将继续使用主表)。
  • 为网关对等点指定AllowedIPs = 0.0.0.0/0意味着通过 WireGuard 接口发送的所有流量(未指定给其他对等点的流量)都将发送到网关。

另外,请确保调整 ownCloud 服务器上的防火墙,以允许流量从 WireGuard 网络转发,就像您对网关所做的那样(但您不需要像在网关上那样伪装它):

chain forward {
    type filter hook forward priority filter; policy drop;
    ct state established,related accept
    ip saddr 10.0.0.0/24 accept
}

然后,您应该能够在 Windows 节点上使用如下的 WireGuard 配置,并通过它访问 Internet 和 WireGuard 网络的其余部分:

[Interface]
PrivateKey = (windows node's private key)
Address = 10.0.0.4/32
ListenPort = 51820
DNS = 10.0.0.2

[Peer]
PublicKey = (ownCloud server's public key)
Endpoint = (ownCloud server's domain name):51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

相关内容