学习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 rule
和ip -6 rule
创建符合您的标准并选择该路由表的规则,例如:PostUp = ip -4 rule add from 192.168.1.7 lookup 123