Kiirendame OpenVPN-i Openwrt ruuteris. Alternatiivne versioon ilma jootmiseta ja riistvara ekstremismita

Kiirendame OpenVPN-i Openwrt ruuteris. Alternatiivne versioon ilma jootmiseta ja riistvara ekstremismita

Tere kõigile, lugesin hiljuti vana artiklit sellest, kuidas saab OpenVPN-i ruuteris kiiremaks teha, viies krüpteerimise eraldi seadmele, mis joodetakse otse ruuteri sisse. Minu olukord on autoriga sarnane — TP-Link WDR3500 128 megabaidi muutmäluga ja tagasihoidliku protsessoriga, mis tunnelite krüpteerimisega üldse toime ei tule. Samas ei olnud mul vähimatki soovi ruuteri kallale jootekolviga minna. Allpool on minu kogemus OpenVPN-i eraldi seadmele viimisest koos ruuteripoolse varulahendusega juhuks, kui midagi peaks juhtuma.

Ülesanne

On olemas TP-Link WDR3500 ruuter ja Orange Pi Zero H2. Soovime, et tavarežiimis tegeleks tunnelite krüpteerimisega Orange Pi, kuid kui sellega midagi juhtub, siis töötlus VPN läheb tagasi ruuterisse. Kõik ruuteri tulemüüri seaded peavad töötama nagu varem. Üldiselt peaks lisaseadme lisamine olema kõigi jaoks täiesti läbipaistev ja märkamatu. OpenVPN töötab üle TCP, TAP-adapter sillarežiimis (server-bridge).

Lahendus

USB kaudu ühendamise asemel otsustasin kasutada ühte ruuteri porti ja tuua selle kaudu Orange Pi-sse kõik alamvõrgud, kus on VPN-i sild. Nii jääb seade füüsiliselt samadesse võrkudesse, kus asuvad ruuteri VPN-serverid. Seejärel tõstame Orange Pi peal üles täpselt samasugused serverid ning seadistame ruuteris mingi proxy, mis suunab kõik sissetulevad ühendused välisele serverile, aga kui Orange Pi on maas või kättesaamatu, siis sisemisele fallback-serverile. Mina kasutasin HAProxy't.

Tuleb välja nii:

  1. Klient loob ühenduse
  2. Kui väline server pole saadaval, läheb ühendus nagu varem sisemisele serverile
  3. Kui server on saadaval, võtab kliendi vastu Orange Pi
  4. Orange Pi peal olev VPN dekrüpteerib paketid ja saadab need tagasi ruuterisse
  5. Ruuter marsruudib need edasi sihtkohta

Rakenduse näide

Niisiis, oletame, et ruuteris on kaks võrku — main(1) ja guest(2) ning kummagi jaoks on olemas OpenVPN-server väljast ühendamiseks.

Võrgu konfigureerimine

Meil on vaja mõlemad võrgud läbi ühe pordi edasi anda, seega loome 2 VLAN-i.

Ruuteris loome jaotises Network/Switch VLAN-id (näiteks 1 ja 2) ja lülitame need vajalikul pordil tagged-režiimi, seejärel lisame vastloodud eth0.1 ja eth0.2 vastavatesse võrkudesse (näiteks lisame bridge'i).

Orange Pi peal loome kaks VLAN-liidest (mul on 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

Ja loome neile kohe ka kaks bridge'i:

/etc/netctl/br-main

Description="Peamise silla ühendus"
Interface=br-main
Connection=bridge
BindsToInterfaces=(vlan-main)
IP=dhcp

/etc/netctl/br-guest

Description="Külalissilla ühendus"
Interface=br-guest
Connection=bridge
BindsToInterfaces=(vlan-guest)
IP=dhcp

Lülitame automaatse käivituse sisse kõigi 4 profiili jaoks (netctl enable). Nüüd on Orange Pi pärast taaskäivitust ühendatud kahe vajaliku võrguga. Orange Pi liideste aadressid seadistame ruuteris jaotises Static Leases.

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

VPN-i seadistamine

Edasi kopeerime ruuterist OpenVPN-i seaded ja võtmed. Seaded saab tavaliselt võtta siit /tmp/etc/openvpn*.conf

Vaikimisi hoiab TAP-režiimis ja server-bridge'iga käivitatud openvpn oma liidest mitteaktiivsena. Et kõik tööle hakkaks, tuleb lisada skript, mis käivitatakse ühenduse aktiveerimisel.

/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}

Selle tulemusena lisatakse kohe pärast ühenduse loomist liides vpn-main sillale br-main. Guest-võrgu puhul on kõik analoogne, erinevad ainult liidese nimi ja server-bridge'i aadress.

Väliste päringute marsruutimine ja puhverserverdamine

Selles etapis oskab Orange Pi juba ühendusi vastu võtta ja kliendid õigesse võrku suunata. Jääb üle seadistada ruuteris sissetulevate ühenduste puhverserverdamine.

Tõstame ruuteri VPN-serverid teistele portidele, paigaldame ruuterisse HAProxy ja seadistame:

/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

Nautigem tulemust

Kui kõik läks plaani järgi, suunatakse kliendid Orange Pi peale, ruuteri protsessor ei kuumene enam üle ning VPN-i kiirus kasvab märgatavalt. Samal ajal jäävad kehtima kõik ruuteris seadistatud võrgureeglid. Kui Orange Pi-ga tekib rike, langeb see rivist välja ja HAProxy suunab kliendid kohalikele serveritele.

Täname tähelepanu eest, ettepanekud ja parandused on teretulnud.

Allikas: habr.com

Osta usaldusväärne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid 🔥 Osta usaldusväärne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid - ProHoster