
Olá a todos, li recentemente 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:
- Um cliente chega
- Se o servidor externo estiver indisponível, como antes, a conexão vai para o servidor interno
- Se disponível, o cliente é aceito pela Orange Pi
- VPN no Orange Pi descriptografa pacotes e os envia de volta para o roteador
- 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
