Eu tenho problemas com um túnel OpenVPN que não atinge a velocidade da linha. O gateway é um servidor virtual Debian Jessy hospedado na OVH. O cliente é meu freebsd 10.2 homeserver (Intel I3 Ivy Bridge) ou meu RaspberryPI2. Eu desativei criptografia e autenticação. Eu tenho uma conexão FTTH simétrica de 100mbit / s, mas o túnel atinge apenas uma velocidade de 20-40mbit / s. Conexão direta (sem túnel) sempre produz os 100mbit / s que eu esperava. Eu testei o desempenho com iperf3. Eu tentei pela primeira vez com o meu freebsd homeserver. Eu tentei todas as configurações recomendadas sobre mssfix, fragmento etc. Nada ajudou.
Então eu pensei que talvez fosse minha máquina freebsd. Então eu instalei um raspado Jessy no meu RPI2 e fiz mais alguns testes em profundidade:
Primeiro, eu removi todas as configurações de MTU das configurações do OpenVPN e deixei o caminho MTU lidar com as coisas (espero). Como não tenho firewall ativo em ambas as máquinas, ele deve funcionar. Estas são minhas configurações 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
Primeiro de tudo, teste sem o túnel para mostrar que a conexão com o servidor é de fato quase 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.
Os pacotes dessa conexão eu despejei com o tcpdump no servidor. Você pode baixá-los aqui (você tem que extrair para abri-los com wireshark): dumpraw.cap.xz
Então é assim que um despejo "OK" se parece. O tamanho máximo de quadro que vi é 1514.
Agoraeufizotestenotúnel:
iperf3-c10.8.0.1Connectingtohost10.8.0.1,port5201[4]local10.8.0.14port36388connectedto10.8.0.1port5201[ID]IntervalTransferBandwidthRetrCwnd[4]0.00-1.00sec5.96MBytes50.0Mbits/sec127133KBytes[4]1.00-2.00sec5.19MBytes43.5Mbits/sec6120KBytes[4]2.00-3.00sec5.80MBytes48.7Mbits/sec0151KBytes[4]3.00-4.00sec4.27MBytes35.9Mbits/sec2396.5KBytes[4]4.00-5.00sec4.89MBytes41.0Mbits/sec0129KBytes[4]5.00-6.00sec6.11MBytes51.2Mbits/sec26111KBytes[4]6.00-7.00sec5.50MBytes46.1Mbits/sec0143KBytes[4]7.00-8.00sec5.25MBytes44.1Mbits/sec15126KBytes[4]8.00-9.00sec5.80MBytes48.7Mbits/sec0158KBytes[4]9.00-10.00sec3.97MBytes33.3Mbits/sec22105KBytes-------------------------[ID]IntervalTransferBandwidthRetr[4]0.00-10.00sec52.7MBytes44.2Mbits/sec219sender[4]0.00-10.00sec52.3MBytes43.8Mbits/secreceiveriperfDone.
Opa.Nãoémaistãolegal.Especialmenteestacoluna"Retr" não parece tão boa. Eu assumi que este é o tcp retransmitir e deve haver algo no lixão. Vamos ver que não é o caso: /. A CPU não é o gargalo aqui porque eu desativei a criptografia e a autenticação. A CPU está em 20% no servidor e 50% no PI durante o teste.
É assim que o tráfego OpenVPN do teste se parece:
Paramim,issoparecebem.Maseunãoseioqueprocurar.Porfavor,dêumaolhadanodespejocomwireshark: dump_physical.cap.xz
O tráfego na interface do túnel também parece bom para mim. Parece que ele baixou corretamente o tamanho do quadro (para 1444 como parece):
Aquiestáodespejo: dump_tunnel.cap.xz
Para mim, isso parece tudo bem, mas eu realmente não tenho idéia do que procurar exatamente. Eu realmente testei tudo com as configurações do OpenVPN. Talvez alguém possa me dizer se o trânsito parece bom.
O que eu espero como resposta
Pelo menos uma explicação do que está acontecendo aqui e por que parece ser independente do software VPN que eu uso. Tudo o que encontrei na internet foi sobre problemas de MTU, mas isso deve ser facilmente corrigido, reduzindo o túnel MTU ou os outros parâmetros do OpenVPN. Para mim isso muda pouco. Quando você olha para o despejo, vê que ele reduz o tamanho do segmento tcp e os pacotes não são fragmentados. Deve haver algo mais. Eu realmente gosto de saber o que .
Atualizar
Eu testei isso com strongswan e até mesmo com softether. Na verdade, é o mesmo problema (velocidade comparável, sem afunilamento cpu). Estou realmente intrigado qual é o problema aqui. Eu também tentei outro gateway (RaspberryPi2 na conexão inicial 100/100 dos amigos).
Atualização 2
Notei que o iperf3 relata tcp retransmite (retr) mas não há retransmissões no dump (o Wireshark deve destacá-las). O que está acontecendo?
Eu até tentei o OpenVPN na minha rede local (RaspberryPi2 para FreebsdServer). Mesmo lá eu tenho muitas retransmissões (em 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
No modo reverso eu tenho uma janela de congestionamento muito estranha (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
Atualização 3
Usar o iperf com o udp resulta no bloqueio temporário da porta (eles me enviam um e-mail informando sobre um ataque) e perda massiva de pacotes:
-----------------------------------------------------------
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