・DNSキャッシュサーバの構築
#-- unbound のインストール
yum install -y unbound
#-- unbound の起動
systemctl enable unbound
systemctl start unbound
#-- 再起動で resolv.conf が書き変わらないように設定変更
sed -i '/^\[main\]/a dns=none' /etc/NetworkManager/NetworkManager.conf
systemctl restart NetworkManager
#-- nameserverをunboundを優先して使用するように設定を変更
sed -i "1s/^/nameserver 127.0.0.1\n/" /etc/resolv.conf
・DNSコンテンツサーバの構築
#-- 変数に必要な値を代入
ZONE=masdon.life
IPV4=$(ip addr show eth0 | awk '/inet /{print $2}' | awk -F\/ '{print $1}')
IPV6=$(ip addr show eth0 | awk '/inet6 /&&/global/{print $2}' | awk -F\/ '{print $1}')
#-- nsd のインストールと設定
yum install -y nsd
cp -p /etc/nsd/nsd.conf{,.org}
#- zonefile の参照先を設定
cat <<_EOL_>> /etc/nsd/nsd.conf
zone:
name: ${ZONE}
zonefile: zone/${ZONE}.zone
_EOL_
#- global ip での bind を設定
sed -i -e "/^server/a\ ip-address: ${IPV4}" /etc/nsd/nsd.conf
sed -i -e "/^server/a\ ip-address: ${IPV6}" /etc/nsd/nsd.conf
#- zonefile を作成(PUBLICKKEYは、DKIMの共通鍵をメールサーバ構築時に入力する)
mkdir -p /etc/nsd/zone
cat <<_EOL_> /etc/nsd/zone/${ZONE}.zone
\$TTL 3600
@ IN SOA ${ZONE}. root.${ZONE}. (
$(date +%Y%m%d00) ; Serial
3600 ; Refresh
300 ; Retry
604800 ; Expire
86400 ; Minimum
)
@ IN NS ns01.${ZONE}.
IN NS ns02.${ZONE}.
IN A ${IPV4}
IN AAAA ${IPV6}
IN TXT "v=spf1 +ip4:${IPV4} +ip6:${IPV6} -all"
IN CAA 0 issue "letsencrypt.org"
IN MX 100 ${ZONE}.
_dmarc IN TXT "v=DMARC1; p=reject; rua=mailto:root@${ZONE}"
_adsp._domainkey IN TXT "dkim=discardable"
;default._domainkey IN TXT "v=DKIM1; k=rsa; p=PUBLICKKEY"
autoconfig IN CNAME ${ZONE}.
ns01 IN A ${IPV4}
ns01 IN AAAA ${IPV6}
ns02 IN A ${IPV4}
ns02 IN AAAA ${IPV6}
vps IN A ${IPV4}
vps IN AAAA ${IPV6}
_EOL_
#-- nsd の起動
systemctl enable nsd
systemctl start nsd
#-- 53/tcp,udp の port 解放
firewall-cmd --permanent --add-port=53/{tcp,udp}
firewall-cmd --reload
#-- ipv6 の global ip に疎通があるかを確認するスクリプトを作成
cat <<_EOL_> /usr/local/bin/ipv6upchk.sh
#!/bin/bash
PROC=\$1
IPV6=${IPV6}
for x in \$(seq 1 30)
do
ping6 -c 1 -W 1 \${IPV6} >/dev/null 2>&1
if [ $? -eq 0 ]
then
echo "\${PROC}: [\${IPV6}] is ready"
sleep 2
exit 0
fi
sleep 1
done
exit 1
_EOL_
chmod 755 /usr/local/bin/ipv6upchk.sh
#-- OS起動時に ipv6 の global ip に疎通があるかを事前に確認しないとGlobal IP での bind に失敗し nsd が起動してこないことがある為、チェックスクリプト ExecStartPreに登録する
sed -i '/^EnvironmentFile/a ExecStartPre=/usr/local/bin/ipv6upchk.sh nsd' /usr/lib/systemd/system/nsd.service
systemctl daemon-reload
#-- 設定したレコードがdigで引けるか確認する
dig @${IPV4} masdon.life soa +short
masdon.life. root.masdon.life. 2019010601 3600 300 604800 86400
・さくらのVPSのコンソールで逆引きに vps.masdon.life を設定する
・お名前ドットコムで該当ドメインのNSの設定を ns0[12].masdon.life に変更する