Iodine is a DNS tunnel that encapsulates IPv4 traffic within DNS queries and responses, allowing network access through firewalled connections where only DNS is permitted.
The tool solves the problem of accessing networks behind restrictive firewalls by tunneling data through DNS servers, which are rarely blocked. It works by encoding IPv4 packets into DNS domain name queries sent to a server you control, then decoding the responses back into network traffic. This approach exploits the fact that DNS queries typically pass through firewalls even when other protocols are blocked. The software consists of a server component that listens for these encoded DNS queries and a client component that encodes outgoing traffic.
Iodine suits situations where you control a domain and have a server with a public IP address, and where conventional network access is restricted but DNS queries are allowed. The quickstart demonstrates testing within a LAN, but production use requires delegating a subdomain to your iodined server through your DNS provider. The tool requires exact protocol version matching between server and client, so both sides must run the same version. If you already run DNS services on your server, iodine can forward requests to another port, though this is not recommended for production. For dynamic IP scenarios, you can point the delegation to a dynamic DNS provider instead.
Development activity shows consistent maintenance with fixes and improvements applied over time. The project includes automated testing infrastructure via a test suite that can be run with make test, requiring the check library. Optional platform-specific features for Linux, including SELinux and systemd support, are automatically detected and compiled when their headers are present. The codebase is written in C with a straightforward build system using make, and documentation is provided through manual pages alongside the binaries.