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:

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 der kompatible zu existierenden Anbietern ist.

Existierendes Setup

Zu Test-, Experimentier- und Forschungszwecken ist ein VPN-Service auf

Ü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.

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

4. Weitere Schritte

Damit die VPN-Dienste wirklich benutzbar sind, musst Du andere Dinge konfigurieren

  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

Da viele Dinge von Deiner Systemkonfiguration abhängen (z.B. verwendete Firewall, genutzte CA Software) gibt's hier keine einfach nutzbaren Rollen. Du kannst jedoch gerne Dinge aus der Konfiguration von omni und yagi wiederverwenden.