Anleitung Node Exit über VPN
Benötigte Pakete:
- opkg update
- opkg install openvpn-openssl mc nano iftop ip unbound unbound-control-setup rsync
- opkg install isc-dhcp-server-ipv4
Danach muss dnsmasq und die Firewall deaktiviert werden:
- /etc/init.d/firewall disable
- /etc/init.d/dnsmasq disable
- /etc/init.d/firewall stop
- /etc/init.d/dnsmasq stop
Für den DNS-Cache (Unbound) müssen noch Zertifikate generiert werden, da sonst die Kontrollsoftware für den Zugriff auf unbound nicht funktioniert.
- unbound-control-setup
Als nächstes ändern wir in der Datei /etc/unbound/unbound.conf die folgenden Zeilen:
- control-enable: yes
- control-interface: 127.0.0.1
- control-interface: ::1
Folgenden Script unter /etc/init.d als „ownscript“ einfügen:
#!/bin/sh /etc/rc.common START=99 STOP=15 start() { sleep 30 iptables-restore /etc/iptables/rules.v4 ifconfig br-client 10.159.39.1 netmask 255.255.0.0 batctl gw_mode server 50MBit/10MBit batctl bl 1 #Bridge loop detection aktivieren ip rule show | grep 'from 10.159.0.0/16 lookup freifunk' if [ $? -eq 1 ]; then ip rule add from 10.159.0.0/16 table freifunk fi ip route add 10.159.0.0/16 dev br-client table freifunk /etc/init.d/dhcpd stop /etc/init.d/dhcpd start } stop() { echo stop # commands to kill application }
Dabei muss natürlich einmal die Bandbreite des Anschlusses eingestellt werden (batctl gw mode_server…) und dem Interface br-client die richtige IP-Adresse angegeben werde. Ich habe einfach eine 24 Bit Maske von Fastd5 genommen(10.154.39.1-10.154.39.254) und benutze dieses auf diesem Futro. Dann darf dieser Bereich natürlich nirgendwo anders verwendet werden!
Jetzt nur noch den Script ausführbar machen und starten
- chmod +x /etc/init.d/ownscript
- /etc/init.d/ownscript enable
Jetzt die Datei /etc/dhcpd.conf wie folgt bearbeiten:
# dhcpd.conf option domain-name "mesh.kbu.freifunk.net"; option domain-search "mesh.kbu.freifunk.net"; option domain-name-servers 10.159.39.1; #213.73.91.35; option ntp-servers 10.159.39.1; default-lease-time 3600; #1 Stunden max-lease-time 3600; #1 Stunden authoritative; subnet 10.159.0.0 netmask 255.255.192.0 { # speed up ip assignment if gateway is switched pool { range 10.159.0.0 10.159.38.255; deny all clients; } pool { range 10.159.40.0 10.159.63.255; deny all clients; } # if using a /24 then the range goes from .10 to .254 range 10.159.39.10 10.159.39.254; option routers 10.159.39.1; option interface-mtu 1350; }
Natürlich müssen hier die IP-Adressen den tatsächlichen Gegebenheiten angepasst werden (DNS/NTP-Server/Router Interface und Range) und auch die beiden Pools, welche abgelehnt werden.
Jetzt kommen wir zum Thema Openvpn: Als Beispiel eine VPN-Datei /etc/openvpn/germany.conf für Private Internet Access:
client dev tun proto udp remote germany.privateinternetaccess.com 1198 resolv-retry infinite nobind persist-key persist-tun cipher aes-128-cbc auth sha1 tls-client remote-cert-tls server auth-user-pass comp-lzo verb 1 reneg-sec 0 crl-verify crl.rsa.2048.pem ca ca.rsa.2048.crt auth-user-pass login.pass route-nopull # Script launched when the tunnel is # up script-security 2 up "/etc/config/up.sh" down "/etc/config/down.sh"
Jetzt im Order /etc/openvpn/ eine Datei login.pass anlegen mit folgendem Inhalt:
%Username% %Passwort%
Jetzt benötigen wir noch unter /etc/config/ zwei neue Dateien welche wir ausführbar machen müssen. Datei down.sh:
#!/bin/sh iptables -t nat -D POSTROUTING -o tun0 -j SNAT --to $4
Datei up.sh:
#!/bin/sh ip route add default dev tun0 table freifunk iptables -t nat -A POSTROUTING -o tun0 -j SNAT --to $4
Jetzt diese beiden Dateien mit chmod +x ausführbar machen.
Jetzt muss der OpenVPN-Dienst noch aktiviert werden:
/etc/init.d/openvpn enable
Unterhalb von /etc/iproute2 müssen wir noch einen neuen table in der Datei rt_tables anlegen:
- 200 freifunk
Zum Schluß benötigen wir noch ein Verzeichnis /etc/iptables. Unterhalb diesem Verzeichnis legen wir folgende Datei an: rules.v4
*filter :INPUT ACCEPT [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] -A FORWARD -s 10.159.0.0/16 -i br-client -o tun0 -j ACCEPT -A FORWARD -d 10.159.0.0/16 -i tun0 -o br-client -j ACCEPT -A FORWARD -s 10.159.0.0/16 -d 10.159.0.0/16 -i br-client -o br-client -j ACCEPT -A FORWARD -i bat+ -o bmx+ -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS –-clamp-mss-to-pmtu -A FORWARD -i bmx+ -o bat+ -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS –-clamp-mss-to-pmtu -A FORWARD -i bmx+ -o bmx+ -j ACCEPT -A FORWARD -i bat+ -o bmx+ -j ACCEPT -A FORWARD -i bmx+ -o bat+ -j ACCEPT -A FORWARD -m limit --limit 2/min -j LOG --log-prefix "FORWARD DROPPED" COMMIT
Da leider der VPN-Dienst manchmal einfach den Dienst quittiert ohne jegliche Rückmeldung brauchen wir jetzt noch einen Watchdog, der jede Minute überprüft, ob OpenVPN noch läuft und falls nicht, einfach den Dienst neustartet. Dafür unter /root eine Datei testvpn.sh anlegen:
#!/bin/sh INTERFACE="$(ifconfig tun0)" if [ "${INTERFACE}" == "" ]; then batctl gw_mode client /etc/init.d/openvpn restart else batctl gw_mode server 50MBit/10MBit ip route add 10.159.0.0/16 dev br-client table freifunk ifconfig br-client 10.159.39.1 netmask 255.255.0.0 /etc/init.d/dhcpd reload fi
Jetzt muss noch mittels crontab -e ein Cronjob angelegt werden:
* * * * * /root/testvpn.sh
und mit chmod +x die Datei ausführbar werden. Danach sollte der Dienst mittels /etc/init.d/cron enable und /etc/init.d/cron start auch der Cron-Dienst gestartet werden. Ab jetzt überprüft der Rechner jede Minute die Verbindung und baut Sie gegebenenfalls neu auf. Jetzt bitte noch der Interface local-node in der Datei /etc/config/network oder per uci deaktivieren.
Jetzt sollte nach einem beherzten Neustart die Maschine Ihren Dienst tun.