Shell脚本实现自动化网络配置变更

 

在网络管理领域,时常需要对网络配置进行变更,比如修改IP地址、子网掩码、网关,调整DNS服务器等。传统手动操作不仅耗时费力,还容易出错,尤其是在大规模网络环境中。而借助Shell脚本,我们能够实现网络配置变更的自动化,极大提升工作效率与准确性。本文将详细介绍如何利用Shell脚本来达成常见的网络配置自动化变更。

一、基本原理与前期准备

Shell脚本实现网络配置变更,本质是通过脚本调用系统命令,修改网络配置文件,并适时重启网络服务,使新配置生效。不同Linux发行版的网络配置文件与命令略有差异,例如:

• CentOS 6及之前版本:主要网络配置文件是/etc/sysconfig/network-scripts/ifcfg-ethX(X代表网卡编号),重启网络服务命令为service network restart。

• CentOS 7及之后版本:配置文件路径类似,但管理工具更多使用nmcli,重启网络服务命令是systemctl restart network 。

• Ubuntu:网络配置文件通常在/etc/network/interfaces,可使用ifup和ifdown命令管理网络接口,或用systemctl restart networking重启网络服务。

在编写脚本前,务必明确目标系统类型,确保脚本兼容性。同时,要提前规划好网络配置变更的具体内容,如新增IP地址、修改网关等。

二、修改IP地址与子网掩码

以CentOS 7系统为例,假设要将网卡eth0的IP地址从192.168.1.100修改为192.168.1.101,子网掩码从255.255.255.0改为255.255.0.0,脚本如下:
#!/bin/bash

# 备份原网络配置文件
cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0.bak

# 修改IP地址和子网掩码
sed -i 's/IPADDR=192.168.1.100/IPADDR=192.168.1.101/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/NETMASK=255.255.255.0/NETMASK=255.255.0.0/g' /etc/sysconfig/network-scripts/ifcfg-eth0

# 重启网络服务使配置生效
systemctl restart network

# 检查新配置是否生效
ifconfig eth0 | grep "inet "
脚本解释:

1. 使用cp命令备份原网络配置文件,防止修改出错无法恢复。

2. 利用sed命令,通过正则表达式搜索并替换原IP地址和子网掩码。

3. 执行systemctl restart network重启网络服务,应用新配置。

4. 最后使用ifconfig命令查看网卡配置,确认新IP地址和子网掩码已生效。

三、更改网关与DNS服务器

继续以CentOS 7为例,若要将网关从192.168.1.1改为192.168.0.1,同时将DNS服务器从默认改为8.8.8.8和8.8.4.4,脚本如下:
#!/bin/bash

# 备份原网络配置文件
cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0.bak

# 修改网关
sed -i 's/GATEWAY=192.168.1.1/GATEWAY=192.168.0.1/g' /etc/sysconfig/network-scripts/ifcfg-eth0

# 修改DNS服务器
sed -i 's/^DNS1=.*/DNS1=8.8.8.8/' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/^DNS2=.*/DNS2=8.8.4.4/' /etc/sysconfig/network-scripts/ifcfg-eth0
# 如果原文件没有DNS2相关行,添加DNS2配置
grep -q "DNS2" /etc/sysconfig/network-scripts/ifcfg-eth0 || echo "DNS2=8.8.4.4" >> /etc/sysconfig/network-scripts/ifcfg-eth0

# 重启网络服务使配置生效
systemctl restart network

# 检查新网关和DNS配置是否生效
route -n | grep "UG"
nmcli dev show eth0 | grep "IP4.DNS"
脚本解释:

1. 同样先备份原配置文件。

2. 用sed命令分别修改网关和DNS服务器配置。

3. 针对DNS服务器配置,不仅修改已有行,还处理了可能不存在第二DNS服务器配置行的情况,若不存在则追加。

4. 重启网络服务后,使用route -n查看路由表确认网关变更,用nmcli dev show查看网卡详细信息确认DNS服务器变更。

四、多网卡与复杂网络配置变更

当服务器存在多个网卡,且网络配置较为复杂时,编写脚本需更细致。例如,要为多网卡分别配置不同IP地址、子网掩码、网关和DNS,可参考以下脚本框架:
#!/bin/bash

# 定义网卡配置数组
declare -A nic_configs=(
    ["eth0"]="192.168.1.100/24,192.168.1.1,8.8.8.8,8.8.4.4"
    ["eth1"]="192.168.2.100/24,192.168.2.1,114.114.114.114,114.114.115.115"
)

for nic in "${!nic_configs[@]}"; do
    config=${nic_configs[$nic]}
    ip_subnet=$(echo $config | cut -d',' -f1)
    gateway=$(echo $config | cut -d',' -f2)
    dns1=$(echo $config | cut -d',' -f3)
    dns2=$(echo $config | cut -d',' -f4)

    # 备份原网络配置文件
    cp /etc/sysconfig/network-scripts/ifcfg-$nic /etc/sysconfig/network-scripts/ifcfg-$nic.bak

    # 修改IP地址、子网掩码、网关和DNS配置
    sed -i "s/IPADDR.*$/IPADDR=${ip_subnet%\/*}/" /etc/sysconfig/network-scripts/ifcfg-$nic
    sed -i "s/NETMASK.*$/NETMASK=${ip_subnet#*\/}/" /etc/sysconfig/network-scripts/ifcfg-$nic
    sed -i "s/GATEWAY.*$/GATEWAY=$gateway/" /etc/sysconfig/network-scripts/ifcfg-$nic
    sed -i "s/^DNS1=.*/DNS1=$dns1/" /etc/sysconfig/network-scripts/ifcfg-$nic
    sed -i "s/^DNS2=.*/DNS2=$dns2/" /etc/sysconfig/network-scripts/ifcfg-$nic
    grep -q "DNS2" /etc/sysconfig/network-scripts/ifcfg-$nic || echo "DNS2=$dns2" >> /etc/sysconfig/network-scripts/ifcfg-$nic
done

# 重启网络服务使配置生效
systemctl restart network

# 逐个检查各网卡配置是否生效
for nic in "${!nic_configs[@]}"; do
    ifconfig $nic | grep "inet "
    route -n | grep "UG" | grep $nic
    nmcli dev show $nic | grep "IP4.DNS"
done
此脚本利用关联数组nic_configs存储各网卡配置信息,通过循环对每个网卡进行配置修改、备份、重启网络服务以及生效检查操作,适用于复杂多网卡网络环境下的配置变更。

通过上述方法,利用Shell脚本实现自动化网络配置变更,可显著提升网络管理工作的效率与稳定性,减少人为错误,尤其适用于大规模网络部署与日常运维场景 。在实际应用中,可根据具体网络架构和需求,灵活调整和扩展脚本功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值