问题是我需要将传入的 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.1
了127.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
的是。FORWARD
ACCEPT
我有两个问题:
- 我如何将 DNS 查询重定向至
127.0.0.53
? - 我检查了 iptables 的过滤字节(
iptables -L -v
和iptables -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.53
systemd-resolved
答案1
我不会尝试使用systemd 已解决作为您网络的 DNS 服务器。
只需运行域名系统,它将加载 的内容,/etc/hosts
以便可以解析未出现在全局 DNS 中的本地主机名,并通过将其转发到您选择的 DNS 服务器 (即存根) 来回答其他 DNS 查询。
然后将 dnsmasq 作为解析器监听的 IP 地址推送给您的 VPN 用户(或者配置您想要对 DNS 流量执行的任何转发)。