这个问题是关于配置一个 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