企业内部如果不启用域名DNS服务,服务器就只能通过IP进行访问了。除了传统的bind解决方案,推荐一个新的DNS解决方案:blocky
blocky除了可以做到DNS中继,内部域名映射,还可以做到去广告和黑白名单。
blocky 的Github项目地址:
https://github.com/0xERR0R/blocky
blocky 是 go 语言开发的,编译对象可以做到全平台支持。在 Release 页面可以下载编译好的二进制文件,一个文件即可运行。
我们先看下效果,首先测试一下 blocky 的 DNS 中继功能,在配置文件中指定上游DNS服务器IP:
# cat config.yum
upstream:
default:
- 8.8.8.8
- 8.8.4.4
port: 53
# ./blocky --config config.yum
程序执行起来后,dns 服务器就搭好了,dns 解析会指向上游DNS服务器。我们在客户端测试一下:
c:\> ipconfig flushdns
c:\> nslookup www.baidu.com 192.168.10.23
测试结果显示,内部DNS服务器已经搭好了,使用的端口是 tcp/udp 53 端口:
# netstat -alnp| grep :53| grep blocky
Proto Local Address Foreign Address PID/Program name
tcp6 :::53 :::* LISTEN 21937/blocky
udp6 :::53 :::* 21937/blocky
除了DNS中继,我们实际上还需要为内网服务器分配域名,当内网域名与互联网冲突时,优先使用内网域名。
为内网服务器分配域名的配置文件示例:
# cat config.yum
upstream:
default:
- 8.8.8.8
- 8.8.4.4
port: 53
customDNS:
customTTL: 1h
mapping:
www.google.com: 10.1.1.8
www.oa.com: 10.1.1.8
oa.com: 10.1.1.8
oa.xyz.com: 10.1.1.8
www.it.com: 192.168.10.200
# ./blocky --config config.yum
我们同样使用客户端测试内网域名是否能解析成功:
c:\> ipconfig flushdns
c:\> nslookup www.oa.com 192.168.10.23
c:\> nslookup www.it.com 192.168.10.23
除了可以正向解析,我们还可以通过IP查询服务器IP所对应的所有域名。在Linux下执行 nslookup,通过IP查域名:
测试内网DNS域名已经解析成功,我们将DNS配置至网卡,然后到浏览器中试试:
配置完后,打开浏览器,输入域名,看是否能正常访问:
输入内网域名 www.oa.com,页面成功指向了内部服务。在内网域名配置中可以强行把外部域名映射至内部IP,比如:
customDNS:
customTTL: 1h
mapping:
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-query
laptop*:
- 123.123.123.123
10.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/