仅允许在同一子网掩码内的 VPN 客户端之间转发

仅允许在同一子网掩码内的 VPN 客户端之间转发

我在服务器上使用 Wireguard(接口 wg0)作为 VPN,其中所有连接的客户端都具有由服务器分配的 IPv6 地址(由 AllowedIPs 控制)。

假设我们有三个客户:

  • 客户端 A,具有 7767:1::a
  • 客户端 B,使用 7767:2::b
  • 客户端 C,使用 7767:2::c

我想配置服务器(即使用类似 iptables 的东西)以允许客户端 B 和 C 之间的转发(因为它们位于同一子网 /32 上),并拒绝客户端 A 和 B/C 之间的转发(因为它们位于不同的子网 /32 上)。而且我不想每次使用新子网时都担心明确指定子网。

像这样的事情会起作用(未经测试):

prefix="7767"

ip6tables -A FORWARD -i wg0 -m state --state INVALID -j DROP
ip6tables -A FORWARD -i wg0 -m state --state RELATED,ESTABLISHED -j ACCEPT

for ((i=0;i<65536;++i))
do
    subnet="$(printf "$prefix:%x" $i)"
    ip6tables -A FORWARD -i wg0 -s $subnet::/32 -d $subnet::/32 -j ACCEPT
done

ip6tables -A FORWARD -i wg0 -j DROP

是否有一些通用规则可用于这种情况?或者也许除了 iptables 之外还有其他工具更适合这种情况?

相关内容