setup_network.sh 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. #!/bin/bash
  2. #######################################################################
  3. # Ubuntu 系统双网卡配置脚本 #
  4. # 功能:配置一个网卡使用DHCP,另一个网卡设置静态IP 192.168.1.111 #
  5. # 作者:系统管理员 #
  6. # 版本:1.0 #
  7. # 适用系统:Ubuntu 18.04及以上(使用netplan的Ubuntu系统) #
  8. #######################################################################
  9. # 错误时退出
  10. set -e
  11. # 设置脚本执行权限
  12. chmod +x "$0"
  13. echo "开始网络配置设置..."
  14. # 检查是否为root用户或有sudo权限
  15. if [ "$(id -u)" -ne 0 ]; then
  16. echo "错误:请使用sudo或以root用户身份运行此脚本"
  17. exit 1
  18. fi
  19. # 获取系统上的网络接口列表(排除回环接口)
  20. echo "检测到的网络接口:"
  21. interfaces=$(ip -o link show | awk -F': ' '{print $2}' | grep -v lo)
  22. # 显示所有网络接口
  23. for iface in $interfaces; do
  24. echo "- $iface"
  25. done
  26. # 将接口保存到数组
  27. interface_array=($interfaces)
  28. # 检查是否至少有两个网络接口
  29. if [ ${#interface_array[@]} -lt 2 ]; then
  30. echo "警告:系统上检测到的网络接口少于2个"
  31. echo "请确保系统有两个可用的网络接口,然后重试"
  32. exit 1
  33. fi
  34. # 选择前两个接口作为配置对象
  35. # 注意:默认使用检测到的前两个接口,如需指定特定接口,请修改以下两行
  36. DHCP_INTERFACE=${interface_array[0]}
  37. STATIC_INTERFACE=${interface_array[1]}
  38. echo ""
  39. echo "将配置以下接口:"
  40. echo "- DHCP接口: $DHCP_INTERFACE"
  41. echo "- 静态IP接口: $STATIC_INTERFACE (192.168.1.111/24)"
  42. # 备份现有netplan配置(使用时间戳创建唯一的备份目录)
  43. BACKUP_DIR="/etc/netplan/backup_$(date +%Y%m%d_%H%M%S)"
  44. mkdir -p $BACKUP_DIR
  45. cp -r /etc/netplan/* $BACKUP_DIR 2>/dev/null || true
  46. echo "已备份现有netplan配置到: $BACKUP_DIR"
  47. echo "如需恢复原始配置,可将备份目录中的文件复制回 /etc/netplan/"
  48. # 创建新的netplan配置文件
  49. # 文件名使用01-前缀确保优先级较高
  50. CONFIG_FILE="/etc/netplan/01-network-config.yaml"
  51. cat > $CONFIG_FILE << EOF
  52. # 双网卡配置:一个DHCP,一个静态IP
  53. # 生成时间: $(date)
  54. network:
  55. version: 2 # netplan配置版本
  56. renderer: networkd # 使用systemd-networkd作为后端
  57. ethernets:
  58. # DHCP接口配置
  59. $DHCP_INTERFACE:
  60. dhcp4: true # 启用IPv4 DHCP
  61. dhcp6: true # 启用IPv6 DHCP
  62. # 静态IP接口配置
  63. $STATIC_INTERFACE:
  64. addresses: [192.168.1.111/24] # IP地址和子网掩码
  65. gateway4: 192.168.1.1 # 默认网关
  66. nameservers:
  67. addresses: [8.8.8.8, 8.8.4.4] # DNS服务器(Google Public DNS)
  68. EOF
  69. echo ""
  70. echo "已创建netplan配置文件: $CONFIG_FILE"
  71. echo "配置内容如下:"
  72. cat $CONFIG_FILE
  73. echo ""
  74. echo "应用网络配置..."
  75. # 应用netplan配置
  76. echo "执行命令: sudo netplan apply"
  77. netplan apply
  78. # 验证配置是否成功应用
  79. echo "验证网络配置..."
  80. sleep 2 # 等待网络服务更新
  81. echo ""
  82. echo "配置已应用,显示当前网络配置:"
  83. ip addr show $DHCP_INTERFACE || echo "$DHCP_INTERFACE 接口可能需要重新连接"
  84. ip addr show $STATIC_INTERFACE || echo "$STATIC_INTERFACE 接口可能需要重新连接"
  85. echo ""
  86. echo "网络配置脚本执行完成!"
  87. echo "注意:如果网络连接未立即生效,请尝试重启网络服务或重启系统"
  88. echo "重启网络服务命令:sudo systemctl restart systemd-networkd"
  89. echo ""
  90. echo "==== 使用说明 ===="
  91. echo "1. 脚本会自动检测系统中的网络接口"
  92. echo "2. 第一个检测到的接口将配置为DHCP模式"
  93. echo "3. 第二个检测到的接口将配置为静态IP: 192.168.1.111/24,网关: 192.168.1.1"
  94. echo "4. 如需自定义特定接口,请编辑脚本中的 DHCP_INTERFACE 和 STATIC_INTERFACE 变量"
  95. echo "5. 如需修改静态IP配置,请编辑netplan配置文件中的相关参数"
  96. echo "6. 脚本会自动备份原始配置到带时间戳的目录中"
  97. echo ""
  98. echo "==== 安全提示 ===="
  99. echo "- 此脚本需要root权限才能运行"
  100. echo "- 更改网络配置可能导致网络连接暂时中断"
  101. echo "- 请在操作前确保您有其他方式访问系统(如控制台)"
  102. echo "- 如遇问题,可恢复备份的配置文件"