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