
Salut tuturor, recent am citit despre cum putem accelera OpenVPN pe un router, mutând criptarea pe o unitate hardware separată, care este sudată în interiorul routerului. Am o situație similară cu autorul — TP-Link WDR3500 cu 128 de megabytes de RAM și un procesor slab, care pur și simplu nu face față criptării tunelurilor. Totuși, nu vreau să mă apuc să deschid routerul cu un fier de lipit. După cat, experiența mea de mutare a OpenVPN pe o unitate hardware separată cu rezervare pe router în caz de defecțiune.
Sarcină
Există un router TP-Link WDR3500 și un Orange Pi Zero H2. Vrem ca criptarea tunelurilor să fie gestionată în mod standard de Orange Pi, iar dacă ceva se întâmplă cu acesta, procesarea VPN să revină pe router. Toate setările firewall-ului de pe router ar trebui să funcționeze ca înainte. De asemenea, în general, adăugarea unei unități hardware suplimentare ar trebui să fie transparentă și invizibilă pentru toți. OpenVPN funcționează prin TCP, adaptorul TAP în modul bridge (server-bridge).
Soluție
În loc să mă conectez prin USB, am decis să folosesc un port de pe router și să conectez pe acesta toate subrețelele în care există un brij VPN. Asta înseamnă că unitatea va fi fizic în aceleași rețele cu serverele VPN de pe router. După aceasta, ridicăm exact aceleași servere pe Orange Pi, iar pe router configurăm un proxy pentru a redirecționa toate conexiunile externe către serverul extern, iar dacă Orange Pi se defectează sau nu este accesibil — atunci către un server intern de rezervă. Am folosit HAProxy.
Rezultatul este acesta:
- Clientul sosește
- Dacă serverul extern nu este disponibil — la fel ca înainte, conexiunea merge către serverul intern
- Dacă este disponibil — clientul este preluat de Orange Pi
- VPN-ul de pe Orange Pi decriptează pachetele și le trimite înapoi la router
- Routerul le rutează undeva
Exemplu de implementare
Deci, să presupunem că avem pe router două rețele — main(1) și guest(2), pentru fiecare dintre ele există un server OpenVPN pentru conectarea din exterior.
Configurarea rețelei
Trebuie să rutăm ambele rețele printr-un singur port, așa că creăm 2 VLAN-uri.
Pe router, în secțiunea Network/Switch, creăm VLAN-uri (de exemplu, 1 și 2) și le activăm în modul tagged pe portul necesar, adăugăm noile create eth0.1 și eth0.2 la rețelele corespunzătoare (de exemplu, le adăugăm în brigde).
Pe Orange Pi creăm două interfețe VLAN (eu am 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
Și imediat creăm două brigde pentru ele:
/etc/netctl/br-main
Description="Conexiune Principală de Bridge"
Interface=br-main
Connection=bridge
BindsToInterfaces=(vlan-main)
IP=dhcp
/etc/netctl/br-guest
Description="Conexiune Guest Bridge"
Interface=br-guest
Connection=bridge
BindsToInterfaces=(vlan-guest)
IP=dhcp
Activăm auto-start pentru toate cele 4 profile (netctl enable). Acum, după repornire, Orange Pi va fi conectat în cele două rețele necesare. Configurăm adresele interfețelor pe Orange Pi în Static Leases pe 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
Configurarea VPN
Ulterior, copiem setările pentru OpenVPN și cheile de pe router. Setările pot fi obținute, de obicei, din /tmp/etc/openvpn*.conf
Implicit, openvpn, rulat în mod TAP și server-bridge, își menține interfața inactivă. Pentru ca totul să funcționeze, trebuie să adăugăm un script care să fie executat la activarea conexiunii.
/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}
Ca rezultat, imediat ce se va realiza conexiunea, interfața vpn-main va fi adăugată în br-main. Pentru rețeaua guest — similar, cu precizia numelui interfeței și adresei în server-bridge.
Rutare a cererilor din exterior și proxying
În acest pas, Orange Pi poate accepta deja conexiuni și permite clienților să acceseze rețelele dorite. Rămâne să configurăm proxying-ul conexiunilor în router.
Mutăm serverele VPN de pe router pe alte porturi, instalăm HAProxy pe router și configurăm:
/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
Ne bucurăm
Dacă totul a decurs conform planului, clienții se vor muta pe Orange Pi, iar procesorul routerului nu se va mai încălzi, iar viteza VPN-ului va crește semnificativ. În acest timp, toate regulile de rețea stabilite pe router vor rămâne valabile. În cazul unei defecțiuni la Orange Pi, acesta se va dezactiva, iar HAProxy va redirecționa clienții către serverele locale.
Vă mulțumim pentru atenție, sugestiile și corectările sunt binevenite.
Sursa: habr.com
