企业内部如果不启用域名DNS服务,服务器就只能通过IP进行访问了。除了传统的bind解决方案,推荐一个新的DNS解决方案:blocky

blocky除了可以做到DNS中继,内部域名映射,还可以做到去广告和黑白名单。
blocky 的Github项目地址:
https://github.com/0xERR0R/blocky
blocky 是 go 语言开发的,编译对象可以做到全平台支持。在 Release 页面可以下载编译好的二进制文件,一个文件即可运行。

我们先看下效果,首先测试一下 blocky 的 DNS 中继功能,在配置文件中指定上游DNS服务器IP:
# cat config.yumupstream:default:- 8.8.8.8- 8.8.4.4port: 53# ./blocky --config config.yum

程序执行起来后,dns 服务器就搭好了,dns 解析会指向上游DNS服务器。我们在客户端测试一下:
c:\> ipconfig flushdnsc:\> nslookup www.baidu.com 192.168.10.23

测试结果显示,内部DNS服务器已经搭好了,使用的端口是 tcp/udp 53 端口:
# netstat -alnp| grep :53| grep blockyProto Local Address Foreign Address PID/Program nametcp6 :::53 :::* LISTEN 21937/blockyudp6 :::53 :::* 21937/blocky
除了DNS中继,我们实际上还需要为内网服务器分配域名,当内网域名与互联网冲突时,优先使用内网域名。
为内网服务器分配域名的配置文件示例:
# cat config.yumupstream:default:- 8.8.8.8- 8.8.4.4port: 53customDNS:customTTL: 1hmapping:www.google.com: 10.1.1.8www.oa.com: 10.1.1.8oa.com: 10.1.1.8oa.xyz.com: 10.1.1.8www.it.com: 192.168.10.200# ./blocky --config config.yum
我们同样使用客户端测试内网域名是否能解析成功:
c:\> ipconfig flushdnsc:\> nslookup www.oa.com 192.168.10.23c:\> nslookup www.it.com 192.168.10.23

除了可以正向解析,我们还可以通过IP查询服务器IP所对应的所有域名。在Linux下执行 nslookup,通过IP查域名:

测试内网DNS域名已经解析成功,我们将DNS配置至网卡,然后到浏览器中试试:

配置完后,打开浏览器,输入域名,看是否能正常访问:

输入内网域名 www.oa.com,页面成功指向了内部服务。在内网域名配置中可以强行把外部域名映射至内部IP,比如:
customDNS:customTTL: 1hmapping:www.google.com: 10.1.1.8
当访问 www.google.com 时会自动跳转至内部分服务器,内网域名的优先级要比上游DNS的优先级要高。
除了DNS的基本功能,blocky 还具有去广告,黑名单的功能。并且它可以根据网段启用不同的上游DNS策略:
upstream:default:- 5.9.164.112- 1.1.1.1- tcp-tls:fdns1.dismail.de:853- https://dns.digitale-gesellschaft.ch/dns-querylaptop*:- 123.123.123.12310.43.8.67/28:- 1.1.1.1- 9.9.9.9
示例中,默认的上游DNS服务器使用default,hostname 为 laptop* 的,比如作者的笔记本使用 123.123.123.123,而10.43.8.67/28 网段使用 1.1.1.1 和 9.9.9.9 作为上游DNS服务器。
去广告和黑名单的配置,可以参考官方文档,这里没有测试就不做介绍了:
https://0xerr0r.github.io/blocky/configuration/





