我想问一个关于配置 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