Fremskynde OpenVPN på en Openwrt-ruter. Alternativ versjon uten loddebolt og maskinvareekstremisme

Fremskynde OpenVPN på en Openwrt-ruter. Alternativ versjon uten loddebolt og maskinvareekstremisme

Hei alle sammen, jeg leste nylig gammel artikkel om hvordan du kan få fart på OpenVPN på en ruter ved å overføre kryptering til en egen maskinvare, som er loddet inne i selve ruteren. Jeg har en lignende sak som forfatteren - TP-Link WDR3500 med 128 megabyte RAM og en dårlig prosessor som er helt ute av stand til å takle tunnelkryptering. Jeg ville imidlertid absolutt ikke komme inn i ruteren med loddebolt. Nedenfor er min erfaring med å flytte OpenVPN til en egen maskinvare med backup på ruteren i tilfelle en ulykke.

Oppgave

Det er en TP-Link WDR3500-ruter og en Orange Pi Zero H2. Vi vil at Orange Pi skal kryptere tunnelene som vanlig, og hvis noe skjer med den, vil VPN-behandlingen gå tilbake til ruteren. Alle brannmurinnstillinger på ruteren skal fungere som før. Og generelt bør det å legge til ekstra maskinvare være gjennomsiktig og umerkelig for alle. OpenVPN fungerer over TCP, TAP-adapteren er i bromodus (serverbro).

beslutning

I stedet for å koble til via USB, bestemte jeg meg for å bruke én port på ruteren og koble alle subnett som har en VPN-bro til Orange Pi. Det viser seg at maskinvaren fysisk vil henge i de samme nettverkene som VPN-serveren på ruteren. Etter det installerer vi nøyaktig de samme serverne på Orange Pi, og på ruteren setter vi opp en slags proxy slik at den sender alle innkommende tilkoblinger til den eksterne serveren, og hvis Orange Pi er død eller utilgjengelig, deretter til intern reserveserver. Jeg tok HAProxy.

Det viser seg slik:

  1. En klient kommer
  2. Hvis den eksterne serveren ikke er tilgjengelig, som før, går tilkoblingen til den interne serveren
  3. Hvis tilgjengelig, aksepteres klienten av Orange Pi
  4. VPN på Orange Pi dekrypterer pakker og spytter dem tilbake i ruteren
  5. Ruteren ruter dem et sted

Implementeringseksempel

Så la oss si at vi har to nettverk på ruteren - hoved(1) og gjest(2), for hver av dem er det en OpenVPN-server for ekstern tilkobling.

Nettverkskonfigurasjon

Vi må rute begge nettverkene gjennom én port, så vi lager 2 VLAN.

På ruteren, i Nettverk/Switch-delen, opprett VLAN-er (for eksempel 1 og 2) og aktiver dem i tagget modus på ønsket port, legg til de nyopprettede eth0.1 og eth0.2 til de tilsvarende nettverkene (for eksempel, legg dem til brigde).

På Orange Pi lager vi to VLAN-grensesnitt (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-gjest

Description='Guest VLAN on eth0'
Interface=vlan-guest
Connection=vlan
BindsToInterfaces=eth0
VLANID=2
IP=no

Og vi lager umiddelbart to broer for dem:

/etc/netctl/br-main

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

/etc/netctl/br-gjest

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

Aktiver autostart for alle 4 profilene (netctl aktiver). Nå etter en omstart vil Orange Pi henge på de to nødvendige nettverkene. Vi konfigurerer grensesnittadressene på Orange Pi i Static Leases på ruteren.

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

VPN-oppsett

Deretter kopierer vi innstillingene for OpenVPN og nøkler fra ruteren. Innstillinger kan vanligvis finnes i /tmp/etc/openvpn*.conf

Som standard holder openvpn som kjører i TAP-modus og server-bridge grensesnittet inaktivt. For at alt skal fungere, må du legge til et skript som kjører når tilkoblingen er aktivert.

/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 et resultat, så snart tilkoblingen oppstår, vil vpn-main-grensesnittet bli lagt til br-main. For gjestenettet - på samme måte opp til grensesnittnavnet og adressen i server-bridge.

Ruting forespørsler eksternt og proxying

På dette trinnet er Orange Pi allerede i stand til å godta tilkoblinger og koble klienter til de nødvendige nettverkene. Alt som gjenstår er å konfigurere proxying av innkommende tilkoblinger på ruteren.

Vi overfører ruterens VPN-servere til andre porter, installerer HAProxy på ruteren 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

Nyt

Hvis alt gikk etter planen, vil klientene bytte til Orange Pi og ruterens prosessor vil ikke lenger varmes opp, og VPN-hastigheten vil øke betydelig. Samtidig vil alle nettverksregler som er registrert på ruteren forbli relevante. I tilfelle en ulykke på Orange Pi vil den falle av og HAProxy vil overføre klienter til lokale servere.

Takk for oppmerksomheten, forslag og rettelser er velkomne.

Kilde: www.habr.com

Legg til en kommentar