- Connect directly between devices without manual network configuration
- Reduce latency by avoiding servers when possible
- Save bandwidth by keeping data transfer peer-to-peer
- Improve resilience and reliability by not depending on all traffic being sent through third parties
The Problem: NAT Blocks Direct Connections
Imagine you’re trying to video call a friend. Both of you are behind routers at home. When you try to connect directly to each other, your routers’ firewalls block the incoming connection because they don’t recognize it as a response to something you requested. The combination of NAT (which translates addresses) and firewall rules (which filter traffic) makes direct connections challenging. Most home and office networks use NAT, which acts like a one-way door—devices inside the network can reach out to the internet, but the internet can’t easily reach back in. This causes reliance on central servers, which can introduce latency and reliability issues. Traditionally, this problem was solved by:- Port forwarding: Manually configuring your router to allow specific connections (tedious and requires technical knowledge)
- Relay servers: Routing all traffic through a third-party server (slow and expensive)
The Innovation: Holepunching
Holepunching is a clever technique that works around NAT and firewall restrictions to allow direct connections between peers without manual configuration or relying entirely on relay servers. iroh uses a sophisticated holepunching implementation built on top of QUIC and integrates with the relay system. The process relies on two key elements: Holepunching works in most network configurations, but some corporate firewalls or cellular networks may still require relay fallback. iroh handles this automatically.How Holepunching Works in iroh
1. Initial Contact Through a Relay
Both peers first connect to a shared relay server. The relay acts as a meeting point where peers can coordinate without being able to connect directly yet. The relay server observes each node’s public IP address and port (the address from which it sees incoming traffic). This reflective address can be used by the remote peer to reach through the firewall, provided the firewall considers it expected traffic.2. Sharing Connection Information
Through the relay, peers exchange their:- Public IP addresses (how they appear to the outside internet)
- Port numbers (the specific door number the router assigned them)
- Local addresses (in case they’re on the same network)