- Anzeige -

Wie MTU (für openVPN) richtig berechnen (und Befehl setzen)?

In vielen Netzen von Unitymedia sind Internet und Telefonie bereits verfügbar.
Wichtig:
  • Kunden aus Hessen und Nordrhein-Westfalen können über die Rufnummer 0221 / 466 191 00 Hilfe bei allen Problemen in Anspruch nehmen.
  • Kunden aus Baden-Württemberg können über die Rufnummer 0711 / 54 888 150 Hilfe bei allen Problemen in Anspruch nehmen.

Wie MTU (für openVPN) richtig berechnen (und Befehl setzen)?

Beitragvon johnnyboy » 28.02.2013, 18:49

Hallo,

wär toll, wenn mir jemand mal kurz auf die Sprünge helfen könnte ...

Und zwar bin ich einer der Neukunden bei UM, die nur noch eine IPv6 Adresse erhalten und IPv4 über DS-Lite (AFTR-Gateway) getunnelt bekommen.

Das führt zu Problemen bei der Verwendung von openVPN!
Und zwar - wie ich lange nicht wusste! - verwendet openVPN offenbar eine Standard-MTU-Größe von 1500 Byte.
Laut einem Artikel in der aktuellen c't empfielt UM aber eine Maximalgröße bis 1460 Byte.
(Genau diese Größe habe ich übrigens auch mit einem ping -f -l 1432 t-online.de ermittelt! 1432 +8 Byte ICMP-Header + 20 Byte IPv4-Header = 1460 Byte)

Auszug aus dem Artikel:
VPN reparieren

Die DS-Lite Technik ist so beschaffen, dass sie die zulässige Größe von IPv4-Paketen senkt (Maxium Transmission Unit, MTU). VPNs sind aber von Haus aus nicht dafür eingerichtet. Router fragmentieren übergroße Pakete, was aber Zeit kostet und VPNs beeinträchtigen kann.
Die Ursache ist, dass das Zugangsnetz von Unitymedia ausschließlich IPv6 spricht und IPv4 nur über Tunnel befördert (4in6-Tunnel). Jedes IPv4-Paket erhält dabei einen neuen IPv6-Header, sodass Nutzlast und Header die MTU überschreiten können. Das Problem lässt sich auf Kosten der VPN-Nutzlast beseitigen, indem man im VPN die MTU senkt. Das wird je nach VPN-Verfahren unterschiedlich eingestellt. Unitymedia empfiehlt Werte bis höchstens 1460 Byte.

Nun habe ich mittlerweile auch schon herausgefunden, dass ich den MTU-Wert im openVPN config-file durch folgenden Befehl setzen kann:
tun-mtu 1460

Nur funktioniert es mit diesem Wert nicht!
Ich hab dann halt einfach was rumgespielt und herausgefunden, dass offenbar 1380 Byte der größtmögliche Wert ist.
Darauf kommt es doch an, oder, den größtmöglichen Wert (also, um die größtmögliche unfragmentierte Nutzlast transportieren zu können) zu finden?
Dilettantisch formuliert, würde ich sagen, handelt es sich bei den von UM vorgeschlagenen 1460 Byte also um einen "Brutto-Wert", von dem man erst noch die diversen Header abziehen muss.
Da wären meines Wissens nach z.B.:
- openVPN Header mit 32 Byte (ist eine ungesicherte Info, hab nur die Headergröße bei tap gefunden, nicht bei tun)
- UDP Header mit 8 Byte
- IPv6 Header mit 40 Byte

Diese drei Werte von den 1460 Byte abgezogen, ergeben zufällig auch genau die 1380 Byte.
Aber habe ich so richtig gerechnet?
Darf man den IPv6 Header da überhaupt rein rechnen?

Und was auch noch interessant wäre, kann man das noch "besser" im config-file verankern?
Ich hab erst noch mit den Befehlen --tun-mtu (z.B. 1460) --fragment (z.B. 1380) --mssfix rumgespielt, funktionierte aber nicht. Irgendwo habe ich dann auch gelesen, dass das IPv6-Netz keine Datenpaket-Fragmentation unterstützt. Somit wären die Befehle dann also dafür sinnlos?
Zuletzt geändert von johnnyboy am 01.03.2013, 10:28, insgesamt 1-mal geändert.
johnnyboy
Übergabepunkt
 
Beiträge: 292
Registriert: 23.10.2012, 15:29

Re: Wie MTU (für openVPN) richtig berechnen (und Befehl setz

Beitragvon jcoder » 28.02.2013, 22:23

Die openVPN-Direktive lautet:
link-mtu 1432


Der Wert ergibt sich aus 1460 - 20 (IPv4 Header) - 8 (UDP Header)
jcoder
Kabelexperte
 
Beiträge: 236
Registriert: 15.12.2012, 10:44

Re: Wie MTU (für openVPN) richtig berechnen (und Befehl setz

Beitragvon paul » 28.02.2013, 23:31

Du kannst den passenden MTU-Wert mit dem Netalyzr unter http://www.heise.de/netze/artikel/Netalyzr-1045926.html überprüfen lassen. Der Test dauert zwar eine Zeit, die Ergebnisse liefern aber wichtige Informationen (u. a. zum MTU-Wert).
paul
Übergabepunkt
 
Beiträge: 430
Registriert: 10.01.2013, 22:08

Re: Wie MTU (für openVPN) richtig berechnen (und Befehl setz

Beitragvon johnnyboy » 28.02.2013, 23:32

Okay, super, hab das grad mal ausprobiert ... also einfach
tun-mtu 1380
ersetzt durch
link-mtu 1432

Funktionieren tut beides und zwar im Vergleich zu vorher (gar kein MTU-Parameter gesetzt) ziemlich gut.
Zumindest meine derzeitigen Speedtest ergeben aber, dasss es im Zweifel mit link-mtu noch besser läuft!! :super:

Okay, klingt ja eigentlich logisch, es wird ja nicht das IPv6 getunnelt, sondern das IPv4 quasi ins UDP-Protokoll eingepackt, wenn ich das richtig verstanden habe? Aber warum muss man dann den openVPN Header (tun Protokoll) nicht auch noch mitzählen? Ich meine, der muss doch effektiv auch durch die AFTR-Gateway Schleuse (mit der Obergrenze 1460 Byte)?

Und worin besteht jetzt eigentlich der Unterschied zwischen den beiden Befehlen (tun-mtu und link-mtu)?

Ich find dazu einfach nichts, zumindest nichts, was ich so richtig verstehen würde!

Bei openvpn.net in den Manuals habe ich dazu nur folgendes gefunden:
--link-mtu n
Sets an upper bound on the size of UDP packets which are sent between OpenVPN peers. It's best not to set this parameter unless you know what you're doing.
--tun-mtu n
Take the TUN device MTU to be n and derive the link MTU from it (default=1500). In most cases, you will probably want to leave this parameter set to its default value.

The MTU (Maximum Transmission Units) is the maximum datagram size in bytes that can be sent unfragmented over a particular network path. OpenVPN requires that packets on the control or data channels be sent unfragmented.

MTU problems often manifest themselves as connections which hang during periods of active usage.

It's best to use the --fragment and/or --mssfix options to deal with MTU sizing issues.


Edit: Ja, hab's jetzt gerade noch mal mit dem netalyzr Test versucht (musste erst mal alle Sicherheitseinstellungen runterfahren, NoScript, Java, Popup Blocker ...), dieser gibt auch einen Wert von 1460 Byte (eingehend) aus.
johnnyboy
Übergabepunkt
 
Beiträge: 292
Registriert: 23.10.2012, 15:29

Re: Wie MTU (für openVPN) richtig berechnen (und Befehl setz

Beitragvon jcoder » 01.03.2013, 07:11

johnnyboy hat geschrieben:Aber warum muss man dann den openVPN Header (tun Protokoll) nicht auch noch mitzählen? Ich meine, der muss doch effektiv auch durch die AFTR-Gateway Schleuse (mit der Obergrenze 1460 Byte)?

Wenn Du die tun-mtu Direktive nutzt, musst Du natürlich den openVPN-Overhaed berücksichtigen.
Bei der link-mtu Direktive macht openVPN das für Dich.
Das so geschaffene tun-Interface hat dann nur eine MTU von 1374.
jcoder
Kabelexperte
 
Beiträge: 236
Registriert: 15.12.2012, 10:44

Re: Wie MTU (für openVPN) richtig berechnen (und Befehl setz

Beitragvon johnnyboy » 01.03.2013, 13:20

Nur noch mal so zum Verständnis, wie hast du das jetzt ausgerechnet?
Also, ich betreibe ja openVPN grundsätzlich im tun-Modus.
Würdest du sagen, da ist der eine Befehl besser oder sicherer oder wie auch immer als der andere, oder ist das dann vollkommen wurscht, welchen Befehl ich da letztendlich einbaue (solange der Wert richtig errechnet ist)?
johnnyboy
Übergabepunkt
 
Beiträge: 292
Registriert: 23.10.2012, 15:29

Re: Wie MTU (für openVPN) richtig berechnen (und Befehl setz

Beitragvon jcoder » 01.03.2013, 16:45

johnnyboy hat geschrieben:Nur noch mal so zum Verständnis, wie hast du das jetzt ausgerechnet?

Gar nicht!
Ich habe, nachdem ich link-mtu gesetzt und den Tunnel aufgebaut habe, ganz einfach ein
ip link show dev tun0

(unter Linux) abgesetzt, um zu sehen, mit welcher MTU openVPN mir das tun-Interface eingerichtet hat.
(Unter Windows wird Dir wahrscheinlich netsh ähnliche Informationen liefern. Da Windows nicht meine Spielwiese ist, kann ich Dir dazu aber keine Syntax liefern)

johnnyboy hat geschrieben:Würdest du sagen, da ist der eine Befehl besser oder sicherer oder wie auch immer als der andere, oder ist das dann vollkommen wurscht, welchen Befehl ich da letztendlich einbaue (solange der Wert richtig errechnet ist)?

link-mtu ist schlicht einfacher zu händeln.
In einer Standard-Anwendung (größtmögliche MTU-Size für das tun-Interface) werden sich die beiden Direktiven weder in Performance noch in der Stabilität unterschiedlich auswirken- solange der Wert richtig errechnet ist.
jcoder
Kabelexperte
 
Beiträge: 236
Registriert: 15.12.2012, 10:44

Re: Wie MTU (für openVPN) richtig berechnen (und Befehl setz

Beitragvon johnnyboy » 01.03.2013, 18:50

Ah, verstehe (mehr oder weniger)!

Jedenfalls ist mein "VPN-Knoten" jetzt geplatzt mit dem einen oder dem anderen Befehl!
Ich kriege jetzt teilweise doppelt oder dreifach so hohe Geschwindigkeiten, wie ich sie mit DSL jemals hatte (da war ja leitungstechnisch einfach nicht mehr drin als ca. 11 Mbit/s, mit VPN dann eher knapp 10 Mbit/s).
Und, na ja, wenn vorher über die Breitbandleitung nur irgendwas um die 4-5 Mbit/s (via openVPN) gingen und jetzt auf einmal 20-30 Mbit/s, dann ist das schon was anderes!
Ich weiß zwar nicht, ob oder wieviel mehr da noch drin wäre mit nativem IPv4 (also ohne, dass der AFTR-Gateway alles "einpackt" und so weiterleitet), aber damit kann ich erst mal gut leben!
Vielen Dank noch mal für deine Hilfe! :super:
johnnyboy
Übergabepunkt
 
Beiträge: 292
Registriert: 23.10.2012, 15:29

Re: Wie MTU (für openVPN) richtig berechnen (und Befehl setz

Beitragvon sebr » 20.12.2014, 14:03

Sorry, dass ich das letzt nochmal ausgrabe. Aktuell stehe ich vor genau dem gleichen Problem mit dem Unterschied, dass ich "echtes" IPv4 nutze (eigener Router am Bridge-Port der FB 6360). Der VPN Server auf der Gegenseite ist auch ausreichend schnell, dennoch erreiche ich nur knapp 7 MBit/s mit meiner 50 MBit/s Leitung. Den OpenVPN tunnel baue ich über meinen Router auf (Ubiquiti Edgerouter Lite) der auch nicht ins schwitzen gerät (CPU Last unter 20%).
Der Speedguide.net TCP/IP Analyzer spuckt mir folgenden Fehler aus:
Code: Alles auswählen
MTU = 1392
MTU is not fully optimized for broadband. Consider increasing your MTU to 1500 for better throughput. If you are using a router, it could be limiting your MTU regardless of Registry settings.
MSS = 1352
MSS is not optimized for broadband. Consider increasing your MTU value.
Default TCP Receive Window (RWIN) = 66048
RWIN Scaling (RFC1323) = 8 bits (scale factor: 2^8=256)
Unscaled TCP Receive Window = 258

RWIN is not fully optimized. The unscaled RWIN value is lower than it should be. Also, RWIN being close to and above 65535 does not justify the header overhead of enabling TCP 1323 Options. You might want to use one of the recommended RWIN values below.

Netalyzer meldet ebenfalls Paketverlust.
Deaktiviere ich den Tunnel im Router und gehe "normal" online erhalte ich diese Fehlermeldungen nicht. Es liegt also definitiv am OpenVPN Tunnel bzw. stimmt der MTU Wert nicht. Auf meinem Router habe ich 3 Interfaces: eth0 (am Bridge-Port der FB), eth1 (hängt an meinem LAN) und vtun0 (das Tunnel Interface). Alle drei haben den MTU Wert von 1500. Meinem Verständnis nach ist das nicht OK. Aber welchen MTU Wert für welches Interface setzen? :kratz:
Office Internet & Phone 50
Hardware:
Fritz!Box 6360 Cable (UM) FW: FRITZ!OS 06.04
Ubiquiti UAP-LR
Fritz!Fon MT-F FW: 01.03.34
SNOM 320
sebr
Übergeordneter Verstärkerpunkt
 
Beiträge: 611
Registriert: 27.04.2011, 15:27
Wohnort: Nidda

Re: Wie MTU (für openVPN) richtig berechnen (und Befehl setz

Beitragvon Tuxtom007 » 23.12.2014, 16:51

1500 ist definitiv zu viel für den Tunnel, für phys. Interface ok
Für der Tunnel setzen mal 1420, das ist ein Recht guter Wert.
Provider: UM 200/20 MBit-2play Premiumj, Fritbox UM 6490, 2x SNOM D765 VoIP-Telefon, 1 AVM-Dect-Telefone, Mikrotik CoreRouter, 2 x Mikrotik MiniSwitche, AVM Fritz-Repeater 1750E, AVM PowerLan 1000

Bild
Tuxtom007
Übergabepunkt
 
Beiträge: 352
Registriert: 27.03.2011, 11:02


Zurück zu Internet und Telefon über das TV-Kabelnetz

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 29 Gäste