#!/bin/bash

#######################################################################
# Ubuntu 系统双网卡配置脚本                                            #
# 功能：配置一个网卡使用DHCP，另一个网卡设置静态IP 192.168.1.111      #
# 作者：系统管理员                                                    #
# 版本：1.0                                                           #
# 适用系统：Ubuntu 18.04及以上（使用netplan的Ubuntu系统）             #
#######################################################################

# 错误时退出
set -e

# 设置脚本执行权限
chmod +x "$0"

echo "开始网络配置设置..."

# 检查是否为root用户或有sudo权限
if [ "$(id -u)" -ne 0 ]; then
    echo "错误：请使用sudo或以root用户身份运行此脚本"
    exit 1
fi

# 获取系统上的网络接口列表（排除回环接口）
echo "检测到的网络接口："
interfaces=$(ip -o link show | awk -F': ' '{print $2}' | grep -v lo)

# 显示所有网络接口
for iface in $interfaces; do
    echo "- $iface"
done

# 将接口保存到数组
interface_array=($interfaces)

# 检查是否至少有两个网络接口
if [ ${#interface_array[@]} -lt 2 ]; then
    echo "警告：系统上检测到的网络接口少于2个"
    echo "请确保系统有两个可用的网络接口，然后重试"
    exit 1
fi

# 选择前两个接口作为配置对象
# 注意：默认使用检测到的前两个接口，如需指定特定接口，请修改以下两行
DHCP_INTERFACE=${interface_array[0]}
STATIC_INTERFACE=${interface_array[1]}

echo ""
echo "将配置以下接口："
echo "- DHCP接口: $DHCP_INTERFACE"
echo "- 静态IP接口: $STATIC_INTERFACE (192.168.1.111/24)"

# 备份现有netplan配置（使用时间戳创建唯一的备份目录）
BACKUP_DIR="/etc/netplan/backup_$(date +%Y%m%d_%H%M%S)"
mkdir -p $BACKUP_DIR
cp -r /etc/netplan/* $BACKUP_DIR 2>/dev/null || true
echo "已备份现有netplan配置到: $BACKUP_DIR"
echo "如需恢复原始配置，可将备份目录中的文件复制回 /etc/netplan/"

# 创建新的netplan配置文件
# 文件名使用01-前缀确保优先级较高
CONFIG_FILE="/etc/netplan/01-network-config.yaml"
cat > $CONFIG_FILE << EOF
# 双网卡配置：一个DHCP，一个静态IP
# 生成时间: $(date)
network:
  version: 2          # netplan配置版本
  renderer: networkd  # 使用systemd-networkd作为后端
  ethernets:
    # DHCP接口配置
    $DHCP_INTERFACE:
      dhcp4: true     # 启用IPv4 DHCP
      dhcp6: true     # 启用IPv6 DHCP
    # 静态IP接口配置
    $STATIC_INTERFACE:
      addresses: [192.168.1.111/24]  # IP地址和子网掩码
      gateway4: 192.168.1.1          # 默认网关
      nameservers:
        addresses: [8.8.8.8, 8.8.4.4]  # DNS服务器（Google Public DNS）
EOF

echo ""
echo "已创建netplan配置文件: $CONFIG_FILE"
echo "配置内容如下："
cat $CONFIG_FILE

echo ""
echo "应用网络配置..."
# 应用netplan配置
echo "执行命令: sudo netplan apply"
netplan apply

# 验证配置是否成功应用
echo "验证网络配置..."
sleep 2  # 等待网络服务更新

echo ""
echo "配置已应用，显示当前网络配置："
ip addr show $DHCP_INTERFACE || echo "$DHCP_INTERFACE 接口可能需要重新连接"
ip addr show $STATIC_INTERFACE || echo "$STATIC_INTERFACE 接口可能需要重新连接"

echo ""
echo "网络配置脚本执行完成！"
echo "注意：如果网络连接未立即生效，请尝试重启网络服务或重启系统"
echo "重启网络服务命令：sudo systemctl restart systemd-networkd"
echo ""
echo "==== 使用说明 ===="
echo "1. 脚本会自动检测系统中的网络接口"
echo "2. 第一个检测到的接口将配置为DHCP模式"
echo "3. 第二个检测到的接口将配置为静态IP: 192.168.1.111/24，网关: 192.168.1.1"
echo "4. 如需自定义特定接口，请编辑脚本中的 DHCP_INTERFACE 和 STATIC_INTERFACE 变量"
echo "5. 如需修改静态IP配置，请编辑netplan配置文件中的相关参数"
echo "6. 脚本会自动备份原始配置到带时间戳的目录中"
echo ""
echo "==== 安全提示 ===="
echo "- 此脚本需要root权限才能运行"
echo "- 更改网络配置可能导致网络连接暂时中断"
echo "- 请在操作前确保您有其他方式访问系统（如控制台）"
echo "- 如遇问题，可恢复备份的配置文件"