![如何使用网络掩码捕获这个范围的 IP 地址?](https://linux22.com/image/1618128/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E7%BD%91%E7%BB%9C%E6%8E%A9%E7%A0%81%E6%8D%95%E8%8E%B7%E8%BF%99%E4%B8%AA%E8%8C%83%E5%9B%B4%E7%9A%84%20IP%20%E5%9C%B0%E5%9D%80%EF%BC%9F.png)
我有一个 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 ...