Skip to content

How to find and replace ALL IP addresses with a new one?

3 min read

In some situations, you need to change the VLAN IP address such as 172.0.0.2 with 172.0.0.1 for ease of use. As you know, Linux and Unix-like operating system reserves all IP addresses and config in plain text files. Let's see where to find and replace ALL IP addresses with a new one on Linux.

Step 1: Obtaining a list of files for the old IP address

Start using the  as follows:

grep -R -w '172.0.0.2' /etc/

 

A list of truncated files that needs to be updating:

/etc/keepalived/keepalived.conf:    unicast_src_ip  172.0.0.2 # Private IP address of master (redis1)
/etc/ufw/user.rules:### tuple ### allow tcp 6379 172.0.0.2 any 172.0.0.0/24 in_eth1 comment=4f70656e2054435020526564697320504f5254206f6e2072656469733120686f737420666f7220636c7573746572
/etc/ufw/user.rules:-A ufw-user-input -i eth1 -p tcp -d 172.0.0.2 --dport 6379 -s 172.0.0.0/24 -j ACCEPT
/etc/ufw/user.rules:### tuple ### allow tcp 26379 172.0.0.2 any 172.0.0.0/24 in_eth1 comment=4f70656e205443502053454e5449454c20504f5254206f6e2072656469733120686f737420666f7220636c7573746572
/etc/ufw/user.rules:-A ufw-user-input -i eth1 -p tcp -d 172.0.0.2 --dport 26379 -s 172.0.0.0/24 -j ACCEPT
/etc/systemd/network/.05-eth1.network.linode-last:Address=172.0.0.2/24
/etc/systemd/network/.05-eth1.network.linode-orig:Address=172.0.0.2/24
/etc/haproxy/haproxy.cfg:# redis1 - 172.0.0.2
/etc/haproxy/haproxy.cfg:        server redis2 172.0.0.2:6379 check inter 3s
/etc/hosts:172.0.0.2	redis1 haproxy1 keepalived1
/etc/redis/sentinel.conf:bind 172.0.0.2
/etc/redis/sentinel.conf:sentinel known-replica mymaster 172.0.0.2 6379
/etc/redis/redis.conf:bind 172.0.0.2
.....
..
..... 

Right now, you need to update services such as HAProxy, Nginx, Redis, MySQL, firewall rules, and more. The -R option read all files under each directory recursively, and it will also follow all symbolic links. The -w option will tell grep to select only those lines containing matches that form the whole word.

Step 2: Obtaining and replacing IP address with a new one using sed command

This task is pretty simple, and the syntax for sed is as follows:

sed -i'.BACKUP' 's/OLD_IP_HERE/NEW_IP_HERE/g' input

The -i option tells sed to make a backup before updating file. I can verify using the diff command:

diff /etc/redis/redis.conf /etc/redis/redis.conf.BACKUP

Updated file /etc/redis/redis.conf line-by-line with original backup file named /etc/redis/redis.conf.BACKUP:

70c70
< bind 172.0.0.1
---
> bind 172.0.0.2

 

Step 3: Shell script to find and replace ALL IP addresses

Here, you first need to update the grep command as mentioned to get a list of files:

grep -l -H -R -w '172.0.0.2' /etc/
 Outputs:

/etc/keepalived/keepalived.conf
/etc/ufw/user.rules
/etc/systemd/network/.05-eth1.network.linode-last
/etc/systemd/network/.05-eth1.network.linode-orig
/etc/haproxy/haproxy.cfg
/etc/hosts
/etc/redis/sentinel.conf
/etc/nginx/http.d/cyberciti.biz.conf
/etc/mysql/my.cnf

 

The -l option is most noted for mass editing as it will suppress standard output. Instead, grep will print the name of each input file. The -H options make the grep to shows each matching file name. Now moving to feed this list to sed using a while loop or bash for loop:

#!/bin/bash
set -euxo pipefail
OLD_IP='172.0.0.2'	# old server ip
NEW_IP='172.0.0.1'	# new server ip
DEST_DIR="/etc"		# search dir 
 
# Get file list
INPUT_FILES="$(grep -l -H -R -w ${OLD_IP} $DEST_DIR)"
 
# Ignore following dirs and files 
IGNORE_PATHS=(/etc/systemd/network/ /etc/network/ /etc/networks /etc/keepalived/keepalived.conf)
is_skip=0
 
# main
for f in $INPUT_FILES 
do
	for i in "${IGNORE_PATHS[@]}"
	do
		if [[ $f == *"${i}"* ]]
		then
			is_skip=1
			continue
		fi
	done
	[ $is_skip == 0  ] && sed -i'.BACKUP' "s/${OLD_IP}/${NEW_IP}/g" "$f"
	is_skip=0
done 

 

After running the script, restart those services one by one using the systemctl command. For example:

sudo systemctl restart haproxy.service

Done!! 

Related services

KVM VPS hosting

NVMe SSD and full root access, with Free Basic Managed Support.

Unmanaged dedicated servers

full root access and free IPMI KVM, with Free Basic Managed Support.

Linux server management

hardening, patching, monitoring and automation for Ubuntu, Debian, RHEL and AlmaLinux.

Was this answer helpful?

Still stuck? Open a ticket