Dnsmasq 标签和条件 DNS 服务器

11

作为全面的解决方案,我想使用dnsmasq将DNS解析分配给不同的服务器。

例如,默认情况下使用DNS服务器A,除非每个主机(MAC)明确设置为DNS服务器B。

我想将我的网络分成带有dnsmasq标记的子网,以此示例为例:

192.168.1.80-150 = 绿色

192.168.1.40-50 = 红色

我希望DHCP租约默认由标记为绿色的设备提供,除了一些特定的MAC地址,我希望它们获得红色标记。

我已经成功地将其通过明确设置MAC地址来实现,但我希望所有未指定的设备都默认为绿色。

然后,我想说:“对于所有带有绿色标记的设备,请将DNS服务器A设置为其解析器”,“对于所有带有红色标记的设备,请将DNS服务器B设置为其解析器”。

这种做法可行吗?

我有以下配置,但似乎无法正常工作:

--8<--
dhcp-range=set:green,192.168.1.80,192.168.1.150,infinite
dhcp-range=tag:red,192.168.1.40,192.168.1.50,infinite

dhcp-option=net:green,option:dns-server,8.8.8.8,8.8.4.4
dhcp-option=net:red,option:dns-server,192.168.1.11    

dhcp-host=AA:BB:CC:DD:CC:BB,redhost1,192.168.1.41,infinite,net:red
dhcp-host=BB:CC:DD:AA:BB:00,greenhost1,192.168.1.81,infinite,net:green

dhcp-option=option:router,192.168.1.1
--8<--

然而,这似乎不起作用。基于我是否匹配了它们的MAC地址,我有不同的主机分配不同的IP地址,然后似乎DNS服务器没有被正确地分配。

我认为DNS服务器没有被分配是因为在其中一台主机上运行“cat /etc/resolv.conf”显示127.0.0.1。

总结我的问题:

  1. 除非通过MAC显式设置为“red”,否则我可以将一切默认为“green”吗? (目前,我必须将所有内容的MAC显式放入conf文件中)?
  2. 我可以为不同的标记网络指定不同的DNS服务器吗?
  3. 为了更加清晰,我对“标签”和“集合”之间的区别有点困惑,在搜索中发现了对两者的引用,简短而干净的定义将是很好的补充。

非常感谢

3个回答

21

好的,我已经解决了(关于我的具体要求),并且我将在这里发布我所得到的内容以帮助其他人。

因此,我的需求是为不同的主机分配不同的DNS服务器(和可能的不同网关),以下是看起来可以工作的方法:

dhcp-range=set:green,192.168.1.80,192.168.1.150,infinite

# red network
dhcp-host=11:22:33:44:55:66,hosta,192.168.1.11,infinite,set:red
dhcp-host=66:55:44:33:22:11,aa:bb:cc:dd:ee:ff,hostb,192.168.1.12,infinite,set:red

# green network mobile
dhcp-host=dd:dd:dd:dd:dd:dd,android1,192.168.1.21,infinite,set:green
dhcp-host=cc:cc:cc:cc:cc:cc,android2,192.168.1.22,infinite,set:green

除非明确表示不同,否则所有内容都会标记为绿色。某些特定的MAC地址会被标记为红色。要使用不同的DNS服务器和不同的网关,您可以执行以下操作:

# options
dhcp-option=tag:green,option:dns-server,192.168.1.1,192.231.a.b   # ,8.8.8.8,8.8.4.4
dhcp-option=tag:red,option:dns-server,192.168.1.c
dhcp-option=tag:green,option:router,192.168.1.1
dhcp-option=tag:red,option:router,192.168.1.c

以下是我发现有关此问题和 net / set / tag 选项的一些其他笔记/上下文信息,可能会对你有所帮助:

  • 可选的 set:设置一个字母数字标签,以便可以在每个网络基础上指定 dhcp 选项。 如果它以'tag:'作为前缀,则其含义从设置标签更改为匹配标签。 只能设置一个标签,但可以匹配多个标签。
  • 在 dhcp-host 指令中可以设置多个标记(但其他允许使用“ set:” 的地方不行)
  • 该系统是从早期更受限制的系统发展而来的,并且为了向后兼容,"net:" 可以代替 "tag:",并且可以省略 "set:"。(除了在 dhcp-host 中,"net:" 可以代替 "set:"。)出于同样的原因,'#' 可以代替 '!' 表示 NOT。

因此,我认为只需执行以下操作即可安全地完成:

  • 使用 set 和 tag,并避免使用 net(因为这是旧方式)
  • 在 dhcp-range 和 dhcp-host 中使用 set,分配标签,
  • 在选项中使用 tag 来匹配您已设置的标签。
  • 顺便提一下,其中一些 dhcp-host 可以看到具有多个 mac 地址,因为它是同一框的 eth0 和 wlan mac。

对我来说似乎有效,也许这会帮助某些人。


是否可以在不启用DHCP的情况下使用条件DNS名称服务器? - rc0r
1
提醒使用WRT路由器的任何人:我从未能够在我的配置中使“set”工作。我必须使用“net”来代替“set”,并且对于“tag”也要使用“net”(旧方式)。示例:dhcp-host=00:25:64:93:34:A1,DellPC,net:green,192.168.2.20,infinitedhcp-option=net:yellow,6,75.75.75.75,76.76.76.76 - TDave00

0
如果这对其他人有帮助的话,我之前也试过类似的事情,我的谷歌搜索结果带我来到了这个页面,但是这里的解决方案在我的路由器上无法工作。最终,我找到了一个简单的方法来获得我想要的结果。
我的情况是:我在我的局域网上有两个PiHole DNS服务器。我的主路由器是一台运行DD-WRT固件的Linksys WRT3200ACM。我有一个以接入点模式运行的Mesh WiFi系统,WRT作为路由器和DHCP服务器。WiFi可以广播一个访客网络SSID,并将访客设备与局域网隔离开来,但是由于这种隔离,访客设备无法访问局域网DNS服务器。
由于我在我的网络中使用DHCP预留为所有已知设备分配IP地址,它们的IP地址位于正常DHCP范围之外。我试图利用这一点,并使用"dhcp-range=set:red..."指令标记位于DHCP范围内的设备,但是我没有成功。我唯一成功标记主机的方法是使用MAC地址,但是我不想每次都将每个MAC地址添加到附加的DHCP选项中。
我在这里找到了一个关于“特殊的“已知”标签”的参考链接:https://github.com/mirror/dd-wrt/blob/master/src/router/dnsmasq/dnsmasq.conf.example,使用它成功解决了我的问题。
在DHCP选项框中,我只有以下内容:
dhcp-option=tag:known,6,192.168.0.xxx,192.168.0.yyy
dhcp-option=tag:!known,6,1.1.1.1,1.0.0.1

任何未知设备(在任何VLAN上)都将获得互联网服务器,而来宾网络上的设备将始终是“未知”。一旦我将新的已知设备添加到DHCP预留列表中,它将使用本地DNS。

-1
为什么不在两个 VLAN 上设置 2 个 DHCP 区段,只使用 1 个 dnsmasq 服务,并通过它们的网关使这两个 VLAN 互相通信(或者不通信)呢?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接