如何使用网络掩码捕获这个范围的 IP 地址?

如何使用网络掩码捕获这个范围的 IP 地址?

我有一个 OpenWRT 路由器和一个安装在网络中的 Pi-hole。

我知道有些设备可能会忽略 DHCP 提供的 DNS 并使用硬编码的 DNS,所以我想将网络中所有非关键设备的 DNS 重定向到 pi-hole。我知道我可以使用防火墙规则

但是,我想要拦截的 DNS 请求的设备 IP 范围是 16-239,无法通过简单的 /xx 网络掩码捕获。

我怎样才能以最紧凑的方式使用 fw3 规则捕获 IP 16-239?

我只能想到 16 个单独的防火墙条目 xxxx/28,从 xxx16/28 开始直到 xxx224/28。

答案1

此范围需要至少 6 个单独的网络掩码:

x.x.x.16/28
x.x.x.32/27
x.x.x.64/26
x.x.x.128/26
x.x.x.192/27
x.x.x.224/28

计算此列表所用的工具:

#!/usr/bin/env python3
import ipaddress
a = ipaddress.ip_address("x.x.x.16")
b = ipaddress.ip_address("x.x.x.239")
for n in ipaddress.summarize_address_range(a, b):
    print(n)

但是,如果你能够绕过 OpenWRT 配置格式,你只需 3 条规则即可完成此操作排除在“关键”地址达到 LAN 范围的 /24 规则之前:

-s xxx0/28 -p tcp --dport 53 -j 接受
-s xxx240/28 -p tcp --dport 53 -j 接受
-s xxx0/24 -p tcp --dport 53 -j DNAT --to...

或者如果您能够直接指定 iptables 模块,则可以使用“iprange”模块:

-m iprange--src 范围 xxx16-xxx239-p tcp --dport 53 -j DNAT ...

相关内容