Come posso migliorare l'affidabilità OpenVPN su un collegamento ad alta latenza?


11

Stiamo eseguendo una VPN OpenVPN su un collegamento satellitare BGAN in cui i tempi di ping sono di circa 3 secondi. Lo usiamo in una configurazione tun e siamo in esecuzione su Linux (CentOS). È principalmente la posta elettronica che verrà inviata tramite il collegamento, ma non appena la posta contiene allegati di grandi dimensioni, la VPN sembra bloccarsi.

Il "posso ping attraverso il tunnel, ma qualsiasi vero lavoro induce a bloccarsi. E 'questo un problema di MTU?" domanda nelle FAQ di OpenVPN sembra descrivere esattamente il mio problema, ma l'utilizzo mssfixe fragmentancora non sembra fare molto per migliorare la situazione.

Il mio test principale è quello di copiare un file da 2 MB sulla VPN con scp . Copia circa 192kbyte e quindi segnala uno stato - bloccato . Se aspetto un paio di secondi, ricomincerà a copiare e poi si fermerà di nuovo dopo un altro paio di kbyte.

Questo stallo si verifica indipendentemente dal fatto che abbia impostato fragmento meno le mssfixopzioni o nella mia configurazione OpenVPN (sebbene l'impostazione fragment 1000sembrasse ridurre lo stallo, ma non eliminarlo). OpenVPN ha mtu-testsegnalato 1542 come dimensione MTU.

Ho cercato su Internet ulteriori consigli su come e quando utilizzare mssfixe fragment, ma trovo solo pagine che dicono lo stesso delle FAQ e non forniscono dettagli su come e quando utilizzare quali parametri.

Le mie domande quindi sono:

  • Quando uso mssfixe fragment?
  • Uso mssfixe fragmentin combinazione?
  • Se mssfixe fragmentsono la soluzione, quali sono i tun-mtu, link-mtue mtu-discparametri per?

Inoltre, sto usando lo strumento iperf per misurare la larghezza di banda. Senza VPN, misura costantemente nell'ordine di 210Kbit / sec.

Quando si utilizza iperf su VPN ( $ iperf -c remoteserver -t60 -i5), si avvia a 10 Kbit / sec, quindi si alza costantemente fino a quando non segnala 1,2 Mbit / sec, e quindi sembra bloccarsi, dove segnala 0 kbit / sec per un numero di iterazioni (I pensa che i 1.2Mbit / sec potrebbero essere dovuti ad alcuni buffer OpenVPN o simili)

Iperf è il modo migliore per misurare la larghezza di banda?

Qualsiasi aiuto in questa situazione sarà molto apprezzato.


Openvpn sta usando TCP o UDP al momento?
pjc50,

Attualmente utilizza UDP
iWerner il

Grazie per tutte le risposte, ma ho dovuto fermarmi temporaneamente perché l'unità BGAN ha esaurito il tempo di trasmissione. Spero di continuare più tardi oggi. Vorrei menzionare che preferiremmo rimanere con UDP, poiché l'uso di TCP raddoppierebbe i dati inviati sulla rete (e quindi i costi, per i quali il nostro cliente è già molto sensibile)
iWerner,

Risposte:


5

1542 come MTU? Non ne ho mai sentito parlare per un collegamento WAN. Di solito, MTU è il carico utile massimo, la dimensione del pacchetto ip meno l'intestazione per IP (20 byte) e ICMP (8 byte). Ciò significa MTU = 1500 per una LAN Ethernet tradizionale. Inoltre, la maggior parte delle VPN introduce un overhead per l'incapsulamento dei pacchetti. Una MTU VPN tipica è 1400.

Nelle reti moderne, è difficile concludere quale sarà l'MTU in qualsiasi momento, poiché i percorsi di ingresso e uscita possono essere diversi e possono anche cambiare a causa del reinstradamento automatico del percorso. Per una rete come questa, potrebbe essere più efficace impostare l'MTU basso sugli host che si trovano su entrambi i lati del collegamento VPN, come 576.

MSS (dimensione massima del segmento) è MTU meno le intestazioni IP + TCP (40 byte). Questo è in genere negoziato dallo stack di rete e di solito non presenta gli stessi problemi di negoziazione di MTU, a meno che MTU non sia errato. (La negoziazione MTU è generalmente compromessa dall'ICMP bloccato o dai router black hole).

La prima cosa che farei è fare un'acquisizione di pacchetti di rete sull'estremità di invio e ordinare il display in base alla dimensione del frame (potrebbe essere necessario aggiungere questa colonna in Wireshark). Dovresti verificare che non stai inviando frame troppo grandi, come ti aspetteresti che siano. Non è insolito per le moderne schede di rete inviare frame di grandi dimensioni se sono abilitate opzioni come Offload invio di grandi dimensioni o Jumbo Frame. Ho visto oltre 30.000 frame di byte quando queste opzioni sono abilitate.


+1 per l'acquisizione di pacchetti prima di modificare qualsiasi cosa. anche se non trovi alcun frame enorme, potresti vedere frammenti "normali" da qualche parte.
Javier,

1
Per impostazione predefinita, OpenVPN imposta l'MTU del dispositivo tun su 1500 (che è lo stesso dell'MTU sui dispositivi Ethernet sulle nostre macchine). Non sono ancora sicuro se la frammentazione dei pacchetti VPN sia una cosa positiva o negativa. Le risposte in questo thread sembrano implicare che è un male, mentre gli altri riferimenti che ho trovato sul web implicano che è buono.
iWerner,

2
@iwerner: hai provato a determinare la dimensione mtu con ping? Se ICMP non è disabilitato da qualche parte, è possibile utilizzare quanto segue su Windows: ping -f -l 1372 <ip di destinazione>. Continua a ridurre il numero fino a quando non riesce. Su Linux, ping -s 1372 -M esegue <ip di destinazione>. Cordiali saluti, le FAQ di OpenVPN consiglia di utilizzare mssfix 1200, ma questo non risolve la causa principale. L'uso delle soluzioni VPN per frammentare ha sempre il potenziale per un impatto sulle prestazioni. Se si dispone di una configurazione VPN di grandi dimensioni, non sarà possibile utilizzare la frammentazione sull'estremità del concentratore centrale, ma solo sull'estremità dell'ufficio remoto.
Greg Askew,

2

Solo per curiosità, hai provato ad abbassare l'MTU dell'interfaccia di rete? Forse il collegamento via satellite rovina gravemente la frammentazione. Come nota controintuitiva, potresti voler provare openvpn su TCP per una modifica. So che dovrebbe diminuire le prestazioni, ma se non hai alcun controllo sulla frammentazione lungo la linea, potrebbe aiutarti.


Stavo per suggerire il contrario :) - questo caso ad alta latenza è quello in cui si presentano i problemi TCP-in-TCP e UDP lo eviterà.
pjc50,

Supponevo che stesse usando la porta UDP predefinita per openvpn, e quindi suggerivo il contrario ... sì, normalmente sarei d'accordo con te. Ma hey, sappiamo tutti che l'amministratore di sistema è tentativi ed errori, e di solito "prova a fare il contrario" vedi se funziona ":)
Lorenzog

Grazie. Al momento stiamo utilizzando UDP e non ho mai provato TCP. (Se avessi più rappresentante ti avrei votato)
iWerner,

@iWerner: grazie :) anche, prova a ridurre progressivamente MTU sull'iface e vedi quando si ferma (se lo fa).
Lorenzog,

2

Quando si utilizza TCP, aumentare le dimensioni della finestra di TCP; questo aiuterà con il "numero di pacchetti nell'aria".

È passato un po 'di tempo da quando ho dovuto giocare con queste cose, ma ecco un link trovato da Google per me.

Dopo aver riletto la tua domanda, vedo che stai eseguendo BGAN: darei una buona occhiata a questo (o semplicemente google per: "spoofing BGAN").

Per quanto riguarda la misurazione della larghezza di banda, ho scoperto che l'iperf è abbastanza decente fintanto che stai utilizzando pacchetti di dimensioni ragionevoli.


Questo è interessante - Indica che l'acceleratore TCP è disponibile per Redhat, mentre le persone inmarsat con cui abbiamo parlato hanno detto che era disponibile solo per Windows e OS X (e questo è effettivamente ciò che dice il sito web Inmarsat / BGAN)
iWerner

Potrebbero non averlo ora; Vedo che la data del documento è 07. Se spingi abbastanza forte e parli con abbastanza persone; potresti trovare qualcuno con una vecchia copia di esso. Generalmente quando si telefona si ottiene il supporto di livello uno. Proverò alcuni dei miei contatti ma nessuna garanzia.
Eddy,

Ho ottenuto la fuga dal nostro provider satellitare; difficile trovare qualcuno che sappia di cosa stanno parlando. Continuerò a provare, nel frattempo ecco qualcosa da provare: sourceforge.net/projects/pepsal Dalla descrizione del progetto sta facendo praticamente quello che sta facendo il software Inmarsat: PEPsal è un TCP integrato, multi-layer, trasparente Proxy che migliora le prestazioni che divide la connessione in due parti, facendo uso dei miglioramenti di TCP TCP durante l'invio di dati e migliorando ampiamente le prestazioni in collegamenti con caratteristiche diverse
Eddy,

2

Penso che potresti abbaiare all'albero sbagliato. Ogni volta che ho avuto problemi MTU sbagliati, il traffico si è fermato molto prima di 192 KB. Penso che sia più correlato ad alcuni nella finestra "in pacchetti di volo", o nella finestra TCP, o forse in alcuni buffer nell'uplink satellitare stesso.

Sicuramente fare alcune catture lungo a pacchetto (sia 'dentro' e 'fuori' del VPN) e vedere se stai ricevendo tutte le ACK's

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.