Exit-VPN-Setup

Aus Freifunk Köln, Bonn und Umgebung
Zur Navigation springen Zur Suche springen


Einleitung

Nodes verwenden häufig ein VPN um eine Internetverbindung über einem freifunk-freundlichen ISP aufzubauen. Diese Seite beschreibt das zugehörige Setup.

Hierbei kommen verschiedene VPN-Techniken zum Einsatz - üblich sind und in diesem Setup vorhanden sind:

VPN-Services werden in der Regel von kommerziellen Anbietern oder Freifunk-Communities betrieben. Damit Freifunk dezentral funktioniert, ist es wichtig, dass auf dem Freifunk-Node ein beliebiger VPN-Service ausgewählt werden kann und Freifunk nicht auf einen festen Anbieter oder VPN-Administratoren angewiesen ist. Dieser Artikel beschreibt Setup eines Exit-VPN Services für OpenVPN, PPTP und Tap der kompatible zu vielen weiteren, existierenden Anbietern ist.

Existierendes Setup

Zu Test-, Experimentier- und Forschungszwecken ist ein VPN-Service zwei Hosts instelliert:

Die komplette Konfiguration steht online: https://github.com/yanosz/omni_yagi_ansible

Eingehende fastd-Verbindungen werden automatisch akzeptiert. Für OpenVPN-Zertfikate und PPTP-Accounts wende Dich an vpn@freifunk-koeln.de

Übersicht

Zur Installation wird ansible verwendet, als Betriebssystem Debian 8 (Jessie). Installiert werden OpenVPN, PPTP und fastd. Es gibt die folgenden Rollen:

  • tap-router-exit - konfiguriert die TAP-Network-Interfaces für OpenVPN, fastd, inklusive, DNS, radvd und DHCP (IPv4 / IPv6 PD)
  • fastd-exit - installiert eine fastd-Instanz für ein bereits konfiguriertes TAP-Interface
  • openvpn-exit - installiert mehrere OpenVPN-Instanzen für bereits konfigurierte TAP-Interfaces
  • freifunk-accel-ppp-exit - konfiguriert accel-ppp für PPTP Verbindungen - accel-ppp wird jedoch nicht installiert.

Ein paar Dinge werden nicht von den Rollen konfiguriert:

  1. Routing, Firewalling, Masquerding (damit die Adressen wirklich verwendet werden können)
  2. OpenVPN Zertifikate und keys erzeugen (z.B. http://wiki.openvpn.eu/index.php/Erzeugen_einer_PKI_mit_EasyRSA)
  3. PPTP Benutzer eintragen - in /etc/ppp/chap_secrets
  4. accel-ppp konfigurieren und installieren

Du kannst jedoch Dinge aus der Konfiguration von omni und yagi wiederverwenden.

Server aufsetzen

Du kannst die Rollen wie folgt anwenden

1. Verzeichnisse, Rollen einbinden

mkdir -p ansible_vpn_exit/roles
cd ansible_vpn_exit
git clone https://github.com/yanosz/fastd-exit.git roles/fastd-exit
git clone https://github.com/yanosz/freifunk-openvpn-exit roles/openvpn-exit
git clone https://github.com/yanosz/tap-router-exit.git roles/tap-router-exit
git clone https://github.com/yanosz/freifunk-accel-ppp-exit.git roles/accel-ppp-exit.git

2. Datei playbook.yml erstellen

Erstelle eine Datei ansible_vpn_exit/playbook.yml mit diesem Inhalt - anpassen!

# playbook.yml
- hosts: der.vpn.server
  user: root
  roles:
  - fastd-exit
  - openvpn-exit
  - accel-ppp-exit.git
  - tap-router-exit
  vars:
    accel_ppp_exit:                          # PPTP Konfiguration
      ipv4:                                    # IPv4 Konfiguration der PPP Tunnel
        gateway_ip: 172.26.128.1                 # Gateway-IP
        client_pool: 172.26.129.0/24             # Pool für PPP Verbindungen
      ipv6:                                    # IPv6 Konfiguration der PPP Tunnel
        ppp_links: fd2f:3bfe:9136::/48,64        # Verwende einen kompletten ULA, Range, jeder PPP-Tunnel erhaelt ein /64 Netz
        delegate: 2001:67C:20A0:B100::/56,61   # Verteile Prefixes der Groesse /61 aus 2001:67C:20A0:B100::/56 an Nodes
    openvpn_exit:                            # OpenVPN Konfiguration    
      1194_udp:                                # Eine Instanz (1194 / udp)
        port: 1194                               # Port: 1194 / udp
        dev: ovpn-exit                           # Tap-Device: ovpn-exit
        proto: udp                               # Port: 1194 / udp
        cert: omni.freifunk-koeln.de.crt         # Zertifikat des Servers
        ca: ca.crt                               # Zertifikat der CA
      443_tcp:                                 # Weitere Instanz (443 / tcp - proxy friendly)
        port: 443                                # Port: 443 / tcp
        dev: ovpn-tcp-exit                       # Tap-Device: ovpn-tcp-exit
        proto: tcp-server                        # 443 / tcp
        cert: omni.freifunk-koeln.de.crt         # Zertifikat des Servers
        ca: ca.crt                               # Zertifikat der CA 
    tap_vpn_interfaces:                     # Tap Interface-Konfiguration (fastd / OpenVPN Interfaces)
      fastd-exit:                             # Fuer fastd:
        ipv6: fd84:9d34:7e43:1::1               # IPv6-Netzberei fuer tunnel 
        ipv4: 172.26.32.1                       # IPv4-Bereich fuer Tunnel
        ipv4_netmask: 255.255.224.0             # 
        dhcp_start: 172.26.32.10                # DHCP-Bereich
        dhcp_end: 172.26.61.254                 #
        dhcpv6_prefix: 2002:c336:a4ca:8000::/49 # Verteile Prefixes aus 2002:c336:a4ca:8000::/49 
        dhcpv6_prefix_slice: 59                 # Der Groesse /59
      ovpn-exit:                              # Tap Interface, OpenVPN Instanz
        ipv6: fd84:9d34:7e43:2::1               # (vgl. oben)
        ipv4: 172.26.64.1                       #
        ipv4_netmask: 255.255.224.0             # 
        dhcp_start: 172.26.64.10                #
        dhcp_end: 172.26.95.254                 #
        dhcpv6_prefix: 2002:c336:a4ca:4000::/51 #
        dhcpv6_prefix_slice: 59                 #
      ovpn-tcp-exit:                           # Tap Interface, OpenVPN Instanz
        ipv6: fd84:9d34:7e43:3::1               # (vgl. oben)
        ipv4: 172.26.96.1                       #
        ipv4_netmask: 255.255.224.0             #
        dhcp_start: 172.26.96.10                #
        dhcp_end: 172.26.127.254                #
        dhcpv6_prefix: 2002:c336:a4ca:6000::/51 #
        dhcpv6_prefix_slice: 59
      fastd_bind:                           # fastd Konfiguration
      - any port 10000 interface "eth2"       # Nutze Interface eth2 mit Port 10000/udp
      fastd_on_verify:                      # Bei eingehenden Verbindungen
        command: 'true'                       # Akzeptiere jeden Host  
        mode: sync

3. Führe das Playbook aus

 ansible-playbook playbook.yml