GRE (Generic Routing Encapsulation) is a tunneling protocol that allows us to encapsulate packets into other packets. For example, we can encapsulate an IP packet into another IP packet. We can use GRE to create tunnels between routers, the tunnels are established with public IP addresses and the IP packets we encapsulate use private IP addresses. We can also combine GRE with IPsec for secure VPNs (Virtual Private Networks).