Acceleriamo OpenVPN sul router Openwrt. Versione alternativa senza saldatore e estremo hardware.

Acceleriamo OpenVPN sul router Openwrt. Versione alternativa senza saldatore e estremo hardware.

Ciao a tutti, recentemente ho letto un vecchio articolo su come è possibile velocizzare OpenVPN su un router, trasferendo la crittografia su un hardware separato, che viene saldato all'interno dello stesso router. Ho un caso simile a quello dell'autore — TP-Link WDR3500 con 128 megabyte di RAM e un processore povero, che proprio non riesce a gestire la crittografia dei tunnel. Tuttavia, non volevo assolutamente smontare il router con un saldatore. Di seguito vi racconterò la mia esperienza di portare OpenVPN su un hardware separato, con un sistema di riserva sul router in caso di emergenza.

Compito

C'è un router TP-Link WDR3500 e un Orange Pi Zero H2. Vogliamo che la crittografia dei tunnel venga gestita dall'Orange Pi, mentre se succede qualcosa a lui, l'elaborazione VPN tornerà indietro sul router. Tutte le impostazioni del firewall sul router devono funzionare come prima. E in generale, l'aggiunta di hardware aggiuntivo deve avvenire in modo trasparente e invisibile per tutti. OpenVPN funziona tramite TCP, adattatore TAP in modalità bridge (server-bridge).

Soluzione

Invece di collegarmi tramite USB, ho deciso di utilizzare una porta del router per connettere tutte le sottoreti in cui è presente il bridge VPN all'Orange Pi. In questo modo, il dispositivo sarà fisicamente connesso alle stesse reti dei server VPN nel router. Dopodiché, configuriamo server identici sull'Orange Pi e impostiamo un proxy sul router per instradare tutte le connessioni in ingresso verso un server esterno, e se l'Orange Pi si guasta o non è disponibile, allora verso un server interno di fallback. Ho scelto HAProxy.

In questo modo:

  1. Il cliente arriva
  2. Se il server esterno non è disponibile, come prima, la connessione va al server interno
  3. Se disponibile, il cliente viene ricevuto dall'Orange Pi
  4. Il VPN sull'Orange Pi decrittografa i pacchetti e li restituisce al router
  5. Il router li instrada da qualche parte

Esempio di implementazione

Quindi, supponiamo di avere due reti sul router: main(1) e guest(2), per ciascuna di esse esiste un server OpenVPN per le connessioni esterne.

Configurazione di rete

Dobbiamo instradare entrambe le reti attraverso una porta, quindi creiamo 2 VLAN.

Sul router, nella sezione Network/Switch, creiamo i VLAN (ad esempio 1 e 2) e li attiviamo in modalità tagged sulla porta desiderata, aggiungendo le nuove interfacce eth0.1 e eth0.2 alle rispettive reti (ad esempio, aggiungendole al bridge).

Su Orange Pi creiamo due interfacce VLAN (sto usando Archlinux ARM + netctl):

/etc/netctl/vlan-main

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

/etc/netctl/vlan-guest

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

E creiamo subito due bridge per esse:

/etc/netctl/br-main

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

/etc/netctl/br-guest

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

Attiviamo l'avvio automatico per tutti e 4 i profili (netctl enable). Ora, dopo il riavvio, l'Orange Pi sarà connesso alle due reti richieste. Configuriamo gli indirizzi delle interfacce sull'Orange Pi in Static Leases sul router.

ip addr show

4: vlan-main@eth0:  mtu 1500 qdisc noqueue master br-main stato UP gruppo 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 ambito link 
       valid_lft forever preferred_lft forever

5: vlan-guest@eth0:  mtu 1500 qdisc noqueue master br-guest stato UP gruppo 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 ambito link 
       valid_lft forever preferred_lft forever

6: br-main:  mtu 1500 qdisc noqueue stato UP gruppo 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 ambito globale dinamico noprefixroute br-main
       valid_lft 29379sec preferred_lft 21439sec
    inet6 fe80::50c7:fff:fe89:716e/64 ambito link 
       valid_lft forever preferred_lft forever

7: br-guest:  mtu 1500 qdisc noqueue stato UP gruppo 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 ambito globale br-guest
       valid_lft forever preferred_lft forever
    inet6 fe80::ecea:19ff:fe31:3432/64 ambito link 
       valid_lft forever preferred_lft forever

Configurazione VPN

Successivamente, copiamo le impostazioni dal router per OpenVPN e le chiavi. Le impostazioni possono generalmente essere ottenute da /tmp/etc/openvpn*.conf

Per impostazione predefinita, openvpn, eseguito in modalità TAP e server-bridge, mantiene il proprio interfaccia inattivo. Per farlo funzionare, è necessario aggiungere uno script che viene eseguito all'attivazione della connessione.

/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}

Di conseguenza, non appena si stabilisce la connessione, l'interfaccia vpn-main verrà aggiunta a br-main. Per la rete guest, è analoga con precisione al nome dell'interfaccia e all'indirizzo in server-bridge.

Routing delle richieste esterne e proxying

In questo passaggio, l'Orange Pi è già in grado di accettare connessioni e consentire ai client di accedere alle reti desiderate. Ora resta configurare il proxy delle connessioni in entrata sul router.

Trasferiamo i server VPN del router su altre porte, installiamo HAProxy sul router e configuriamo:

/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

Goditi

Se tutto va secondo i piani, i clienti migreranno su Orange Pi e il processore del router non si scalderà più, mentre la velocità del VPN aumenterà notevolmente. Tutte le regole di rete scritte sul router rimarranno valide. In caso di malfunzionamento dell'Orange Pi, questo si disconnetterà e HAProxy reindirizzerà i clienti ai server locali.

Grazie per l'attenzione, suggerimenti e correzioni sono sempre benvenuti.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster