确保网络中的所有用户都使用我的 DNS 服务器

确保网络中的所有用户都使用我的 DNS 服务器

我正在运行带有 DNS 服务器的路由器,我想确保网络中的每个人都在使用我的 DNS。将所有与 DNS 相关的流量重定向到我的本地 DNS 服务器需要哪些 iptables (?)?

答案1

你可能指的是一种透明转发,即 iptables 所称的目标 NAT

ethL=eth0     # internal network NIC
dnsip=1.2.3.4 # IP of your DNS
iptables -t nat -A PREROUTING -p udp --dport 53 -i $ethL -j DNAT --to $dnsip

然而,这种方法也存在一些需要考虑的潜在问题:

  • 这是 NAT 的一种变体,具有所有相关成本(直通性能、内核内存等);
  • 这只对跨路由器的数据包有效 - 与其本地 IP 网络上的 DNS 服务器通信的客户端将继续这样做。

答案2

您需要阻止来自用户的任何出站 DNS 流量(本地 DNS 服务器除外),因此您可以按照如下方法开始:

local_network=X.X.X.X/24 # IP address/subnet-mask of local network
dns_server=Y.Y.Y.Y # IP address of DNS server

iptables -A INPUT -s $local_network -d $dns_server -p udp --dport 53 -j ACCEPT
iptables -A INPUT -s $local_network ! -d $dns_server -p udp --dport 53 -j DROP
iptables -A OUTPUT -s $dns_server -d $local_network -p udp --sport 53 -j ACCEPT

如果您的 DNS 服务器是缓存/递归 DNS 服务器,那么您也需要允许它进行外部查找:

iptables -A INPUT -d $dns_server -p udp --sport 53 -j ACCEPT
iptables -A OUTPUT -s $dns_server -p udp --dport 53 -j ACCEPT

答案3

您需要仅允许来自 DNS 服务器的 DNS 流量并拒绝所有其他请求

# 允许来自你的 IP 的 DNS

iptables -A INPUT -p udp --dport 53 -s <source IP> -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -s <source IP> -j ACCEPT

# 拒绝所有其他请求

iptables -A INPUT -p udp --dport 53 -j DROP
iptables -A INPUT -p tcp --dport 53 -j DROP

点击这里查看答案 阻止所有传入的 DNS 请求,IP x、y 除外,

相关内容