.. _dnsmasq_in_studio: =================== Studio环境DNSmasq =================== 在 :ref:`studio_ip` 我最初使用静态IP地址来规划模拟集群的IP地址,但是随着模拟的复杂程度增加,虚拟服务器数量和IP的增加,使得维护主机 ``hosts`` 配置几近不可能,迫切需要通过自建DNS来实现动态管理。 我构建的个人小型局域网是基于 :ref:`pi_cluster` 以及 :ref:`jetson` 和 :ref:`studio` 混合网络,所有主机都有一个内部网络和外部网络: - 内部网络连接千兆小型交换机,采用 ``192.168.6.x`` 网段,实现内部管理功能 - 外部网络连接局域网,通过无线连接,动态获得IP地址 ``192.168.1.x`` 网段,对外提供服务访问 实际上在 :ref:`real` 数据中心,技术上规划也是需要将生产网络和管理网络分开,主要优点是: - 管控网络非常关键,在出现生产网络异常故障时,管控网络是唯一能够直接访问服务器,通过IPMI等管理方式排查异常等通道,包括带外日志检查,服务器重装OS,采集基础监控日志,终端登陆带外等 - 生产网络和管控网络隔离,可以避免互相干扰,同时提供了互为补充及容灾 在首次安装 :ref:`jetson` 或者 :ref:`raspberry_pi` 设备,以及通过网络方式安装Linux操作系统,都需要实现 DHCP 获得IP地址,并立即将服务器连接到Internet进行在线更新(生产环境为了安全和效率,需要自建软件仓库,例如 :ref:`centos_local_http_repo` ) ,否则首次启动都有可能无法完成(例如Jetson的SD卡首次启动必须联网)。所以,我在 ``内部网络`` 的 ``192.168.6.x`` 网段构建DHCP和DNS服务,提供应用服务器首次启动使用: - 动态分配IP地址仅限于一段地址 ``192.168.6.201 ~ 192.168.6.254`` - 在一台长期连接物联网的zcloud服务器上使用iptables的 masquerade 提供服务访问Internet网关,所以dhcp分配的gateway指向该地址 - 提供DNS代理,方便内部服务器解析IP地址 上述实现虽然也可以采用全能的ISC bind 和 ISC dhcp服务来实现,但是对于小于1000台服务器小型网络,未免杀鸡用牛刀了。所以我选择 :ref:`dnsmasq` 来实现: - 在外部网络(也就是我的模拟局域网)部署完整的DNS架构,通过 :ref:`bind` 实现复杂的面向大型Internet的DNS解析,实现DNSSEC以及DDNS等技术,多域名 - 在内部网络(也就是模拟管控网络)部署dnsmasq,指向外部解析DNS是我部署的bind服务器,这种级连方式,可以模拟出小型网络和大型网络的DNS层级关系