Tunnel IPv4-Daten über DNS-Server, um Firewall-Beschränkungen zu umgehen und verdeckten Netzwerkzugriff für Penetrationstests zu ermöglichen.
Dies ist eine Software, mit der Sie IPv4-Daten durch einen DNS-Server tunneln können. Dies kann in verschiedenen Situationen nützlich sein, in denen der Internetzugang durch eine Firewall blockiert ist, DNS-Abfragen jedoch erlaubt sind.
Um iodine zu kompilieren, benötigen Sie meson.
Führen Sie die folgenden Befehle aus, um im Verzeichnis build zu kompilieren:
meson setup build
cd build
ninja
Um die Tests zu erstellen und auszuführen, benötigen Sie die check-Bibliothek. Starten Sie sie mit
ninja test im Build-Verzeichnis.
Probieren Sie es in Ihrem eigenen LAN aus! Befolgen Sie diese einfachen Schritte:
./iodined -f 10.0.0.1 test.com.
Wenn Sie bereits das Netzwerk 10.0.0.0 verwenden, nutzen Sie ein anderes internes Netz wie
172.16.0.0../iodine -f -r 192.168.0.1 test.com.
Ersetzen Sie 192.168.0.1 durch die IP-Adresse Ihres Servers.10.0.0.2 und der Server hat 10.0.0.1.Um es tatsächlich über einen weiterleitenden Nameserver zu nutzen, siehe unten.
Hinweis: Server und Client müssen exakt dasselbe Protokoll sprechen. In den meisten Fällen bedeutet dies, dass dieselbe iodine-Version ausgeführt werden muss. Leider ist die Implementierung von Abwärts- und Vorwärtskompatibilität des Protokolls normalerweise nicht machbar.
Um diesen Tunnel zu nutzen, benötigen Sie die Kontrolle über eine echte Domain (wie mydomain.com)
und einen Server mit einer öffentlichen IP-Adresse, auf dem iodined ausgeführt wird. Wenn dieser Server
bereits ein DNS-Programm ausführt, ändern Sie dessen Listening-Port und verwenden Sie dann die
-b-Option von iodined, damit iodined die DNS-Anfragen weiterleitet. (Beachten Sie, dass dieses Verfahren
in Produktionsumgebungen nicht empfohlen wird, da die DNS-Weiterleitung von iodined
nicht vollständig transparent ist, zum Beispiel funktionieren Zonentransfers nicht.)
Alternativ können Sie die Subdomain von Ihrem DNS-Server an iodined weiterleiten,
der dann auf einem anderen Port (-p) laufen muss.
Delegieren Sie dann eine Subdomain (sagen wir, t1.mydomain.com) an den iodined-Server.
Wenn Sie BIND für Ihre Domain verwenden, fügen Sie zwei Zeilen wie diese zur Zonendatei hinzu:
t1 IN NS t1ns.mydomain.com. ; note the dot!
t1ns IN A 10.15.213.99
Die NS-Zeile ist alles, was benötigt wird, um Abfragen für die t1-Subdomain
an den t1ns-Server zu leiten. Wir verwenden einen kurzen Namen für die Subdomain, um so viel
Platz wie möglich für den Datenverkehr verfügbar zu halten. Am Ende der NS-Zeile
steht der Name Ihres iodined-Servers. Dies kann ein beliebiger Name sein, der irgendwohin zeigt,
aber in diesem Fall wird er einfach in derselben Zonendatei gehalten. Es muss ein Name
(keine IP-Adresse) sein, und dieser Name selbst muss einen A-Record haben
(keinen CNAME).
Wenn Ihr iodined-Server eine dynamische IP hat, verwenden Sie einen dynamischen DNS-Anbieter. Richten Sie einfach
die NS-Zeile darauf aus und lassen Sie die A-Zeile weg:
t1 IN NS myname.mydyndnsprovider.com. ; note the dot!
Laden Sie dann Ihr Nameserver-Programm neu oder starten Sie es neu. Nun werden alle DNS-Abfragen für
Domains, die auf t1.mydomain.com enden, an Ihren iodined-Server gesendet.
Starten Sie schließlich iodined auf Ihrem Server. Das erste Argument ist die IP-Adresse
innerhalb des Tunnels, die aus einem beliebigen Bereich stammen kann, den Sie noch nicht verwenden (zum
Beispiel 192.168.99.1), und das zweite Argument ist die zugewiesene Domain (in diesem
Fall t1.mydomain.com). Die Verwendung der -f-Option hält iodined im
Vordergrund, was beim Testen hilft. iodined öffnet ein virtuelles Interface
("tun device") und beginnt auch, auf UDP-Port 53 auf DNS-Abfragen zu lauschen.
Geben Sie entweder ein Passwort auf der Kommandozeile ein (-P pass) oder nachdem der Server
gestartet ist. Nun ist alles für den Client bereit.
Wenn die Möglichkeit besteht, dass Sie einen iodine-Tunnel aus unerwarteten
Umgebungen verwenden, starten Sie iodined mit einer -c-Option.
Resultierende Kommandozeile in dieser Beispielsituation:
./iodined -f -c -P secretpassword 192.168.99.1 t1.mydomain.com
Die gesamte Einrichtung ist erledigt, starten Sie einfach iodine. Es nimmt ein oder zwei Argumente, das
erste ist der lokale weiterleitende DNS-Server (optional) und das zweite ist die Domain,
die Sie verwendet haben (t1.mydomain.com). Wenn Sie das erste Argument nicht angeben, wird
die aktuelle DNS-Einstellung des Systems herangezogen.
Wenn DNS-Abfragen an jeden Computer erlaubt sind, können Sie direkt die Adresse des iodined-
Servers als erstes Argument angeben (im Beispiel: t1ns.mydomain.com oder
10.15.213.99). In diesem Fall kann es auch vorkommen, dass jeglicher Verkehr
zum DNS-Port (53 UDP) jedes Computers erlaubt ist. Iodine wird dies erkennen und wenn möglich
auf rohes UDP-Tunneling umschalten. Um in jedem Fall DNS-Tunneling zu erzwingen, verwenden Sie die
-r-Option (besonders nützlich beim Testen innerhalb Ihres eigenen Netzwerks).
Das Tunnel-Interface des Clients erhält eine IP nahe der des Servers (in diesem
Fall 192.168.99.2 oder .3 usw.) und eine passende MTU. Geben Sie dasselbe Passwort wie
auf dem Server ein, entweder als Kommandozeilenoption oder nachdem der Client gestartet ist.
Die Verwendung der -f-Option hält den iodine-Client im Vordergrund.
Resultierende Kommandozeile in dieser Beispielsituation, wobei das Hinzufügen von -r DNS-Tunneling erzwingt, selbst wenn rohes UDP-Tunneling möglich wäre:
./iodine -f -P secretpassword t1.mydomain.com
Von beiden Seiten sollten Sie nun in der Lage sein, die IP-Adresse am anderen
Ende des Tunnels anzupingen. In diesem Fall ping 192.168.99.1 vom iodine-Client und
192.168.99.2 vom iodine-Server.
Die Daten innerhalb des Tunnels sind ausschließlich IPv4.
Der Server lauscht standardmäßig sowohl auf IPv4 als auch auf IPv6 für eingehende Anfragen.
Verwenden Sie die Optionen -4 oder -6, um nur auf einem Protokoll zu lauschen. Der Raw-Modus wird
auf demselben Protokoll versucht, das für den Login verwendet wurde.
Der Client kann IPv4- oder IPv6-Nameserver verwenden, um sich mit iodined zu verbinden. Die Relay-
Nameserver übersetzen bei Bedarf automatisch zwischen den Protokollen. Verwenden Sie
die Optionen -4 oder -6, um den Client zu zwingen, eine bestimmte IP-Version für seine DNS-
Abfragen zu verwenden.
Wenn Ihr Server auf IPv6 lauscht und erreichbar ist, fügen Sie einen AAAA-Record dafür zu Ihrer DNS-Einrichtung hinzu. Die Erweiterung des obigen Beispiels würde so aussehen:
t1 IN NS t1ns.mydomain.com. ; note the dot!
t1ns IN A 10.15.213.99
t1ns IN AAAA 2001:db8::1001:99
Es ist möglich, den gesamten Verkehr durch den DNS-Tunnel zu leiten. Fügen Sie dazu zunächst eine Host-Route zum von iodine verwendeten Nameserver über das kabelgebundene/drahtlose Interface mit dem Standard-Gateway als Gateway hinzu. Ersetzen Sie dann das Standard- Gateway durch die IP-Adresse des iodined-Servers innerhalb des DNS-Tunnels und konfigurieren Sie den Server für NAT.
Beachten Sie jedoch, dass der getunnelte Datenverkehr überhaupt nicht verschlüsselt ist und von externen Parteien relativ leicht gelesen und verändert werden kann. Für maximale Sicherheit führen Sie ein VPN durch den DNS-Tunnel aus (=doppeltes Tunneling) oder verwenden Sie Secure Shell (SSH)-Zugriff, möglicherweise mit Port-Weiterleitung. Letzteres kann auch für Web-Browsing verwendet werden, wenn Sie einen Web-Proxy (zum Beispiel Privoxy) auf Ihrem Server ausführen.