When IPv4 was devised, the designers went for a 32-bit address space, resulting in a maximum of 4,294,967,296 (2^32) unique IPs. But soon after that, it was clear that it was not even close to being enough. The workaround was NATs: devices that map a single public IP to multiple private IPs. NATs, though, created a new problem, as each NAT device maps IPs and ports in its own way, making it difficult to establish a peer-to-peer connection with devices behind a NAT. Several solutions have been put in place. This talk analyzes them and proposes a new library to simplify NAT hole punching.