|
|
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]] |