dnsmasq ipset ip 段的问题

2022-09-21 23:13:49 +08:00
 acbot

dnsmasq 通过 ipset=/<domain>/[domain/]<ipset>[,<ipset>] 可以将域名解析结果添加到一个 ipset 集合中,这里有两个问题,向各位大佬请教一下:

  1. 如果域名解析后同时有 v4 和 v6 地址 dnsmasq 通过 ipset=/<domain>/[domain/]<ipset>[,<ipset>] 那么是选择那个地址来添加到集合中呢,是根据集合的 family 类型来选择添加那个 ip 吗?比如 ipset 的 family 是 ipv4 那么他只添加 ipv4 到集合中

  2. 就是每次添加到该集合的都是单个地址,有没有办法实现添加一个段,比如:先用 create web hash:net 命令创建一个 web 的集合,然后再在 dnsmasq.conf 配置文件中增加 ipset=/yahoo.com/web 生效以后希望 web 集合中保存的是 1.1.1.1/24 而不是 1.1.1.1 我分别在 dnsmasq.conf 文档和 ipset 文档中的类型( hash:ip / hash:net 等)和 参数上现过办法没有找到,ipset 有没有那个类型或者是参数可以指定默认 cidr net 值呢?

2629 次点击
所在节点    Linux
13 条回复
lsylsy2
2022-09-21 23:53:10 +08:00
1 不知道,2 在创建 ipset 的时候可以设置
ipset create ipsetname hash:ip netmask 24
acbot
2022-09-22 00:15:58 +08:00
@lsylsy2 谢谢!
cattyhouse
2022-09-22 05:52:30 +08:00
1. man dnsmasq :

Places the resolved IP addresses of queries for one or more domains in the specified Netfilter IP set. If multiple setnames are given, then the addresses are placed in each of them, subject to the limitations of an IP set (IPv4 addresses cannot be stored in an IPv6 IP set and vice versa)

解析出来的 ipv4 只能加入到 类型为 ipv4 的 ipset, ipv6 同理.
acbot
2022-09-22 08:22:34 +08:00
@cattyhouse

谢谢!

再请教几个问题:在 dnsmasq.conf 配置文件中增加一条 ipset=/yahoo.com/web 这样的配置

1. web 这个 ipset 集合初始化是在什么时候完成,是下游有相应的 dns 请求才会添加,还是 dnsmasq 加载配置时候就自己先解析一遍添加了。

2. web 这个 ipset 集合的记录会动态更新吗,如果会动态更新那么他是先清空原集合记录再添加还是仅仅是添加,另外这个更新频率是多少,能自定义吗?比如:现在 yahoo.com 的 dns 记录从 1.1.1.1 变更为 2.2.2.2 ,web 这个 ipset 集合会动态更新过去吗,如果会那么是多长时间才会被更新呢?
infinet
2022-09-22 10:32:06 +08:00
很久没看 dnsmasq 了。ipset 应该是有 DNS 请求时加,而且每请求一次就把解析出的 ip 加一次。所以 yahoo.com 的 TTL 到期后再次查询解析出 2.2.2.2 ,这个 2.2.2.2 就会加入 ipset web ,同时 1.1.1.1 也还在。
acbot
2022-09-22 10:58:42 +08:00
@infinet 谢谢!“...ipset 应该是有 DNS 请求时加...” 这样说来 dnsmasq ipset 这个集合更适合出不适合进
cattyhouse
2022-09-22 23:23:55 +08:00
1. 你得先用工具 创建好 web 这个 ipset 吧。不然 dnsmasq 可能会报 web 不存在。

2. dnsmasq 只加,不删。
acbot
2022-09-23 07:36:13 +08:00
@cattyhouse 再次感谢!流程我大致明白,只是看了 #5 的描述后 感觉这个参数不太符合我的需求,我的需求是用这个 IPset 记录做 iptables 的入,基本下游不会有这些域名的请求,所以也就不能自动维护这个集合,但该他需要下游有 DNS 请求才会添加记录,而不是自行的以一定的频率或者是条件来更新记录,我自己还得自己写脚本来维护 DNS 解析,这样我还不入直接维护 IPset 集合。
cattyhouse
2022-09-23 17:17:54 +08:00
@acbot 你只是要得到 ip 吗? 那么 写个 while true + for 循环脚本, 让 dig 去获取你的文件里面的域名, 然后解析出来的 ip 放到另外一个文件. 然后定期对那个 ip 文件做 sort uniq ....
acbot
2022-09-23 18:25:24 +08:00
@cattyhouse 其实目前就是用脚本的方式直接维护 ipset 来实现的,一直觉得定时任务这种维护方式不够完美,所以想探究一下有没有更好的方案。查看文档 dnsmasq ipset 有类似的功能并且系统本身就带这个软件,如果可以实现岂不是更好但结果不理想!
fdsafds
2022-09-30 09:58:21 +08:00
不知道楼主的具体需求是啥,如果你要将 dnsmasq 解析的域名地址加入到 ipset 中,然后通过 iptables 做策略,直接用你那个就可以实现了啊,如:
server=/.google.com/8.8.8.8
ipset=/.google.com/ipset
他会将这个域名解析的地址全部加入到 ipset 中。
acbot
2022-09-30 11:21:08 +08:00
@fdsafds 需求就是通过 域名自动维护一个 ipset 记录,但 dnsmasq 的 ipset 模块有两个问题:dnsmasq 的 ipset 模块只能是下游或者是本地有请求的情况下才能执行增加操作,不能启动的时候自行增加且按照一定条件或者是频率自行维护记录的更新操作,而我这边 dnsmasq 的下游基本不会主动去访问这些域名所以不能满足我的需求,如果是写一个脚本去请求这些域名那么就画蛇添足了,我还不如脚本上直接维护 ipset 。
fdsafds
2022-09-30 14:12:14 +08:00
@acbot 哦,如果你就是想获取这些域名的 IP 地址就直接写脚本吧,这样简单点,获取到所有的地址后再加到 ipset 地址集中。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/881992

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX