Home Linux Learning About nmcli (Nework Manager Command Line Interface)

Learning About nmcli (Nework Manager Command Line Interface)

nmcli is a command-line tool for controlling NetworkManager and reporting network status. It can be utilized as a replacement for nm-applet or other graphical clients. nmcli is used to create, display, edit, delete, activate, and deactivate network connections, as well as control and display network device status.

Typical uses include:

Scripts: Utilize NetworkManager via nmcli instead of managing network connections manually. nmcli supports a terse output format which is better suited for script processing. Note that NetworkManager can also execute scripts, called “dispatcher scripts”, in response to network events.

Servers, headless machines, and terminals: nmcli can be used to control NetworkManager without a GUI, including creating, editing, starting and stopping network connections and viewing network status.

Install if not Installed

yum install NetworkManager -y

Start and enable Network Manager

systemctl start NetworkManager
systemctl enable NetworkManager

Lets use nmcli

“nmcli g status” to know overall status of NetworkManager.

[04:37][root@mail.bullten.work ~]# nmcli g status
STATE      CONNECTIVITY  WIFI-HW  WIFI     WWAN-HW  WWAN
connected  full          enabled  enabled  enabled  enabled

“nmcli g hostname” to fetch the hostname of the system

[04:24][root@mail.bullten.work ~]# nmcli g hostname
mail.bullten.work

To change the hostname we will pass new hostname as parameter to the above argument i.e “nmcli g hostname mail2.bullten.work”

nmcli g hostname mail2.bullten.work

“nmcli dev status” to print the status of device

[04:41][root@mail.bullten.work ~]# nmcli dev status
DEVICE  TYPE      STATE      CONNECTION
eth0    ethernet  connected  eth0
lo      loopback  unmanaged  --

“nmcli dev show” Shows detailed information about devices. Without an argument, all devices are examined. To get information for a specific device, the interface name has to be provided.

[04:45][root@mail.bullten.work ~]# nmcli dev show
GENERAL.DEVICE:                         eth0
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         02:00:00:52:58:D0
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     eth0
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/1
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         164.132.77.188/32
IP4.ADDRESS[2]:                         176.31.20.253/32
IP4.GATEWAY:                            217.182.175.254
IP4.ROUTE[1]:                           dst = 176.31.20.253/32, nh = 0.0.0.0, mt = 100
IP4.ROUTE[2]:                           dst = 164.132.77.188/32, nh = 0.0.0.0, mt = 100
IP4.ROUTE[3]:                           dst = 0.0.0.0/0, nh = 217.182.175.254, mt = 100
IP4.ROUTE[4]:                           dst = 217.182.175.254/32, nh = 0.0.0.0, mt = 100
IP4.DNS[1]:                             8.8.8.8
IP4.DNS[2]:                             8.8.4.4
IP6.ADDRESS[1]:                         fe80::1571:d892:f055:a4a8/64
IP6.GATEWAY:                            --
IP6.ROUTE[1]:                           dst = fe80::/64, nh = ::, mt = 100
IP6.ROUTE[2]:                           dst = ff00::/8, nh = ::, mt = 256, table=255

GENERAL.DEVICE:                         lo
GENERAL.TYPE:                           loopback
GENERAL.HWADDR:                         00:00:00:00:00:00
GENERAL.MTU:                            65536
GENERAL.STATE:                          10 (unmanaged)
GENERAL.CONNECTION:                     --
GENERAL.CON-PATH:                       --
IP4.ADDRESS[1]:                         127.0.0.1/8
IP4.GATEWAY:                            --
IP6.ADDRESS[1]:                         ::1/128
IP6.GATEWAY:                            --

Now to get status of just specific device we will run “nmcli dev show eth0”

[04:46][root@mail.bullten.work ~]# nmcli dev show eth0
GENERAL.DEVICE:                         eth0
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         02:00:00:52:58:D0
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     eth0
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/1
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         164.132.77.188/32
IP4.ADDRESS[2]:                         176.31.20.253/32
IP4.GATEWAY:                            217.182.175.254
IP4.ROUTE[1]:                           dst = 176.31.20.253/32, nh = 0.0.0.0, mt = 100
IP4.ROUTE[2]:                           dst = 164.132.77.188/32, nh = 0.0.0.0, mt = 100
IP4.ROUTE[3]:                           dst = 0.0.0.0/0, nh = 217.182.175.254, mt = 100
IP4.ROUTE[4]:                           dst = 217.182.175.254/32, nh = 0.0.0.0, mt = 100
IP4.DNS[1]:                             8.8.8.8
IP4.DNS[2]:                             8.8.4.4
IP6.ADDRESS[1]:                         fe80::1571:d892:f055:a4a8/64
IP6.GATEWAY:                            --
IP6.ROUTE[1]:                           dst = fe80::/64, nh = ::, mt = 100
IP6.ROUTE[2]:                           dst = ff00::/8, nh = ::, mt = 256, table=255

“nmcli con show” list all the connections profile both active and inactive.

[04:47][root@mail.bullten.work ~]# nmcli con show
NAME  UUID                                  TYPE      DEVICE
eth0  e7d20bc3-3d53-4a40-ace6-01f940112ce9  ethernet  eth0

If you want to show just active connection then you need to use “nmcli con show -a”

If you want to show full information of a network interface you can use command “nmcli con show eth0”

[04:56][root@mail.bullten.work ~]# nmcli con show eth0
connection.id:                          eth0
connection.uuid:                        e7d20bc3-3d53-4a40-ace6-01f940112ce9
connection.stable-id:                   --
connection.type:                        802-3-ethernet
connection.interface-name:              eth0
connection.autoconnect:                 yes
connection.autoconnect-priority:        0
connection.autoconnect-retries:         -1 (default)
connection.multi-connect:               0 (default)
connection.auth-retries:                -1
connection.timestamp:                   1586494531
connection.read-only:                   no
connection.permissions:                 --
connection.zone:                        --
connection.master:                      --
connection.slave-type:                  --
connection.autoconnect-slaves:          -1 (default)
connection.secondaries:                 --
connection.gateway-ping-timeout:        0
connection.metered:                     unknown
connection.lldp:                        default
connection.mdns:                        -1 (default)
connection.llmnr:                       -1 (default)
802-3-ethernet.port:                    --
802-3-ethernet.speed:                   0
802-3-ethernet.duplex:                  --
802-3-ethernet.auto-negotiate:          no
802-3-ethernet.mac-address:             02:00:00:52:58:D0
802-3-ethernet.cloned-mac-address:      --
802-3-ethernet.generate-mac-address-mask:--
802-3-ethernet.mac-address-blacklist:   --
802-3-ethernet.mtu:                     auto
802-3-ethernet.s390-subchannels:        --
802-3-ethernet.s390-nettype:            --
802-3-ethernet.s390-options:            --
802-3-ethernet.wake-on-lan:             default
802-3-ethernet.wake-on-lan-password:    --
ipv4.method:                            manual
ipv4.dns:                               8.8.8.8,8.8.4.4
ipv4.dns-search:                        --
ipv4.dns-options:                       ""
ipv4.dns-priority:                      0
ipv4.addresses:                         176.31.20.253/32
ipv4.gateway:                           217.182.175.254
ipv4.routes:                            { ip = 217.182.175.254/32 }
ipv4.route-metric:                      -1
ipv4.route-table:                       0 (unspec)
ipv4.routing-rules:                     --
ipv4.ignore-auto-routes:                no
ipv4.ignore-auto-dns:                   no
ipv4.dhcp-client-id:                    --
ipv4.dhcp-timeout:                      0 (default)
ipv4.dhcp-send-hostname:                yes
ipv4.dhcp-hostname:                     --
ipv4.dhcp-fqdn:                         --
ipv4.never-default:                     no
ipv4.may-fail:                          yes
ipv4.dad-timeout:                       -1 (default)
ipv6.method:                            auto
ipv6.dns:                               --
ipv6.dns-search:                        --
ipv6.dns-options:                       ""

Lets editeth0 interface using nmcli. We will be adding IP 164.132.77.188 with mac address 02:00:00:52:58:d0 and gateway 217.182.175.254

nmcli con mod eth0 type ethernet ip4 164.132.77.188 gw4 217.182.175.254 
nmcli con mod eth0 ipv4.dns "8.8.8.8,8.8.4.4"
nmcli con mod eth0 mac 02:00:00:52:58:d0
nmcli con mod eth0 con.autoconnect yes
nmcli con mod eth0 ipv4.method manual

Now we will bring the network eth1 up using “nmcli con up eth0”

nmcli con down eth0
nmcli con up eth0

Adding additional IP address using nmcli.

nmcli con mod eth0 +ipv4.addr 164.132.77.188

This will add additional IP to your pre existing network interface eth0. You can remove additional IP from interface using this below command

nmcli con mod eth0 -ipv4.addr 164.132.77.188

We can also add a new interface using

nmcli con add type ethernet con-name eth1 ifname eth0 ip4 164.132.77.188/32 gw4 217.182.175.254

To delete a network interface use the below command. We are deleting eth1 interface from connection profile.

nmcli con del eth1

This was a small tutorial on how to use nmcli.

Must Read

Routing Domain Name in Haproxy

I hope you are following the below guide. Now suppose you want to route domain name to open specific backend that have...

Enable Logging in Haproxy

HAProxy can emit log message for processing by a syslog server. This is compatible with familiar syslog tools like Rsyslog, as well...

Getting real IP in Nginx when behind cloudflare Haproxy

Create a file named cloudflare_ips.ls and in that add all the cloudflare IP's vi /etc/haproxy/cloudflare_ips.ls 173.245.48.0/20 103.21.244.0/22 103.22.200.0/22 103.31.4.0/22 141.101.64.0/18 108.162.192.0/18 190.93.240.0/20 188.114.96.0/20 197.234.240.0/22 198.41.128.0/17 162.158.0.0/15 104.16.0.0/12 172.64.0.0/13 131.0.72.0/22 2400:cb00::/32 2606:4700::/32 2803:f800::/32 2405:b500::/32 2405:8100::/32 2a06:98c0::/29 2c0f:f248::/32

Getting Real IP in HaproxyNginx configuration

Well its a little configuration can get real to nginx when haproxy is set as reverse proxy. Follow this...

Haproxy as Single Point to Failure Node With Glusterfs and MariaDB Maxscale Cluster

HAProxy is a free, very fast and reliable solution offering high availability, load balancing, and proxying for TCP and HTTP-based applications. It...