|
|
Zeile 3: |
Zeile 3: |
| __TOC__ | | __TOC__ |
|
| |
|
| ==Client einrichten== | | ==Client einrichten (OpenVPN) (alt)== |
| ===Zertifikat beantragen=== | | ===Zertifikat beantragen=== |
| Um ein Zertifikat zum Potsdam-VPN für deinen Freifunkrouter zu erhalten, schicke bitte eine Email mit folgenden Angaben an ''[https://lists.freifunk-potsdam.de/cgi-bin/mailman/listinfo/users users@lists.freifunk-potsdam.de]''. | | Um ein Zertifikat zum Potsdam-VPN für deinen Freifunkrouter zu erhalten, schicke bitte eine Email mit folgenden Angaben an ''[https://lists.freifunk-potsdam.de/cgi-bin/mailman/listinfo/users users@lists.freifunk-potsdam.de]''. |
Zeile 100: |
Zeile 100: |
| *[https://lists.freifunk-potsdam.de/pipermail/users/2018-March/018515.html Welches OpenVPN?] - Eine Diskussion zur Installation von Paketen unter der Firmware-Version Hedy. | | *[https://lists.freifunk-potsdam.de/pipermail/users/2018-March/018515.html Welches OpenVPN?] - Eine Diskussion zur Installation von Paketen unter der Firmware-Version Hedy. |
|
| |
|
| =Server=
| |
|
| |
| Dieser Abschnitt ist interessant, wenn man einen Potsdam-VPN-Server aufsetzt und verwaltet.
| |
| Wenn man seinen Router mit dem Potsdam-VPN verbinden möchte, ist dieser uninteressant.
| |
|
| |
| ==Keys generieren==
| |
| ===Easy-RSA config===
| |
|
| |
| *vim vars
| |
|
| |
| export EASY_RSA="`pwd`"
| |
| export OPENSSL="openssl"
| |
| export PKCS11TOOL="pkcs11-tool"
| |
| export GREP="grep"
| |
|
| |
| export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA`
| |
|
| |
| export KEY_DIR="$EASY_RSA/keys"
| |
|
| |
| # Issue rm -rf warning
| |
| echo NOTE: If you run ./clean-all, I will be doing a rm -rf on $KEY_DIR
| |
|
| |
| export PKCS11_MODULE_PATH="dummy"
| |
| export PKCS11_PIN="dummy"
| |
|
| |
| export KEY_SIZE=2048
| |
|
| |
| export CA_EXPIRE=10950
| |
|
| |
| export KEY_EXPIRE=3660
| |
|
| |
| export KEY_COUNTRY="DE"
| |
| export KEY_PROVINCE="BRB"
| |
| export KEY_CITY="Potsdam"
| |
| export KEY_ORG="Freifunk Potsdam e.V."
| |
| export KEY_EMAIL="info@freifunk-potsdam.de"
| |
| export KEY_CN=
| |
| export KEY_NAME=
| |
| ===CA Zertifikat, CA Key und DH Parameter erzeugen===
| |
| . vars
| |
| ./build-ca
| |
| ./build-dh
| |
| ===Server Zertifikat und Server Key erzeugen===
| |
| . vars
| |
| ./build-key-server <span style="color:red">$server name$</span>
| |
| ===client Zertifikat und Client Key erzeugen===
| |
| . vars
| |
| ./build-key <span style="color:red">$client name$</span>
| |
|
| |
| ==Server aufsetzen==
| |
| Die Potsdam-VPN Server sind als [[virtueller Router|virtuelle Router]] auf Hedy-Basis aufgesetzt. Die virtuellen Router werden mit Qemu ausgeführt.
| |
| Auf jedem virtuellen Router läuft ein OpenVPN Server, mit dem sich Clients verbinden können. Dafür wird der UDP-Port 1195 vom Hostsystem an den virtuellen Router forgewarded. Zur einfacheren Administration werden noch die Ports 22 und 443 auf alternativen Ports forgewarded.
| |
|
| |
| Das Netzwerk zwischen dem Hostsystem und dem virtuellen Router ist statisch und stellt für den virtuellen Router das WAN dar.
| |
| Netzwerk: 172.22.255.0/24
| |
| Hostsystem: 172.22.255.1
| |
| v. Router WAN: 172.22.255.2
| |
| v. Router FFUPLINK: 172.22.255.10
| |
|
| |
| Die OpenVPN-Server verteilen Adressen aus den Netzwerken 10.22.241.0/24, 10.22.242.0/24 und 10.22.243.0/24.
| |
|
| |
| Die virtuellen Router sollen über die Hostsysteme hinweg miteinander verbunden sein. Dafür benutzen wir L2TPv3 (Layer 2 Tunneling Protocol) Funktion von Qemu. Wir müssen nur ein paar Ports freigeben.
| |
|
| |
| '''Portfreigaben und -forwards:'''
| |
|
| |
| *UDP 25551
| |
| *UDP 25552
| |
| *UDP 25553
| |
| *UDP 1195 -> 172.22.255.2:1195
| |
| *TCP 25522 -> 172.22.255.2:22
| |
| *TCP 25543 -> 172.22.255.2:443
| |
|
| |
| '''L2TP-Verbindungen zwischen den drei Servern:'''
| |
|
| |
| sollte durch ein Bild ersetzt werden
| |
| {| border="1"
| |
| |-
| |
| |pdmvpn-a<br>eth1<br>10.22.240.1/30
| |
| |25552
| |
| | ---
| |
| |25551
| |
| |pdmvpn-b<br>eth1<br>10.22.240.2/30
| |
| |-
| |
| |pdmvpn-a<br>eth2<br>10.22.240.5/30
| |
| |25553
| |
| | ---
| |
| |25551
| |
| |pdmvpn-c<br>eth1<br>10.22.240.6/30
| |
| |-
| |
| |pdmvpn-b<br>eth2<br>10.22.240.9/30
| |
| |25553
| |
| | ---
| |
| |25552
| |
| |pdmvpn-c<br>eth2<br>10.22.240.10/30
| |
|
| |
| |}
| |
|
| |
| ===Firmware kompilieren===
| |
|
| |
| Zu testen: Die Firmware kann auch vom Berliner Buildbot heruntergeladen werden. [https://buildbot.berlin.freifunk.net/buildbot/stable/1.0.3/x86-generic/tunnel-berlin/]
| |
|
| |
| Da die OpenVPN-Server Funktionalität im Standart-Hedy nicht enthalten ist, muss die Firmware mit einigen Änderungen selbst kompiliert werden.
| |
|
| |
| Git-Repository clonen:
| |
| git clone -b Hedy-1.0.2 https://github.com/freifunk-berlin/firmware.git hedy-1.0.2
| |
| cd hedy-1.0.2
| |
|
| |
| configs/common.config ergänzen:
| |
| CONFIG_OPENVPN_openssl_ENABLE_SMALL=n
| |
| CONFIG_OPENVPN_openssl_ENABLE_SERVER=y
| |
| CONFIG_OPENVPN_openssl_ENABLE_OCC=y
| |
|
| |
| Da wir OpenVPN auf jeden Fall brauchen, bauen wir das gleich im default Image mit ein.
| |
|
| |
| packages/default.txt ergänzen:
| |
| luci-app-openvpn
| |
| openvpn-openssl
| |
|
| |
| Kaffeepause, mit Kuchen ;-)
| |
| make -j4 TARGET=x86-generic
| |
|
| |
| In firmwares/x86-generic/default/ liegt anschließend eine hedy-1.0.2-alpha-*-x86-generic-combined-ext4.img.gz.
| |
| Diese kann man auspacken mit:
| |
| zcat firmwares/x86-generic/default/hedy-1.0.2-alpha-*-x86-generic-combined-ext4.img.gz > hedy-1.0.2.img
| |
|
| |
| Das Image kann dann für einen [[virtueller Router|virtuellen Router]] benutzt werden.
| |
|
| |
| ===Hostsystem einrichten===
| |
| ====Netzwerk, Routing und Firewall====
| |
|
| |
| /etc/network/interfaces
| |
| auto brffvpn
| |
| iface brffvpn inet static
| |
| bridge_ports none
| |
| address 172.22.255.1
| |
| netmask 255.255.255.0
| |
|
| |
| /etc/iproute2/rt_tables
| |
| 100 ffvpn
| |
| 101 ffvpn-default
| |
|
| |
| /etc/iptables/rules.v4
| |
| *filter
| |
| -A INPUT -p udp -m udp --dport 25551 -j ACCEPT
| |
| -A INPUT -p udp -m udp --dport 25552 -j ACCEPT
| |
| -A INPUT -p udp -m udp --dport 25553 -j ACCEPT
| |
| -A FORWARD -i brffvpn -o tap0 -s 172.22.255.0/24 -d 10.0.0.0/24 -m conntrack --ctstate DNAT -j VPNIN
| |
| -A FORWARD -i tun5 -o brffvpn -d 172.22.255.0/24 -j ACCEPT
| |
| -A FORWARD -o tun5 -i brffvpn -s 172.22.255.0/24 -j ACCEPT
| |
| -A FORWARD -i '''eth0''' -o brffvpn -d 172.22.255.2 -j ACCEPT
| |
| -A FORWARD -o '''eth0''' -i brffvpn -s 172.22.255.2 -j ACCEPT
| |
| ...
| |
| *nat
| |
| :PORTFW - [0:0]
| |
| -A PREROUTING -i '''eth0''' -j PORTFW
| |
| -A PORTFW -p udp --dport 1195 -j DNAT --to-destination 172.22.255.2
| |
| -A PORTFW -p tcp --dport 25522 -j DNAT --to-destination 172.22.255.2:22
| |
| -A PORTFW -p tcp --dport 25543 -j DNAT --to-destination 172.22.255.2:443
| |
|
| |
|
| |
| ====Qemu-Script====
| |
|
| |
| #!/bin/bash
| |
| USER=pdmvpn
| |
| DISK=/home/pdmvpn/pdmvpn_b_hedy.img
| |
| ME=vpn-b
| |
| MYPORT=25552
| |
| CONA="dst=vpn-a.freifunk-potsdam.de,srcport=25551,src=${ME}.freifunk-potsdam.de,dstport=${MYPORT}"
| |
| #CONB="dst=vpn-b.freifunk-potsdam.de,srcport=25552,src=${ME}.freifunk-potsdam.de,dstport=${MYPORT}"
| |
| CONC="dst=vpn-c.freifunk-potsdam.de,srcport=25553,src=${ME}.freifunk-potsdam.de,dstport=${MYPORT}"
| |
|
| |
| if [ "$1" = "start" ]; then
| |
| $0 run > /home/pdmvpn/pdmvpn.log 2>&1 &
| |
| echo $! > /home/pdmvpn/pdmvpn.pid
| |
| elif [ "$1" = "stop" ]; then
| |
| kill `cat /home/pdmvpn/pdmvpn.pid`
| |
| kill `cat /home/pdmvpn/pdmvpn_qemu.pid`
| |
| elif [ "$1" = "run" ]; then
| |
| while true; do
| |
| qemu-system-i386 \
| |
| -runas $USER \
| |
| -pidfile /home/pdmvpn/pdmvpn_qemu.pid \
| |
| -no-reboot \
| |
| -net nic -net bridge,br=brffvpn \
| |
| -net nic,vlan=2 -net l2tpv3,vlan=2,$CONA,udp,rxsession=0xffffffff,txsession=0xffffffff,counter \
| |
| -net nic,vlan=3 -net l2tpv3,vlan=3,$CONC,udp,rxsession=0xffffffff,txsession=0xffffffff,counter \
| |
| -nographic \
| |
| -hda $DISK \
| |
| -serial unix:/home/pdmvpn/pdmvpn.console,server,nowait \
| |
| -monitor file:/home/pdmvpn/pdmvpn.mon
| |
| sleep 5
| |
| done
| |
| elif [ "$1" = "console" ]; then
| |
| echo "Press CTRL-D to exit."
| |
| socat stdin,raw,echo=0,escape=0x04 "unix-connect:/home/pdmvpn/pdmvpn.console"
| |
| fi
| |
|
| |
|
| |
| ====ExpressVPN====
| |
| /etc/openvpn/expressvpn.sh
| |
| #!/bin/bash
| |
| ip route flush table ffvpn
| |
| ip route flush table ffvpn-default
| |
| ip route add $route_network_1/$route_netmask_1 via $route_gateway_1 table ffvpn
| |
| ip route add default via $route_gateway_1 table ffvpn-default
| |
| ip route add 172.22.255.0/24 dev brffvpn scope global table ffvpn
| |
| ip route add 10.22.0.0/16 via 172.22.255.10 table ffvpn
| |
| ip rule del prio 99
| |
| ip rule del prio 100
| |
| ip rule del prio 101
| |
| ip rule del prio 102
| |
| ip rule del prio 110
| |
| ip rule del prio 111
| |
| ip rule add prio 99 from 172.22.255.2 table main
| |
| ip rule add table ffvpn iif tun5 prio 100
| |
| ip rule add table ffvpn iif brffvpn prio 101
| |
| ip rule add table ffvpn-default iif brffvpn prio 102
| |
| ip rule add prio 110 iif tun5 prohibit
| |
| ip rule add prio 111 iif brffvpn prohibit
| |
|
| |
| ===virtuellen Router einrichten===
| |
|
| |
|
| [[Kategorie:Technik]] | | [[Kategorie:Technik]] |
| [[Kategorie:Netz]] | | [[Kategorie:Netz]] |
Das Potsdam-VPN ist ein Intra-City-VPN, das dazu dient, Inseln zusammenzuführen.
Client einrichten (OpenVPN) (alt)
Zertifikat beantragen
Um ein Zertifikat zum Potsdam-VPN für deinen Freifunkrouter zu erhalten, schicke bitte eine Email mit folgenden Angaben an users@lists.freifunk-potsdam.de.
Für die E-Mail hier klicken
Betreff:PdmVPN für Routername
Inhalt:
Hallo Zertifikatsgeber,
sende mir bitte ein Zertifikat für meinen Knoten Routername an Emailadresse.
Potsdam-VPN auf Router einrichten
Nachdem die E-Mail mit einem Zertifikat beantwortet wurde, kann der Router mit dem VPN bespielt werden.
OpenVPN einrichten
Zuerst richten wir das OpenVPN ein, damit der Router sich verbinden kann. Falls der Menüpunkt Services/OpenVPN nicht vorhanden ist, folgende Pakete über die Paketverwaltung nachinstallieren und den Router neu starten: luci-app-openvpn, luci-i18n-openvpn-en und openvpn-openssl
Auf der Kommandozeile:
opkg update && opkg install luci-app-openvpn luci-i18n-openvpn-en openvpn-openssl && exec reboot
- Unter Services/OpenVPN eine neue "Client configuration for an ethernet bridge VPN" namens "pdmvpn" anlegen.
- auf "Switch to advanced configuration" klicken
- unter Networking folgende Einstellungen vornehmen. Einige Felder müssen zuerst hinzugefügt werden.
- port: 1195
- dev: pdmvpn
- dev_type: tap
- tun_mtu: 1300
- comp_lzo: no
- Speichern
- unter VPN folgende Einstellungen vornehmen.
- remote: vpn.freifunk-potsdam.de
- Speichern
- unter Cryptography folgende Einstellungen vornehmen. Einige Felder müssen zuerst hinzugefügt werden.
- cipher: none
- ca: ca.crt hochladen
- cert: $client$.crt hochladen
- key: $client$.key hochladen
- Speichern & Anwenden
Interface konfigurieren
Hier richten wir die Schnittstelle ein, an der der Verkehr über das VPN vom Router entgegen genommen wird.
- Unter Network/Interfaces ein neues Interface names PDMVPN anlegen.
- Protocoll ist Unmanaged oder Ignoriert
- als Device das soeben eingerichtete Device "pdmvpn" auswählen. Beim ersten Einrichten existiert das Device vielleicht nicht. Wenn es nicht existiert, kann der Name unten eingegeben werden.
- Submit
- Das neue Interface der Firewallgruppe "Freifunk" hinzufügen.
- Speichern und Anwenden (Save & Apply)
- unter Services/OpenVPN das pdmvpn aktivieren und starten. Es müsste jetzt laufen. "Started" "Yes"
OLSR konfigurieren
Nachdem wir nun Verkehr über das VPN schicken, wird es Zeit, sich automatisch über OLSR auszutauschen, welche Router wir über das VPN erreichen können.
- unter Services/OLSR IPv4 das PDMVPN Interface hinzufügen:
- Add
- PDMVPN auswählen
- Modus: mesh
- Linkqualitäteinstellungen: LQ-Algorithmus: etx_ffeth
- Speichern & Anwenden
Bilder
VPN Cryptography Settings
OLSR Interface hinzufügen
Überprüfen
Wenn das Meshing über das VPN läuft, dann kann man bei Status -> OLSR -> Nachbarn folgendes sehen:
Neighbour IP Hostname Interface
172.22.251.1 pdmvpn-a.olsr undefined
Wenn nicht, nochmal die VPN-Einstellungen und OLSR überprüfen, ein Reboot des Routers kann auch helfen. Die ETX sollte sich bei etwa 2,5 stabilisieren.
Diskussionen
Auf der Potsdamer Mailingliste gibt es folgende Diskussionen:
- Welches OpenVPN? - Eine Diskussion zur Installation von Paketen unter der Firmware-Version Hedy.