#!/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 "- 如遇问题,可恢复备份的配置文件"