TUTORIAL: Raspberry Pi als TOR-Schnittstelle über LAN

  • Hallo!


    Als Dankeschön für die Hilfe, die ich hier erhalten habe, biete ich ein step-by-step Tutorial meines Tor Setups mit dem Pi an.


    Link zum ursprünglichen Thread:
    http://www.forum-raspberrypi.de/Thread-tor-auf-dem-pi


    Dem einen oder anderen mögen manche Schritte etwas zu ausführlich oder offensichtlich erscheinen, jedoch habe ich das Tutorial so geschrieben, wie es selbst gerne gehabt hätte.


    Die PC-Welt ist nur mein Hobby. Daher ist das Tutorial bezüglich der nötigen Kenntnis so pragmatisch wie möglich gehalten.


    #STAND vom 27.02.2014#


    ________________


    A.


    Mein Hardware-Setup:


    1x Router mit LAN und WLAN
    1x Hauptrechner (Windows 7 64bit) mit 2 LAN-Schnittstellen (LAN 1 und LAN 2)
    1x Raspberry-PI (Raspbian) mit LAN und WLAN (eth0 und wlan0)


    I.
    Der Hauptrechner ist per LAN-Kabel über LAN 1 direkt mit dem Router verbunden.


    II.
    Der Hauptrechner ist per Crossover-LAN-Kabel über LAN 2 mit dem Raspberry Pi verbunden.


    (Ein Crossover-LAN-Kabel ist etwas anders verdrahtet als ein normales LAN-Kabel und wird für eine direkte Verbindung zweier PCs genutzt; möglicherweise funktioniert es auch mit einem normalen LAN-Kabel)


    III.
    Der Raspberry Pi ist per WLAN mit dem Router verbunden.




    B.


    Was möchte ich mit diesem Setup erreichen?



    Mein Hauptrechner soll zwei parallele Internetverbindungen zur Verfügung haben. Eine „normale“ Verbindung und eine Verbindung, die über das Tor-Netzwerk läuft.


    I.
    Die „normale“ Verbindung erhält er über den Router an LAN 1.


    II.
    Die Tor-Verbindung erhält er über den Pi an LAN 2.




    C.


    Wie kann ich diese Tor-Verbindung über den Pi herstellen?


    Der Pi muss die Anfragen des Hauptrechners also erstens überhaupt einmal in das Internet weiterleiten und zweitens über das Tornetzwerk schicken.


    schematisch:


    (Hauptpc: Anfrage) => LAN => (Pi; schleust Traffic über Tor) => WLAN => (Router) => Internet


    Dazu müssen wir am Hauptrechner und am Pi folgende Einstellungen vornehmen.



    I.
    Einstellungen am Hauptrechner:


    Diese sind schnell gemacht.


    Wir navigieren wie folgt:
    1. Start>Systemsteuerung>Netzwerk- und Freigabecenter>Adaptereinstellungen ändern>


    2. Rechtsklick auf LAN 2 - also auf den LAN-Port, der direkt mit eurem Pi kommuniziert -
    > Eigenschaften
    Doppelklick auf
    > Internetprotokoll Version 4 (TCP/IPv4)


    3. Folgendes eintragen:


    IP-Adresse: 192.168.2.3
    Subnetzmaske: 255.255.255.0
    Standardgateway: 192.168.2.1


    Bevorzugter DNS-Server: 192.168.2.1


    ACHTUNG: Ihr könnt und solltet die Einträge 1zu1 übernehmen, da diese nichts mit eurem Router zu tun haben. Es geht hierbei nur um die direkte Kommunikation zwischen dem Hauptrechner und dem Pi.


    4. Bestätigen und fertig sind die Einstellungen am Hauptrechner.



    II.
    Einstellungen am Raspberry Pi:


    Ich gehe von einer frischen Installation von Raspbian auf dem Pi aus - geupdated auf den neusten Stand.


    Der WLAN-Stick ist bereits installiert.


    ((
    Ich habe mich für den bei Pi-Usern beliebten EDIMAX mini-WLAN-Stick entschieden. Der funktioniert bezüglich der Treiber direkt nach dem einstecken.


    http://www.amazon.de/EDIMAX-EW-7811UN-Wireless-Adapter-IEEE802-11b/dp/B003MTTJOY (Affiliate-Link)
    ))



    Wir sind eingeloggt als User „pi“.


    1.
    Zunächst wollen wir die Network-Interfaces einrichten; ich habe mich sowohl für das eth0 (LAN) und das wlan0 (WLAN) für eine static IP (eine fest-eingestellte IP) entschieden. Erklärung folgt.


    Befehl:
    sudo nano /etc/network/interfaces


    - es öffnet sich die Netzwerkkonfigurationsdatei über das Editierprogramm „nano“; diese ändern wir mit folgendem Inhalt ab:
    (Die Bemerkungen mit den Rauten könntet ihr zur eigenen Information auch übernehmen, da die Raute das dahinter Folgende auskommentiert)
    _________


    auto lo
    iface lo inet loopback


    auto eth0


    iface eth0 inet static
    address 192.168.2.1
    netmask 255.255.255.0
    network 192.168.2.0
    broadcast 192.168.2.255


    # Diese Einstellungen müssen 1zu1 übernommen werden, damit eine Verbindung zwischen Pi und Hauptrechner besteht.
    # ein gateway (192.168.2.1) darf hier nicht benutzt werden; ansonsten kollidiert dieses mit dem Gateway der WLAN-Verbindung und nur auf letzteres kommt es bezüglich der externen Internetverbindung an


    auto wlan0
    allow-hotplug wlan0


    iface wlan0 inet static
    # Ihr könntet hier auch einfach: - iface wlan0 inet dhcp - einstellen;
    # Dann würde der Pi eine IP-Adresse von dem WLAN-Router zugewiesen bekommen
    # die folgenden drei (!) Einträge würden in diesem Falle nicht übernommen werden


    address 192.168.178.222
    netmask 255.255.255.0
    gateway 192.168.178.1
    # mein Router hat die Adresse 192.168.178.1; typisch wäre jedoch auch 192.168.1.1
    # Das müsst ihr auf jeden Fall anpassen!


    wpa-ap-scan 1
    wpa-scan-ssid 1
    wpa-ssid „EUERWLANNETZWERK“
    wpa-psk „EUERWLANPASSWORT“
    # die Anführungszeichen sind auch zu übernehmen!


    __________


    - Änderungen mit der Tastenkombination STRG-O speichern und mit ENTER bestätigen
    - Datei mit STRG-X verlassen


    2. Als nächstes installieren wir TOR


    a) Tor Hauptsoftware
    Befehl:
    sudo apt-get install tor


    - Wenn es fertig installiert ist:


    Befehl:
    sudo nano /etc/tor/torrc


    - Dies öffnet die Tor-Konfigurationsdatei; in der Datei selbst steht sehr viel, was jedoch alles auskommentiert ist; ihr müsst Folgendes irgendwo in die Datei einfügen; ich selbst habe es einfach direkt nach der FAQ-Zeile eingefügt.
    ____________


    Log notice file /var/log/tor/notices.log
    # Log ist optional
    VirtualAddrNetwork 10.192.0.0/10
    AutomapHostsOnResolve 1
    TransPort 9040
    TransListenAddress 192.168.2.1
    # an dieser Stelle sagt ihr der TOR-Software, dass sie alles, was auf der genannten
    # Addresse ankommt über den TOR-Port 9040 weiterleitet
    # BEACHTE: die Adresse entspricht der IP des LAN-Ports des Pi!
    DNSPort 53
    DNSListenAddress 192.168.2.1
    # s.o.


    _________


    - Änderungen mit der Tastenkombination STRG-O speichern und mit ENTER bestätigen
    - Datei mit STRG-X verlassen


    b) Arm-Monitoring (optional)
    - wer will, kann sich noch ein Tor-Monitoring Programm namens "arm" installieren
    Befehl:
    sudo apt-get install tor-arm


    - starten lässt es sich im Anschluss wie folgt
    Befehl:
    sudo -u debian-tor arm
    (das Programm schlägt selbst vor, es nicht mit root-Rechten laufen zu lassen; es lässt sich aber auch mit einem einfachen "arm" starten)


    3. iptables einrichten:


    // An dieser Stelle nochmal einen besonderen Dank an den User „haimi“ für die richtigen Befehle.



    ACHTUNG: iptables ist bereits in Raspian vorinstalliert!


    a) wir geben uns als erstes permanente Rootrechte, ansonsten bekommen wir unter C. II. 3. e) 1) eine Fehlermeldung; ein einfaches "sudo" mag er scheinbar an dieser Stelle nicht


    Befehl:
    su


    => das root-Passwort eintragen


    ((
    EXKURS: Root-Passwort ändern
    Befehl: sudo passwd root
    => neues Passwort zweimal eintragen
    ))



    b) wir löschen zur Sicherheit alle Voreinstellungen bei iptables:


    Befehle:
    iptables -F


    Befehl:
    iptables -t nat -F



    c) wir weisen iptables an, den Traffic des Hauptrechners über den Pi weiterzuleiten:


    Befehl:
    iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE


    Befehl:
    iptables -A FORWARD -i wlan0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT


    Befehl:
    iptables -A FORWARD -i eth0 -o wlan0 -j ACCEPT


    d) wir weisen iptables an, die Anfragen des Hauptrechners, die über die LAN-Schnittstelle des Pi (eth0) ankommen, an die TOR-Ports weiterzuleiten und damit durch das Tornetzwerk zu schicken:


    Befehl:
    iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 22 -j REDIRECT --to-ports 22


    ((dieser Eintrag muss nicht unbedingt sein, er sorgt nur dafür, dass man sich über SSH zum Pi verbinden kann))


    Befehl:
    iptables -t nat -A PREROUTING -i eth0 -p udp --dport 53 -j REDIRECT --to-ports 53


    Befehl:
    iptables -t nat -A PREROUTING -i eth0 -p tcp --syn -j REDIRECT --to-ports 9040


    e) Damit wäre iptables fertig eingerichtet. Die Software speichert die Einträge jedoch nur bis zum nächsten Neustart. Das wollen wir vermeiden.


    1) iptables-Befehle in einer Datei speichern:


    Befehl:
    sudo iptables-save > /etc/iptables.save


    2) den Pi anweisen, die iptables-Einstellungen bei jedem Start zu laden:


    Befehl:
    sudo nano /etc/rc.local


    - das öffnet die Autostart-Datei von Raspian im nano-Editor


    - ihr müsst eine Zeile vor „exit 0“ folgendes eintragen
    _____
    ..
    ..
    ..


    iptables-restore < /etc/iptables.save


    exit 0
    _____


    - Änderungen mit der Tastenkombination STRG-O speichern und mit ENTER bestätigen
    - Datei mit STRG-X verlassen


    f) Neustart und Kontrolle
    - nach einem "sudo reboot" könnt ihr mit dem Befehl "iptables -t nat -L" noch einmal einsehen, ob alles geklappt hat


    4. resolv.conf überprüfen


    Befehl:
    sudo nano /etc/resolv.conf


    - öffnet die DNS-Konfigurationsdatei im nano-Editor


    => IP in die des Routers ändern:
    _____


    nameserver 192.168.178.1
    # in meinem Fall - wie gehabt - 192.168.178.1
    ______


    - Änderungen ggf. mit der Tastenkombination STRG-O speichern und mit ENTER bestätigen
    - Datei mit STRG-X verlassen



    5. Testen, ob alles läuft:


    Befehl:
    sudo reboot


    - Pi neustarten, um Änderungen sauber zu übernehmen.


    Befehl:
    ifconfig


    - zeigt euch an, ob ihr eure Interfaces richtig konfiguriert habt; dort müssten die von euch vergebenen IPs stehen


    Befehl:
    sudo service tor status


    - zeigt euch an, ob der TOR-Service läuft; es dürften keine Fehlermeldungen angezeigt werden


    FINALER TEST:


    => ab in einen Browser (nicht mit dem Pi, sondern mit dem verbundenen Hauptrechner!!!!!!!):


    - besucht z.B. folgende Seite:


    http://www.ipchicken.com


    Ihr solltet nun 1. in der Lage sein, diese aufzurufen und 2. nicht eure „echte“ IP sehen.


    Wenn das klappt, habt ihr das Tutorial erfolgreich durchlaufen! :)



    ACHTUNG:
    In dieser Konfiguration wird nur der Traffic der vom Hauptrechner über den Pi weitergeleitet wird, durch das Tornetzwerk geschickt!


    Nicht wundern, wenn der Traffic des Pi selbst nicht über das Tor-Netzwerk geht. Wenn ihr über den Pi ipchicken.com aufruft, werdet ihr also eure „echte“ IP sehen.


    Ich bitte um Feedback, Tipps, Erweiterungen, andere Ideen und ggf. Korrekturen. Falls jemandem ein Einstellung auffällt, die die Anonymität gefährdet, raus damit!
    __________________


    Weiteres:


    A.
    Eine gute Anleitung, wie ihr aus dem Pi einen TOR-WLAN-Accesspoint macht, findet ihr hier:
    http://learn.adafruit.com/onion-pi?view=all


    B.


    Ich habe gemerkt, dass die hier vorgestellte Idee in seinen Grundzügen dem "Whonix"-Projekt ähnelt. Dies ist noch sehr viel ausgeklügelter und vielleicht für den einen oder anderen einen Blick wert.
    https://www.whonix.org/wiki/Main_Page


    ________

  • Hi, großes Lob an dein Tutorial.
    Ich habe mich sehr schwer getan damals über die adafruit plattform alles sauber zum Laufen zu bringen. Hat zwar irgendwann geklappt, aber so schön wie Du es hier erklärt hast, hatte ich es nicht mal in der "linuxuser- Ausgabe 09.2013" nachlesen können.
    Nochmal danke und mach' weiter so,


    Woschiwoschi.

  • Hallo,


    habe ich alles eins zu eins übernommen, aber auf den PC sagt er mir, dassich keine Internetverbindung habe.
    Ich habe die Anleitung 3 mal durchgangen und zig mal von vorn angefangen... :wallbash:


    Den Raspberry sehe ich als WLAN in der fritzbox.


    In der ifconfig hat eth0 die IP 192.168.2.1, WLAN0 hat bei mir die IP 192.168.178.24


    tor status running --> ok



    auf den pi geht auch nix, scheint als ob er über eth 0 ins netz will...


    ping google.de de


    frm localhost (192.168.2.1) ....? is doch die netzwerkschnittstelle?


    ping vom pi zur fritzbox via wlan und ping via kabel zum PC funktionieren


    Hat jmd noch nen Tipp für mich.
    Vorgehensweise s.oben Anleitung



    EDIT: Vergesst es.


    Lag am Rechner! Windows eben! :-D

  • Hi vielen Dank erstmal für deine ausführliche Anleitung!!! :)


    Ist genau das was ich suche..

    Hab alles nach Anleitung gemacht. Leider bekomme ich keine Internetverbindung auf dem Rechner hin.
    Erstmal die Frage: Fehlt in der interfaces Konfiguration nicht noch ein
    auto eth0
    ?
    Ansonsten wird eth0 weder in der ifconfig angezeigt, noch läuft TOR.
    Wenn ich das hinzufüge passiert folgendes:


    Auf der Raspberry läuft Internet ohne Probleme.
    TOR Status gibt alles ok zurück.


    Verbindung vom Rechner zur Raspberry besteht auch über LAN (Ping funktioniert, SSH läuft,...)


    Ifconfig liefert folgendes zurück:




    Was mir aufgefallen ist:
    iptables -L
    gibt nicht die eingetragenen Regeln zurück. Auch wenn ich mich nicht auf den Autostart verlasse sondern sie manuell wieder eintrage.
    Sondern:




    Kann es sein, dass das daran liegt?

  • Vielen Dank auch von mir für die Anleitung. Leider habe ich das gleiche Problem: Verbindung zw. PC und Pi ok (ping ok), WLAN zwischen Pi und Router ok (Pi im Router zu sehen, IP ok), aber kein Internetzugriff, weder vom Pi, noch vom PC. Configs mehrfach überprüft. Netzwerk läuft, Tor läuft. Nu weiss ich nicht weiter. Irgendwelche Tipps? Vielen Dank im Voraus.


    Edit:
    Hat sich erledigt, lag am doppeltem Gateway: sowohl bei eth0 als auch bei wlan0. Es kann nur einen geben... jetzt funzt alles.

    Edited once, last by Sharky ().

  • @ Sharky


    Danke dir für den Hinweis bezüglich des Gateways. Habe das Tutorial korrigiert.


    @ Klaus


    Damit sollte auch dein Problem gelöst sein.


    An den iptables-Einstellungen liegt es nicht.
    Im übrigen lässt du dir mit dem Befehl "iptables -L" die falsche Tabelle anzeigen.
    Die eingetragenen Regeln findest du mit dem Befehl "iptables -t nat -L".


    Habe das "auto eth0" miteingefügt. Danke dafür.

  • Schöne Anleitung erstmal.


    Hab alles genauso umgesetzt wie beschrieben aber meine IP ist leider so geblieben.
    Wie kann das sein ?


    ifconfig:


    iptables -t nat -L


  • Ich bin in dem Bereich noch etwas unerfahren und habe daher eine Verständnisfrage. Ich betreibe einen Raspberry als VPN-Gateway, welches nur per LAN in meinem Netzwerk hängt, und alle Anfragen aus dem Hausnetz in das Internet über den Tunnel schickt. Nach dieser Anleitung muss das Tor-Gateway aber mit zwei Netzwerkkarten arbeiten und forwarding betreiben. Wieso ist das so? Wo ist der Unterschied zu dem VPN-Gateway? Können hier nicht auch die Anfragen aus dem Hausnetz per LAN kommen und die Weiterleitung in das Tor-Netz aus dem LAN heraus gehen??


    Danke schon mal für eure Erklärungen