是否可以使用 iptables 强制某些设备使用 DNS?

是否可以使用 iptables 强制某些设备使用 DNS?

我正在尝试使用 iptables 强制某些设备(华硕 RT-N66U 上的 Shibby Tomato)的 DNS。我在网上找不到任何描述此类配置的内容。我能找到的最接近的内容是:

# For the Samsung TV, use WAN DNS (i.e., Comcast).
# #############################################################
iptables -t nat -A PREROUTING -i br0 -s samsung-tv.home.lan -p tcp --dport 53 -j DNAT --to $(nvram get wan_get_dns | awk -F' ' '{print $1}')
iptables -t nat -A PREROUTING -i br0 -s samsung-tv.home.lan -p udp --dport 53 -j DNAT --to $(nvram get wan_get_dns | awk -F' ' '{print $1}')

# For every other client, use LAN DNS.
# #############################################################
iptables -t nat -A PREROUTING -i br0 -p udp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -p tcp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)

这已经很接近了,但是还存在一些问题。

1) 我更愿意通过 MAC 地址而不是主机名来进行操作。可以吗?

2) 这仅允许每个客户端使用单个 DNS 服务器。是否有办法使用此方法(或类似方法)分配主 DNS 和辅助 DNS?

答案1

问题 1 是的,可以做到:只需使用

iptables -t nat -A PREROUTING -i br0 -m mac --mac-source MAC-ADDRESS-OF-SAMSUNG -p tcp --dport 53 -j DNAT --to $(nvram get wan_get_dns | awk -F' ' '{print $1}')

第一个新选项,-m 苹果电脑,指示iptables加载苹果模块。我不熟悉 Shibby Tomato,但在标准 Linux 中,这个模块是相当标准的。

问题 2 你总能想出解决办法。假设你已指示三星电视使用 8.8.4.4 和 8.8.8.8 作为 DNS(尽管它们是不是您希望的 DNS)。然后,您可以通过将之前的 iptables 命令替换为以下命令来实现第二个 DNS命令:

 iptables -t nat -A PREROUTING -i br0 -d 8.8.4.4 -m mac --mac-source MAC-ADDRESS-OF-SAMSUNG -p tcp --dport 53 -j DNAT --to $(nvram get wan_get_dns1 | awk -F' ' '{print $1}')

 iptables -t nat -A PREROUTING -i br0 -d 8.8.8.8 -m mac --mac-source MAC-ADDRESS-OF-SAMSUNG -p tcp --dport 53 -j DNAT --to $(nvram get wan_get_dns2 | awk -F' ' '{print $1}')

其工作原理如下:如果电视没有从其第一个 DNS(它认为是 8.8.4.4 但我们知道是 wan_get_dns1)收到回复,那么它将尝试联系第二个 DNS,8.8.8.8,现在被重定向到第二个 DNS,wan_get_dns。

答案2

iptables并非真正用于 DNS 服务器管理 - 它不设置 DNS 服务器,而是劫持来自客户端的所有 DNS 查询并强制它们转到特定服务器。您最好配置 DHCP 服务器以执行您想要的操作,因为 DHCP 服务器无论如何都会分发 DNS 服务器信息。这是您能够设置主/辅助 DNS 服务器的唯一方法。

您可以通过 MAC 地址进行路由,但我不建议这样做,因为除非设备直接连接到路由器,否则很容易中断。如果您不想使用主机名,请使用 IP。

相关内容