一开始我的DNSMASQ
只用于本机使用,后面发现了一个透明代理神器Mellow
之后,在将Mac作为网关的时候(listen-address=0.0.0.0
)遇到了DNS解析错误的问题。
初战
经过排查发现原因是我默认的listen-address
是127.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
2listen-address=0.0.0.0
listen-address=127.0.0.1
隐患
listen-address=0.0.0.0
似乎还是太奔放了一点,要是能指定到局域网网段就好了。不过便利总是要牺牲部分安全获取的,希望以后能有更优的方案吧。