Forum: PC-Programmierung Unsichtbarer Proxy & Tor


von Daniel A. (daniel-a)


Lesenswert?

Hallo

Ich will .onion domains in meinem Netzwerk verfügbar machen, ohne dass 
auf den darin enthaltenen Geräten ein Plugin oder Proxy installiert 
werden muss.

Ich gedenke dies zu erreichen, indem ich genau das mache was ich laut 
folgendem draft (den scheinbar sowiso niemand beachtet) nicht tun 
sollte:
https://www.ietf.org/id/draft-ietf-dnsop-onion-tld-01.txt

Das heisst ich habe in meinem (localen) DNS Server einen NS eintrag für 
die Special-Use TLD "onion." erstelt, der alle DNS anfragen die auf 
onion enden auf eine meiner VMs umleitet. Ausserdem ist in meinem DHCP 
Server und meinem Standard Gateway eine statische Route von 10.83.0.0/16 
auf die selbe VM eingestellt. Auf dieser VM ist auch Tor installiert. 
Meine Idee ist es nun einen DNS Server zu schreiben, der automatisch bei 
einer DNS Anfrage eine IP aus dem Netz 10.83.0.0/16 auswählt und einen 
Server zu schreiben, der bei TCP und UDP Anfragen auf eine belibige 
Addresse im 10.83.0.1 - 10.83.255.254 range einen Reverse DNS Lookup 
macht und den Traffic über den Tor Proxy umleitet.


Nun zu den eigentlichebn Fragen:

 1) Wie kann ich mit dem Tor Proxy kommunizieren? Gibt es dazu eine 
Library (ich bevorzuge C), oder welches Protokoll muss ich 
Implementiren?

 2) Ich muss Temporär biszu 2^16-2 IPs + Domains + Timestamps (für 
timeouts) zwischenspeichern.
   2.a) Welchen Algorithmus empfehlt ihr mir um bis zu 2^16-2 Domain 
namen zwischenzuspeichern, und einzelne effizient zu Suchen und wieder 
Löschen zu können ohne Probleme mit Memory fragmentation oder langen 
Wartezeiten zu bekommen? Mit welchem Verfahren kann ich effizient 
Timeouts ermitteln (Sortieren der Addressen, oder alle durchgehen, 
löschen wärend der Sortierung oder in Intervallen die Liste durchsuchen, 
etc.)?


Mit freundlichen Grüssen
Daniel Abrecht


PS: Ich weiss, dass das womöglich irgendwann aufhören wird zu 
Funktionieren, aber die Idee finde ich trotzdem cool.

von Uhu U. (uhu)


Lesenswert?

Daniel A. schrieb:
> Welchen Algorithmus empfehlt ihr mir um bis zu 2^16-2 Domain
> namen zwischenzuspeichern, und einzelne effizient zu Suchen und wieder
> Löschen zu können ohne Probleme mit Memory fragmentation oder langen
> Wartezeiten zu bekommen?

Wie wärs mit einer SQLite Datenbank?

von Daniel A. (daniel-a)


Lesenswert?

Uhu U. schrieb:
> Wie wärs mit einer SQLite Datenbank?

Danke, das ist eine gute Idee. Ich denke dann werde ich das mit nodejs 
realisieren, da gibt's bereits ein Modul für sqlite:
https://www.npmjs.com/package/sqlite3
und eins für den DNS Server:
https://www.npmjs.com/package/node-named


Damit bleibt nurnoch die Frage offen, wie ich mit dem Tor proxy 
komunizieren könnte.

von Kaj (Gast)


Lesenswert?

Daniel A. schrieb:
> da gibt's bereits ein Modul für sqlite:
gibt es auch fuer C/C++, sogar mit beispiel code:
http://www.tutorialspoint.com/sqlite/sqlite_c_cpp.htm

Die installation ist nicht schwer:
http://www.tutorialspoint.com/sqlite/sqlite_installation.htm

von Planlos (Gast)


Lesenswert?

Uhu U. schrieb:
> Wie wärs mit einer SQLite Datenbank?

2^16 Domainnamen, mit durchschnittlich ca. 32 Byte Länge? 2 poplige 
Megabyte?

Das geht ins RAM. Entweder selber im Node.JS (da gibts ein bischen 
Overhead, aber den gibts bei Javascript immer. Verglichen mit dem 
sonstigen RAM-Bedarf gehen die Nutzdaten wohl im Rauschen unter)

oder z.B. redis.io

das geht auch von node.js aus, ist richtig schnell, und kann dir die 
Daten auch regelmäßig auf die Platte backupen.
Ein automatisches Expire alter Einträge geht auch.

Daniel A. schrieb:
> Damit bleibt nurnoch die Frage offen, wie ich mit dem Tor proxy
> komunizieren könnte.

iptables-Rule, am Gateway, die allen HTTP-Traffic für dein 10.x Netz auf 
deinen Proxy redirected?

Obwohl. Dann kann dein DNS-Faker auch gleich für alle Onion-Domains fix 
dieselbe IP ausspucken, die des Proxies.

von Ano (Gast)


Lesenswert?

Ich kenn jetzt TOR und Onionrouting nicht komplett, also tut mir leid 
wenn ich jetzt am Problem vorbeirede.

Sollte es für deine Zwecke nicht reichen einen DNS-Server zu nutzen, der 
DNS-Anfragen von .onion über TOR abwickelt und für alle anderen einen 
normalen DNS-Server nutzt? Dann richtest du eine statische route ein für 
IPs aus dem TOR-Netzwerk und leitest das über den TOR-Proxy.

Bezüglich Kommunikation mit dem TOR-Proxy: TOR fungiert als SOCK5 Proxy. 
Das sollte reichen um fündig zu werden.

von Daniel A. (daniel-a)


Lesenswert?

Planlos schrieb:
> iptables-Rule, am Gateway, die allen HTTP-Traffic für dein 10.x Netz auf
> deinen Proxy redirected?
>
> Obwohl. Dann kann dein DNS-Faker auch gleich für alle Onion-Domains fix
> dieselbe IP ausspucken, die des Proxies.

Der Tor Proxy ist kein HTTP Proxy, Tor kann mit fast jedem TCP und UDP 
client umgehen.

Ano schrieb:
> Sollte es für deine Zwecke nicht reichen einen DNS-Server zu nutzen, der
> DNS-Anfragen von .onion über TOR abwickelt und für alle anderen einen
> normalen DNS-Server nutzt? Dann richtest du eine statische route ein für
> IPs aus dem TOR-Netzwerk und leitest das über den TOR-Proxy.

So ähnlich hatte ich mir das anfangs auch Vorgestellt, aber das scheint 
nicht möglich zu sein.

> Bezüglich Kommunikation mit dem TOR-Proxy: TOR fungiert als SOCK5 Proxy.
> Das sollte reichen um fündig zu werden.

Danke, damit habe ich nun alle Informationen zusammen.

von Ano (Gast)


Lesenswert?

https://grepular.com/Transparent_Access_to_Tor_Hidden_Services
War jetzt nur ein spontaner fund. Sieht schon aus als sei es möglich.

von Daniel A. (daniel-a)


Lesenswert?

@Ano
Danke für den Link. Ich habe erst Gestern angefangen das zu 
recherchieren und wusste von den im Artikel beschriebenen Optionen noch 
nichts. Es funktioniert nun, jedoch musste ich zu meiner /etc/tor/torrc 
noch die Zeile "TransPort 0.0.0.0:9040" hinzufügen.

Danke euch allen.

von Christian B. (casandro)


Lesenswert?

Also wenn es Dir um HTTP geht, kannst Du einfach einen virtuellen 
Rechner machen auf dem ein Privoxy oder so was läuft, welcher über das 
Socket-Interface mit Tor spricht. (Der Teil ist bei Tor gut 
dokumentiert)

Den Privoxy lässt Du auf Port 80 laufen, und den DNS-Server 
konfigurierst Du so, dass er alle Anfrage auf onion. auf diese IP 
auflöst.

Für andere Protokolle wird das nicht wirklich brauchbar möglich sein, da 
diese die gewünschte Domäne nicht in der Verbindung selbst mitschicken.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.