在少量部署的虚拟机环境中,通过简单维护各个主机 /etc/hosts
一致,就能够实现主机解析。但是,一旦开始大规模通过 clone_vm_rbd
zdata_ceph_rbd_libvirt
,就很难实时更新每个虚拟机的 hosts
配置文件。更何况后续还会 priv_cloud_infra
构建 kvm_nested_virtual
,构建数以百计的虚拟机。所以,我们需要构建一个因特网非常基础的 dns
,来提供整个基础架构的域名解析。
当然,大规模基础架构,我们会选择久经考验坚如磐石的 bind
(然而非常复杂),但是为了快速搭建 staging
环境,我首先选择 dnsmasq
来完成原型,待后续不断优化后再升级到 Bind 构建真正的因特网基础设施。
dnsmasq是小型网络的轻量级DNS/TFTP和DHCP服务器,特别适合小型网络的快速构建,以及宽带共享路由器的局域网基础服务。
ubuntu安装:
sudo apt install dnsmasq
/etc/dnsmasq.conf
配置:
../../infra_service/dns/dnsmasq/deploy_dnsmasq/dnsmasq.conf
上述配置:
- 指定默认域名
staging.huatai.me
并提供DNS解析服务- 绑定DNS请求服务网络接口IP
listen-address
- 指定上游域名解析服务器
server
- 同时对网络中提供DHCP服务,以便
airport_express_with_dnsmasq_ics
客户端能动态获得IP配置
- 执行一个简单的脚本,生成
/etc/hosts
,这个配置将被dnsmasq
加载作为域名解析配置:
priv_dnsmasq_ics/deploy_dnsmasq.sh
执行该脚本,根据 priv_cloud_infra
规划的主机列表生成 /etc/hosts
文件:
./deploy_dnsmasq.sh
- 注意,系统使用了
systemd_resolved
和netplan
,在系统安装时候通过netplan
已经配置了 802.1x 网络动态获取IP地址:
../../linux/ubuntu_linux/network/netplan/01-eno4-config.yaml
所以 netplan
会配置 systemd-resolved
服务使用DHCP获得的DNS服务器,我们需要覆盖这个配置,采用本地运行的 dnsmasq
来提供解析: 修订 /etc/systemd/resolved.conf
:
[Resolve]
DNS=127.0.0.1
Domains=staging.huatai.me
然后重启 systemd-resolved
服务:
sudo systemctl daemon-reload
sudo systemctl restart systemd-networkd
sudo systemctl restart systemd-resolved
(可选)命令行修订 systemd-resolv
配置:
sudo systemd-resolve --interface eno4 --set-dns 127.0.0.1 --set-domain staging.huatai.me
不过,我发现重启 systemd-resolved
服务后,上述配置是叠加在DHCP配置上的,检查 /run/systemd/resolve/resolv.conf
可以看到:
nameserver 127.0.0.1
nameserver 8.8.8.8
search staging.huatai.me office.com
但是, dig
命令查询是正常的, resolv.conf
配置的 nameserver
是始终访问第一个 nameserver 127.0.0.1
,所以没有报错。(这和我很久以前学习 《DNS和Bind》 的记忆有差别,我记得是轮询所有 nameserver
的)
所有VM都需要配置 systemd_resolved
采用 zcloud
上部署的DNS服务器(dnsmasq)
修订VM以及模版VM /etc/netplan/01-netcfg.yaml
:
...
nameservers:
search: [ staging.huatai.me ]
addresses:
- "192.168.6.200"
然后执行:
sudo netplan apply
完成DNS解析器配置,采用 192.168.6.200
(zcloud) 的DNS进行域名解析。
Fedora使用 networkmanager
管理网络,使用以下命令修订DNS:
# nmcli可以直接修订配置
nmcli connection modify enp1s0 ipv4.dns "192.168.6.200" ipv4.dns-search "staging.huatai.me"
# 需要up刷新才能生效
nmcli connection up id "enp1s0"
上述命令会修订 /etc/NetworkManager/system-connections/enp1s0.nmconnection
对应配置
DNSmasq不仅提供了DNS解析,也同时为内部局域网提供了DHCP服务,以便 airport_express_with_dnsmasq_ics
客户端能够访问Internet
- 在
zcloud
上执行ics.sh
脚本为局域网内部主机提供共享因特网:
priv_dnsmasq_ics/ics.sh