The NetworkManager team just released NetworkManager 1.2, and it is the biggest update in over a year. With almost 3500 commits since the previous major release (1.0), this release delivers many new key features:

Less dependencies

Improved Wi-Fi and IPv6 privacy

Wider support for software devices

Improved command line tool

Better documentation

Support for multiple concurrent VPN sessions

Let’s have a closer look!

Improved privacy

We take everyone’s privacy very seriously. That is why we’re among the first adopters of RFC7217 that addresses the problem of tracking a host that moves between IPv6 networks. Users can read more about this in a separate article.

The identity of a mobile host can also leak via Wi-Fi hardware addresses. A common way to solve this is to use random addresses when scanning for available access points, which is what NetworkManager now does (with wpa_supplicant 2.4 or newer). The actual hardware address is used only after the device is associated to an access point.

For further privacy, users can enable Wi-Fi hardware address randomization while connected to untrusted access points, though this is not the default behavior as it may cause issues with access control policies and captive portals.

Better Wi-Fi

In addition to Wi-Fi privacy improvements, Wi-Fi scanning is much smarter and more responsive. The access point list is now maintained by wpa_supplicant and doesn’t grow insanely large when the device is moving, and the currently associated access point is more accurately detected. Dan’s blog covers the change extensively.

Mobile users will appreciate that we’ve added the possibility to enable Wi-Fi power saving globally or on a per-connection basis.

Support for software devices

NetworkManager already supported creation of bond, team and bridge devices. With version 1.2 users can also manage tun, tap, macvlan, vxlan and IP tunnel devices.

Improved command-line experience

Our command line client is now friendlier and more flexible than ever before. It uses colors to match the status of a device or a connection and sorts the output for better clarity.

Users can specify arbitrary connection properties at creation time, without the need to create a connection first and edit it afterwards.

We also simplified creation of master-slave relationships between devices, making it easy to enslave any kind of device to bridges, bonds or teams. Creating multi-level stacking of devices is now very easy.

Use of VPN connections with nmcli is now a lot better too; see below.

We have a very good command completion rules for Bash and excellent manuals with examples too.

Slimming down

With NetworkManager 1.0 we’ve split some hardware support into loadable modules. This makes sense on server or minimal installations — e.g don’t need containers to support Wi-Fi, or servers to run Bluetooth. For NetworkManager 1.2 we’ve cut down on external libraries.

The use of dbus-glib has been replaced with gio’s native D-Bus support and libnl-route-3 is no longer used. Dependency on avahi-autoipd has been dropped.

Native IPv4 link-local addressing configuration based on systemd network library is now used instead.

Users running NetworkManager from minimal images, such as in small systems or containers, are going to benefit from this release too: NetworkManager runs just fine in LXC containers or even Docker. For further details please take a look at readily made Docker images with NetworkManager.

Finally, we don’t manage the hostname by ourselves anymore on systemd-based systems — if anyone uses our, now deprecated, API for hostname management, we just forward it to systemd-hostnamed which is a lot better at the job.

More flexible VPN support

The VPN support has been improved considerably too. Before NetworkManager 1.2 users could only run one instance of a particular VPN plugin that would service exactly one connection. This limitation is now gone.

It is now also possible to connect to a VPN from the command line using nmcli. If the VPN needs a password, nmcli will ask when the user use the –ask option.

Finally users can now import and export the VPN connection settings of most types of VPNs in the VPN’s native format from the command line using the nmcli connection export and nmcli connection import commands.

…and a lot more

NetworkManager gained a lot more than could be reasonably described here. There’s support for configuring the Wake-on-LAN capability of Ethernet hardware, a LLDP listener, better resolv.conf management and more. Take a look at our NEWS file for details.

This release wouldn’t be possible without community contributions. Over 50 people contributed to the NetworkManager code base and a lot more contributed bug reports. Without them we’d have hard time figuring out which parts of NetworkManager needs our attention and care.

Thanks to Beniamino Galvani, Thomas Haller, Dan Williams, Francesco Giudici and Rashid Khan who contributed major parts of this article and corrected many mistakes.

