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 bauen und auszuführen, benötigen Sie die check-Bibliothek. Starten Sie sie, indem Sie ninja test im Build-Verzeichnis ausführen.
Probieren Sie es in Ihrem eigenen LAN aus! Folgen Sie diesen einfachen Schritten:
./iodined -f 10.0.0.1 test.com.
Wenn Sie bereits das Netz 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, dieselbe iodine-Version auszuführen. Leider ist die Implementierung von Abwärts- und Aufwä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 läuft. 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 Vorgehen
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,
das 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 Anfragen für die Subdomain t1
an den Server t1ns weiterzuleiten. 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 auf irgendetwas zeigt,
aber in diesem Fall lässt er sich leicht in derselben Zonendatei unterbringen. Es muss ein Name
(keine IP-Adresse) sein, und dieser Name selbst muss einen A-Record
(keinen CNAME) haben.
Wenn Ihr iodined-Server eine dynamische IP hat, verwenden Sie einen dynamischen DNS-Anbieter. Richten Sie einfach
die NS-Zeile darauf, 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-Anfragen 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). Mit der -f-Option bleibt iodined im
Vordergrund, was beim Testen hilft. iodined öffnet eine virtuelle Schnittstelle
(„tun device") und beginnt außerdem, auf UDP-Port 53 auf DNS-Anfragen 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 beliebige Computer erlaubt sind, kannst du 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 Datenverkehr zum DNS-Port (53 UDP) eines beliebigen Computers erlaubt ist. Iodine erkennt dies und wechselt nach Möglichkeit auf Raw-UDP-Tunneling. Um DNS-Tunneling in jedem Fall zu erzwingen, verwende die Option -r (besonders nützlich beim Testen innerhalb deines eigenen Netzwerks).
Die Tunnel-Schnittstelle des Clients erhält eine IP nahe der des Servers (in diesem Fall 192.168.99.2 oder .3 usw.) und eine passende MTU. Gib dasselbe Passwort wie auf dem Server entweder als Kommandozeilenoption ein oder nachdem der Client gestartet wurde. Mit der Option -f läuft der iodine-Client im Vordergrund weiter.
Resultierende Kommandozeile in dieser Beispielsituation; das Hinzufügen von -r erzwingt DNS-Tunneling, selbst wenn Raw-UDP-Tunneling möglich wäre:
./iodine -f -P secretpassword t1.mydomain.com
Von beiden Seiten aus solltest du nun die IP-Adresse am anderen Ende des Tunnels anpingen können. In diesem Fall ping 192.168.99.1 vom iodine-Client aus und 192.168.99.2 vom iodine-Server aus.
Die Daten innerhalb des Tunnels sind ausschließlich IPv4.
Der Server lauscht standardmäßig sowohl auf IPv4 als auch auf IPv6 auf eingehende Anfragen. Verwende die Optionen -4 oder -6, um nur auf einem Protokoll zu lauschen. Der Raw-Modus wird über dasselbe 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. Verwende die Optionen -4 oder -6, um den Client zu zwingen, eine bestimmte IP-Version für seine DNS-Abfragen zu verwenden.
Wenn dein Server auf IPv6 lauscht und erreichbar ist, füge einen AAAA-Eintrag dafür zu deiner DNS-Konfiguration 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 Datenverkehr durch den DNS-Tunnel zu leiten. Dazu fügst du zunächst eine Host-Route zum von iodine verwendeten Nameserver über die kabelgebundene/drahtlose Schnittstelle mit dem Standard-Gateway als Gateway hinzu. Dann ersetzt du das Standard-Gateway durch die IP-Adresse des iodined-Servers innerhalb des DNS-Tunnels und konfigurierst den Server für NAT.
Beachte 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 betreibe ein VPN durch den DNS-Tunnel (=Doppel-Tunneling) oder verwende Secure-Shell-(SSH-)Zugriff, möglicherweise mit Portweiterleitung. Letzteres kann auch zum Webbrowsen verwendet werden, wenn du einen Web-Proxy (zum Beispiel Privoxy) auf deinem Server betreibst.