Accelerarea OpenVPN pe un router Openwrt. Versiune alternativă fără fier de lipit și extremism hardware

Accelerarea OpenVPN pe un router Openwrt. Versiune alternativă fără fier de lipit și extremism hardware

Salutare tuturor, am citit recent articol vechi despre cum puteți accelera OpenVPN pe un router prin transferul de criptare la o piesă hardware separată, care este lipită în interiorul routerului. Am un caz similar cu autorul - TP-Link WDR3500 cu 128 de megaocteți RAM și un procesor slab, care nu face față deloc criptării tunelului. Cu toate acestea, categoric nu am vrut să urc în router cu un fier de lipit. Sub tăietură, experiența mea de a muta OpenVPN într-o piesă hardware separată cu o copie de rezervă pe router în cazul unui accident.

Sarcină

Există un router TP-Link WDR3500 și Orange Pi Zero H2. Dorim ca Orange Pi să cripteze tunelurile în modul normal, iar dacă se întâmplă ceva cu el, procesarea VPN va reveni înapoi la router. Toate setările firewall-ului de pe router ar trebui să funcționeze ca înainte. Și, în general, în general, adăugarea unei piese suplimentare de fier ar trebui să fie transparentă și imperceptibilă pentru toată lumea. OpenVPN funcționează prin TCP, adaptor TAP în modul bridge (server-bridge).

decizie

În loc să mă conectez prin USB, am decis să cheltuiesc un port al routerului și să conectez toate subrețelele care au un pod VPN la Orange Pi. Se pare că bucata de fier va atârna fizic în aceleași rețele ca și serverul VPN de pe router. După aceea, ridicăm exact aceleași servere pe Orange Pi, iar pe router am configurat un fel de proxy, astfel încât acesta să trimită toate conexiunile de intrare către un server extern, iar dacă Orange Pi este mort sau indisponibil, atunci la o rezervă internă. Server. Am luat HAProxy.

Se dovedește astfel:

  1. Clientul sosește
  2. Dacă serverul extern nu este disponibil - ca și înainte, conexiunea se duce la serverul intern
  3. Dacă este disponibil, clientul este acceptat de Orange Pi
  4. VPN pe Orange Pi decriptează pachetele și le scuipă înapoi către router
  5. Routerul le direcționează undeva

Exemplu de implementare

Deci, să presupunem că avem două rețele pe router - main(1) și guest(2), pentru fiecare dintre ele există un server OpenVPN pentru conectarea din exterior.

Configurarea Rețelei

Trebuie să trecem ambele rețele printr-un singur port, așa că creăm 2 VLAN-uri.

Pe router, în secțiunea Network / Switch, creați VLAN-uri (de exemplu, 1 și 2) și activați-le în modul etichetat pe portul dorit, adăugați eth0.1 și eth0.2 nou create la rețelele corespunzătoare (pentru de exemplu, adăugați la bridge).

Pe Orange Pi creăm două interfețe VLAN (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 creați imediat două punți pentru ei:

/etc/netctl/br-main

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

/etc/netctl/br-guest

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

Activați pornirea automată pentru toate cele 4 profiluri (activare netctl). Acum, după repornire, Orange Pi se va bloca în cele două rețele necesare. Adresele de interfață de pe Orange Pi sunt configurate în Închirieri statice pe router.

IP addr show

4: vlan-main@eth0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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

Configurare VPN

Apoi, copiați setările pentru OpenVPN și cheile de pe router. De obicei, setările pot fi preluate din /tmp/etc/openvpn*.conf

În mod implicit, openvpn rulează în modul TAP și server-bridge își păstrează interfața inactivă. Pentru ca acesta să funcționeze, trebuie să adăugați un script care rulează atunci când conexiunea este activată.

/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, de îndată ce apare o conexiune, interfața vpn-main va fi adăugată la br-main. Pentru grila oaspeților, este similar cu numele și adresa interfeței din server-bridge.

Dirijarea cererilor externe și proxy

La acest pas, Orange Pi este deja capabil să accepte conexiuni și să permită clienților să intre în rețelele dorite. Rămâne să configurați proxy-ul conexiunilor de intrare pe router.

Transferăm servere VPN de router în alte porturi, instalăm HAProxy pe router și configuram:

/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

bucură-te

Dacă totul a decurs conform planului, clienții vor merge la Orange Pi și procesorul routerului nu se va mai încălzi, iar viteza VPN va crește semnificativ. În același timp, toate regulile de rețea care sunt înregistrate pe router vor rămâne relevante. În cazul unui accident pe Orange Pi, acesta va cădea și HAProxy va împacheta clienții pe serverele locale.

Vă mulțumim pentru atenție, sugestiile și corecturile sunt binevenite.

Sursa: www.habr.com

Adauga un comentariu