PPTP VPN Gateway – Update

In meinem vorherigen Artikel habe ich beschrieben, wie ich aus meinem Raspberry Pi ein PPTP VPN Gateway gemacht habe, um meinen gesamten Traffic über ein VPN zu routen. Problematisch war allerdings noch die Geschwindigkeit, über maximal 5MBit/s bin ich nie hinweggekommen. Ich hatte zunächst gedacht, es würde an der Leistung des Raspi liegen, doch als auch ein Übertakten keine merkbare Steigerung brachte wurde ich stutzig. Ich habe also alles nochmal auf einem schnelleren System nachgestellt – und hatte dort vergleichbare Geschwindigkeiten. Es liegt also nicht an der Leistung des Gerätes. Nach einigem Suchen und Forschen bin ich auf die MTU des PPP Adapters gestoßen, die es anzupassen gilt. Nochmal zur Ausgangslage:

  • Das Raspberry Pi läuft auf 900 MHz („Medium 900MHz ARM, 250MHz core, 450MHz SDRAM, 2 overvolt“)
  • Die Downloadgeschwindigkeit liegt bei ca. 2000 KBit/s, die Uploadgeschwindigkeit bei 150 KBit/s
  • Beim Speedtest geht die CPU Auslastung nicht über 75%

Ein ifconfig zeigt für die beiden Adapter folgendes:

eth0      Link encap:Ethernet  HWaddr b8:27:eb:0a:9a:59
          inet addr:192.168.0.3  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:61542 errors:0 dropped:0 overruns:0 frame:0
          TX packets:52285 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:45919430 (43.7 MiB)  TX bytes:46365240 (44.2 MiB)

ppp0      Link encap:Point-to-Point Protocol
          inet addr:10.11.14.12  P-t-P:10.11.14.1  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1496  Metric:1
          RX packets:5710 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4955 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:6949067 (6.6 MiB)  TX bytes:1619699 (1.5 MiB)

Man sieht, das die MTU für eth0 bei 1500, für ppp0 bei 1496 liegt. Wenn man jetzt (unter Windows) einen Ping mit einer Maximalgröße von 1496 loslässt und Fragmentierung verbietet zeigt sich folgendes:

C:\Windows\system32>ping -f -l 1496 google.de

Ping wird ausgeführt für google.de [173.194.39.95] mit 1496 Bytes Daten:
Paket müsste fragmentiert werden, DF-Flag ist jedoch gesetzt.

Ping-Statistik für 173.194.39.95:
    Pakete: Gesendet = 1, Empfangen = 0, Verloren = 1
    (100% Verlust)

Also: Pakete mit einer Größe von 1496 müssten Fragmentiert werden, und Fragmentierung sorgt zweifelsohne nicht für höhere Geschwindigkeiten. (Mehr Details zu IP-Fragmentierung hier: http://de.wikipedia.org/wiki/IP-Fragmentierung) Also, folgende Änderung an unserer /etc/ppp/peers/vpn.conf Datei:

pty "pptp $SERVERNAME --nolaunchpppd --debug"
name $USERNAME
password $PASSWORD
remotename PPTP
require-mppe-128
require-mschap-v2
refuse-eap
refuse-pap
refuse-chap
refuse-mschap
noauth
debug
persist
maxfail 0
defaultroute
replacedefaultroute
usepeerdns
mtu 1400
mru 1400

Außerdem brauchen wir noch eine Änderung an unserer iptables.rules Datei, zum einen sollten wir GRE zulassen, und zum anderen eine Regel zum Target TCPMSS hinzufügen (Details dazu hier: http://www.linuxtopia.org/Linux_Firewall_iptables/x4700.html Unsere neue iptables.rules Datei sieht somit so aus:

*nat
-A POSTROUTING -o ppp0 -j MASQUERADE
COMMIT

*filter
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i ppp0 -j DROP
-A INPUT -p gre -j ACCEPT
-A OUTPUT -p gre -j ACCEPT
COMMIT

*mangle
:FORWARD ACCEPT [0:0]
-I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
COMMIT

Alles speichern, Verbindung herstellen und siehe da: Download 8500 KBit/s, Upload 180 KBit/s. Das lässt sich doch sehen. Weiterhin ist der Raspi jetzt auf 100% CPU Last für den pptp Dienst, jetzt ist also die CPU Leistung das Limit. Dann wollten wir mal weiter mit dem Takt herumspielen, diesmal testen wir alle Geschwindigkeiten. Da an der Netzwerk Konfiguration jetzt ja scheinbar alles sauber(er) ist, sollte die maximale Geschwindigkeit direkt mit dem Takt zusammenhängen, aber das wird sich zeigen.

Takt CPU Last Upload Download Ping Connections
700 MHz (Default) 100% 214 KBit/s 6968 KBit/s 45 ms 628 con/m
800 MHz (Modest) 100% 209 KBit/s 7983 KBit/s 47 ms 954 con/m
900 MHz (Medium) 100% 242 KBit/s 8589 KBit/s 50 ms 642 con/m
950 MHz (High) 100 % 242 KBit/s 8678 KBit/s 40 ms 510 con/m

Ich denke ich werde erstmal auf 900 MHz bleiben, die Geschwindigkeit ist soweit OK. Noch nicht auf dem Maximum, aber ich denke das hier jetzt wirklich bei der Rechenleistung des Raspi das Ende der Fahnenstange erreicht ist.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.