Installation Openvpn auf einem Raspberry Pi für Ubuntu und Android

Ich wollte schon länger mal auf meinem “Amsterdamer Raspberry Pi” einen Openvpn Server installieren. Ziel ist es, den Netzwerkverkehr auf einem Ubuntu Rechner und einen Android Gerät in öffentlichen WLAN Verkehr verschlüsselt über einen Server zu leiten.

Da ich demnächst auf dem Chaos Communication Congress in Hamburg sein werde und dort vielleicht die “Hackerdichte” höher sein dürfte hatte ich jetzt mal einen richtigen Grund dafür.

Die Installation ist etwas kniffelig und teilt sich auf in vier Schritte

  1. Installation der Firewall ufw
  2. Installation des Openvpn Servers auf Raspbian
  3. Erstellen der notwendigen Zertifikate
  4. Konfiguration des Openvpn Clients auf Ubuntu
  5. konfiguration des Openvpn Clients auf Android

###1. Installation der Firewall ufw

Die Installation folgt im wesentlichen dieser Anleitung. Zuerst auf dem Pi installieren

apt-get update
apt-get install ufw

Status prüfen

 ufw status
 Status: inactive

Jetzt erst einmal sicherstellen das gleich mit meinem SSH Port weiter reinkomme und die Firewall starten

 ufw allow $custom ssh port
 Rules updated
 Rules updated (v6)
 ufw enable
 Command may disrupt existing ssh connections. Proceed with operation (y|n)
 Firewall is active and enabled on system startup
 ufw status  
 Status: active

Natürlich noch die weiteren Ports erlauben die man auf dem Server betreiben möchte.

###2. Installation des Openvpn Servers auf Raspbian

Bei dem Anteil der Openvpn Schritte bin ich im wesentlichen dieser Anleitung gefolgt. Nur bei den Pfaden gab es Raspbian spezifische Änderungen

 apt-get install openvpn
 gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf
 cd /etc/openvpn

In der Serverkonfiguration die Schlüssellänge erhöhen, DNS einstellen, Redirect Gatway erlauben und Nutzer auf Nobody umstellen

 vi server.conf 
    dh  dh2048.pem
    push "redirect-gateway def1 bypass-dhcp"
    push "dhcp-option DNS 208.67.222.222"
    user nobody
    group nogroup

Dem Raspbian erlauben das wir IP Verkehr weiterleiten (temporär und für immer)

 echo 1 > /proc/sys/net/ipv4/ip_forward
 vi /etc/sysctl.conf
  	net.ipv4.ip_forward=1

Die Firewall anpassen

ufw allow 1194/udp
vi /etc/default/ufw 
    DEFAULT_FORWARD_POLICY="ACCEPT"
vi /etc/ufw/before.rules
    # START OPENVPN RULES
    # NAT table rules
    *nat
    :POSTROUTING ACCEPT [0:0]
    # Allow traffic from OpenVPN client to eth0
    -A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
    COMMIT
    # END OPENVPN RULES
/etc/init.d/ufw restart

###3. Erstellen der notwendigen Zertifikate

Die Zertifikate kann man natürlich auch mit einer eigenen CA erstellen aber um die Komplexität am Anfang zu reduzieren starte ich erst mal mit dem Standardweg von Openvpn.

  sudo cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0 /etc/openvpn/easy-rsa 
  mkdir /etc/openvpn/easy-rsa/keys
  cd /etc/openvpn/easy-rsa/vars
  openssl dhparam -out /etc/openvpn/dh2048.pem 2048
  cd /etc/openvpn/easy-rsa/
  . ./vars 
  ./clean-all 
  ./build-ca 
  ./build-key-server serve
  cp /etc/openvpn/easy-rsa/keys/{server.crt,server.key,ca.crt} /etc/openvpn
  /etc/init.d/openvpn start
  /etc/init.d/openvpn status
 ./build-key client1
 ./build-key client2

###4. Konfiguration des Openvpn Clients auf Ubuntu

Auf dem Server erstellen wir zuerst die Konfiguration und packen alles zusammen für den Transfer auf dem Client

cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/easy-rsa/keys/client.ovpn
vi client.ovpn 
    remote your.openvpn-server.de 1194
 # Downgrade privileges after initialization (non-Windows only)
 user nobody
 group no group
tar czvf openvpn-client.tar.gz client1.crt client1.key client.ovpn ca.crt 

Auf dem Client packen wir das alles aus

mkdir openvpn
cd openvpn/
scp vpnserver:/home/hbauer/openvpn-client.tar.gz .
tar xvzf openvpn-client.tar.gz

Über das Netzwerkicon in der Ubuntu Menuleiste habe ich dann ein Openvpn Netzwerk erstellt

###5. Konfiguration des Openvpn Clients auf Android

Auf den Ubuntu Rechner habe ich das Paket mit den Zertifikaten und der Konfiguration kopiert, ausgepackt und das Openvpn Configfile angepasst

cd Daten/openvpn/
mkdir android1
cd android1/
scp tor:/home/hbauer/openvpn-client2.tar.gz  .
tar xzvf openvpn-client2.tar.gz 
vi client.ovpn
   ca ca.crt
   cert client2.crt
   key client2.key

Die CRT und Key Dateien dann auf das Android Gerät kopieren und die App OpenVpn Connect aus Play Store installieren. Dort kann man dann die Konfiguration einfach importieren und den Openvpn Dienst starten.

Auf meineip.de kann man dann prüfen ob man mit der lokalen oder der IP Adresse des Openvpn Servers im Internet surft.