阿里云ECS重启后自定义DNS配置丢失解决方法

阿里云ECS重启后自定义DNS配置丢失解决方法

  • [1. 现象](#1. 现象)
  • [2. 解决方法](#2. 解决方法)
    • [2.1 脚本](#2.1 脚本)
    • [2.2 systemd](#2.2 systemd)
  • [3. 重启后检查](#3. 重启后检查)
  • [4. 后续](#4. 后续)

1. 现象

公司内部和阿里云打通,并上线一段时间后发现服务器解析内网域名有问题.

手动在/etc/resolv.conf中添加内网DNS后恢复正常,重启后该记录丢失.尝试修改/etc/sysconfig/network-scripts/ifcfg-eth0,追加DNS1和DNS2,重启系统后配置一样丢失.

咨询阿里工单,提示需要将/etc/sysconfig/network-scripts/ifcfg-eth0由DHCP改成静态获取,由于ECS已经分配并使用了600台以上了,这个修改显然太麻烦了.

2. 解决方法

思路是这样的:

  1. 写一个脚本对/etc/resolv.conf进行修改
  2. 写一个service,开机启动网络后自动执行该脚本

2.1 脚本

bash 复制代码
vim /root/dns.sh

脚本内容如下:

bash 复制代码
#!/bin/bash
# 定义dns
DNS1='10.195.16.5'
DNS2='10.195.16.6'

# 检查是否具有root权限
if [ "$(id -u)" -ne 0 ]; then
  echo "请以root用户身份运行此脚本"
  exit 1
fi

# 备份原始resolv.conf文件
cp /etc/resolv.conf /etc/resolv.conf.bak

# 使用sed在第3行追加nameserver 10.1.1.1,在第4行追加nameserver 10.1.1.2
sed -i "1a\nameserver ${DNS2}" /etc/resolv.conf
sed -i "1a\nameserver ${DNS1}" /etc/resolv.conf

# 检查是否成功追加
if grep -q "nameserver ${DNS2}" /etc/resolv.conf && grep -q "nameserver ${DNS1}" /etc/resolv.conf; then
  echo "已成功追加nameserver ${DNS1}到第3行,nameserver ${DNS2}到第4行"
else
  echo "追加失败,请检查脚本或手动修改/etc/resolv.conf文件"
fi

给脚本加上可执行权限

bash 复制代码
chmod 744 /root/dns.sh

2.2 systemd

rhel7之前我习惯将脚本放在/etc/rc.local,但考了RH442之后我习惯将开机运行的脚本做成service,这样更易于管理和故障排查.当然放着tuned里面也更不易于被其他人修改和发现.

bash 复制代码
vim /etc/systemd/system/dns-add.service 

文件内容如下:

bash 复制代码
[Unit]
Description=DNS Script Service
After=network.target

[Service]
ExecStart=/root/dns.sh
Restart=on-failure

[Install]
WantedBy=multi-user.target

使得service开机生效

bash 复制代码
systemctl enable --now dns-add.service

3. 重启后检查

当然不重启也已经生效了

bash 复制代码
root@centos7:~# cat /etc/resolv.conf

nameserver 10.195.16.5
nameserver 10.195.16.6
nameserver 114.114.114.114

4. 后续

接下来就是批量生效了.由于是生产环境这里就不截图了.

说个思路吧.

  1. 先将脚本放到某个apache或者nginx上,可以让所有的服务器通过wget或者curl获取到
  2. 通过阿里云oos或者ansible实现批量执行
    阿里云oos(https://help.aliyun.com/zh/oos/getting-started/manage-multiple-instances)
  3. 对某些测试环境进行重启测试确认.(这步可以视情况省略)
相关推荐
长征coder6 分钟前
AWS MySQL 读写分离配置指南
mysql·云计算·aws
码农101号20 分钟前
Linux中容器文件操作和数据卷使用以及目录挂载
linux·运维·服务器
PanZonghui38 分钟前
Centos项目部署之Nginx 的安装与卸载
linux·nginx
PanZonghui44 分钟前
Centos项目部署之安装数据库MySQL8
linux·后端·mysql
PanZonghui1 小时前
Centos项目部署之运行SpringBoot打包后的jar文件
linux·spring boot
PanZonghui1 小时前
Centos项目部署之Java安装与配置
java·linux
程序员弘羽1 小时前
Linux进程管理:从基础到实战
linux·运维·服务器
PanZonghui1 小时前
Centos项目部署之常用操作命令
linux
JeffersonZU1 小时前
Linux/Unix进程概念及基本操作(PID、内存布局、虚拟内存、环境变量、fork、exit、wait、exec、system)
linux·c语言·unix·gnu
大熊程序猿1 小时前
netcore PowerShell 安装-linux
linux·运维