至此,一个鱼与熊掌不可兼得的问题出现了,使用微软的DNS可以快速访问微软服务,但访问部分国内站点有问题;使用国内运营商的DNS,国内站点访问正常,但是微软等部分国外站点访问有问题。于是心中涌现出一个疑问,有没有一个解决方案,可以在访问国外站点的时候,使用微软的DNS服务器,而访问国内站点的时候使用运营商的DNS呢,终于皇天不负有心人,这个方案还真被我找到了。
方案的基本思路是,在Linux系统上通过DNSmasq,自己搭建一个DNS服务器,而DNSmasq允许为不同的域名配置不同的DNS服务器,这样就完美解决了我的问题。DNSmasq是一个非常小巧的开源软件,提供DHCP、DNS以及TFTP等很多功能,正因为其小巧、且功能强大,Openwrt系统采用它来作为DHCP及DNS服务器,而恰好笔者在网上有这么一台Openwrt的服务器。Openwrt因为采用了图形化的配置方式,因此完成上述功能的配置也非常的简单,具体见下图:
图中,关键设置的部分已经用红框标出,其中,“DNS转发”设置就是为不同的域名设置不同的解析服务器。因为笔者是希望面向外网提供DNS服务,因此“仅本地服务器”选项并未勾选。
做完上述配置后,只需要将系统的DNS服务器指向openwrt服务器就大功告成了。需要提醒的是:
如果像笔者一样,需要从外网访问DNS服务器,则需要打开openwrt的防火墙,允许从外网接口,访问TCP、UDP协议的53号端口;如果openwrt服务器本身就是局域网的出口路由器,则不需要上述防护墙的设置。
有关在Linux系统上dnsmasq的安装和配置的信息,网络上有很多,这里不再赘述,有兴趣的读者可以自行搜索。
更进一步,这个方法虽然可以解决我的问题,但是毕竟需要另外一台机器充当dns服务器,不是每个人都像笔者一样,恰好在公网上有一台可以用于折腾的openwrt服务器。为此,笔者正在考虑自己写一个简单的DNS服务器,并注册成为系统服务,随系统启动而自动启动,幸运的是网络上有开源的DNS空间库:ARSoft.Tools.Net,在该库的基础上,笔者只需要编写代码将其封装成为windows系统服务就行了,工作量应该很小。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)