
Ciao a tutti, recentemente ho letto su come accelerare OpenVPN sul router, trasferendo la crittografia su un hardware separato, che è saldamente integrato all'interno del router stesso. Ho un caso simile a quello dell'autore: TP-Link WDR3500 con 128 megabyte di RAM e un processore modesto, che non riesce affatto a gestire la crittografia dei tunnel. Tuttavia, non volevo assolutamente attraversare il router con il saldatore. Qui di seguito il mio esperienza di esternalizzazione di OpenVPN su un hardware separato con riserva sul router nel caso di emergenza.
Compito
Ho 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 quest'ultimo, l'elaborazione VPN ritornerà nuovamente sul router. Tutte le impostazioni del firewall sul router devono continuare a funzionare come prima. E in generale, l'aggiunta di un ulteriore hardware deve avvenire in modo trasparente e invisibile per tutti. OpenVPN funziona su TCP, l'adattatore TAP in modalità bridge (server-bridge).
Soluzione
Invece di collegarmi via USB, ho deciso di utilizzare una porta del router e instradare attraverso di essa tutte le sottoreti in cui è presente il bridge VPN. Di conseguenza, l'hardware sarà fisicamente connesso alle stesse reti dei server VPN sul router. Dopo di che, alziamo i medesimi server su Orange Pi, e sul router configuriamo un proxy in modo che gestisca tutte le connessioni in arrivo verso il server esterno, e se Orange Pi è morto o non disponibile, allora verso un server interno di fallback. Ho scelto HAProxy.
Ecco come funziona:
- Arriva un cliente
- Se il server esterno non è disponibile, la connessione continua a essere reindirizzata verso il server interno
- Se è disponibile, il cliente viene gestito dall'Orange Pi
- VPN su Orange Pi decripta i pacchetti e li rimanda indietro al router
- Il router li instrada altrove
Esempio di implementazione
Quindi, supponiamo di avere sul router due reti — main(1) e guest(2), per ciascuna di esse abbiamo un server OpenVPN per le connessioni esterne.
Configurazione della rete
Dobbiamo instradare entrambe le reti attraverso una sola porta, quindi creiamo 2 VLAN.
Sul router, nella sezione Network/Switch, creiamo le VLAN (ad esempio 1 e 2) e le attiviamo in modalità tagged sulla porta desiderata, aggiungiamo le nuove eth0.1 e eth0.2 alle reti corrispondenti (ad esempio, le aggiungiamo al bridge).
Su Orange Pi creiamo due interfacce VLAN (ho Archlinux ARM + netctl):
/etc/netctl/vlan-main
Descrizione='VLAN principale su eth0'
Interfaccia=vlan-main
Connessione=vlan
AssociatoInterfacce=eth0
VLANID=1
IP=no
/etc/netctl/vlan-guest
Descrizione='VLAN ospite su eth0'
Interfaccia=vlan-guest
Connessione=vlan
AssociatoInterfacce=eth0
VLANID=2
IP=no
E subito creiamo due bridge per loro:
/etc/netctl/br-main
Descrizione="Connessione Bridge principale"
Interfaccia=br-main
Connessione=bridge
AssociatoInterfacce=(vlan-main)
IP=dhcp
/etc/netctl/br-guest
Descrizione="Connessione Bridge ospite"
Interfaccia=br-guest
Connessione=bridge
AssociatoInterfacce=(vlan-guest)
IP=dhcp
Attiviamo l'avvio automatico su tutti e 4 i profili (netctl enable). Ora, dopo il riavvio, l'Orange Pi sarà connesso a entrambe le reti richieste. Configuriamo gli indirizzi delle interfacce sull'Orange Pi in Static Leases nel router.
ip addr show
4: vlan-main@eth0: 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: 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: 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: 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
Configurazione VPN
Successivamente copiamo le impostazioni da router per OpenVPN e le chiavi. Le impostazioni possono solitamente essere prelevate da /tmp/etc/openvpn*.conf
Per impostazione predefinita openvpn, eseguito in modalità TAP e server-bridge, mantiene la propria interfaccia inattiva. Affinché tutto funzioni, è necessario aggiungere uno script che venga eseguito durante l'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 connette, l'interfaccia vpn-main sarà aggiunta a br-main. Per la rete guest — in modo analogo, tenendo conto del nome dell'interfaccia e dell'indirizzo nel server-bridge.
Routing delle richieste esterne e proxying
A questo punto, l'Orange Pi è già in grado di accettare connessioni e inoltrare i clienti alle reti desiderate. Resta da configurare il proxy per le connessioni in ingresso 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
Godiamo
Se tutto è andato secondo i piani, i clienti passeranno a Orange Pi e il processore del router non si surriscalderà più, mentre la velocità della VPN aumenterà sensibilmente. Allo stesso tempo, tutte le regole di rete impostate sul router rimarranno valide. In caso di guasto su Orange Pi, si disconnetterà e HAProxy reindirizzerà i clienti ai server locali.
Grazie per l'attenzione, suggerimenti e correzioni sono benvenuti.
Fonte: habr.com
