Dienstag, 12. April 2016

Wir basteln uns einen WiFi-VPN Access-Point

Anleitungen, wie man einen VPN Wireless Access-Point mit einem Raspberry bastelt, gibt es zwar zuhauf im Netz, ich wollte aber eine möglichst einfache und zuverlässige Lösung schaffen. Dafür greife ich zur Abwechslung mal nicht auf eine reine Raspberry-Lösung zurück, sondern verwende anstelle des sonst üblichen WLAN-Sticks einen Access-Point. Das verschafft einige Vorteile. Allen voran spart man sich die Suche nach einem kompatiblen, Host-Fähiger WLAN-Stick, der unter Umständen dann doch nur so mittelmäßig zuverlässig funktioniert. Ich habe inzwischen drei Modelle durch, die alle ihre Macken hatten. Außerdem lässt sich auf diese Weise eine Menge Konfigurationsaufwand vermeiden, denn man kann sich den DHCP-Server und den Hostapd, den man für die WLAN-Verbindung benötigt, schlicht sparen.

Zum Einsatz kommt bei mir ein Raspberry Pi 2 B+ (lag noch rum) mit Raspbian Jessie Lite, ein Edimax EW-7438RPN (Amazon-Reflink, mit unter 18 Euro recht günstig und man kann das Teil mit der Firmware eines anderen Modells zum Access-Point umfunktionieren.) und einen Delock USB 2.0 Ethernet Adapter (Amazon-Reflink), um den Raspberry mit dem Access-Point zu verbinden.
Der Raspberry hat bei mir ein frisches Raspbian bekommen. Alles was sonst noch auf dem Raspberry gebraucht wird ist ein OpenVPN für den VPN-Tunnel und einen lokalen Nameserver.
sudo apt-get install bind9 openvpn

Anschließend ist die OpenVPN-Konfiguration und gegebenenfalls ein oder mehrere Zertifikate in das Verzeichnis /etc/openvpn/ zu kopieren.
cp "your config file" /etc/openvpn/server.conf

Die genaue VPN-Konfiguration ist von VPN-Anbieter zu VPN-Anbieter etwas unterschiedlich. Damit der OpenVPN-Service ohne Abfrage von Benutzername und Passwort startet, sollte man am besten die Datei /etc/openvpn/auth.txt anlegen und durch ein Return getrennt, Benutzernamen (erste Zeile) und Passwort (zweite Zeile) eintragen. Anschließend in der /etc/openvpn/server.conf die folgende Zeile anpassen, falls nicht schon geschehen.
...
auth-user-pass auth.txt
...

OpenVPN sollte nun fertig konfiguriert sein und kann gestartet werden.
sudo service openvpn start

In der Liste der Netzwerkinterfaces sollte das Interface tun0 auftauchen. Ist dem nicht so, hilft ein Blick in das /var/log/syslog, wo die Ausgabe des OpenVPN landen sollte, so denn nicht anders konfiguriert.
ifconfig

Aus Sicherheitsgründen habe ich noch die folgende iptables Regeln verwendet, um unaufgeforderte Verbindungen von außerhalb der VPN zu unterbinden. Damit die Regeln nach dem Reboot wieder gesetzt werden, habe ich die folgenden beiden Zeilen in vor das exit 0 in die Datei /etc/rc.local eingetragen.
sudo iptables -A INPUT -i tun0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A INPUT -i tun0 -j DROP

Ebenfalls wichtig ist das NAT, was dafür sorgt, dass alle verbundenen Rechner über die eine VPN-Verbindung kommunizieren können. Dafür gibt es die folgende Regel, die ebenfalls vor das exit 0 in die Datei /etc/rc.local einzutragen ist.
sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

Außerdem braucht es noch ein aktiviertes IP-Forwarding, dass in der Datei /etc/sysctl.conf aktiviert werden kann. Einfach den Eintrag net.ipv4.ip_forward heraussuchen und wie folgt ändern.
net.ipv4.ip_forward=1

Damit sollte nun die VPN-Konfiguration abgeschlossen sein. Jetzt kommt der Nameserver dran. Dazu zuerst die Datei /etc/bind/named.conf.options bearbeiten und eine Weiterleitungssektion einfügen. Die beiden IPs sind die Nameserver von Google, es können natürlich auch andere verwendet werden. Um keine Rückschlüsse auf den eigentlichen Anschluss zu verraten, empfiehlt es sich auf die Verwendung der providereigenen Nameserver zu verzichten.
forwarders {
8.8.8.8;
8.8.4.4;
};

Damit sichergestellt ist, dass der Nameserver auch immer bei einem Reboot startet.
sudo update-rc.d bind9 enable

Als nächstes kommt die Verbindung zum Delock Ethernet Adapter, der jetzt einfach mal in den Raspberry eingesteckt werden kann. Es sollte nun bei Eingabe von ifconfig das Netzwerkinterface eth1 angezeigt werden. Ein lsusb sollte folgendes USB-Gerät enthalten.
Bus 001 Device 004: ID 9710:7830 MosChip Semiconductor MCS7830 10/100 Mbps Ethernet adapter

Um dem Netzwerkinterface eth1 die feste IP-Adresse 192.168.100.1 zuzuweisen ist folgendes an das Ende der Datei /etc/dhcpcd.conf einzutragen. Hat das lokale Netz eth0 bereits eine IP im Bereich 192.168.100.* muss für alles was nun folgt, die 100 durch eine andere Ziffer ersetzt werden.
interface eth1
static ip_address=192.168.100.1/24
static routers=192.168.100.1
static domain_name_servers=192.168.100.1

Das war jetzt auch schon der Teil mit dem Raspberry, der an dieser Stelle am besten rebootet werden sollte, um alle Änderungen anzuwenden. Weiter geht es mit der Einrichtung des Access-Points. Hier kann jeder Access-Point verwendet werden, der einen DHCP-Server mitbringt und die Konfiguration einer statischen IP erlaubt. Wenn nicht bereits geschehen, kann der Access-Point nun per Ethernetkabel mit dem Delock Ethernet Adapter verbunden werden.

Um auf die Konfigurationsseite zugreifen zu können, verbindet man sich am besten direkt mit dem WLAN des Access-Points. Bei dem Edimax ist unter iQ Setup nun die folgende, statische IP-Adresse zu konfigurieren. Das Gateway zeigt auf den Raspberry.
Use the following IP address.
IP-Adresse : 192.168.100.2
Subnetzmaske : 255.255.255.0
Gateway-Adresse : 192.168.100.1

Außerdem muss unter Erweiterte Einstellung im Untermenü Administrations-Dienstprogramm der DHCP-Server aktiviert und eingerichtet werden.
Standardgateway       
192.168.100.1
Start-IP       
192.168.100.20
End-IP       
192.168.100.254

Das ganze sollte dann so aussehen.
Achtung, wenn man jetzt auf Speichern und Übernehmen klickt, hat der Access-Point eine IP, die nur noch vom Raspberry aus erreichbar ist. Wer mit Linux unterwegs ist, kann sich einen Tunnel für die Konfigurationsseite des Edimax einrichten. Mit Putty und Windows sollte das genauso gehen. Steht der Tunnel erst, kann im Browser die Adresse localhost aufgerufen werden und man gelangt wieder auf die Konfigurationsseite.
sudo ssh -L 80:192.168.100.2:80 pi@raspberrypi

Hier noch ein Paar Live-Aufnahmen von dem Ganzen.
 

Keine Kommentare:

Kommentar veröffentlichen