将 dnsmasq DNS 绑定到 localhost(127.0.0.1)

将 dnsmasq DNS 绑定到 localhost(127.0.0.1)

我想问一个关于配置 dnsmasq DNS 服务器的问题。我知道有“listen-address”这样的配置选项。但即使我将此选项设置为“listen-address=127.0.0.1”,dnsmasq 仍然会在内部 127.0.0.1:53 和外部 192.168.xx:53 端打开端口。

所以我想问一下是否可以配置 dnsmasq 以便它仅为本地主机(127.0.0.1)打开端口 53,例如 MySQL 数据库也可以这样做。

# Configuration file for dnsmasq.

port=53
proxy-dnssec
no-resolv
no-poll
server=127.0.0.1#[some port here]
server=127.0.0.1#[some another port here]
listen-address=127.0.0.1
no-hosts

答案1

我必须添加bind-interfaces到配置文件中,以便接口和监听地址能够达到预期的效果。例如:

interface=
bind-interfaces

dnsmasq将始终监听lo,因此您不必明确添加该项,只需不再添加即可。这将达到仅监听本地主机的预期效果。

答案2

是的,你可以这么做

dnsmasq 手册页对此进行了说明- 界面争论:

 -i, --interface=<interface name>
          Listen only on the specified interface(s). Dnsmasq automatically adds the loopback (local) interface to the list of interfaces  to  use
          when  the  --interface option  is used. If no --interface or --listen-address options are given dnsmasq listens on all available inter‐
          faces except any given in --except-interface options. IP alias interfaces (eg "eth1:0") cannot be used with  --interface  or  --except-
          interface  options,  use  --listen-address  instead.  A  simple  wildcard, consisting of a trailing '*', can be used in --interface and
          --except-interface options.

lo在大多数系统上,接口名称默认为 localhost/127.0.0.1 。

你可以像这样把它放在你的配置文件中

interface=lo

或者在命令行中指定它,如下所示

dnsmasq --interface=lo

答案3

除非编辑代码并重新编译,否则无法阻止这个愚蠢的程序监听所有端口。“bind-interfaces”选项毫无用处,它会阻止来自内部网上其他机器的任何访问。我希望它可以在内部网上访问,但不能在互联网上访问。但它坚持监听 udp6,这显然是全局的。描述中有些胡言乱语

It then  discards  requests  that it shouldn't reply to...

问题只是它如何定义“应该”。它绝对不应该做的是允许每个觉得连接到我的 dnsmasq 服务器并将其用作 DNS 解析器很有趣的白痴通过 ipv6 进行访问。这个程序是一个巨大的安全漏洞。

此外,dnsmasq 正在监听 tcp + tcp6。什么,过去 2 分钟内发生了什么变化?因为两分钟前,当我的浏览器查询 google DNS 来访问这个网站时,DNS 是一个 udp 协议。但是,嘿,也许他们改变了这一点,DNS 现在变成了 tcp。

因此,无论如何,首先下载源代码:

https://thekelleys.org.uk/gitweb/?p=dnsmasq.git

然后,在 network.c 中,函数“make_sock”在最开始处:

if (family == AF_INET6 || type == SOCK_STREAM) return 1;

瞧,它现在只监听 UDP,DNS 也能顺利解析!唷!我还以为他们改变了 DNS 的工作方式呢,哈哈。

netstat -an | grep :53

udp        0      0 0.0.0.0:53              0.0.0.0:*

lsof -c dnsmasq | grep IPv

dnsmasq 473 root    4u     IPv4              24618      0t0   UDP *:domain

相关内容