Acelere o OpenVPN por US$ 9.99* ou integre o Orange Pi One ao seu roteador

Acelere o OpenVPN por US$ 9.99* ou integre o Orange Pi One ao seu roteador

Alguns de nós não usamos a Internet sem VPN por um motivo ou outro: alguém precisa de um IP dedicado, e é mais fácil e barato comprar um VPS com dois IPs do que comprar um endereço de um provedor, alguém quer acessar todos os sites , e não apenas aqueles permitidos no território da Federação Russa, outros precisam de IPv6, mas o provedor não o fornece...
Na maioria das vezes, uma conexão VPN é estabelecida no próprio dispositivo que está sendo usado em um determinado momento, o que faz sentido se você tiver apenas um computador e um telefone e raramente os usar ao mesmo tempo. Se houver muitos dispositivos em sua rede doméstica, ou, por exemplo, alguns nos quais a VPN não pode ser configurada, seria mais conveniente criar um túnel diretamente no roteador doméstico para não pensar em configurar cada dispositivo separadamente .

Se você já instalou o OpenVPN em seu roteador, provavelmente ficou desagradavelmente surpreso com a rapidez com que ele funciona. Os SoCs, mesmo de roteadores baratos, passam por cerca de um tráfego de gigabit sem problemas, devido à transferência de roteamento e funções NAT para um chip separado projetado exclusivamente para esta tarefa, e os processadores principais de tais roteadores são bastante fracos, porque Praticamente não há carga sobre eles. Este compromisso permite atingir alta velocidade do roteador e reduzir significativamente o preço do dispositivo acabado - roteadores com processadores potentes custam várias vezes mais e estão posicionados não apenas como uma caixa de distribuição de Internet, mas também como NAS, torrent downloader e sistema multimídia doméstico.

Meu roteador, TP-Link TL-WDR4300, não pode ser chamado de novo - o modelo apareceu em meados de 2012 e possui um processador de arquitetura MIPS560 32Kc de 74 MHz, cuja potência é suficiente apenas para 20-23 Mb/s de tráfego criptografado via OpenVPN, que por padrões a velocidade da Internet doméstica moderna é bastante baixa.
Como podemos aumentar a velocidade de um túnel criptografado? Meu roteador é bastante funcional, suporta MIMO 3x3 e geralmente funciona bem, eu não gostaria de trocá-lo.
Como agora é comum criar páginas da Internet de 10 megabytes, escrever aplicativos de desktop em node.js e compactá-los em um arquivo de 100 megabytes, aumentar o poder de computação em vez de otimizar, faremos algo terrível - transferiremos a conexão VPN para um produtivo “computador” Orange Pi One de placa única, que instalaremos no gabinete do roteador sem ocupar a rede existente e as portas USB, por apenas US$ 9.99*!
* + entrega, + impostos, + para cerveja, + MicroSD.

OpenVPN

O processador do roteador não pode ser chamado de completamente fraco - ele é capaz de criptografar e fazer hash de dados usando o algoritmo AES-128-CBC-SHA1 a uma velocidade de 50 Mb/s, que é visivelmente mais rápido do que o modo como o OpenVPN funciona, e o moderno fluxo CHACHA20 a cifra com hash POLY1305 chega até a 130 megabits por segundo! Por que a velocidade do túnel VPN é tão baixa? É tudo uma questão de troca de contexto entre o espaço do usuário e o espaço do kernel: o OpenVPN criptografa o tráfego e se comunica com o mundo externo no contexto do usuário, e o próprio roteamento ocorre no contexto do kernel. O sistema operacional precisa alternar constantemente para cada pacote recebido ou transmitido, e essa operação é lenta. Este problema é inerente a todos os aplicativos VPN executados através de um driver TUN/TAP, e não se pode dizer que o problema de baixa velocidade seja causado pela má otimização do OpenVPN (embora, é claro, haja lugares que precisam ser retrabalhados). Nem um único cliente VPN de espaço de usuário fornece um gigabit com criptografia desabilitada em meu laptop, muito menos sistemas com processador fraco.

Laranja Pi Um

O Orange Pi One de placa única da Xunlong é a melhor oferta em termos de relação desempenho/preço no momento. Por US $ 9.99 * você obtém um processador ARM Cortex-A7 quad-core sólido rodando (estável) a 1008 MHz e claramente supera seus vizinhos de preço, o Raspberry Pi Zero e o Next Thing CHIP. É aqui que as vantagens terminam. A empresa Xunlong não dá nenhuma atenção ao software de suas placas e, na época em que a One foi lançada à venda, ela nem fornecia arquivo de configuração da placa, sem falar nas imagens prontas. Allwinner, um fabricante de SoC, também não é particularmente sensível ao suporte ao seu produto. Eles estão interessados ​​apenas no desempenho mínimo no sistema operacional Android 4.4.4, o que significa que somos forçados a usar o kernel 3.4 com patches do Android. Felizmente, existem entusiastas que montam distribuições, editam o kernel, escrevem código para suportar placas no kernel principal, ou seja, eles realmente fazem o trabalho para o fabricante, fazendo com que essa porcaria funcione de maneira aceitável. Para meus propósitos, escolhi a distribuição Armbian; ela é atualizada de forma frequente e conveniente (novos kernels são instalados diretamente através do gerenciador de pacotes, e não copiando arquivos para uma partição especial, como normalmente é o caso do Allwinner), e suporta a maioria periféricos, ao contrário dos demais.

Router

Para não sobrecarregar o processador fraco do roteador com criptografia e acelerar nossa conexão VPN, podemos transferir essa tarefa para um processador Orange Pi mais poderoso, conectando-o de alguma forma ao roteador. A conexão via Ethernet ou USB vem à mente - ambos os padrões são suportados por ambos os dispositivos, mas eu não queria usar as portas existentes. Felizmente, há uma saída.

O chip hub USB GL850G, usado no roteador, suporta 4 portas USB, duas das quais não estão conectadas. Não está claro por que o fabricante não os soldou, presumo, para evitar que os usuários conectem 4 dispositivos com alto consumo de corrente (por exemplo, discos rígidos) ao mesmo tempo. A fonte de alimentação padrão do roteador não foi projetada para tal carga. De qualquer forma, isso é uma vantagem para nós.
Acelere o OpenVPN por US$ 9.99* ou integre o Orange Pi One ao seu roteador
Para obter outra porta USB, basta soldar dois fios nos pinos 8(D-) e 9(D+) ou 11(D-) e 12(D+).

Acelere o OpenVPN por US$ 9.99* ou integre o Orange Pi One ao seu roteador

No entanto, não basta simplesmente conectar dois dispositivos USB e esperar que tudo funcione sozinho, como aconteceria com a Ethernet. Em primeiro lugar, precisamos fazer com que um deles funcione no modo USB Client, e não no USB Host, e em segundo lugar, precisamos decidir como os dispositivos irão detectar uns aos outros. Existem muitos drivers para os chamados USB Gadgets (em homenagem ao subsistema do kernel Linux), que permitem emular vários tipos de dispositivos USB: adaptador de rede, placa de áudio, teclado e mouse, unidade flash, câmera, console via serial porta. Como nosso dispositivo funcionará com a rede, emular um adaptador Ethernet é melhor para nós.

Existem três padrões Ethernet sobre USB:

  • NDIS Remoto (RNDIS). Um padrão desatualizado da Microsoft, usado principalmente durante o Windows XP.
  • Modelo de controle Ethernet (ECM). Um padrão simples que encapsula frames Ethernet em pacotes USB. Ótimo para modems com fio com conexão USB, onde é conveniente transferir frames sem processamento, mas devido à simplicidade e às limitações do barramento USB, não é muito rápido.
  • Modelo de emulação Ethernet (EEM). Um protocolo mais inteligente que leva em consideração as limitações do USB e agrega de maneira ideal vários quadros em um, aumentando assim o rendimento.
  • Modelo de controle de rede (NCM). O mais novo protocolo. Possui os benefícios do EEM e otimiza ainda mais a experiência no ônibus.

Para que qualquer um desses protocolos funcione em nossa diretoria, como sempre, teremos que encontrar algumas dificuldades. Devido ao fato de Allwinner estar interessado apenas nas partes Android do kernel, apenas o Android Gadget funciona normalmente - o código que implementa a comunicação com o adb, exportando o dispositivo via protocolo MTP e emulando uma unidade flash em dispositivos Android. O próprio Android Gadget também suporta o protocolo RNDIS, mas está quebrado no kernel Allwinner. Se você tentar compilar o kernel com qualquer outro dispositivo USB, o dispositivo simplesmente não aparecerá no sistema, não importa o que você faça.
Para resolver o problema, de forma amigável, você precisa encontrar o local onde o controlador USB é inicializado no código do gadget Android android.c modificado pelos desenvolvedores, mas também há uma solução alternativa para fazer pelo menos a emulação Ethernet. Trabalho USB:

--- sun8i/drivers/usb/sunxi_usb/udc/sunxi_udc.c 2016-04-16 15:01:40.427088792 +0300
+++ sun8i/drivers/usb/sunxi_usb/udc/sunxi_udc.c 2016-04-16 15:01:45.339088792 +0300
@@ -57,7 +57,7 @@
 static sunxi_udc_io_t g_sunxi_udc_io;
 static u32 usb_connect = 0;
 static u32 is_controller_alive = 0;
-static u8 is_udc_enable = 0;   /* is udc enable by gadget? */
+static u8 is_udc_enable = 1;   /* is udc enable by gadget? */
 
 #ifdef CONFIG_USB_SUNXI_USB0_OTG
 static struct platform_device *g_udc_pdev = NULL;

Este patch força o modo cliente USB, permitindo que você use dispositivos USB normais do Linux.
Agora você deve reconstruir o kernel com este patch e o gadget necessário. Escolhi a EEM porque... De acordo com os resultados dos testes, revelou-se mais produtivo que o NCM.
A equipe Armbian fornece sistema de montagem muito simples e conveniente para todas as placas suportadas na distribuição. Basta baixá-lo, colocar nosso patch userpatches/kernel/sun8i-default/otg.patch, edite um pouco compile.sh e selecione o gadget necessário:

Acelere o OpenVPN por US$ 9.99* ou integre o Orange Pi One ao seu roteador

O kernel será compilado em um pacote deb, que não será difícil de instalar na placa via dpkg.
Resta conectar a placa via USB e configurar nosso novo adaptador de rede para receber um endereço via DHCP. Para fazer isso, você precisa adicionar algo como o seguinte ao /etc/network/interfaces:

auto usb0
        iface usb0 inet dhcp
        hwaddress ether c2:46:98:49:3e:9d
        pre-up /bin/sh -c 'echo 2 > /sys/bus/platform/devices/sunxi_usb_udc/otg_role'

É melhor definir o endereço MAC manualmente, porque... será aleatório sempre que o dispositivo for reiniciado, o que é inconveniente e problemático.
Conectamos o cabo MicroUSB ao conector OTG, conectamos a alimentação do roteador (pode ser fornecido aos pinos 2 e 3 do pente, e não apenas ao conector de alimentação).

Resta apenas configurar o roteador. Basta instalar o pacote com o driver EEM e adicionar nosso novo dispositivo de rede USB à ponte da zona de firewall local:

opkg install kmod-usb-net-cdc-eem

Acelere o OpenVPN por US$ 9.99* ou integre o Orange Pi One ao seu roteador
Para rotear todo o tráfego para o túnel VPN, você precisa adicionar uma regra SNAT ao endereço IP da placa no lado do roteador ou distribuir o endereço da placa como um endereço de gateway via dnsmasq. O último é feito adicionando a seguinte linha ao /etc/dnsmasq.conf:

dhcp-option = tag:lan, option:router, 192.168.1.100

onde 192.168.1.100 — Endereço IP da sua placa. Não se esqueça de inserir o endereço do roteador nas configurações de rede da própria placa!

Uma esponja de melamina foi usada para isolar os contatos da placa dos contatos do roteador. Aconteceu algo assim:
Acelere o OpenVPN por US$ 9.99* ou integre o Orange Pi One ao seu roteador

Conclusão

A rede via USB funciona com uma rapidez surpreendente: 100-120 Mb/s, esperava menos. O OpenVPN passa por cerca de 70 Mb/s de tráfego criptografado, o que também não é muito, mas é suficiente para minhas necessidades. A tampa do roteador não fecha bem, deixando um pequeno espaço. Os estetas podem remover os conectores Ethernet e USB Host da placa, o que permitirá que a tampa feche completamente e ainda tenha algum espaço sobrando.
É melhor não se envolver nesse tipo de pornografia e comprar Turris Omnia.

Fonte: habr.com

Adicionar um comentário