如何使用 iptables 将 DNS 查询重定向到 127.0.0.53:53?

如何使用 iptables 将 DNS 查询重定向到 127.0.0.53:53?

问题是我需要将传入的 DNS 查询数据包(来自其他计算机)转发到127.0.0.53不是 127.0.0.1)。我尝试将查询重定向到127.0.0.1,效果很好,但是无法将它们重定向到127.0.0.53

入接口的IP地址为,是wireguard VPN服务的10.66.66.1虚拟接口( )。wg0

我用于转发的命令127.0.0.1是:

sudo iptables -t nat -A PREROUTING -i wg0 -p tcp -d 10.66.66.1 --dport 53 -j DNAT --to-destination 127.0.0.1:53
sudo iptables -t nat -A PREROUTING -i wg0 -p udp -d 10.66.66.1 --dport 53 -j DNAT --to-destination 127.0.0.1:53
sudo iptables -I INPUT -i wg0 -p tcp -m tcp -d 10.66.66.1 --dport 53 -j ACCEPT
sudo iptables -I INPUT -i wg0 -p udp -m udp -d 10.66.66.1 --dport 53 -j ACCEPT
sudo iptables -A FORWARD -p tcp --dport 53 -j ACCEPT
sudo iptables -A FORWARD -p udp --dport 53 -j ACCEPT

其中wg0是 wireguard VPN 的界面。运行正常。

以及我用于转发到的命令127.0.0.53是(唯一的区别是我改为127.0.0.1127.0.0.53,并且删除了之前的6条规则,然后添加了以下新规则):

sudo iptables -t nat -A PREROUTING -i wg0 -p tcp -d 10.66.66.1 --dport 53 -j DNAT --to-destination 127.0.0.53:53
sudo iptables -t nat -A PREROUTING -i wg0 -p udp -d 10.66.66.1 --dport 53 -j DNAT --to-destination 127.0.0.53:53
sudo iptables -I INPUT -i wg0 -p tcp -m tcp -d 10.66.66.1 --dport 53 -j ACCEPT
sudo iptables -I INPUT -i wg0 -p udp -m udp -d 10.66.66.1 --dport 53 -j ACCEPT
sudo iptables -A FORWARD -p tcp --dport 53 -j ACCEPT
sudo iptables -A FORWARD -p udp --dport 53 -j ACCEPT

此外,我启用了端口转发:

sudo sysctl net.ipv4.ip_forward=1
sudo sysctl -w net.ipv4.conf.eth0.route_localnet=1 # physical interface
sudo sysctl -w net.ipv4.conf.lo.route_localnet=1 # loopback interface
sudo sysctl -w net.ipv4.conf.wg0.route_localnet=1 # wireguard interface
sudo sysctl -w net.ipv4.conf.all.route_localnet=1

以及默认策略INPUT并且// chainsOUTPUT的是。FORWARDACCEPT

我有两个问题:

  1. 我如何将 DNS 查询重定向至127.0.0.53
  2. 我检查了 iptables 的过滤字节(iptables -L -viptables -t nat -L -v),为什么我看不到任何被转发链过滤的数据包?即使数据包被重定向到127.0.0.1正确重定向到?

我试图解决的真正问题是,服务stubby(加密 DNS 服务)正在端口 上监听127.0.0.1:53,我也可以将其设置为监听10.66.66.1:53(VPN 接口),但是,存根服务忽略了 中的静态 DNS 绑定,这可以通过将 DNS 请求发送到(服务)/etc/hosts来解决,并且我需要为所有 VPN 客户端提供一些静态 DNS 绑定。127.0.0.53systemd-resolved

答案1

我不会尝试使用systemd 已解决作为您网络的 DNS 服务器。

只需运行域名系统,它将加载 的内容,/etc/hosts以便可以解析未出现在全局 DNS 中的本地主机名,并通过将其转发到您选择的 DNS 服务器 (即存根) 来回答其他 DNS 查询。

然后将 dnsmasq 作为解析器监听的 IP 地址推送给您的 VPN 用户(或者配置您想要对 DNS 流量执行的任何转发)。

相关内容