我在服务器上使用 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 之外还有其他工具更适合这种情况?