Frage

Ich frage mich, ob es irgendeine Art und Weise zu stimmen (auf einem Linux-System), die MTU für einen bestimmten Sockel. (Um IP-Schicht Fragmentierungs in Stücke kleiner als das eigentliche Gerät MTU zu machen).

Wenn ich für einen bestimmten Sockel sagen, ich meine nicht programmatisch in dem Code der Anwendung die Buchse besitzt, sondern von außen, beispielsweise über einen sysfs Eintrag.

Wenn es derzeit keine Möglichkeit, das zu tun ist, haben Sie irgendwelche Ideen, wo hook / Patch in Linux-Kernel eine solche Möglichkeit zu implementieren?

Danke.

EDIT: warum zum Teufel ich will, das tun

Ich mache einig Layer3-in-Layer4 (zB: Tunneling IP und oben über die TCP-Tunnel) Tunnelbau. Im Gegensatz zu VPN-Lösungen wie verwende ich nicht eine virtuelle Schnittstelle, das zu erreichen. Ich Erfassung Pakete mit iptables, sie für ihre normale Art und Weise fallen lassen und sie an den Tunnel-Buchse zu schreiben.

Denken Sie an den Fall einer großen Dateiübertragung werden alle Pakete auf MTU-Größe gefüllt. Als ich Tunnel sie, ich etwas Aufwand hinzufügen, in jedem ursprünglichen Paket führt zwei getunnelten Pakete zu erzeugen, ist es unter optimal.

War es hilfreich?

Lösung

Wenn der Socket ist so angelegt, dass DF Satz auf ausgehende Pakete Sie etwas Glück in Spoofing (Injektion) haben möglicherweise eine ICMP-Fragmentierung erforderlich Nachricht zurück auf sich selbst, bis Sie mit dem gewünschten MTU enden. Vielmehr hässlich, aber je nachdem, wie verzweifelt Sie sind es sinnvoll sein könnte.

Sie könnten zum Beispiel dieser Pakete mit iptables-Regeln generieren, so den passenden und Senden einfach ist und außerhalb Ihrer Anwendung. Es sieht aus wie das Ziel für iptables REJECT hat keinen Ausschuß mit der Fragmentierung allerdings benötigt, wäre es wahrscheinlich nicht zu schwierig sein, eine hinzuzufügen.

Der andere Ansatz, wenn es nur TCP-Pakete ist egal Sie ist, dass Sie etwas Glück mit der Socket-Option TCP_MAXSEG oder TCPMSS Ziel haben könnten, wenn das für Ihr Problem geeignet ist.

Für UDP oder roh Sie sind frei zu send() Pakete so klein wie Sie Lust haben!

Update:

Basierend auf dem „Warum sollte ich das tun?“ Antwort, es scheint, wie Pakete fragmentieren, wenn DF nicht ICMP „Fragmentierung erforderlich“ und Ablegen gesetzt oder erhöht tatsächlich die richtige Lösung wäre.

Es ist, was ein „normaler“ Router tun würde, und zur Verfügung gestellt Firewalls das ICMP-Paket nicht essen, dann wird es sich verhalten sanely in allen Szenarien, während der Dinge im Nachhinein zu ändern ein Rezept für eine seltsame Verhalten ist.

Die iptables Klemme mss ist eine ziemlich gute Lösung für TCP über dieses " VPN“, obwohl, zumal Sie bereits ausgiebig Gebrauch von iptables machen es scheint.

Andere Tipps

Die MTU ist eine Eigenschaft einer Verbindung, nicht-Buchse. Sie gehören verschiedenen Schichten des Stapels. Das heißt TCP führt Pfad MTU Entdeckung während des Drei-Wege-Handshake und versucht sehr schwer zu vermeiden Fragmentierung. Sie werden harte Zeit, TCP send-Fragmente. Mit UDP ist die einfachste einige kleinere MTU auf einer Schnittstelle zu zwingen, mit ifconfig(8) und dann Pakete senden größer als dieser Wert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top