One of the main challenges of 21st century Internet is the lack of IP addresses available under IPv4. This has led the Internet to be heavily populated with NATs which allow several computers to access the Internet through the same IP address. By solving one problems, NATs have created several others, one of the major ones being that they make it very difficult for specific clients behind these NATs to establish direct connections with each other. This is a major issue for many applications such as VoIP calls, file transfers or P2P gaming which require this direct connection between clients. The solution has come under the form of a specification of the Interactive Connectivity Establishement (ICE) which provides a methodology to establish direct connections through NATs with a relatively high success rate. Libnice is one of the first libraries to the latest release of the ICE specification. It is currently fully featured and functional. It allows to easily establish a direct connection between two peers no matter what network topology they are behind. In my talk, I will be explaining what the current problem with NATs is and explain the different NAT types and how they affect connectivity. I will then explain the principles of ICE and the methodology ICE uses in order to traverse these NATs. Finally I'll explain how to use libnice and integrate it in your applications.