#!/bin/bash

# ==================== 脚本信息 ====================
# 脚本文件名：setup_dns.sh
# 修订版本：1.0
# 日期：2025/04/23
# 作者：Jack.liu
# 电子邮件：lqf@xlsys.cn
# 网址：www.xlsys.cn
# 脚本功能描述：
# 此脚本用于配置系统的 DNS 设置。
# 支持两种模式：
# - public：配置公网 DNS（114.114.114.114 和 223.5.5.5）
# - private：配置电信内网 DNS（134.175.234.234 和 134.176.176.176）
# 使用方法：
# sudo ./setup_dns.sh {public|private}
# ==================================================

# 定义变量
RESOLV_CONF="/etc/resolv.conf"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")  # 获取当前时间戳
BACKUP_FILE="/etc/resolv.conf.bak_$TIMESTAMP"  # 带时间戳的备份文件名

# 检查参数是否提供
if [ $# -ne 1 ]; then
    echo "错误：必须提供一个参数（public 或 private）。"
    echo "用法：sudo $0 {public|private}"
    exit 1
fi

MODE=$1

# 检查参数是否有效
if [[ "$MODE" != "public" && "$MODE" != "private" ]]; then
    echo "错误：无效的参数 '$MODE'。"
    echo "用法：sudo $0 {public|private}"
    exit 1
fi

# 提醒用户
echo "注意：此脚本将修改 /etc/resolv.conf 文件，请确保您有权限操作。"
echo "原始文件将被备份为 ${BACKUP_FILE}。"

# 备份原始文件
if [ -f "$RESOLV_CONF" ]; then
    echo "正在备份原始 /etc/resolv.conf 文件..."
    sudo cp "$RESOLV_CONF" "$BACKUP_FILE"
else
    echo "/etc/resolv.conf 文件不存在，将创建新文件。"
    sudo touch "$RESOLV_CONF"
fi

# 清理或注释现有的 nameserver 配置
echo "正在清理或注释现有的 nameserver 配置..."
sudo sed -i 's/^nameserver/#nameserver/' "$RESOLV_CONF"

# 根据模式添加新的 DNS 配置
if [ "$MODE" == "public" ]; then
    echo "正在配置公网 DNS..."
    sudo bash -c "echo 'nameserver 223.5.5.5' >> $RESOLV_CONF"
    sudo bash -c "echo 'nameserver 223.6.6.6' >> $RESOLV_CONF"
elif [ "$MODE" == "private" ]; then
    echo "正在配置电信内部 DNS..."
    sudo bash -c "echo 'nameserver 134.175.234.234' >> $RESOLV_CONF"
    sudo bash -c "echo 'nameserver 134.176.176.176' >> $RESOLV_CONF"
fi

# 检查并展示当前 DNS 配置
echo "当前 /etc/resolv.conf 配置如下："
cat "$RESOLV_CONF"

# 提示完成
echo "DNS 配置已完成！备份文件为：${BACKUP_FILE}"