CentOS 9: Configure Network (Step-by-Step)
Requirements
Before we dive into configure your network on CentOS 9, let’s ensure you have everything you need for a smooth experience. These prerequisites cover essential aspects to guarantee you’re ready to tackle network configuration effectively.
User Privileges
First and foremost, you’ll need root or sudo privileges to modify network settings. CentOS 9, like other Linux distributions, restricts network configuration changes to administrative accounts for security reasons. Ensure you’re logged in as root or have sudo access before proceeding.
Understanding Network Interfaces
It’s beneficial to identify your network interfaces. Common interfaces include eth0, enp0s3, or wlan0. Knowing these names is crucial when you use commands like ip addr or nmcli. If you don’t know your interface names, use the command below.
ip link showCode language: Bash (bash)This command will list all available interfaces along with their current status.
Basic Networking Knowledge
Familiarity with basic networking concepts such as IP addresses, subnets, gateways, and DNS servers is helpful. Knowing how these elements interact will enable you to configure your network more effectively. For instance, understanding the difference between a static IP and dynamic IP address can prevent configuration headaches.
Access to a Terminal
You’ll need access to a terminal or command-line interface. CentOS 9 primarily relies on command-line tools for network configuration, so make sure you can access the terminal either directly on the server or through SSH.
Text Editor
A text editor is essential for modifying configuration files. Common choices include vi, nano, or gedit. If you’re comfortable with vi or vim, that works great, but for beginners, nano is often easier to use.
Verifying NetworkManager Installation
First, let’s confirm that NetworkManager is installed. Open your terminal and run:
rpm -qa | grep NetworkManagerCode language: Bash (bash)This command lists all installed packages and filters the output to show only those containing “NetworkManager”. If NetworkManager is installed, you’ll see it listed. If not, proceed to the next step.
Installing NetworkManager
If NetworkManager is missing, you can install it using the dnf package manager. Execute the following command:
dnf install NetworkManager -yCode language: Bash (bash)The dnf command is the primary tool for installing, updating, and removing packages on CentOS 9. The install option tells dnf to install the specified package (NetworkManager), and the -y option automatically answers “yes” to any prompts, ensuring a non-interactive installation.
Installing Network Tools
To aid in network configuration and troubleshooting, installing the net-tools package is highly recommended. It provides essential utilities like ifconfig, netstat, and route. Although some of these tools are being replaced by newer alternatives, they remain useful for quick checks.
dnf install net-tools -yCode language: Bash (bash)Similar to the NetworkManager installation, this command uses dnf to install the net-tools package along with all its dependencies.
Installing iproute2
The iproute2 package provides modern networking tools such as the ip command, which is a powerful alternative to ifconfig. It’s an essential tool for configuring network interfaces, routing, and network neighbor discovery. To install iproute2, use the following command:
dnf install iproute2 -yCode language: Bash (bash)This command ensures that you have the latest iproute2 utilities, which are crucial for advanced network settings and troubleshooting.
Enabling and Starting NetworkManager
After installation, ensure NetworkManager is enabled and running. Use these commands:
systemctl enable NetworkManager
systemctl start NetworkManagerCode language: Bash (bash)The enable command configures the NetworkManager service to start automatically at boot time. The start command initiates the service immediately. To verify that NetworkManager is running, use:
systemctl status NetworkManagerCode language: Bash (bash)This will display the current status of the NetworkManager service, including whether it’s active and any recent log messages.
With these tools installed, you are now set to configure network interfaces on your CentOS 9 system effectively. Let’s proceed to the next chapter to learn about configuring network interfaces.
Now that we have the necessary tools installed, let’s dive into the configuration of network interfaces on CentOS 9. This involves understanding and editing the interface configuration files and using NetworkManager with nmcli and nmtui.
Network Interface Configuration Files
In CentOS, network interfaces are configured using files located in the /etc/sysconfig/network-scripts/ directory. Each interface has its own configuration file, typically named ifcfg-eth0, ifcfg-enp0s3, or similar, depending on the interface name.
Understanding ifcfg files
ifcfg files contain settings that define how a network interface operates. Key parameters include:
TYPE: Specifies the interface type (e.g., Ethernet).NAME: The interface name.DEVICE: The device name that the configuration applies to.BOOTPROTO: Specifies how the IP address is obtained (dhcpfor dynamic,staticfor static).IPADDR: The static IP address for the interface.NETMASKorPREFIX: The network mask or prefix length.GATEWAY: The gateway IP address.DNS1andDNS2: Primary and secondary DNS server IP addresses.ONBOOT: Set toyesto activate the interface at boot.
Here’s an example of a static IP configuration:
TYPE=Ethernet
NAME=enp0s3
DEVICE=enp0s3
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=8.8.4.4
ONBOOT=yesCode language: JavaScript (javascript)And here’s an example of a dynamic IP configuration using DHCP:
TYPE=Ethernet
NAME=enp0s3
DEVICE=enp0s3
BOOTPROTO=dhcp
ONBOOT=yesEditing ifcfg files
To modify an ifcfg file, use a text editor like nano or vi. For example:
nano /etc/sysconfig/network-scripts/ifcfg-enp0s3Code language: Bash (bash)Make the necessary changes, save the file, and exit the editor. After editing, restart the network service to apply the changes:
systemctl restart networkCode language: Bash (bash)Configuring NetworkManager
NetworkManager is a dynamic network control and configuration system that simplifies managing network connections. It can be controlled via the command line using nmcli or through a text-based user interface using nmtui.
nmcli command examples
The nmcli command allows you to manage network connections, devices, and the NetworkManager itself. Here are some common examples:
- Display network status:
nmcli general statusCode language: Bash (bash)- Show all network connections:
nmcli connection showCode language: Bash (bash)- Show details of a specific connection:
nmcli connection show enp0s3Code language: Bash (bash)- Modify a connection to use a static IP:
nmcli connection modify enp0s3 ipv4.method manual ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.dns 8.8.8.8 connection.autoconnect yesCode language: Bash (bash)- Set a connection to use DHCP:
nmcli connection modify enp0s3 ipv4.method auto connection.autoconnect yesCode language: Bash (bash)- Activate a connection:
nmcli connection up enp0s3Code language: Bash (bash)- Deactivate a connection:
nmcli connection down enp0s3Code language: Bash (bash)Each option in the nmcli command serves a specific purpose. For instance, ipv4.method manual sets the IPv4 configuration method to manual, while ipv4.addresses specifies the IP address and subnet in CIDR notation (e.g., 192.168.1.100/24). connection.autoconnect yes ensures that the connection automatically activates on boot. For more details, check the official NetworkManager documentation.
nmtui command examples
nmtui provides a text-based user interface for managing NetworkManager. To start nmtui, simply type:
nmtuiCode language: Bash (bash)This will open a simple interface in your terminal, allowing you to:
- Edit a connection: Modify existing network connections.
- Activate a connection: Bring a connection up or down.
- Set system hostname: Configure the system’s hostname.
Use the arrow keys to navigate, the Enter key to select options, and the Tab key to move between elements. nmtui is particularly useful for those who prefer a menu-driven interface over command-line syntax. For example, to configure network settings, select “Edit a connection”, choose the connection you want to modify, and enter the desired IP address, gateway, and DNS settings. Once finished, select “OK” to save the changes.
By using either nmcli or nmtui, you can effectively manage and configure network connections on your CentOS 9 system. Both tools offer powerful features for managing everything from basic IP settings to more advanced configurations. Make sure that CentOS firewall is configured appropriatelly.
Now that we have the necessary tools installed, let’s dive into the real-world scenarios for configuring network interfaces on CentOS 9. Whether you need a stable, unchanging IP address or dynamic configurations, this section will guide you through the common use cases.
Setting a Static IP Address
A static IP address is essential for servers or devices that need a consistent address for reliable access. Here’s how to set it up:
Step-by-step guide
- Identify the Interface: Determine the name of your network interface (e.g.,
enp0s3). You can useip link showto list available interfaces. - Edit the Configuration File: Open the interface configuration file using a text editor:
nano /etc/sysconfig/network-scripts/ifcfg-enp0s3Code language: Bash (bash)- Modify the File: Change the
BOOTPROTOtostatic, and add theIPADDR,NETMASK(orPREFIX),GATEWAY, andDNSsettings:
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=8.8.4.4
ONBOOT=yesCode language: JavaScript (javascript)- Restart the Network Service: Apply the changes by restarting the network service:
systemctl restart networkCode language: Bash (bash)- Verify the Configuration: Check the new IP address using:
ip addr show enp0s3Code language: Bash (bash)Configuration file example
Here’s a complete example of a static IP configuration file:
TYPE=Ethernet
NAME=enp0s3
DEVICE=enp0s3
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=8.8.4.4
ONBOOT=yesCode language: JavaScript (javascript)Configuring DNS Settings
DNS (Domain Name System) settings are crucial for resolving domain names to IP addresses, allowing your system to access websites and other network resources using human-readable names.
Understanding DNS resolution
DNS resolution is the process of translating domain names (like google.com) into IP addresses (like 142.250.185.142). Your system needs to know which DNS servers to use to perform this translation.
Setting DNS servers
You can configure DNS servers in two primary ways:
- Using
ifcfgFiles: Add or modify theDNS1andDNS2parameters in the interface configuration file:
DNS1=8.8.8.8
DNS2=8.8.4.4- Using
nmcli: Modify the connection using thenmclicommand:
nmcli connection modify enp0s3 ipv4.dns "8.8.8.8 8.8.4.4"Code language: Bash (bash)- Restart the Connection: After making changes, restart the connection:
nmcli connection up enp0s3Code language: Bash (bash)Configuring a Gateway
The gateway is the network node that your computer uses to access networks outside of its local network. It’s essential for communicating with the internet or other remote networks.
Understanding default gateways
The default gateway is the IP address of the router that forwards traffic from your local network to other networks. Without a correctly configured gateway, your system won’t be able to access external resources.
Configuring the gateway
You can configure the gateway in the ifcfg file or using nmcli:
- Using
ifcfgFiles: Add or modify theGATEWAYparameter in the interface configuration file:
GATEWAY=192.168.1.1- Using
nmcli: Modify the connection using thenmclicommand:
nmcli connection modify enp0s3 ipv4.gateway 192.168.1.1Code language: Bash (bash)- Restart the Connection: Apply the changes:
nmcli connection up enp0s3Code language: Bash (bash)By understanding and implementing these real use cases, you can effectively configure network settings such as static IP addresses, DNS settings, and gateways on your CentOS 9 system, ensuring reliable and efficient network connectivity. NetworkManager, a daemon that simplifies the use of computer networks, is used to manage the network interfaces. Its configuration is stored in /etc/NetworkManager/NetworkManager.conf.
Let’s move on to troubleshooting common network issues in CentOS 9. Troubleshooting involves identifying, diagnosing, and resolving problems to restore normal operation. As we’ve learned, it’s a systematic search for the source of a problem.
Common issues
When things go wrong with your network configuration, here are a couple of common problems you might encounter:
Connectivity problems
Connectivity issues can manifest in several ways, such as the inability to reach external websites or communicate with other devices on the network. Here’s how to diagnose and address them:
- Check the Interface Status: Ensure that the network interface is active and connected. Use the
ip link showcommand to verify the interface status. Look for theUPstate.
ip link show enp0s3Code language: Bash (bash)- Verify IP Configuration: Confirm that the interface has a valid IP address, subnet mask, and gateway. Use the
ip addr showcommand:
ip addr show enp0s3Code language: Bash (bash)- Test Basic Connectivity: Use the
pingcommand to check connectivity to the gateway and external hosts:
ping 192.168.1.1
ping google.comCode language: Bash (bash)- Check the Routing Table: Ensure that the routing table is correctly configured to route traffic to the appropriate network. Use the
ip route showcommand:
ip route showCode language: Bash (bash)DNS resolution failures
DNS resolution failures occur when the system cannot translate domain names into IP addresses. This can prevent you from accessing websites and other network resources. To troubleshoot DNS issues:
- Verify DNS Settings: Check the DNS server settings in the
/etc/resolv.conffile or usingnmcli:
cat /etc/resolv.confCode language: Bash (bash)- Test DNS Resolution: Use the
nslookupordigcommand to query DNS servers:
nslookup google.com
dig google.comCode language: Bash (bash)- Check DNS Server Reachability: Ping the DNS servers to ensure they are reachable:
ping 8.8.8.8Code language: Bash (bash)Troubleshooting tools
Several command-line tools are invaluable for diagnosing network issues. Here are some of the most useful:
ping
The ping command tests basic network connectivity by sending ICMP echo requests to a target host. It helps determine if a host is reachable and measures the round-trip time for packets to reach the host and return. By sending ICMP (Internet Control Message Protocol) packets to a specified network host you can verify that the host exists and is accepting requests.
ping google.comCode language: Bash (bash)ip
The ip command from the iproute2 suite is a versatile tool for managing network interfaces, routing, and network neighbors. It replaces older tools like ifconfig and route. It is a powerful command line tool, used to show or manipulate routing, devices, policy routing and tunnels. For example, the command ip addr show can be used to view all available interfaces with its current configuration.
ip addr showCode language: Bash (bash)traceroute
The traceroute command traces the route that packets take to reach a destination host. It identifies each hop along the path, providing valuable information for diagnosing routing issues. It displays the path (sequence of routers) to a network host and measures transit delays of packets across an Internet Protocol (IP) network. The history of transit delays of packets through the network is deduced from the recorded round-trip times for packets, at each successive hop (intermediate destination) in the path to a given destination.
traceroute google.comCode language: Bash (bash)By using these troubleshooting tools and techniques, you can effectively diagnose and resolve network issues in CentOS 9, ensuring smooth and reliable network operation.
Now that we have the necessary tools installed, let’s discuss advanced networking techniques in CentOS 9, including bonding, VLANs, and network teaming. These configurations enable increased bandwidth, redundancy, and network segmentation.
Bonding
Bonding, also known as link aggregation, combines multiple network interfaces into a single logical interface. This provides increased bandwidth and redundancy. If one interface fails, the other(s) continue to operate, maintaining network connectivity. This is particularly useful for servers needing high availability.
Configuration and use cases
To configure bonding, you’ll need to create a bond interface and then configure the individual interfaces to be part of that bond. Here’s a basic example:
- Create the Bond Interface: Create a configuration file for the bond interface (e.g.,
ifcfg-bond0) in/etc/sysconfig/network-scripts/:
TYPE=Bond
NAME=bond0
DEVICE=bond0
BOOTPROTO=none
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
ONBOOT=yes
BONDING_OPTS="mode=1 miimon=100"Code language: JavaScript (javascript)The BONDING_OPTS line specifies the bonding mode and monitoring interval. mode=1 sets the bonding mode to active-backup, where one interface is active and the others are on standby. The miimon=100 sets the monitoring interval to 100ms.
- Configure Slave Interfaces: Modify the configuration files for the physical interfaces (e.g.,
ifcfg-eth0andifcfg-eth1) to be part of the bond:
TYPE=Ethernet
NAME=eth0
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yesRepeat for eth1. The MASTER=bond0 and SLAVE=yes lines assign the interface to the bond0 interface.
- Restart the Network Service: Apply the changes by restarting the network service:
systemctl restart networkCode language: Bash (bash)One use case for bonding is to create a link aggregation between end-devices (servers) connected to different access-switches, offering these servers a redundant, load-balancing connection to the core-network in a loop-free environment, eliminating the requirement for the use of a spanning-tree protocol.
VLANs
A VLANs (Virtual LANs) segment a physical network into multiple logical networks. VLANs improve security, network management, and reduce broadcast traffic. Each VLAN operates as an independent broadcast domain.
Configuration and use cases
To configure VLANs, you’ll need to create VLAN interfaces on top of a physical interface. Here’s how:
- Create the VLAN Interface: Create a configuration file for the VLAN interface (e.g.,
ifcfg-eth0.10for VLAN ID 10 oneth0):
TYPE=Vlan
NAME=eth0.10
DEVICE=eth0.10
VLAN=yes
VLAN_ID=10
BOOTPROTO=none
IPADDR=192.168.10.100
NETMASK=255.255.255.0
ONBOOT=yesThe VLAN=yes and VLAN_ID=10 lines specify that this is a VLAN interface with VLAN ID 10.
- Bring Up the Interface: Activate the VLAN interface:
ip link set dev eth0.10 upCode language: Bash (bash)- Assign IP Address: Assign the IP address to the interface:
ip addr add 192.168.10.100/24 dev eth0.10Code language: Bash (bash)One use case for VLANs is to isolate network traffic for different departments or services within an organization. This provides enhanced security and simplifies network management. Prior to supporting standardized IEEE 802.1Q tagging, some systems used proprietary Virtual LAN Trunking (VLT).
Network Teaming
Network Teaming is another method for link aggregation, similar to bonding, but implemented differently. It is often seen as more flexible and modern approach.
Configuration and use cases
- Install Teamd: Ensure that the
teamddaemon is installed:
dnf install teamd -yCode language: Bash (bash)- Create a Team Interface: Create a team interface configuration file (e.g.,
ifcfg-team0):
TYPE=Team
NAME=team0
DEVICE=team0
BOOTPROTO=none
IPADDR=192.168.2.100
NETMASK=255.255.255.0
GATEWAY=192.168.2.1
DNS1=8.8.8.8
ONBOOT=yes
TEAM_CONFIG='{"device": {"name": "team0", "runner": {"name": "activebackup"}, "link_watch": {"name": "ethtool"}}}'Code language: JavaScript (javascript)- Configure Team Ports: Configure the physical interfaces to be used as team ports (e.g.,
ifcfg-eth0):
TYPE=Ethernet
NAME=eth0
DEVICE=eth0
ONBOOT=yes
TEAM_MASTER=team0
TEAM_PORT=yes
BOOTPROTO=noneRepeat the configuration for the other ethernet port
- Restart the network
systemctl restart networkNetwork Teaming can provide similar benefits to bonding, such as increased bandwidth and link redundancy, but with a potentially simpler configuration.
By implementing bonding, VLANs, or network teaming, you can significantly enhance the performance, reliability, and security of your CentOS 9 network. These advanced network settings are essential for modern server environments.
Now that we have the necessary tools installed, let’s discuss advanced networking techniques in CentOS 9, including bonding, VLANs, and network teaming. These configurations enable increased bandwidth, redundancy, and network segmentation.
Bonding
Bonding, also known as link aggregation, combines multiple network interfaces into a single logical interface. This provides increased bandwidth and redundancy. If one interface fails, the other(s) continue to operate, maintaining network connectivity. This is particularly useful for servers needing high availability.
Configuration and use cases
To configure bonding, you’ll need to create a bond interface and then configure the individual interfaces to be part of that bond. Here’s a basic example:
- Create the Bond Interface: Create a configuration file for the bond interface (e.g.,
ifcfg-bond0) in/etc/sysconfig/network-scripts/:
TYPE=Bond
NAME=bond0
DEVICE=bond0
BOOTPROTO=none
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
ONBOOT=yes
BONDING_OPTS="mode=1 miimon=100"Code language: JavaScript (javascript)The BONDING_OPTS line specifies the bonding mode and monitoring interval. mode=1 sets the bonding mode to active-backup, where one interface is active and the others are on standby. The miimon=100 sets the monitoring interval to 100ms.
- Configure Slave Interfaces: Modify the configuration files for the physical interfaces (e.g.,
ifcfg-eth0andifcfg-eth1) to be part of the bond:
TYPE=Ethernet
NAME=eth0
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yesRepeat for eth1. The MASTER=bond0 and SLAVE=yes lines assign the interface to the bond0 interface.
- Restart the Network Service: Apply the changes by restarting the network service:
systemctl restart networkCode language: Bash (bash)One use case for bonding is to create a link aggregation between end-devices (servers) connected to different access-switches, offering these servers a redundant, load-balancing connection to the core-network in a loop-free environment, eliminating the requirement for the use of a spanning-tree protocol.
Conclusion
In conclusion, mastering the CentOS 9 configure network process is crucial for anyone managing CentOS 9 servers, wether for personal projects or enterprise environments. From understanding basic network settings to implementing advanced configurations like bonding and VLANs, and taking into account the CentOS firewall, you now have a solid foundation to manage and troubleshoot your network. Remember to always back up your configurations and test changes in a controlled environment. With tools like nmcli and the ip command, you can efficiently handle both simple and complex networking tasks. Keep exploring and experimenting to further enhance your skills!
Reference
CentOS Official Site –https://www.centos.org/