How to configure a static IP address on RHEL 8 / CentOS 8 Linux
There are many cases in which we may want to set a static IP for a network interface. In RHEL 8 / CentOS 8, the network connections are managed by the NetworkManager daemon, so in this tutorial we see how we can perform such task by editing an interface file directly, by using a command line utility, nmcli
, or via a text user interface, nmtui
.
In this tutorial you will learn:
- How to set a static IP address by directly editing an interface file
- How to set a static IP address using the nmcli utility
- How to set a static IP address using nmtui
Mục Lục
Software Requirements and Conventions Used
Software Requirements and Linux Command Line Conventions
Category
Requirements, Conventions or Software Version Used
System
RHEL 8 / CentOS 8
Software
All the software mentioned in this tutorial is included in a minimal installation of RHEL 8 or CentOS 8.
Other
Permission to run command with root privileges.
Conventions
# – requires given linux commands to be executed with root privileges either directly as a root user or by use of sudo
command
$ – requires given linux commands to be executed as a regular non-privileged user
Introduction
In Red Hat Enterprise Linux 8, network interfaces are managed by the NetworkManager
daemon, so to change a network interface settings we must somehow interact with it. In this tutorial we will see how can we set a static IP address, gateway and dns server for a NIC by using different three methods.
Identifying our interface
The first thing we want to do is to find the interface we want to modify. To list all the interfaces on our system, we can use the ip addr
command:
$ ip addr 1: lo: <loopback,up,lower_up> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp1s0: <broadcast,multicast,up,lower_up> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff inet 192.168.122.189/24 brd 192.168.122.255 scope global dynamic noprefixroute enp1s0 valid_lft 3004sec preferred_lft 3004sec inet6 fe80::9ab6:ba48:1ddd:a8e1/64 scope link noprefixroute valid_lft forever preferred_lft forever </broadcast,multicast,up,lower_up></loopback,up,lower_up>
In the output above, which is the result of running the command on my rhel8 virtualized machine, we can see two interfaces: lo
and enp1s0
. The first is a “virtual” interface, which is used by the system to “talk” with itself. The second one is the one which interests us, and currently its IPv4 address is 192.168.122.189: we want to change it.
Method 1 – modifying interface configuration file manually
For each network interface managed by the NetworkManager daemon, a configuration file is created inside the /etc/sysconfig/network-scripts
directory. The name of the file is composed by the ifcfg-
prefix plus the name of the interface. If we inspect the file related to our NIC, we can see its actual setup:
$ cat /etc/sysconfig/network-scrIPts/ifcfg-enp1s0 TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="dhcp" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="enp1s0" UUID="d5f41bf4-de0a-43b3-b633-7e2ec6212e58" DEVICE="enp1s0" ONBOOT="yes"
The BOOTPROTO
option is set to dhcp
: the option sets the protocol to use at boot to set the IP address of the interface. The possible options to use are:
- none – No protocol should be used
- bootp – Use the bootp protocol
- dhcp – Use the dhcp protocol
Since we want to set a static IPv4 address, we want to change the value of BOOTPROTO to none
and configure our IP, route prefix, gateway and dns server statically. We can accomplish this by using respectively the IPADDR
, PREFIX
, GATEWAY
and DNS
options. Since many dns servers can be specified, the DNS
option must be reported together with a progressive number, starting from 1. After the needed modifications, our file should look like
this:
TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="none" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="enp1s0" UUID="d5f41bf4-de0a-43b3-b633-7e2ec6212e58" DEVICE="enp1s0" ONBOOT="yes" IPADDR=192.168.122.66 PREFIX=24 GATEWAY=192.168.122.1 DNS1=192.168.122.1
We set our static IP to 192.168.122.66
and set both our gateway and dns server to 192.168.122.1
. Now, to make our changes effective we must put down and up again the network interface. Be aware that this will disrupt existent ssh connections via said interface:
$ sudo nmcli connection down enp1s0 && sudo nmcli connection up enp1s0
By running the ip addr
command again we can verify the IP has changed:
IP addr|grep enp1s0|grep inet inet 192.168.122.66/24 brd 192.168.122.255 scope global noprefix
Method 2 – using nmcli
Nmcli
is a command line tool used to control NetworkManager. By using it we can, among other thins, change network settings for a specific interface. In our case we must use nmcli with the connection
subcommand with the modify
or the edit
action. The first lets us change the settings directly, while the second launches the nmcli shell, where we can operate interactively.
Using nmcli directly
To change the IP address of the “enp1s0” interface with a direct nmcli command, we run:
$ sudo nmcli connection modify enp1s0 IPv4.address 192.168.122.66/24
Notice that we specified the routing prefix together with the IP using the so called CIDR
notation (Classes Inter-Domain Routing). We use a similar syntax to change the gateway and the dns settings:
$ sudo nmcli connection modify enp1s0 IPv4.gateway 192.168.122.1 $ sudo nmcli connection modify enp1s0 IPv4.dns 192.168.122.1
Finally, we set the method to manual
to avoid using any other boot protocol for the interface. This command sets the BOOTPROTO option to none in the interface configuration file:
$ sudo nmcli connection modify enp1s0 IPv4.method manual
Using nmcli shell
As we mentioned above, we can also use an interactive method to perform the same changes. To enter the nmcli shell
we use the edit
action, followed by name of the interface we want to edit:
$ sudo nmcli connection edit enp1s0 ===| nmcli interactive connection editor |=== Editing existing '802-3-ethernet' connection: 'enp1s0' Type 'help' or '?' for available commands. Type 'print' to show all the connection properties. Type 'describe [.]' for detailed property descrIPtion. You may edit the following settings: connection, 802-3-ethernet (ethernet), 802-1x, dcb, sriov, ethtool, match, IPv4, IPv6, tc, proxy nmcli>
The blinking cursor tells us the shell is accepting commands: we can type help
to get a list of the available ones, print
to see all the connection properties or describe
followed by a setting and one of its properties (represented with a dot notation), to get a description of the latter. For example:
nmcli> nmcli> describe IPv4.address === [addresses] === [NM property descrIPtion] Array of IP addresses. [nmcli specific descrIPtion] Enter a list of IPv4 addresses formatted as: IP[/prefix], IP[/prefix],... Missing prefix is regarded as prefix of 32. Example: 192.168.1.5/24, 10.0.0.11/24
To change the address of our interface:
nmcli> set IPv4.address 192.168.122.66/24
The same principle is used to change the other properties:
nmcli> set IPv4.gateway 192.168.122.1 nmcli> set IPv4.dns 192.168.122.1 nmcli> set IPv4.method manual
To save the modifications we made, we need to issue one last command:
nmcli> save Connection 'enp1s0' (d5f41bf4-de0a-43b3-b633-7e2ec6212e58) successfully updated.
To exit the nmcli shell just type quit
and press enter:
nmcli> quit
Again, to make the changes effective, we should reload the interface with the same command we used before.
Method 3 – using nmtui
Other than changing the parameters of a network interface by modifying its file manually or by using the nmcli utility, we can also control NetworkManager by using a text user interface. To launch it we just invoke nmtui
in our terminal:
$ sudo nmtui
We Select Edit a connection
and then the name of the interface we want to manipulate; we then proceed in changing the desired values. For example:
After we are satisfied, we select OK
and press enter: we will be taken back to the interface selection menu. This time we select back
, and then choose quit
to exit. To apply the settings we need to reload the interface connection:
$ sudo nmcli connection down enp1s0 && sudo nmcli connection up enp1s0
Conclusions
In this tutorial we saw three methods we can use to set a static IP address on Red Hat Enterprise Linux 8. We see what options we should change and what we should add in the interface configuration file when editing it manually, and how to perform the same changes using nmcli and nmtui, which are respectively a command line utility and a text user interface: both are used to control the NetworkManager daemon.