The goal of the project is to create VPN servers that are behind a router that blocks incoming connections.
Just like in a normal VPN application, when you connect to the VPN server you can send and receive network packets using the IP address of the VPN server (and perhaps also access shared network drives), but the biggest difference here is that you cannot just connect to an open/filtered port as on a normal server! The VPN servers will be ordinary home or work computer devices that have firewalls and can be behind a NAT.
Assume that you can connect to the internet on these VPN servers, but that they have no dedicated open incoming ports (such as port 1701,1194, 80, 443, etc.) and you can’t change the router configuration. So You have to forward packets between the VPN server and the clients through a relay server.
Some things to consider in this project are TCP/UDP hole punching and the TUN/TAP virtual network interface.