Vi accelererer OpenVPN på Openwrt-routeren. Alternativ version uden loddekolbe og hardware-ekstremisme.

Vi accelererer OpenVPN på Openwrt-routeren. Alternativ version uden loddekolbe og hardware-ekstremisme.

Hej alle, jeg læste for nylig en gammel artikel om hvordan man kan accelerere OpenVPN på en router ved at overføre krypteringen til en separat hardwarekomponent, der loddes indeni selve routeren. Jeg har en tilsvarende situation som forfatteren — TP-Link WDR3500 med 128 megabyte RAM og en svag processor, der fuldstændig ikke klarer krypteringen af tunneler. Dog ville jeg overhovedet ikke have lyst til at gå ind i routeren med loddekolben. Under katten er min erfaring med at flytte OpenVPN til en separat hardwareenhed med backup på routeren i tilfælde af en nødsituation.

Regler for godkendelse af merge-requests

Der er en TP-Link WDR3500 router og en Orange Pi Zero H2. Vi ønsker, at Orange Pi håndterer krypteringen af tunnelerne i normal drift, mens hvis der sker noget med den, vil behandlingen VPN vende tilbage til routeren. Alle firewall-indstillinger på routeren skal fungere som før. Generelt set skal tilføjelsen af ekstra hardware være gennemsigtig og usynlig for alle. OpenVPN fungerer over TCP, TAP-adapteren er i brotilstand (server-bro).

Løsning

I stedet for at tilslutte via USB besluttede jeg at bruge en port på routeren og forbinde alle netværk, hvor VPN-broen er, til Orange Pi. Det betyder, at hardwarekomponenten fysisk vil være tilsluttet de samme netværk som VPN-serverne på routeren. Efter dette opsætter vi de samme servere på Orange Pi, og på routeren konfigurerer vi en eller anden proxy, så den sender alle indkommende forbindelser til den eksterne server, og hvis Orange Pi er død eller utilgængelig — så til den interne backupserver. Jeg valgte HAProxy.

Sådan:

  1. Klienten ankommer
  2. Hvis den eksterne server er utilgængelig — ligesom før går forbindelsen til den interne server
  3. Hvis den er tilgængelig — modtager klienten Orange Pi
  4. VPN på Orange Pi dekrypterer pakkerne og sender dem tilbage til routeren
  5. Routeren rutere dem et eller andet sted hen

Eksempel på implementering

Lad os sige, at vi har to netværk på routeren — main(1) og guest(2), for hver har vi en OpenVPN-server til at forbinde udefra.

Netværkskonfiguration

Vi skal videresende begge netværk gennem én port, så vi opretter 2 VLAN’er.

På routeren i Network/Switch-sektionen opretter vi VLAN’er (for eksempel 1 og 2) og aktiverer dem i tagged tilstand på den ønskede port, tilføjer de nyoprettede eth0.1 og eth0.2 til de relevante netværk (for eksempel tilføjer dem til broen).

På Orange Pi opretter vi to VLAN-interface (jeg har 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

Og vi opretter straks to broer for dem:

/etc/netctl/br-main

Beskrivelse="Hovedbro-forbindelse"
Grænseflade=br-main
Forbindelse=bro
BinderTilGrænseflader=(vlan-main)
IP=dhcp

/etc/netctl/br-guest

Beskrivelse="Gæstebro-forbindelse"
Grænseflade=br-guest
Forbindelse=bro
BinderTilGrænseflader=(vlan-guest)
IP=dhcp

Aktiverer autostart for alle 4 profiler (netctl enable). Nu vil Orange Pi være tilsluttet de to ønskede netværk efter genstart. Adresserne til grænsefladerne på Orange Pi konfigureres i Static Leases på routeren.

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-konfiguration

Dernæst kopierer vi routerens indstillinger til OpenVPN og nøgler. Indstillingerne kan normalt findes i /tmp/etc/openvpn*.conf

Som standard holder openvpn, der kører i TAP-tilstand og server-bro, sin grænseflade inaktiv. For at alt fungerer, skal vi tilføje et script, der køres ved aktivering af forbindelsen.

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

Som følge heraf vil grænsefladen vpn-main blive tilføjet til br-main, så snart forbindelsen er etableret. For gæstenetværket er det analogt med nøjagtig det samme navn på grænsefladen og adressen i server-bro.

Ruting af forespørgsler udefra og proxying

På dette trin kan Orange Pi allerede modtage forbindelser og tillade klienter at få adgang til de ønskede netværk. Det sidste skridt er at konfigurere proxying af indgående forbindelser på routeren.

Vi flytter routerens VPN-servere til andre porte, installerer HAProxy på routeren og konfigurerer:

/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

Vi nyder

Hvis alt gik som planlagt, vil kunderne overgå til Orange Pi, og routerens processor vil ikke længere overophede, mens hastigheden på VPN'en vil stige markant. Samtidig forbliver alle netværksregler, der er angivet på routeren, gældende. I tilfælde af en fejl på Orange Pi vil det falde ud, og HAProxy vil dirigere kunderne til de lokale servere.

Tak for opmærksomheden, ønsker og rettelser er velkomne.

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster