I wrote my own VPN with Python using the TUN/TAP interface. I also wrote my own VPN server using Python and its asyncio library.
This worked pretty well.
I had never used TUN/TAP before, so this was a good exercise to learn how that worked. The initial TUN/TAP code from this project (along with the knowledge I gained from making a centralized, single-server VPN) ended up being part of the Smolmesh2 mesh VPN.