|
|
(5 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) |
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 ''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]''. |
|
| |
|
| [mailto:users@lists.freifunk-potsdam.de?subject=PdmVPN%20f%C3%BCr%20Routername&body=Hallo%20Zertifikatsgeber%2C%0D%0A%0D%0Asende%20mir%20bitte%20ein%20Potsdam-VPN-Zertifikat%5B0%5D%20f%C3%BCr%20meinen%20Knoten%20Routername%20an%20Emailadresse.%0D%0A%0D%0AViele%20Gr%C3%BC%C3%9Fe%2C%0D%0A%0D%0A%0D%0A%5B0%5D%3A%20https%3A%2F%2Fwiki.freifunk-potsdam.de%2FPotsdam-VPN Für die E-Mail hier klicken] | | [mailto:users@lists.freifunk-potsdam.de?subject=PdmVPN%20f%C3%BCr%20Routername&body=Hallo%20Zertifikatsgeber%2C%0D%0A%0D%0Asende%20mir%20bitte%20ein%20Potsdam-VPN-Zertifikat%5B0%5D%20f%C3%BCr%20meinen%20Knoten%20Routername%20an%20Emailadresse.%0D%0A%0D%0AViele%20Gr%C3%BC%C3%9Fe%2C%0D%0A%0D%0A%0D%0A%5B0%5D%3A%20https%3A%2F%2Fwiki.freifunk-potsdam.de%2FPotsdam-VPN Für die E-Mail hier klicken] |
Zeile 15: |
Zeile 15: |
| sende mir bitte ein Zertifikat für meinen Knoten ''Routername'' an ''Emailadresse''. | | sende mir bitte ein Zertifikat für meinen Knoten ''Routername'' an ''Emailadresse''. |
|
| |
|
| === Potsdam-VPN auf Router einrichten === | | ===Potsdam-VPN auf Router einrichten=== |
|
| |
|
| Nachdem die E-Mail mit einem Zertifikat beantwortet wurde, kann der Router mit dem VPN bespielt werden. | | Nachdem die E-Mail mit einem Zertifikat beantwortet wurde, kann der Router mit dem VPN bespielt werden. |
|
| |
|
| ==== OpenVPN einrichten ==== | | ====OpenVPN einrichten==== |
|
| |
|
| Zuerst richten wir das OpenVPN ein, damit der Router sich verbinden kann. | | 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. |
|
| |
|
| * Unter Services/OpenVPN eine neue "Client configuration for an ethernet bridge VPN" namens "pdmvpn" anlegen.
| |
| [[Datei:1-vpn_anlegen.png|VPN anlegen]] | | [[Datei:1-vpn_anlegen.png|VPN 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''': <span style="color:red">$client$</span>.crt hochladen
| |
| ** '''key''': <span style="color:red">$client$</span>.key hochladen
| |
| * Speichern & Anwenden
| |
|
| |
|
| ==== Interface konfigurieren ==== | | *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''': <span style="color:red">$client$</span>.crt hochladen |
| | **'''key''': <span style="color:red">$client$</span>.key hochladen |
| | *Speichern & Anwenden |
| | |
| | ====Interface konfigurieren==== |
|
| |
|
| Hier richten wir die Schnittstelle ein, an der der Verkehr über das VPN vom Router entgegen genommen wird. | | 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. | | *Unter Network/Interfaces ein neues Interface names PDMVPN anlegen. |
| ** Protocoll ist Unmanaged oder Ignoriert | | **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. | | **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 | | *Submit |
| * Das neue Interface der Firewallgruppe "Freifunk" hinzufügen. | | *Das neue Interface der Firewallgruppe "Freifunk" hinzufügen. |
| * Speichern und Anwenden (Save & Apply) | | *Speichern und Anwenden (Save & Apply) |
| * unter Services/OpenVPN das pdmvpn aktivieren und starten. Es müsste jetzt laufen. "Started" "Yes" | | *unter Services/OpenVPN das pdmvpn aktivieren und starten. Es müsste jetzt laufen. "Started" "Yes" |
|
| |
|
| ==== OLSR konfigurieren ==== | | ====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. | | 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: | | *unter Services/OLSR IPv4 das PDMVPN Interface hinzufügen: |
| ** Add | | **Add |
| ** PDMVPN auswählen | | **PDMVPN auswählen |
| ** '''Modus''': mesh | | **'''Modus''': mesh |
| ** Speichern & Anwenden | | **Linkqualitäteinstellungen: LQ-Algorithmus: etx_ffeth |
| | **Speichern & Anwenden |
|
| |
|
| ==== Bilder ==== | | ====Bilder==== |
|
| |
|
| <br /> | | <br /> |
Zeile 77: |
Zeile 84: |
| </gallery> | | </gallery> |
|
| |
|
| ==== Überprüfen ==== | | ====Überprüfen==== |
|
| |
|
| Wenn das Meshing über das VPN läuft, dann kann man bei ''Status'' -> ''OLSR'' -> ''Nachbarn'' folgendes sehen: | | Wenn das Meshing über das VPN läuft, dann kann man bei ''Status'' -> ''OLSR'' -> ''Nachbarn'' folgendes sehen: |
Zeile 87: |
Zeile 94: |
|
| |
|
|
| |
|
| ==== Diskussionen ==== | | ====Diskussionen==== |
|
| |
|
| Auf der Potsdamer Mailingliste gibt es folgende Diskussionen: | | Auf der Potsdamer Mailingliste gibt es folgende Diskussionen: |
|
| |
|
| * [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 ===
| |
| 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]] |