#!/bin/bash# 仅 root 可执行if [[ $EUID -ne 0 ]]; then echo "❌ 请以 root 权限运行此脚本" exit 1fiDNS_CONTENT="nameserver 144.24.24.42nameserver 137.131.50.50nameserver 1.1.1.1nameserver 8.8.8.8"RESOLVED_CONF="/etc/systemd/resolved.conf"RESOLV_CONF="/etc/resolv.conf"BACKUP_RESOLVED="${RESOLVED_CONF}.bak"BACKUP_RESOLV="${RESOLV_CONF}.bak"echo "🛠️ 请选择操作:"echo "1) 🔓 启用 DNS 解锁(修改 DNS)"echo "2) 🔁 恢复默认 DNS 配置"echo "3) 🔍 查询当前 DNS 配置"read -rp "请输入选项编号 [1-3]: " choiceif [[ "$choice" == "1" ]]; then echo "🔧 正在设置 DNS 解锁配置..." if grep -qi "alpine" /etc/os-release; then echo "🔧 检测到 Alpine 系统,正在配置 /etc/resolv.conf ..." else if [ -f "$RESOLVED_CONF" ] && command -v systemctl &>/dev/null; then echo "🔧 检测到 systemd-resolved,正在配置..." # 备份配置(覆盖旧备份) cp "$RESOLVED_CONF" "$BACKUP_RESOLVED" sed -i '/^\[Resolve\]/,/^\[.*\]/s/^DNS=.*$/DNS=144.24.24.42 137.131.50.50/' "$RESOLVED_CONF" sed -i '/^\[Resolve\]/,/^\[.*\]/s/^FallbackDNS=.*$/FallbackDNS=1.1.1.1 8.8.8.8/' "$RESOLVED_CONF" grep -q "^DNS=" "$RESOLVED_CONF" || sed -i '/^\[Resolve\]/a DNS=144.24.24.42 137.131.50.50' "$RESOLVED_CONF" grep -q "^FallbackDNS=" "$RESOLVED_CONF" || sed -i '/^\[Resolve\]/a FallbackDNS=1.1.1.1 8.8.8.8' "$RESOLVED_CONF" sed -i 's/^#*DNSStubListener=.*/DNSStubListener=no/' "$RESOLVED_CONF" ln -sf /run/systemd/resolve/resolv.conf "$RESOLV_CONF" systemctl restart systemd-resolved fi fi if [ ! -e "$RESOLV_CONF" ]; then echo "⛑️ /etc/resolv.conf 不存在,正在创建..." touch "$RESOLV_CONF" fi if [ -L "$RESOLV_CONF" ] && [ ! -e "$(readlink -f $RESOLV_CONF)" ]; then echo "🔧 检测到无效符号链接,正在修复..." rm -f "$RESOLV_CONF" touch "$RESOLV_CONF" fi # 备份 resolv.conf cp "$RESOLV_CONF" "$BACKUP_RESOLV" echo "$DNS_CONTENT" > "$RESOLV_CONF" echo "✅ DNS 设置完成。当前内容如下:" cat "$RESOLV_CONF" echo -e "\n🌐 测试 DNS 查询 google.com :" dig +short google.com || nslookup google.comelif [[ "$choice" == "2" ]]; then echo "🔁 正在恢复默认 DNS 设置..." # 恢复 /etc/systemd/resolved.conf if [ -f "$BACKUP_RESOLVED" ]; then echo "✅ 正在恢复 $RESOLVED_CONF" cp "$BACKUP_RESOLVED" "$RESOLVED_CONF" else echo "⚠️ 未找到 $BACKUP_RESOLVED,使用默认空配置恢复" echo -e "[Resolve]\nDNS=\nFallbackDNS=\nDNSStubListener=yes" > "$RESOLVED_CONF" fi # 恢复 /etc/resolv.conf 为 systemd 默认 stub 链接 echo "🔄 正在恢复 /etc/resolv.conf 为默认符号链接..." rm -f "$RESOLV_CONF" ln -s /run/systemd/resolve/stub-resolv.conf "$RESOLV_CONF" # 重启服务 systemctl restart systemd-resolved echo "🎉 DNS 配置已恢复为 systemd 默认状态" echo -e "\n📄 当前 resolv.conf 内容:" cat "$RESOLV_CONF"elif [[ "$choice" == "3" ]]; then echo "🔍 当前系统 DNS 配置如下:" echo "----------------------------" if command -v systemd-resolve &>/dev/null; then systemd-resolve --status | grep -A2 'DNS Servers' elif command -v resolvectl &>/dev/null; then resolvectl status | grep 'DNS Servers\|Fallback DNS Servers' else echo "📄 /etc/resolv.conf 内容:" cat "$RESOLV_CONF" fi echo -e "\n🌐 测试 DNS 查询 google.com :" dig +short google.com || nslookup google.comelse echo "❌ 无效输入,请输入 1-3" exit 1fi
评论 (0)