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