Generic Routing Encapsulation is a method of tunneling data from one router to another. The originating router encapsulates packets of one networking protocol called the passenger protocol, inside packets of another protocol called the transport protocol, and then transports them to another router.
When the receiving router gets the encapsulated packets, it de-encapsulates the transport protocol and forwards the passenger protocol. This is useful to tunnel certain types of protocols that may not be supported by devices along a network path in addition to a variety of other uses.
GRE can also be used to hide the actual network topology from the underlying passenger protocol, no matter the number of hops it actually takes GRE packets to get between destinations, a GRE tunnel only sees one hop away the other end of the tunnel.
A Virtual Tunnel Interface is used to logically direct traffic across a GRE tunnel. Traffic must be directed across this virtual interface in order for GRE to function at all, typically static routing is used but since GRE supports Multicast it’s possible to run routing protocols over the tunnel as well.