Nós aceleramos OpenVPN Em um roteador OpenWRT. Uma versão alternativa sem ferro de solda e sem extremismos de hardware.

Nós aceleramos OpenVPN Em um roteador OpenWRT. Uma versão alternativa sem ferro de solda e sem extremismos de hardware.

Olá a todos, li recentemente artigo antigo sobre como você pode acelerar OpenVPN No roteador, a solução foi mover a criptografia para um componente de hardware separado, soldado dentro do próprio roteador. Tenho uma situação semelhante à do autor — um TP-Link WDR3500 com 128 MB de RAM e um processador fraco que não consegue lidar com criptografia de túnel. No entanto, eu definitivamente não queria mexer no roteador com um ferro de solda. Minha experiência está descrita abaixo. OpenVPN para um dispositivo de hardware separado com backup no roteador em caso de emergência.

Tarefa

Temos um roteador TP-Link WDR3500 e um Orange Pi Zero H2. Queremos que o Orange Pi lide com a criptografia do túnel no modo normal, mas se algo acontecer com ele, o processamento será feito pelo Pi. VPN O dispositivo será devolvido ao roteador. Todas as configurações de firewall do roteador devem funcionar normalmente. E, no geral, a adição de hardware adicional deve ser transparente e imperceptível para todos. OpenVPN Funciona via TCP, adaptador TAP em modo bridge (servidor-ponte).

Solução

Em vez de conectar via USB, decidi usar uma porta do roteador e conectar todas as sub-redes que possuem uma ponte VPN ao Orange Pi. Acontece que o hardware ficará fisicamente suspenso nas mesmas redes que o servidor VPN no roteador. Depois disso, instalamos exatamente os mesmos servidores no Orange Pi, e no roteador configuramos algum tipo de proxy para que ele envie todas as conexões de entrada para o servidor externo, e se o Orange Pi estiver morto ou indisponível, então para o servidor substituto interno. Eu tomei HAProxy.

Acontece assim:

  1. Um cliente chega
  2. Se o servidor externo estiver indisponível, como antes, a conexão vai para o servidor interno
  3. Se disponível, o cliente é aceito pela Orange Pi
  4. VPN no Orange Pi descriptografa pacotes e os envia de volta para o roteador
  5. O roteador os encaminha para algum lugar

Exemplo de implementação

Então, digamos que temos duas redes no roteador - principal(1) e convidado(2), para cada uma delas existe OpenVPN servidor para conexão externa.

Configuração de rede

Precisamos rotear ambas as redes através de uma porta, então criamos 2 VLANs.

No roteador, na seção Rede/Switch, crie VLANs (por exemplo 1 e 2) e habilite-as no modo etiquetado na porta desejada, adicione as recém-criadas eth0.1 e eth0.2 às redes correspondentes (por exemplo, adicione-os à brigada).

No Orange Pi criamos duas interfaces VLAN (tenho Archlinux ARM + netctl):

/etc/netctl/vlan-main

Description='Main VLAN on eth0'
Interface=vlan-main
Connection=vlan
BindsToInterfaces=eth0
VLANID=1
IP=no

/etc/netctl/vlan-guest

Description='Guest VLAN on eth0'
Interface=vlan-guest
Connection=vlan
BindsToInterfaces=eth0
VLANID=2
IP=no

E imediatamente criamos duas pontes para eles:

/etc/netctl/br-main

Description="Main Bridge connection"
Interface=br-main
Connection=bridge
BindsToInterfaces=(vlan-main)
IP=dhcp

/etc/netctl/br-guest

Description="Guest Bridge connection"
Interface=br-guest
Connection=bridge
BindsToInterfaces=(vlan-guest)
IP=dhcp

Habilite a inicialização automática para todos os 4 perfis (netctl enable). Agora, após a reinicialização, o Orange Pi ficará pendurado nas duas redes necessárias. Configuramos os endereços de interface no Orange Pi em Static Leases no roteador.

ip addr show

4: vlan-main@eth0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-main state UP group default qlen 1000
    link/ether 02:42:f0:f8:23:c8 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::42:f0ff:fef8:23c8/64 scope link 
       valid_lft forever preferred_lft forever

5: vlan-guest@eth0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-guest state UP group default qlen 1000
    link/ether 02:42:f0:f8:23:c8 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::42:f0ff:fef8:23c8/64 scope link 
       valid_lft forever preferred_lft forever

6: br-main: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 52:c7:0f:89:71:6e brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.3/24 brd 192.168.1.255 scope global dynamic noprefixroute br-main
       valid_lft 29379sec preferred_lft 21439sec
    inet6 fe80::50c7:fff:fe89:716e/64 scope link 
       valid_lft forever preferred_lft forever

7: br-guest: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether ee:ea:19:31:34:32 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.3/24 brd 192.168.2.255 scope global br-guest
       valid_lft forever preferred_lft forever
    inet6 fe80::ecea:19ff:fe31:3432/64 scope link 
       valid_lft forever preferred_lft forever

Configuração VPN

Em seguida, copiamos as configurações do roteador para OpenVPN e teclas. As configurações geralmente podem ser obtidas de /tmp/etc/openvpn*.conf

Por padrão, o openvpn rodando no modo TAP e server-bridge mantém sua interface inativa. Para que tudo funcione, você precisa adicionar um script que seja executado quando a conexão for ativada.

/etc/openvpn/main.conf

dev vpn-main
dev-type tap

client-to-client
persist-key
persist-tun
ca /etc/openvpn/main/ca.crt
cert /etc/openvpn/main/main.crt
cipher AES-256-CBC
comp-lzo yes
dh /etc/openvpn/main/dh2048.pem
ifconfig-pool-persist /etc/openvpn/ipp_main.txt
keepalive 10 60
key /etc/openvpn/main/main.key
port 443
proto tcp
push "redirect-gateway"
push "dhcp-option DNS 192.168.1.1"
server-bridge 192.168.1.3 255.255.255.0 192.168.1.200 192.168.1.229
status /tmp/openvpn.main.status
verb 3

setenv profile_name main
script-security 2
up /etc/openvpn/vpn-up.sh

/etc/openvpn/vpn-up.sh

#!/bin/sh

ifconfig vpn-${profile_name} up
brctl addif br-${profile_name} vpn-${profile_name}

Como resultado, assim que a conexão ocorrer, a interface vpn-main será adicionada ao br-main. Para a grade de convidados - da mesma forma, até o nome e endereço da interface na ponte do servidor.

Roteamento de solicitações externamente e proxy

Nesta etapa, o Orange Pi já é capaz de aceitar conexões e conectar clientes às redes necessárias. Resta apenas configurar o proxy das conexões de entrada no roteador.

Transferimos os servidores VPN do roteador para outras portas, instalamos o HAProxy no roteador e configuramos:

/etc/haproxy.cfg

global
        maxconn 256
        uid 0
        gid 0
        daemon

defaults
        retries 1
        contimeout 1000
        option splice-auto

listen guest_vpn
        bind :444
        mode tcp
        server 0-orange 192.168.2.3:444 check
        server 1-local  127.0.0.1:4444 check backup

listen main_vpn
        bind :443
        mode tcp
        server 0-orange 192.168.1.3:443 check
        server 1-local  127.0.0.1:4443 check backup

Aproveitar

Se tudo correr conforme o planejado, os clientes mudarão para Orange Pi e o processador do roteador não aquecerá mais e a velocidade da VPN aumentará significativamente. Ao mesmo tempo, todas as regras de rede registradas no roteador permanecerão relevantes. Em caso de acidente no Orange Pi, ele cairá e o HAProxy transferirá os clientes para servidores locais.

Obrigado pela atenção, sugestões e correções são bem-vindas.

Fonte: habr.com

Compre hospedagem confiável para sites com proteção DDoS, servidores VPS VDS 🔥 Compre hospedagem de sites confiável com proteção contra DDoS, servidores VPS/VDS | ProHoster