Hallo Leute,
nach dem ganzen NSA Skandal dachte ich, ich sollte vielleicht doch mal auf VPN Dienste umsteigen.
Da hatte ich überlegt, dass ein Raspberry Pi doch super als VPN Gateway nutzbar sein müsste.
Also habe ich einem Freund und Kollegen davon erzählt, der mir kurzerhand seinen Raspberry Pi ausgeliehen hat.
Ich fing damit an mir die Dokumentationen für den Raspberry mal anzusehen und war erstaunt, dass ich kaum HowTo's fand um den Raspberry Pi als VPN Gateway zu nutzen.
Als OpenVPN Client oder Server ja, aber nicht als Gateway.
Damit Ihr es leichter habt, habe ich ein Image gebaut wo ihr nur noch ein paar Konfigurationen anpasst und schon loslegen könnt.
Da ich den Raspberry Pi auch als Airplay Empfänger nutzen möchte, habe ich noch ein weiteres Image gebaut mit Airplay.
Was brauchen wir?
- Raspberry Pi 512MB Version B
- SD-Karte ab 2GB
- Netzteil ab 1A (mit weniger läuft es nicht stabil)
- Netzwerkkabel
- Gehäuse ist empfehlenswert ;)
- Es sind keine weiteren Geräte erforderlich, keine USB WLAN- oder USB Soundmodul, es ist alles integriert was wir brauchen.
Allgemeine Infos zu der Konfiguration vom Image:
- Ohne grafische Oberfläche
- 16MB Grafikkartenspeicher konfiguriert
- HDMI Ausgabe konfiguriert
- sshd, nntp, OpenVPN, IPTables, Netzwerk startet automatisch
- Swap Datei mit 190MB in der /etc/fstab konfiguriert aber auskommentiert
- User: root Passwort: raspberry (raspberrz with non german keyboard layout)
Raspberry Pi Image mit OpenVPN und Airplay Empfänger:
- Linux raspberry-pi 3.6.11+
- Aktualisiert am 22.09.2013 mit rpi-update
- RAM Ausnutzung ca. 53MB
- Image für 2GB SD-Karte
- Shairport als Service
- Download
Raspberry Pi Image mit OpenVPN:
- Linux raspberry-pi 3.2.27
- Basierend auf Raspbian minimal Image
- RAM Ausnutzung ca. 23MB
- Image für 2GB SD-Karte
- Soundkarte funktioniert ohne Update nicht.
- Download
Was mache ich mit dem Image?
Das Image wird nun auf die SD Karte übertragen, dazu gibt es viele Anleitungen.
Z.B. von eLinux.org
Für Windows gibt es Tools, z.B. Win32 Disk Imager
Für Linux nutzt man DD:
umount /dev/sdX1dd bs=1M if=~/.img of=/dev/sdX sync
Für Mac nutzt man ebenfalls DD:
diskutil unmountDisk /dev/diskX
dd if=Konfiguration:.img of=/dev/rdiskX bs=1m
Anschließend passt man nur noch die Konfigurationsdateien an, diese liegen auf der SD Karte im Verzeichnis openvpn.
Es ist wichtig, dass alle Konfigurationsdateien die vorgegeben sind, auch vorhanden sind. Ich habe nur ein sehr simples Script geschrieben, welches die Konfigurationsdateien an die richtigen Stellen kopiert, welches nicht funktioniert wenn eine Datei fehlt.
Los geht's:
- interfaces
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback
auto eth0
#iface eth0 inet dhcp
iface eth0 inet static
address 192.168.1.150
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
dns-nameservers 194.150.168.168
auto eth0:1Die interfaces enthält die Netzwerkkonfiguration. Es ist notwendig, dass wir hier zwei Netzwerkgeräte konfigurieren.
iface eth0:1 inet static
address 192.168.1.254
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
eth0 kann auch mit DHCP konfiguriert werden, wichtig ist hier, dass das Netz zu eurem passt und die IP Adressen die Ihr wählt frei sind.
Als Nameserver habe ich den anycast dns.as250.net ausgewählt, den könnt Ihr natürlich auch anpassen, sollte aber keiner aus Europa (Vorratsdatenspeicherung) oder USA (NSA hört mit) sein.
Der Gateway 192.168.1.1 ist ist die Adresse von eurem normalen Router.
eth0:1 ist dann die Schnittstelle, die als neues Gateway fungiert. Das heißt dem verpasst ihr die IP Adresse die ihr dann in eurem Rechnern, Smartphones, Tablets auch als Gateway eintragt, in dem Beispiel also 192.168.1.254.
- example.ovpn
Diese Datei ist für OpenVPN die wichtigste, die bekommt Ihr von eurem VPN Anbieter, in der Regel sind darin auch gleich die notwendigen Zertifikate enthalten.
Bei manchen Anbietern, kommen die Zertifikate separat genauso die Logindaten.
Dann kopiert Ihr die Zertifikate ebenfalls in das openvpn Verzeichnis auf der SD Karte.
Wenn Ihr Logindaten habt die Ihr verwenden müsst, legt ihr eine einfache Textdatei an, worin Ihr einfach diese reinschreibt, also:
usernameDiese Zertifikate und Userdatendatei müsst Ihr dann in der ovpn Konfigurationsdatei eintragen.
passwort
Diese werden dann nach /etc/openvpn kopiert.
Also z.B. so:
CA: VPN123.se.ca.crt
TLS auth key: yes (VPN123.se.ta.key)
auth-user-pass password.txt
Bei jedem Neustart werden die Konfigurationsdateien erneut kopiert. Ihr könnt also immer wieder neue Änderungen durchführen, die dann entsprechend automatisch kopiert werden.
Erster Start:
Der erste Start sollte ohne Probleme funktionieren.
Wenn Ihr per HDMI einen Monitor oder Fernseher angeschlossen habt, seht ihr nach kurzer Zeit ein Login.
Ihr könnt die VPN Verbindung testen, in dem Ihr den Gateway auf eurem Gerät entsprechend ändert und dann z.B. mit meineip.de schaut, ob ihr nun eine andere IP Adresse habt.
Wenn ihr ein Windows habt, kann es sein, dass eure Firewall mit dem neuen Gateway zu macht. Dann müsst ihr die Registry noch anpassen:
HKEY_LOCAL_MACHINE\SOFTWARE\Zum Hintergrund kann man den Blog von Born anschauen.Microsoft\Windows NT
\CurrentVersion\NetworkList\profiles\ , wobei für den
Namen des Netzwerks steht.
Dann setzen Sie den DWORD-Wert Category auf den gewünschten Standort
(0 = öffentlich, 1 = privat, 2 = Arbeitsplatz)
Portforwarding:
Wenn ihr Portforwarding braucht, also, z.B. wenn Ihr euren SSH Server von aussen erreichen wollt, müsst Ihr die Ports nun auf dem Raspberry konfigurieren:
iptables -A PREROUTING -t nat -i tun0 -p tcp(udp) --dport 1234 -j DNAT --to
iptables-save > /boot/openvpn/rulesiptables
Die Iptables ist die Firewall von Linux, ich habe keine besonderen Regeln hinterlegt um das Netzwerk zu schützen. Es gilt der Standardschutz vom NAT.
Die Regeln können natürlich erweitert werden.
Eigenes Image Konfigurieren:
Wenn ihr wissen wollt was ihr machen müsst um selbst euren Raspberry Pi so zu konfigurieren, fasse ich hier die Konfiguration im Schnelldurchlauf zusammen:
- Als erstes habe ich das Minimal Image geladen und auf die SD Karte gepackt.
- Die Swap Datei habe ich in der /etc/fstab auskommentiert, damit die SD Karte nicht frühzeitig altert. Außerdem habe ich die SWAP auf 190MB verkleinert, da ich gelesen habe, dass einige Probleme hatten das Image auf eine 2GB große SD Karte zu spielen.
- Anschließend müssen einige Pakete installiert werden:
apt-get update
apt-get upgrade
apt-get install git git-core libao-dev libssl-dev libcrypt-openssl-rsa-perl libio-socket-inet6-perl libwww-perl avahi-utils pkg-config alsa-utils gcc make openssl openvpn
System updaten:
wget --no-check-certificate https://raw.github.com/Hexxeh/rpi-update/master/rpi-update -O /usr/bin/rpi-update && sudo chmod +x /usr/bin/rpi-update
rpi-update
Konfiguration OpenVPN:
echo 'AUTOSTART="standard"' >> /etc/default/openvpn
touch /etc/network/if-pre-up.d/iptables
echo "#!/bin/bash" >> /etc/network/if-pre-up.d/iptables
echo "/sbin/iptables-restore < /etc/rulesiptables" >> /etc/network/if-pre-up.d/iptables
chmod +x /etc/network/if-pre-up.d/iptables
Die Konfigurationsdatei Interfaces habe ich in /boot/openvpn abgelegt und wird nach /etc/network kopiert
Die Konfigurationsdatei .ovpn wird von /boot/openvpn nach /etc/openvpn/standard.conf kopiert
Die Konfigurationsdatei für IPTABLES rulesiptables habe ich in /boot/openvpn abgelegt und wird nach /etc kopiert
nano /etc/sysctl.conf und in der Zeile net.ipv4.ip_forward = 1 das # entfernen.
Die Konfigurationsdatei /etc/init.d/networking muss ergänzt werden, um die Konfigurationsdateien aus /boot/openvpn zu laden.
Die Zeile "bash /boot/openvpn/copyovpn.sh" sollte sehr früh in dem Script stehen. Ich habe diese direkt nach IFSTATE eingefügt.
Konfiguration Kernel:
Ich musste für die Nutzung vom Gateway einen neuen Kernel kompilieren. Eine schöne Anleitung ist diese hier
Das rpi-update installiert einen neuen Standard-Kernel, das selbst kompilieren ist nur notwendig wenn man weiterhin mit dem Minimal-Image/ Konfiguration arbeiten möchte.
Konfigurationen die ich in der .config ergänzen musste waren:
IP_NF_IPTABLES=y
CONFIG_NF_NAT=y
CONFIG_IP_NF_IPTABLES=y
CONFIG_NF_NAT=y
CONFIG_IP_NF_CONNTRACK=y
CONFIG_IP_NF_FILTER=y
CONFIG_IP_NF_TARGET_MASQUERADE=y
CONFIG_NETFILTER=y
Airport:
echo "snd-bcm2835" >>/etc/modules
echo "hdmi_drive=2" >> /boot/config.txt
cpan Net::SDP
git clone https://github.com/albertz/shairport.git shairport
cd shairport
make
make DESTDIR=/opt/shairport install
mkdir /opt/shairport/etc
mkdir /opt/shairport/etc/init.d
cp shairport.init.sample /opt/shairport/etc/init.d/shairport
nano /opt/shairport/etc/init.d/shairport
DAEMON="/usr/local/bin/shairport.pl" zu DAEMON="/opt/shairport/usr/local/bin/shairport.pl" ändern
DAEMON_ARGS="-w $PIDFILE -a $NAME" zu DAEMON_ARGS="-w $PIDFILE -a AIRPORT" ändern
ln -s /opt/shairport/etc/init.d/shairport /etc/init.d/
insserv shairport
Optional noch den Ausgang anpassen:
amixer cset numid=3 0
alsactl store
Auto: 0
Kopfhörer (3,5 Klinke): 1
HDMI: 2
Ende:
Das müssten alle Konfigurationen gewesen sein. Viel spass mit dem Image :)
Sieht super aus!
AntwortenLöschenHabe gerade einen Raspberry bestellt und werde dein Image mal ausprobieren.
schaut sehr gut aus
AntwortenLöschenKann machen was ich will. ip´s anpassen. nix funktioniert :-(
AntwortenLöschenHi, wer Probleme mit dem Image hier hat, ändert die ETH Zeilen in der Interfaces wie folgt ab.
AntwortenLöschenauto eth1
iface eth1 inet static
auto eth1:1
iface eth1:1 inet static
Ansonsten danke für die Doku hier.
Gruß Stefan
ES FUNKTIONIERT!
AntwortenLöschenDu bist spitze! Installiert, config angepasst und fertig!
10000 Dank für die Arbeit die du dir gemacht hast das Image bereitzustellen, ohne dich hätte ich warscheinlich ewig dran gefummelt.
Hier meine aktuelle Interfaces Datei, funktioniert mit den Standardeinstellungen der FritzBox 7390. Als Raspberry nutze ich die aktuelle Version B mit 512 MB Ram. Vielleicht hilft es ja jemanden :)
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback
auto eth1
iface eth1 inet dhcp
auto eth1:1
iface eth1:1 inet static
address 192.168.178.222
netmask 255.255.255.0
network 192.168.178.0
broadcast 192.168.178.255
gateway 192.168.178.1
In der rulesiptables müsst ihr dann noch eth0:1 mit eth1:1 ersetzen
Habe mich am Wochenende damit auch mal beschäftigt, mit aktuellem Raspbian scheint es nicht mehr so kompliziert zu sein. Das Einzige, was mir bei meinem Setup (https://www.kadder.de/2013/12/raspberry-pi-als-vpn-gateway/) noch Probleme macht: das Forwarding soll gestoppt werden, sobald die VPN-Verbindung verloren geht (derzeit läuft es einfach weiter) und ab und zu bleibt die Datenübertragung einfach stehen bis die VPN-Verbindung neu aufgebaut wurde...
AntwortenLöschenDanke für diesen Blog-Eintrag! Ich habe mein Raspberry-Pi im grossen und ganzen 1:1 so wie hier beschreiben als VPN-Gateway konfiguriert. Probleme gab es bei mir aber mit dem virtuellen Interface (hier eth0:1). Hast du diesen Gateway über das eth0:1 Interface auch mit Windows-Clients getestet?
AntwortenLöschenMeine Linux-Clients (Ubuntu) konnten ohne Probleme über das eth0:1 interface (bzw. Gateway 192.168.1.254) eine Verbindung zum Internet aufnehmen. Meine Windows-Clients jedoch allesamt nicht. Ich habe das u.a. auch mit einen Dualboot PC (ubuntu, win7) und identischen dhcp getestet. Liegt also nicht an der Hardware.
Keine Ahnung wieso...Die Windows-Clients funktionierten erst als ich das Interface eth0 (IP 192.168.1.150) als Gateway verwendet habe.
Hallo,
Löschenich hab keine Probleme damit gehabt, Linux funktioniert sehr gut mit virtuellen Interfaces, daher wundert mich das.
Könnte an einem Routingproblem liegen, ist aber leider nicht so einfach rauszufinden.
beste Grüße
Paul
Hat von euch einer Lösung wie ich sicherstelle dass wenn der Tunnel offline ist auch kein Gerät mehr online kommt ? Es soll kein Traffic mehr "normal" zum Provider gehen. Nur noch alles über den Tunnel.
AntwortenLöschenWenn der Tunnel jetzt offline ist geht jedes Gerät einfach über meine normale IP raus. Das würde ich gerne unterbinden. Gerde wenn der Tunnel nach einem reconnect mal nicht mehr hoch kommt.
Hallo,
LöschenDu kannst das auf unterschiedliche Arten lösen, ich habe das glaub ich mit dem DNS Einträgen gelöst, die nach dem Aufbau der Verbindung aus der resolv.conf entfernt werden.
beste Grüße
Paul
Mit einigen Einstellungen die man noch machen muss lüppt alles :-))
AntwortenLöschenDanke für das Image !
Hallo,
Löschenwelche Einstellungen fehlten bei dir noch?
beste Grüße
Paul
Bei mir startet der VPN-Tunnel leider nicht. Ein manueller Start von OpenVPN bringt leider nur massenhaft Fehlermeldungen.
AntwortenLöschenGestartet habe ich mit:
openvpn /etc/openvpn/standard.conf
Fehlermeldungen sind z. B.:
TLS_ERROR: BIO read tls_read_plaintext error: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
VERIFY ERROR: depth=1, error=certificate is not yet valid: /C=US/ST=OH/L=Columbus/O=Private_Internet_Access/CN=Private_Internet_Access_CA/emailAddress=secure@privateinternetaccess.com
VPN-Anbieter ist (wie ersichtlich) privateinternetaccess.com. Habe deren Config-Files und Zertifikat verwendet. Pfad zur User/Passwortdatei ist korrekt eingetragen.
Was kann ich tun, um dem Fehler auf die Schliche zu kommen?
Hallo Danyel,
Löschener kann das Zertifikat nicht validieren. Unterstützt der Anbieter OpenVPN?
beste Grüße
Paul
Eventuell wäre eine IPtables Einstellung wie "-A FORWARD -i eth0:1 -o eth0 -j DROP" ganz praktisch, dann würde, wenn die VPN Verbindung nicht steht, auch nix mehr weitergeleitet werden.
AntwortenLöschenWie funktioniert es denn gerade mit den Routen, kann ich noch über ssh zugreifen?
Hallo,
Löschenja klar, es sind ja 2 IP Adressen, da kannst Du ganz normal über SSH zugreifen.
Die IPTables kannst Du nach belieben anpassen. Ich hatte das über angepasste DNS Einstellungen gelöst. Über die Firewall ist das natürlich sauberer.
beste Grüße
Paul
Und wieso läuft transmission im hintergrund?
AntwortenLöschenHallo,
LöschenTransmission? Das ist im Image nicht enthalten. Da müsste man ja sogar X installieren, wenn ich mit ein apt-get install transmission angucke.
poste doch mal deine Prozessliste.
beste Grüße
Paul
Also bei mir ist es im moment auch so das ich soviel upstream wie downstream habe...
Löschendas habe ich mir bisher nicht angeschaut, aber da der Traffic über nur eine Schnittstelle geht und dann wieder an die Geräte rausgeschickt wird die an deinem Raspberry hängen, macht das Sinn.
LöschenWas der vorige Kommentator aber meinte war, dass eine Torrent Software Namens Transmission im Hintergrund läuft.
Und das Paket ist in dem Image nicht enthalten.
beste Grüße
Paul
habe mich präzise an die anleitung gehalten, aber kann den raspberry nicht einmal anpingen?
AntwortenLöschenhat jemand konkrete erfahrungen mit ipredator gesammelt? habe sowohl die kombinierte konfigurationsdatei ausprobiert, als auch die konventionelle mit zusätzlichen zertifikaten …
Hallo,
Löschenwelche IP versuchste denn?
beste Grüße
Paul
Vielen Dank für das Image, das mir einen sehr guten Start gegeben hat.
AntwortenLöschenBasierend auf deinem Image habe ich ein kleines Script geschrieben, dass dein Image etwas modifiziert.
Vieleicht kann es jemand gebrauchen.
Raspberry Pi als OpenVPN Gateway und Privoxy:
http://blog.der-berni.de/2014/01/raspberry-pi-als-openvpn-gateway-und.html
Hallo Berni,
Löschenvielen dank, dass muss ich mir mal angucken :)
beste Grüße
Paul
wie ist denn der Login? 'pi' und 'raspberry' gehen nicht??
AntwortenLöschenHallo,
LöschenSteht oben in der Beschreibung. User: root Passwort: raspberry
beste Grüße
Paul
Hi,
AntwortenLöschenist in dem Image ein DHCP intergriert? Dann könnte man allen Cients nämlich gleich den Raspberry als Gateway zuweisen lassen statt den ursprünglichen Router.
Hallo,
LöschenDHCP Server ist nicht installiert/ konfiguriert um zu verhindern, dass es mit dem regulären Router einen Konflikt gibt.
Muss dann also manuell nach installiert werden.
beste Grüße
Paul
ich hab schon ein problem beim starten, wie sind die logindaten?
AntwortenLöschenHallo Jonathan,
Löschendie stehen bei "Allgemeine Infos zu der Konfiguration vom Image:"
beste Grüße
Paul
Hallo,
AntwortenLöschenwie kann ich den openvpn troubleshouten? Ich habe alles so eingestellt und der PC kommt auch über den Raspberry als Gateway ins Internet, allerdings ohne über VPN zu gehen...
Hallo,
Löschenhabe das Problem lokalisiert, der Pi stellt beim booten das Datum auf 1970, dadurch lädt openvpn das Zertifikat nicht.
Hat jemand einen Workaround, der einen Neustart überlebt?
Hallo,
Löschender Pi zieht automatisch das Datum wenn die Internetverbindung besteht. Das dauert in der Regel nur einige Sekunden.
Beste Grüße
Paul
OK, werde es mal beobachten.
LöschenGibt es einen Tipp wie man die iptables anpassen müsste, damit Geräte, die den Pi als Gateway nutzen, nur online kommen wenn das vpn aufgebaut wurde?
Hallo. Muss die .ovpn-Datei wirklich example.ovpn heißen, damit der vpn-tunnel aufgebaut werden kann?
AntwortenLöschenNein, sie muss nur mit .ovpn enden.
LöschenIch verstehe das nicht. Ich habe das IMage auf eine SD Karte mit Win32 Disk Imager geschrieben und einfach mal so gestartet. Aber mein Bild (HDMI bleibt dunkel. Auch nach dem anpassen der Datein, passiert nichts. Ich habe ein PI2 und ein Pi B Model versucht.
AntwortenLöschenHallo,
AntwortenLöschendanke erstmal für das Image. Ich hatte folgendes Problem:
Das Netzwerk konnte nicht gestartet werden, "cannot find device eth0"
Die Lösung konnte ich hier finden http://raspberrypi.stackexchange.com/questions/26155/cloning-sd-card-causes-interface-eth0-does-not-exist
Nach löschen der /etc/udev/rules.d/70-persistent-net.rules und Reboot wurde eth0 wieder korrekt initialisiert.
Warum ich scheinbar als einziger das Problem hatte, ist mir grade ein Rätsel. Eventuell lags daran, dass ich dein Image einfach über mein altes drübergebügelt hab. Aber die MAC Adressen sollten ja trotzdem die selben sein? Ist in deinem Image die Datei enthalten?
Seis drum, jetzt klappt es, danke nochmal!
Auch mein Bild (HDMI) bleibt mit PI2 Model B leider dunkel
AntwortenLöschenDass Image funktioniert mit dem Raspi 2 nicht! Da ist das Sys zu alt!
LöschenHat eventuell schon jemand einen Turnaround mit dem Raspi 2B ? Ich bin gerade am testen. Habe die Normale Raspian Installation genommen und die einzelnen Anpassungen vorgenommen.
AntwortenLöschenMit diesen beiden Befehlen habe ich meine Probleme:
echo "#!/bin/bash" >> /etc/network/if-pre-up.d/iptables
echo "/sbin/iptables-restore < /etc/rulesiptables" >> /etc/network/if-pre-up.d/iptables
Der Stand ist, ich habe 2 IP Adressen in meinem fall die 192.168.1.99 und 192168.1.100
Wenn ich mit dem Raspi selbst per Xserver ins Internet gehe, funktioniert die VPN Verbindung !
Allerdings schein mir die Verbindung zwischen den beiden IP´s nicht zu klappen. Ja ich habe das IP Forwarding freigeben...
Jemand ne Idee oder hat ein fertiges Image für den Raspi2 B ???
Wäre cool .. Danke.
Hi Michael,
Löschendie beiden Befehle edititeren die /etc/network/if-pre-up.d/iptables Datei.
Du kannst Diese auch einfach mit einem Texteditor öffnen und dort die zwei Zeilen:
#!/bin/bash
/sbin/iptables-restore < /etc/rulesiptables
eintragen. Mehr passiert dort nicht.
Wenn Du ein ferties Image hast, kann ich das auch gerne Online stellen, ich habe leider noch keinen neuen Raspberry.
Wenn das VPN lokal funktioniert ist das schonmal gut.
Hast Du den Raspberry als Gateway eingetragen?
Beste Grüße
Paul
Der Kommentar wurde von einem Blog-Administrator entfernt.
AntwortenLöschenDanke für das Image, ich habe den Raspberry Pi 2 Model B QuadCore 1GB und bekomme das aber leidet nicht hin. Kann jemand das Image aktualisieren? Selbst nach Stunden mit Anpassungen geht's bei mir nicht.
AntwortenLöschenHallo Paul, vielen Dank für das Image. Funktioniert das Linux raspberry-pi 3.6.11+ mit den neuesten Raspberry 3 b? Viren Dank
AntwortenLöschenHi, super Sache! Der Download-Link ist aber hinüber, gibt's das Image noch?
AntwortenLöschen7 Jahre später... Downloads sind aktualisiert ;)
Löschen