Accelerăm OpenVPN pe routerul Openwrt. Versiune alternativă fără lipit și excese hardware

Accelerăm OpenVPN pe routerul Openwrt. Versiune alternativă fără lipit și excese hardware

Salut tuturor, recent am citit un articol mai vechi 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:

  1. Clientul sosește
  2. Dacă serverul extern nu este disponibil — la fel ca înainte, conexiunea merge către serverul intern
  3. Dacă este disponibil — clientul este preluat de Orange Pi
  4. VPN-ul de pe Orange Pi decriptează pachetele și le trimite înapoi la router
  5. 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

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster