笔记 CentOS Stream 开机自动设置静态 IP(适用于VMware虚拟机)

接上篇。再次打开后发现无法ping通,检查后发现,因为在虚拟机的虚拟网络编辑器中开启了DHCP,故而每次开机都会重新分配网关,所以按照上一篇配置固定以后,每一次开机都需要重新开启自动分配,然后改回固定分配才能正常上网。又因为VMware依赖DHCP分配网关不能关闭,所以只能找其他方法解决。

记录一下自己的解决办法:使用脚本设置开机自动获取,以达到开机顺利联网并且固定ip。(注:我目前只用了VMware,其他虚拟机是否有用需要看具体情况)

方案:使用 rc.local 配置开机脚本,创建一个纯净的静态链接,开机自动生效,杜绝DHCP的干扰。

① 删除旧的DHCP配置连接(可以忽略)

 sudo nmcli con delete ens33

②创建一个全新的静态链接(创建一个ens33-static的连接,并且固定网关和DNS)

使用以下命令添加静态以太网连接配置:

```bash
sudo nmcli con add type ethernet con-name ens33-static ifname ens33 \
    ipv4.addresses 192.168.88.2/24 \
    ipv4.gateway 192.168.88.1 \
    ipv4.dns "8.8.8.8 114.114.114.114" \
    ipv4.method manual \
    connection.autoconnect yes

参数说明:

  • con-name ens33-static:设置连接名称
  • ifname ens33:指定绑定的物理网卡名称
  • ipv4.method manual:关闭DHCP,采用手动IP配置
  • connection.autoconnect yes:启用开机自动连接功能
③ 启用新链接
 sudo nmcli con up ens33-static

④ 设计编写一个自动设置固定IP的脚本,设为系统启动时运行

    需求:

           ->创建一个新的固定IP网络连接

           ->设置静态IP、网关和DNS

           ->开机自动连

   

#!/bin/bash

# 声明要使用的参数
CON_NAME="ens33-static"
IF_NAME="ens33"
IP_ADDR="192.168.88.2/24"
GATEWAY="192.168.88.1"
DNS_SERVER="8.8.8.8 114.114.114.114"

# 删除旧连接,并且隐藏输出,若连接不存在也不要输出错误信息(将标准输出和错误输出都放入黑洞)
nmcli con delete "$CON_NAME" >/dev/null 2>&1

# 创建新连接,重新固定ip,(ens33是一个模拟的物理网卡,在系统中为几台网设备)
nmcli con add type ethernet con-name "$CON_NAME" ifname "$IF_NAME" \
  ipv4.addresses "$IP_ADDR" \
  ipv4.gateway "$GATEWAY" \
  ipv4.dns "$DNS_SERVER" \
  ipv4.method manual \
  connection.autoconnect yes

# 启用连接
nmcli con up "$CON_NAME"

     写好脚本,该做配置了

    >>保存脚本并赋权

sudo vim /usr/local/bin/set_static_ip.sh
#创建一个配置文件,并且将刚刚编写的脚本写入,保存退出


sudo chmod +x /usr/local/bin/set_static_ip.sh
#给文件添加可执行权限

    >>运行测试一下

sudo /usr/local/bin/set_static_ip.sh
#确认能看到IP和网关都成功设置

⑤设置开机自动运行

  >>编辑 /etc/rc.local

sudo vim /etc/rc.local

 >>写入脚本文件地址

#!/bin/bash
/usr/local/bin/set_static_ip.sh
exit 0

 >>赋予执行权限

sudo chmod +x /etc/rc.local

>>启用rc-local服务

sudo systemctl enable rc-local
sudo systemctl start rc-local

   # rc-local服务的作用(脚本文件,系统在完成所有标准初始化【网络、服务启动等】后,会执行该文件中的命令)

        1.启动自定义服务

        2.设置静态IP、挂载磁盘

        3.运行一次性初始化任务

        4.延迟执行某些命令(等系统完全启动以后再运行)

==============================二编后续=================================

发现重启后,有时成功有时失败,查询了一下,是Linux网络服务启动时序和VMware虚拟网络服务未及时就绪导致的。可能是nmcli提前激活了静态链接,但是此时VMware的NAT网桥服务还未启动,导致还未获取网关就发生了脚本重置。所以还需要写一个流程控制,将nmcli设置为开机延迟启动,以确保获取网关后再运行脚本。

①创建一个systemd服务,在所有网络组件都加载完毕后再执行脚本

sudo vim /etc/systemd/system/set-static-ip.service

编写一个systemd.service服务脚本

[Unit]
Description=Set static IP address at boot             # 本服务的简要描述(可在 systemctl status 中看到)
After=network-online.target                           # 确保网络启动完成后再执行本服务
Wants=network-online.target                           # 希望系统同时激活网络目标(非强制)

[Service]
Type=oneshot                                          # 表示一次性任务,执行完脚本就退出
ExecStart=/usr/local/bin/set_static_ip.sh            # 要执行的脚本路径(需自行创建并赋予可执行权限)
RemainAfterExit=true                                  # 脚本执行后保持“active”状态,便于查询状态
StandardOutput=journal                                # 输出日志到 systemd 的日志系统
StandardError=journal                                 # 错误输出也写入日志系统
# 若你想把日志输出到文件,可改为:
# StandardOutput=append:/var/log/set_static_ip.log
# StandardError=append:/var/log/set_static_ip.log

[Install]
WantedBy=multi-user.target                            # 当系统进入 multi-user(常规运行级别)时自动启动本服务

配置完成后,重启查看是否顺利启动脚本

journalctl -u set-static-ip.service

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值