averainy's Blog

averainy

17 Aug 2022

Wireguard客户端AllowedIPs 配置排除一个ip或者一个ip段

Wireguard客户端的配置中只有一个AllowedIPs配置来定义哪些ip或者ip段可以允许通过Wireguard客户端路由,因此如果想排除某个ip或者ip段,就需要将这些ip排除掉。
由于ip段太多,如果手动写会非常麻烦,幸好python有一个库可以帮我们解决这个问题,代码如下:

from ipaddress import ip_network

start = '0.0.0.0/0'
#需要排除的ip或者ip段
exclude = ['192.168.1.0/24', '192.168.2.0/24']

result = [ip_network(start)]
for x in exclude:
    n = ip_network(x)
    new = []
    for y in result:
        if y.overlaps(n):
            new.extend(y.address_exclude(n))
        else:
            new.append(y)
    result = new

print(','.join(str(x) for x in sorted(result)))

将输出的结果粘贴在wireguard配置AllowedIPs =后面即可。

over

Categories