Wireguard 选择性路由

Wireguard 选择性路由

学习linux。

我的家庭局域网 (隐藏在 NAT 后面) 中有一个基于 Debian OMW6 的 NAS,还有一个带有 wireguard 服务器的 VDS。我希望在局域网之外访问我的 NAS,但我还希望 NAS 默认不使用隧道。

如果您通过 wg-quick 启动 NAS 上的客户端接口,那么所有流量都会通过隧道包装,但我希望仅当目标 ip 为 10.8.0.X(wireguard 局域网)时才包装流量。

是否可以?

答案1

Linux 上的 WireGuard 使用通过虚拟接口的常规路由(与除 IPsec 之外的大多数其他隧道类型一样)——如果您的路由表显示数据包通过 wg0,那么它们就会通过 wg0。

默认情况下,wg-quick 安装内核路由根据您的 AllowedIPs(WireGuard 内部路由),因为此设置还会影响出站数据包的对等选择(而不仅仅是入站数据包的过滤),并且在大多数情况下,拥有未通过接口路由的 AllowedIP 是没有意义的。

例如,如果您的隧道接口具有AllowedIPs = ::/0特定对等点,那么 wg-quick 将相应地::/0 dev wg0通过隧道安装内核路由。

有几种方法可以避免这种情况:

  • 如果您只想路由特定目的地,则仅将这些目的地包含在 AllowedIPs 中,例如,如果您只允许10.8.0.0/24您的 VPS 的 [Peer] 条目,那么 wg-quick 也会将其添加为内核路由。

  • 如果您不希望任何来自 AllowedIPs 的自动路由,请Table = off在全局 [Interface] 部分中指定。内核仍将从您自己的 IP 地址添加“本地”路由,因此如果您Address = 10.8.0.55/24在 [Interface] 部分中指定了路由,则内核将添加路由,10.8.0.0/24 dev wg0但 wg-quick 不会添加任何额外内容。

    “Table = off” 已经是 systemd-networkd 中的默认设置。

  • 如果您想要根据其他标准路由所有目的地(例如,仅针对具有特定 TCP 端口或 iptables 标记的数据包),请将自定义路由表编号指定为Table = 123,然后使用ip -4 ruleip -6 rule创建符合您的标准并选择该路由表的规则,例如:

    PostUp = ip -4 rule add from 192.168.1.7 lookup 123
    

相关内容