Potsdam-VPN: Unterschied zwischen den Versionen

Openvpn im PdmVPN wird noch unterstützt, ist aber veraltet
(→‎Firmware kompilieren: link buildbot mit vpn)
(Openvpn im PdmVPN wird noch unterstützt, ist aber veraltet)
 
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]]
770

Bearbeitungen