文章目录
虚拟机Linux系统中通过DHCP获取IP地址的配置和静态IP设置
在虚拟机中,Linux操作系统的IP地址通常通过DHCP(动态主机配置协议)获取,DHCP在每次设备重启后都会重新获取IP地址,这可能导致IP地址频繁更换,为了避免这种情况,可以将网络模式更改为NAT模式,并手动设置静态IP地址。
下面对如何在Centos 设置固定IP进行总结:
1. 更改网络模式为NAT模式
在虚拟机软件中将网络模式更改为NAT模式,具体操作如下:
- 打开虚拟机的设置界面。
- 找到并选择网络适配器设置。
- 将网络连接方式更改为“NAT”模式。
2. 设置虚拟机网络编辑器
- 点击编辑,打开虚拟机网络编辑器。
- 选择NAT模式,并点击“NAT设置”。
- 记录下子网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配置
使用ifconfig
或ip addr
命令查看网络接口的配置,确保静态IP设置成功。
ifconfig
# 或
ip addr
如果配置成功,将看到静态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
主页:bqcode.blog.csdn.net
QQ群:958124241
Learn Together!