
Ciao a tutti, recentemente ho letto 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:
- Il cliente arriva
- Se il server esterno non è disponibile, come prima, la connessione va al server interno
- Se disponibile, il cliente viene ricevuto dall'Orange Pi
- Il VPN sull'Orange Pi decrittografa i pacchetti e li restituisce al router
- 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
