记录MacOS搭建dns服务。

一、背景

当我们的系统平台是提供给众多企业使用(是支持多租户的),通过子域名来区分不同租户。在开发测试阶段,最直接的方法是修改hosts文件来修改域名的指向。起初也是用这种方法作为支撑的,但是发现了hosts文件存在一个问题,它不支持通配符,所以每次新增一个租户,便要修改一次hosts文件。尽管这类工作并不频繁,但也觉之繁琐,于是便决定使用一劳永逸的办法,搭建本地的DNS服务。

二、多租户

通过subdomain来实现业务数据的隔离,大致流程如下图: tenants

1. 修改hosts文件方式

通过修改hosts文件内容,便可实现域名到指定ip的映射,由于不支持通配符(*.saas.com),每加一个租户便要修改此文件。

vim /etc/hosts
#追加以下内容:
192.168.1.10 org_a.saas.com  org_b.saas.com  org_c.saas.com

2. 修改dnsmasq配置文件方式

通过修改dnsmasq.conf文件内容,支持通配符(*.saas.com)到指定ip的映射;但是要搭建DNS服务。

vim $(brew --prefix)/etc/dnsmasq.conf
#追加以下内容:
address=/.saas.com/192.168.1.10

三、搭建DNS服务

1. MacOS搭建

个人使用时,可以直接在自己的机器上搭建DNS服务,具体步骤如下:

1.1 初次搭建

  1. 安装:brew install dnsmasq
  2. 追加配置:vim $(brew --prefix)/etc/dnsmasq.conf
    #上游DNS
    server=8.8.8.8
    server=4.4.4.4
    server=223.5.5.5
    
    #服务监听地址,设置为127.0.0.1仅限本机使用
    #listen-address=127.0.0.1
    #服务监听地址,设置为本机在局域网中的地址(192.168.1.10)可以提供给局域网内的其他主机使用
    listen-address=192.168.1.10,127.0.0.1
    
    #监听端口,默认配置
    port=53
    
    #dns解析记录 不使用通配符
    address=/test.com/127.0.0.1
    
    #dns解析记录 使用通配符
    address=/.saas.com/192.168.1.10
    
  3. 验证配置语法:dnsmasq --test
    dnsmasq: syntax check OK.
    
  4. 启动服务: sudo brew services start dnsmasq
  5. 刷新DNS: sudo killall -HUP mDNSResponder
  6. 配置DNS: 添加127.0.0.1位于第一位 dns

1.2 追加映射步骤

目标:添加域名 *.test.cn 映射至 127.0.0.1;参照以下步骤即可:

  1. 追加配置信息:echo 'address=/.test.cn/127.0.0.1' >> $(brew --prefix)/etc/dnsmasq.conf
  2. 重启服务:sudo brew services restart dnsmasq
  3. 刷新DNS: sudo killall -HUP mDNSResponder
  4. 验证:nslookup a.test.cn
    Server:   127.0.0.1
    Address:  127.0.0.1#53
    
    Name:    a.test.cn
    Address: 127.0.0.1
    

2. Linux搭建

团队使用时,可以选择在服务器上搭建DNS服务,供团队所有成员使用。

  1. 搭建dnsmasq服务
  2. 配置路由器DNS router

四、dnsmasq

1. 简介

dnsmasq 提供 DNS 缓存和 DHCP 服务功能。
作为域名解析服务器(DNS),通过缓存 DNS 请求来提高对访问过的网址的连接速度。
作为DHCP 服务器,dnsmasq 可以用于为局域网电脑分配内网ip地址和提供路由。

2. 主要作用

  1. 指定域名解析到特定的IP上。
  2. 智能DNS加快解析速度,为不同的根域名指定不同的上游DNS服务。
    #国内指定DNS
    server=/cn/114.114.114.114
    #国外指定DNS
    server=/google.com/8.8.8.8
    
  3. 屏蔽网页广告,将广告域名解析至本地ip。

五、总结

尽管修改hosts是最便捷的方式,但是对于整个团队而言,人人都频繁的修改自己机器的hosts文件,个人感觉也是一件很麻烦的事情;于是选择了dnsmasq服务,事实上,也达到了目的,修改配置文件的频率也大大降低了。