通过coredns镜像,nerdctl run启动dns服务器,监听53端口,
启动dns:bash run-tmp-dns.sh -d lyx.nginx.com=10.44.70.210,2003:db8::11 -d test.com=1.1.1.1
卸载:bash run-tmp-dns.sh -u
#!/bin/bash
set -e
IMAGE="registry.kylincloud.org:4001/kcc/kcc/coredns:v1.8.6"
CONTAINER_NAME="temp-coredns"
WORKDIR="/opt/temp-coredns"
DNS_PORT=53
usage() {
cat <<EOF
Usage:
Start DNS:
$0 -d domain=ip[,ip] [-d domain=ip]
Uninstall:
$0 -u
Example:
$0 -d test1.com=10.42.1.10,2001:db8::10 -d test2.com=10.42.1.20
$0 -u
EOF
exit 1
}
uninstall() {
echo "remove container ${CONTAINER_NAME}"
nerdctl rm -f ${CONTAINER_NAME} >/dev/null 2>&1 || true
echo "remove config ${WORKDIR}"
rm -rf ${WORKDIR}
echo "done"
exit 0
}
declare -a DOMAINS
while getopts "d:u" opt; do
case $opt in
d)
DOMAINS+=("$OPTARG")
;;
u)
uninstall
;;
*)
usage
;;
esac
done
if [ ${#DOMAINS[@]} -eq 0 ]; then
usage
fi
mkdir -p ${WORKDIR}
cat > ${WORKDIR}/Corefile <<EOF
.:53 {
errors
log
hosts {
EOF
for item in "${DOMAINS[@]}"; do
domain=$(echo "$item" | cut -d= -f1)
ips=$(echo "$item" | cut -d= -f2)
IFS=',' read -ra IP_ARRAY <<< "$ips"
for ip in "${IP_ARRAY[@]}"; do
echo " ${ip} ${domain}" >> ${WORKDIR}/Corefile
done
done
cat >> ${WORKDIR}/Corefile <<EOF
fallthrough
}
cache 30
}
EOF
echo "Corefile:"
cat ${WORKDIR}/Corefile
nerdctl rm -f ${CONTAINER_NAME} >/dev/null 2>&1 || true
nerdctl run -d \
--name ${CONTAINER_NAME} \
--restart always \
-p ${DNS_PORT}:53/udp \
-p ${DNS_PORT}:53/tcp \
-v ${WORKDIR}/Corefile:/etc/coredns/Corefile:ro \
${IMAGE} \
-conf /etc/coredns/Corefile
NODE_IP=$(hostname -I | awk '{print $1}')
echo
echo "DNS started: ${NODE_IP}:${DNS_PORT}"
echo "Test:"
echo " dig @${NODE_IP} domain A"
echo " dig @${NODE_IP} domain AAAA"