Когда DNS внезапно падает, проблемы выглядят как сбой сети или сервиса. Чтобы не гадать, можно сделать простой механизм: проверяем DNS и если не отвечает, то временно переключаемся на резервный сервер.
🛠 Базовый скрипт
#!/bin/bash
TEST_DOMAIN="google.com"
PRIMARY_DNS="8.8.8.8"
FALLBACK_DNS="1.1.1.1"
RESOLV="/etc/resolv.conf"
BACKUP="/tmp/resolv.conf.bak"
if dig +time=2 +tries=1 "$TEST_DOMAIN" @"$PRIMARY_DNS" > /dev/null; then
echo "DNS доступен"
exit 0
fi
echo "DNS недоступен, переключаемся на fallback"
cp "$RESOLV" "$BACKUP"
cat > "$RESOLV" <<EOF
nameserver $FALLBACK_DNS
EOF
dig - быстрая проверка реального DNS-запроса
+time и +tries - не зависаем надолго
resolv.conf сохраняется перед изменением
▪️ Автовосстановление (по cron)
if dig "$TEST_DOMAIN" @"$PRIMARY_DNS" > /dev/null && [ -f "$BACKUP" ]; then
mv "$BACKUP" "$RESOLV"
fi
⚠️ Обратить внимание
В системах с systemd-resolved или NetworkManager resolv.conf может перезаписываться;
Для серверов лучше использовать resolvectl или override конфигурации;
Скрипт требует root.
BashTex 📱 #bash