NetworkManager makes very easy to share connectivity, using the device as a gateway to which other devices can connect. That requires running commands similar to
$ nmcli c add con-name <name> type ethernet ifname <iface> ipv4.method shared ipv6.method ignore $ nmcli c up <name>
<name> is an arbitrary name we give to the connection and
<iface> is the name of the interface where external devices will connect to. In this case we are using an ethernet interface (
type ethernet ) and we provide IPv4 addresses, but this extends to other interfaces and to IPv6.
When the connection is up, NM starts a DHCP server listening on
<iface> and changes the networking configuration so we can forward packages and masquerading is enabled for the interface. Of course, for this to work we need an interface different from
<iface> that has to have external connectivity.