如何在 systemd-resolved 中为 DNS 设置自定义端口

如何在 systemd-resolved 中为 DNS 设置自定义端口

我想将端口为 8600 的本地 DNS 服务器添加到 systemd-resolved 以转发请求。我尝试像这样更改 /etc/systemd/resolved.conf

[Resolve]
DNS=127.0.0.1#8600

但这不算作移植(顺便说一句,: 也没有用)

有没有办法做到这一点?

答案1

systemd-resolved并不以功能齐全的配置选项而闻名!但我认为,只要使用一点iptables魔法,您就可以使用它。首先执行以下操作:

[Resolve]
DNS=127.0.0.52 #instead of 127.0.0.53 which is systemd-resolved itself.

当然,您可以选择 2-255 之间的任何其他数字。只是不要使用 53 本身。

然后,您必须使用 重定向所有发往 的数据包。127.0.0.1:53这是我最好的未经测试的尝试:127.0.0.52:53iptables(我没有你的环境来测试这个,如果我错了请纠正我)

iptables -t nat -I OUTPUT -d 127.0.0.1 --dport 53 -j REDIRECT --to-destination 127.0.0.52 --to-ports 53

最后,您可能应该使此配置在重新启动时持久保留。iptables-persistent可能会有所帮助。

一些有用的链接:

答案2

您可以简单地指定端口(至少与 DoT 兼容):

[Resolve]
DNS=<ip>:<port>#<domain>
DNSOverTLS=yes

答案3

我根据 Keith Langmead 的回答解决了同样的问题:关联

配置/etc/resolv.conf文件不支持任何形式的备用端口号,因此只能通过端口 53 进行本地连接。

实现您所寻找的唯一方法是在中间放置一些东西来从客户端接收端口 53 请求,将其更改为使用另一个端口,然后将该请求传递到服务器。

其他人实现此目的的方法是使用 iptables 根据需要重新路由该内部请求。示例:

iptables -t nat -A OUTPUT -p tcp -d 127.0.0.1 --dport 53 -j DNAT --to-destination 127.0.0.1:8600
iptables -t nat -A OUTPUT -p udp -d 127.0.0.1 --dport 53 -j DNAT --to-destination 127.0.0.1:8600

您可以简单地使用不同的 IP 来代替127.0.0.1

相关内容