【附完整脚本,一键配置静态ip】虚拟机Linux(Centos7)系统静态IP设置


虚拟机Linux系统中通过DHCP获取IP地址的配置和静态IP设置

在虚拟机中,Linux操作系统的IP地址通常通过DHCP(动态主机配置协议)获取,DHCP在每次设备重启后都会重新获取IP地址,这可能导致IP地址频繁更换,为了避免这种情况,可以将网络模式更改为NAT模式,并手动设置静态IP地址。
下面对如何在Centos 设置固定IP进行总结:

1. 更改网络模式为NAT模式

在虚拟机软件中将网络模式更改为NAT模式,具体操作如下:

  1. 打开虚拟机的设置界面。
  2. 找到并选择网络适配器设置。
  3. 将网络连接方式更改为“NAT”模式。

更改网络模式

2. 设置虚拟机网络编辑器

  1. 点击编辑,打开虚拟机网络编辑器
  2. 选择NAT模式,并点击“NAT设置”。

打开网络编辑器

  1. 记录下子网IP、子网掩码和网关。

记录子网信息

3. 配置网络文件

进入到网络脚本目录,并修改相应的网络配置文件。

cd /etc/sysconfig/network-scripts/

使用ls命令查看目录下的文件,找到以ifcfg-en开头的文件。例如:

找到配置文件

使用vim编辑器打开该文件(例如ifcfg-ens33):

vim ifcfg-ens33

3.1 修改网络配置文件

BOOTPROTO参数更改为static,以使用静态IP地址:

BOOTPROTO=static

ONBOOT参数更改为yes,确保系统启动时自动启用网络接口:

ONBOOT=yes

3.2 添加静态IP、子网掩码和网关

根据之前记录的子网信息,添加以下参数:

  • IPADDR: 设置静态IP地址。注意,静态IP的前三段需要与子网IP相同。
  • NETMASK: 子网掩码。
  • GATEWAY: 网关IP。

例如:

IPADDR=192.168.138.133
NETMASK=255.255.255.0
GATEWAY=192.168.138.2

3.3 配置DNS

通常,将DNS1设置为公共DNS,例如Google的8.8.8.8:

DNS1=8.8.8.8

最终配置文件应如下所示:

最终配置

4. 重启网络服务

修改完成后,重启网络服务以使配置生效:

service network restart

如果重启成功,会显示“OK”提示。如果出现failed错误,可能与NetworkManager服务冲突,可以使用以下命令停止该服务:

service NetworkManager stop
chkconfig NetworkManager off

5. 验证IP配置

使用ifconfigip addr命令查看网络接口的配置,确保静态IP设置成功。

ifconfig
# 或
ip addr

如果配置成功,将看到静态IP地址生效:

验证静态IP

脚本

使用说明

1.将脚本保存为 set_static_ip.sh,并赋予执行权限:

vi set_static_ip.sh
chmod +x set_static_ip.sh

2.执行脚本并按提示输入参数:

./set_static_ip.sh

3.脚本内容

#!/bin/bash

# 函数:检查并提示用户修改参数
function check_and_modify_param {
    local param_name=$1
    local param_value=$(grep "^$param_name=" $CONFIG_FILE | cut -d'=' -f2)

    if [ -n "$param_value" ]; then
        echo "$param_name 当前值为 $param_value"
        read -p "是否修改该参数?(y/n): " modify
        if [ "$modify" == "y" ]; then
            validate_input "$param_name"
        fi
    else
        validate_input "$param_name"
    fi
}

# 函数:验证用户输入
function validate_input {
    local param_name=$1
    local regex
    local prompt_value

    case $param_name in
        "IPADDR")
            regex="^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$"
            prompt_value="请输入有效的静态IP地址 (例如 192.168.1.10): "
            ;;
        "NETMASK")
            regex="^(255\.){3}(255|254|252|248|240|224|192|128|0)$|^([0-9]{1,2})$"
            prompt_value="请输入有效的子网掩码 (例如 255.255.255.0 或 24): "
            ;;
        "GATEWAY")
            regex="^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$"
            prompt_value="请输入有效的默认网关 (例如 192.168.1.1): "
            ;;
        "DNS1"|"DNS2")
            regex="^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$"
            prompt_value="请输入有效的DNS服务器地址 (例如 8.8.8.8): "
            ;;
    esac

    while true; do
        read -p "$prompt_value" value
        if [[ $value =~ $regex ]]; then
            if grep -q "^$param_name=" $CONFIG_FILE; then
                sed -i "s/^$param_name=.*/$param_name=$value/" $CONFIG_FILE
            else
                echo "$param_name=$value" >> $CONFIG_FILE
            fi
            break
        else
            echo "输入格式不正确,请重新输入。"
        fi
    done
}

# 提示用户输入网络接口名称
read -p "请输入网络接口名称(例如 ens33): " INTERFACE

# 定义配置文件路径
CONFIG_FILE="/etc/sysconfig/network-scripts/ifcfg-$INTERFACE"

# 备份原始配置文件
if [ -f $CONFIG_FILE ]; then
    cp $CONFIG_FILE ${CONFIG_FILE}.bak
    echo "已备份原始配置文件为 ${CONFIG_FILE}.bak"
else
    echo "未找到网络接口配置文件,无法修改。请检查接口名称是否正确。"
    exit 1
fi

# 修改 BOOTPROTO 为 static,ONBOOT 为 yes
sed -i 's/^BOOTPROTO=.*/BOOTPROTO=static/' $CONFIG_FILE
sed -i 's/^ONBOOT=.*/ONBOOT=yes/' $CONFIG_FILE

# 检查是否存在参数
PARAMS=("IPADDR" "NETMASK" "GATEWAY" "DNS1" "DNS2")
all_params_exist=true

for param in "${PARAMS[@]}"; do
    if ! grep -q "^$param=" $CONFIG_FILE; then
        all_params_exist=false
        break
    fi
done

if ! $all_params_exist; then
    echo "某些参数不存在,请输入以下参数:"
    for param in "${PARAMS[@]}"; do
        validate_input "$param"
    done
else
    # 提供用户选择的功能
    while true; do
        echo "请选择要修改的参数:"
        echo "1. IPADDR"
        echo "2. NETMASK"
        echo "3. GATEWAY"
        echo "4. DNS1"
        echo "5. DNS2"
        echo "6. 退出"

        read -p "请输入选项(1-6): " choice

        case $choice in
            1) check_and_modify_param "IPADDR" ;;
            2) check_and_modify_param "NETMASK" ;;
            3) check_and_modify_param "GATEWAY" ;;
            4) check_and_modify_param "DNS1" ;;
            5) check_and_modify_param "DNS2" ;;
            6) break ;;
            *) echo "无效的选项,请重新输入。" ;;
        esac
    done
fi

# 重启网络服务以应用更改
systemctl restart network

# 显示当前网络接口的配置
echo "静态IP配置完成,当前配置:"
ip addr show $INTERFACE


如果本文对你有帮助,欢迎在评论区留言或私信。如有问题,请随时联系我!

转载请注明出处
作者:BQ
主页:https://blog.csdn.net/weixin_52677672?type=blog
QQ群:958124241
Learn Together!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值