Exit-VPN-Setup
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
- omni.freifunk-koeln.de und
- yagi.freifunk-koeln.de installiert. Die komplette Konfiguration steht online: https://github.com/yanosz/omni_yagi_ansbile
Ü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