OpenVPN bassa prestazione. Ho problemi MTU? Scorie all'interno

Ho problemi con un tunnel OpenVPN che non raggiunge la velocità di linea. Il gateway è un server virtuale Debian Jessy ospitato in OVH. Il client è il mio server home freebsd 10.2 (Intel I3 Ivy Bridge) o il mio RaspberryPI2. Ho distriggersto la crittografia e l'authentication. Ho una connessione FTTH simmetrica di 100mbit / s, ma il tunnel raggiunge solamente una velocità di 20-40mbit / s. La connessione diretta (senza tunnel) port sempre i 100mbit / s che mi aspetto. Ho provato le performance con iperf3. Ho provato prima con il mio home server di freebsd. Ho provato tutte le impostazioni consigliate su mssfix, frammento ecc. Nulla ha aiutato.

Poi ho pensato che forse è la mia macchina libera. Così ho installato un nuovo Jessy raspbian sul mio RPI2 e ho fatto alcuni più in profondità test:

  • OpenVPN è vulnerabile a UDP?
  • IO Attendere che causa un rallentamento così elevato (EXT4 JDB2 a 99% IO) Durante il commit di Mysql
  • Problemi di performance durante l'esecuzione di applicazioni desktop Java su Citrix Metaframe
  • Il server IP del server blocca la richiesta API, il router su questo server IP è Speedport W724V Typ C
  • Come rendere pg_dump less risorse avidi
  • OpenVPN su OpenVZ TLS Errore: handshake TLS fallito (soluzioni consigliate da google non aiutano)
  • Prima di tutto ho rimosso tutte le impostazioni MTU dalle configurazioni OpenVPN e lasciato che il path MTU gestisca le cose (speriamo). Poiché non ho alcun firewall attivo su entrambe le macchine, dovrebbe funzionare. Questi sono i miei config vpn:

    server 10.8.0.0 255.255.255.0 port 1194 proto udp dev tun sndbuf 0 rcvbuf 0 user nobody group nogroup persist-key persist-tun ifconfig-pool-persist ipp.txt keepalive 10 120 push "redirect-gateway def1" status openvpn-status.log verb 3 ca /etc/openvpn/easy-rsa/keys/ca.crt cert /etc/openvpn/easy-rsa/keys/vpn.theissen.io.crt key /etc/openvpn/easy-rsa/keys/vpn.theissen.io.key dh /etc/openvpn/easy-rsa/keys/dh4096.pem tls-auth /etc/openvpn/easy-rsa/keys/ta.key 0 cipher none auth none comp-lzo no client proto udp dev tun12 remote xxx.io 1194 resolv-retry infinite sndbuf 0 rcvbuf 0 nobind user nobody group nogroup persist-key persist-tun verb 3 pkcs12 /etc/openvpn/vpn.theissen.io/alex.p12 tls-auth /etc/openvpn/vpn.theissen.io/ta.key 1 ns-cert-type server cipher none auth none comp-lzo no 

    Prima di tutto il test senza il tunnel per dimostrare che la connessione al server è effettivamente quasi 100mbit / s:

     iperf3 -c vpn.theissen.io Connecting to host vpn.theissen.io, port 5201 [ 4] local 192.168.1.253 port 34512 connected to 149.202.58.183 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-1.00 sec 10.8 MBytes 90.5 Mbits/sec 0 335 KBytes [ 4] 1.00-2.00 sec 11.4 MBytes 95.7 Mbits/sec 0 335 KBytes [ 4] 2.00-3.00 sec 11.1 MBytes 93.0 Mbits/sec 0 352 KBytes [ 4] 3.00-4.00 sec 11.2 MBytes 94.0 Mbits/sec 0 369 KBytes [ 4] 4.00-5.00 sec 11.5 MBytes 95.9 Mbits/sec 0 390 KBytes [ 4] 5.00-6.00 sec 11.0 MBytes 92.5 Mbits/sec 0 390 KBytes [ 4] 6.00-7.00 sec 11.4 MBytes 95.2 Mbits/sec 0 390 KBytes [ 4] 7.00-8.00 sec 11.2 MBytes 94.3 Mbits/sec 0 390 KBytes [ 4] 8.00-9.00 sec 11.1 MBytes 93.3 Mbits/sec 0 390 KBytes [ 4] 9.00-10.00 sec 11.3 MBytes 95.1 Mbits/sec 0 390 KBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-10.00 sec 112 MBytes 93.9 Mbits/sec 0 sender [ 4] 0.00-10.00 sec 112 MBytes 93.5 Mbits/sec receiver iperf Done. 

    I pacchetti di questa connessione ho scaricato con tcpdump sul server. È ansible scaricarli qui (devi estrarre per aprirli con wireshark): dumpraw.cap.xz

    Quindi questo è come un dump "OK". La dimensione massima del canvasio che ho individuato è 1514. Dump di iperf3 senza tunnel

    Ora ho eseguito il test sopra il tunnel:

     iperf3 -c 10.8.0.1 Connecting to host 10.8.0.1, port 5201 [ 4] local 10.8.0.14 port 36388 connected to 10.8.0.1 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-1.00 sec 5.96 MBytes 50.0 Mbits/sec 127 133 KBytes [ 4] 1.00-2.00 sec 5.19 MBytes 43.5 Mbits/sec 6 120 KBytes [ 4] 2.00-3.00 sec 5.80 MBytes 48.7 Mbits/sec 0 151 KBytes [ 4] 3.00-4.00 sec 4.27 MBytes 35.9 Mbits/sec 23 96.5 KBytes [ 4] 4.00-5.00 sec 4.89 MBytes 41.0 Mbits/sec 0 129 KBytes [ 4] 5.00-6.00 sec 6.11 MBytes 51.2 Mbits/sec 26 111 KBytes [ 4] 6.00-7.00 sec 5.50 MBytes 46.1 Mbits/sec 0 143 KBytes [ 4] 7.00-8.00 sec 5.25 MBytes 44.1 Mbits/sec 15 126 KBytes [ 4] 8.00-9.00 sec 5.80 MBytes 48.7 Mbits/sec 0 158 KBytes [ 4] 9.00-10.00 sec 3.97 MBytes 33.3 Mbits/sec 22 105 KBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-10.00 sec 52.7 MBytes 44.2 Mbits/sec 219 sender [ 4] 0.00-10.00 sec 52.3 MBytes 43.8 Mbits/sec receiver iperf Done. 

    Ops. Non è così bello. Soprattutto questa colonna "Retr" non sembra così buono. Ho assunto che questo è il tcp ritrasmettere e ci dovrebbe essere poi qualcosa nel dump. Vedremo che non è il caso: /. La CPU non è qui il collo di bottiglia perché ho distriggersto l'authentication e l'abilitazione. La CPU è al 20% sul server e il 50% sul PI durante il test.

    Ecco come sembra il traffico OpenVPN del test: Traffico OpenVPN sull'interfaccia fisica

    Per me questo va bene. Ma non so cosa cercare. Si prega di dare un'occhiata al dump con wireshark : dump_physical.cap.xz

    Il traffico sull'interface del tunnel sembra bene anche a me. Sembra che abbia abbassato correttamente la dimensione del canvasio (a quanto sembra 1444): traffico iperf3 sull'interfaccia tunnel

    Ecco il dump: dump_tunnel.cap.xz

    Per me questo sembra tutto bene, ma non ho idea di cosa cercare esattamente. Ho veramente provato tutto con le impostazioni OpenVPN. Forse qualcuno può dirmi se il traffico sembra okay.

    Quello che mi aspetto come una risposta

    Alless una spiegazione di cosa sta succedendo qui e perché sembra essere indipendente dal software VPN che utilizzo. Tutto quello che ho trovato su Internet era circa i problemi MTU, ma che dovrebbe essere facilmente fissato riducendo il tunnel MTU o gli altri parametri di OpenVPN. Per me questo cambia poco. Quando si guarda il dump vedete che riduce la dimensione del segmento tcp ei pacchetti non sono frammentati. Deve essere qualcos'altro. Mi piace molto sapere cosa .

    Aggiornare

    Ho provato questo con strongswan e anche con softether. È in realtà lo stesso problema (velocità paragonabile, nessun bottleneck della CPU). Sono veramente sconcertato di qual è il problema qui. Ho anche provato un altro gateway (RaspberryPi2 sugli amici 100/100 home connection).

    Aggiorna 2

    Ho notato che iperf3 riport i ritrasmissione di tcp (retr) ma non ci sono ritrasmesse nel deposito (Wireshark dovrebbe evidenziarle). Cosa sta succedendo?

    Ho anche provato OpenVPN sulla mia networking locale (RaspberryPi2 a FreebsdServer). Anche là ho molti ritrasmessi (su LAN ?!):

     Connecting to host 192.168.222.11, port 5201 [ 4] local 192.168.222.10 port 46196 connected to 192.168.222.11 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-1.00 sec 9.19 MBytes 77.0 Mbits/sec 8 141 KBytes [ 4] 1.00-2.00 sec 8.71 MBytes 73.1 Mbits/sec 3 130 KBytes [ 4] 2.00-3.00 sec 8.59 MBytes 72.0 Mbits/sec 3 120 KBytes [ 4] 3.00-4.00 sec 8.65 MBytes 72.5 Mbits/sec 4 108 KBytes [ 4] 4.00-5.00 sec 8.65 MBytes 72.5 Mbits/sec 4 95.6 KBytes [ 4] 5.00-6.00 sec 8.52 MBytes 71.5 Mbits/sec 2 80.5 KBytes [ 4] 6.00-7.00 sec 8.83 MBytes 74.1 Mbits/sec 0 141 KBytes [ 4] 7.00-8.00 sec 8.59 MBytes 72.0 Mbits/sec 7 106 KBytes [ 4] 8.00-9.00 sec 8.71 MBytes 73.1 Mbits/sec 3 94.2 KBytes [ 4] 9.00-10.00 sec 8.59 MBytes 72.0 Mbits/sec 3 79.2 KBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-10.00 sec 87.0 MBytes 73.0 Mbits/sec 37 sender [ 4] 0.00-10.00 sec 86.8 MBytes 72.8 Mbits/sec receiver 

    In modalità inversa ho una window veramente bizzarra di congestione (wtf?):

     Accepted connection from 192.168.222.10, port 46197 [ 5] local 192.168.222.11 port 5201 connected to 192.168.222.10 port 46198 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 5] 0.00-1.00 sec 8.90 MBytes 74.7 Mbits/sec 3 1.48 GBytes [ 5] 1.00-2.00 sec 8.45 MBytes 70.9 Mbits/sec 2 1.59 GBytes [ 5] 2.00-3.00 sec 8.66 MBytes 72.7 Mbits/sec 518 214 MBytes [ 5] 3.00-4.00 sec 7.96 MBytes 66.8 Mbits/sec 37 703 MBytes [ 5] 4.00-5.00 sec 8.09 MBytes 67.9 Mbits/sec 0 719 MBytes [ 5] 5.00-6.00 sec 8.04 MBytes 67.5 Mbits/sec 0 734 MBytes [ 5] 6.00-7.00 sec 8.07 MBytes 67.7 Mbits/sec 1 703 MBytes [ 5] 7.00-8.00 sec 8.07 MBytes 67.7 Mbits/sec 1 703 MBytes [ 5] 8.00-9.00 sec 7.99 MBytes 67.1 Mbits/sec 2 693 MBytes [ 5] 9.00-10.00 sec 8.06 MBytes 67.6 Mbits/sec 1 693 MBytes [ 5] 10.00-10.09 sec 684 KBytes 64.5 Mbits/sec 0 695 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 5] 0.00-10.09 sec 83.0 MBytes 69.0 Mbits/sec 565 sender [ 5] 0.00-10.09 sec 0.00 Bytes 0.00 bits/sec receiver 

    Aggiornamento 3

    Utilizzando iperf con il risultato di udp ovh temporaneamente bloccando quella port (mi mandano un'e-mail che mi informa di un attacco) e una perdita massiccia di pacchetti:

     ----------------------------------------------------------- Server listening on 1194 ----------------------------------------------------------- Accepted connection from 185.22.143.160, port 15906 [ 5] local 149.202.58.183 port 1194 connected to 185.22.143.160 port 4355 [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams [ 5] 0.00-1.00 sec 2.89 MBytes 24.2 Mbits/sec 0.727 ms 1017/1387 (73%) iperf3: OUT OF ORDER - incoming packet = 1409 and received packet = 1470 AND SP = 5 iperf3: OUT OF ORDER - incoming packet = 1410 and received packet = 1471 AND SP = 5 iperf3: OUT OF ORDER - incoming packet = 1411 and received packet = 1472 AND SP = 5 iperf3: OUT OF ORDER - incoming packet = 1445 and received packet = 1473 AND SP = 5 iperf3: OUT OF ORDER - incoming packet = 1463 and received packet = 1473 AND SP = 5 [ 5] 1.00-2.00 sec 3.29 MBytes 27.6 Mbits/sec 0.716 ms 1110/1526 (73%) [ 5] 2.00-3.00 sec 3.30 MBytes 27.7 Mbits/sec 0.732 ms 1103/1526 (72%) [ 5] 3.00-4.00 sec 3.27 MBytes 27.4 Mbits/sec 0.717 ms 1108/1526 (73%) [ 5] 4.00-5.00 sec 1.56 MBytes 13.1 Mbits/sec 0.837 ms 546/746 (73%) [ 5] 5.00-6.00 sec 0.00 Bytes 0.00 bits/sec 0.837 ms 0/0 (-nan%) [ 5] 6.00-7.00 sec 0.00 Bytes 0.00 bits/sec 0.837 ms 0/0 (-nan%) [ 5] 7.00-8.00 sec 0.00 Bytes 0.00 bits/sec 0.837 ms 0/0 (-nan%) [ 5] 8.00-9.00 sec 0.00 Bytes 0.00 bits/sec 0.837 ms 0/0 (-nan%) [ 5] 9.00-10.00 sec 0.00 Bytes 0.00 bits/sec 0.837 ms 0/0 (-nan%) [ 5] 10.00-10.06 sec 0.00 Bytes 0.00 bits/sec 0.837 ms 0/0 (-nan%) - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams [ 5] 0.00-10.06 sec 118 MBytes 98.5 Mbits/sec 0.837 ms 4884/6711 (73%) [SUM] 0.0-10.1 sec 4884 datagrams received out-of-order 

  • Come controllare chi blocca ICMP durante la negoziazione del path MTU?
  • Cosa sta succedendo con questa strana MTU?
  • L'impostazione MTU sulle interfacce logiche influenza le interfacce fisiche
  • Impatto di MTU sulla frammentazione e il riassembly dei pacchetti IP
  • Come aumentare la dimensione MTU su Linux 2.6?
  • Quale è il Massimo MTU supportto negli standard DSL
  • One Solution collect form web for “OpenVPN bassa prestazione. Ho problemi MTU? Scorie all'interno”

    Per avviatori, la tua esecuzione iperf del tunnel esterno "normale" dovrebbe essere UDP / 1194 come stream su cui si ha il problema e non TCP / 5201. Provare con -b 100M in primo luogo, ma tenere presente questo produrrà datagrammi di size massime che non rappresentano il traffico VPN (size datagramma dovrebbe essere sorta random). Regolare l'opzione -l per la dimensione del datagramma e controllare i risultati. Se i risultati non sono buoni (direi che> 15 o 20% di perdita) si può sospettare un router Internet sovraccarico che sta cadendo i tuoi pacchetti (probabilmente contrassegnati con il miglior sforzo).

    Inoltre, potrebbe essere interessante vedere quale prestazione si ottiene se si passa il tunnel VPN a una port UDP di class EF (direi 5061 a causa di RTP, ma non sono sicuro che tutti i router di Internet abbiano configurato correttamente QoS) o qualsiasi Porta TCP.

    Per me, non c'è niente di sbagliato nel tuo setup e la tua diagnostica non mostra nulla di strano. Provare anche un'altra versione di OpenVPN o di un altro software VPN.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.