OpenNebula provides a central point to define, consume, and set up virtual networks for virtual machines. It uses an XML-RPC API and drivers to abstractly manage logical network attributes like IP addresses, security groups, and tags. The northbound interface defines virtual networks while the southbound interface uses specialized drivers to interface with network elements and set up networking during VM lifecycles. OpenNebula also supports network functions virtualization through virtual routers that can link different virtual networks across sites using GRE tunnels and IPSec.