Mac使用DNSMasq时进行局域网共享遇到的坑

一开始我的DNSMASQ只用于本机使用,后面发现了一个透明代理神器Mellow之后,在将Mac作为网关的时候(listen-address=0.0.0.0)遇到了DNS解析错误的问题。

初战

经过排查发现原因是我默认的listen-address127.0.0.1,所以就只能本机使用DNS解析服务,没法跟局域网的设备共享。经过翻阅资料,得到了第一个解决方案,添加一个局域网IP的listen-address

1
listen-address=192.168.0.123

再现

第一个解决方案在没有更换网络的前提下还是很OK的,但是当我从公司回到家还想继续用Mac当网关的时候,又再次出现了DNS解析错误的问题。有了前面的经验,不难发现listen-address只加了公司的局域网IP,回到家之后IP变了,DNSMASQ的监听范围自然就出了问题。

再战

思考一下,是否可以将listen-address直接设置为0.0.0.0一步到位解决这个问题呢?经过Google发现确实是可行的。于是照葫芦画瓢,说干就干,把DNSMASQ的listen-address全部删掉已有的并新增一条:

1
listen-address=0.0.0.0

重启完DNSMASQ之后,我的Mac也解析不了DNS了,完蛋,大祸了。多次核对文章里并没有其他特殊设置项之后,我细看了一下,文章中并没有用Mac设置的案例,看来Linux下的DNSMASQ和Mac下的DNSMASQ设置存在一定的差异。

搜索引擎帮不了你的时候,你只能去啃文档。于是我打开了dnsmasq.conf,搜索listen-address的时候看到了有这么一行说明:

看到括号内的remember to include 127.0.0.1 if 110 # you use this.突然恍然大悟,心中暗骂。

最终解决方案,保留两条listen-address

1
2
listen-address=0.0.0.0
listen-address=127.0.0.1

隐患

listen-address=0.0.0.0似乎还是太奔放了一点,要是能指定到局域网网段就好了。不过便利总是要牺牲部分安全获取的,希望以后能有更优的方案吧。