Preserve the Network Settings (e.g. DNS servers) in the Cloud-based servers

2020年06月11日

-
For VMs (AWS EC2, Azure Virtual Machine, Alibaba Cloud ECS and etc.), the network related settings in a Linux-based machine will always be automatically refreshed after each server reboot. The way to change the network settings, is not to simply modify the files, such as /etc/resolv.conf. Guys need to find the graceful way to achieve this goal.

Tricks with Cloud-init

Some are managed by Cloud-init. Below method has been verified to be suitable for images, including:
  • AWS
    • Amazon Linux 2
    • CentOS 7
  • Alibaba Cloud
    • CentOS 7

Add below lines to file ifcfg-*
~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
...
new_domain_name_servers=100.100.2.138

If there are multiple DNS servers, do it like this: (用引号括起来,用空格分隔)
...
new_domain_name_servers="100.100.2.138 100.100.2.139"


~]# vim /etc/cloud/cloud.cfg
network:
  config: disabled

NB
This is a default setting on Amazon Linux 2.


~]# cat /etc/resolv.conf


systemctl restart network
or
# reboot

# vim /etc/resolv.conf
options timeout:2 attempts:3 rotate single-request-reopen
; generated by /usr/sbin/dhclient-script
nameserver 100.100.2.138

The nameserver will be replaced by the new value, not append.


CentOS 7 on AWS

Query the network card interface name.
ifconfig
ens5: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9001
        inet 10.0.0.118  netmask 255.255.255.0  broadcast 10.0.0.255
        inet6 fe80::dd:10ff:fe5c:b903  prefixlen 64  scopeid 0x20<link>
        ether 02:dd:10:5c:b9:03  txqueuelen 1000  (Ethernet)
        RX packets 328  bytes 35045 (34.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 252  bytes 67448 (65.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 6  bytes 416 (416.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 6  bytes 416 (416.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vim /etc/sysconfig/network-scripts/ifcfg-ens5
# Created by cloud-init on instance boot automatically, do not edit.
#
BOOTPROTO=dhcp
DEVICE=ens5
HWADDR=02:dd:10:5c:b9:03
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
new_domain_name_servers=1.1.1.1

vim /etc/cloud/cloud.cfg
network:
  config: disabled

Before reboot, check the name server setting.
cat /etc/resolv.conf
; generated by /usr/sbin/dhclient-script
search us-west-2.compute.internal
nameserver 10.0.0.2

reboot

After reboot, check the updated name server setting.
cat /etc/resolv.conf
; generated by /usr/sbin/dhclient-script
search us-west-2.compute.internal
nameserver 1.1.1.1

It is observed that the name server setting has been updated using above method.

Tricks with Network Manager

Below method has been verified to be suitable for images, including:
  • AWS
    • RHEL 8

For Red Hat Enterprise Linux, this setting is managed by Network Manager.
cat /etc/resolv.conf
# Generated by NetworkManager
search us-west-2.compute.internal
nameserver 10.0.0.2

So for below images, guys should use Network Manager to manage the network settings.

If the DNS is managed by Network Manager, search for the [main] section in this file. As soon as you find it, Add dns=none just after the [main] tag:

vim /etc/NetworkManager/NetworkManager.conf
[main]
dns=none
Update /etc/resolv.conf to whatever you like.
vim /etc/resolv.conf


Restart your NetworkManager.
sudo systemctl restart NetworkManager.service

cat /etc/resolv.conf
# Generated by NetworkManager
search us-west-2.compute.internal
nameserver 1x.x.x.x


-

Category: AliCloud Tags: public

Upvote


Downvote