Fremskyndelse af OpenVPN på en Openwrt-router. Alternativ version uden loddekolbe og hardwareekstremisme

Fremskyndelse af OpenVPN på en Openwrt-router. Alternativ version uden loddekolbe og hardwareekstremisme

Hej alle sammen, jeg har for nylig læst gammel artikel om, hvordan du kan fremskynde OpenVPN på en router ved at overføre kryptering til et separat stykke hardware, som er loddet inde i selve routeren. Jeg har en lignende sag som forfatteren - TP-Link WDR3500 med 128 megabyte RAM og en dårlig processor, der er fuldstændig ude af stand til at klare tunnelkryptering. Jeg havde dog absolut ikke lyst til at komme ind i routeren med en loddekolbe. Nedenfor er min erfaring med at flytte OpenVPN til et separat stykke hardware med backup på routeren i tilfælde af en ulykke.

Opgave

Der er en TP-Link WDR3500 router og en Orange Pi Zero H2. Vi vil have Orange Pi til at kryptere tunnelerne som normalt, og hvis der sker noget med den, vil VPN-behandlingen vende tilbage til routeren. Alle firewall-indstillinger på routeren skulle fungere som før. Og generelt bør tilføjelse af yderligere hardware være gennemsigtig og umærkelig for alle. OpenVPN fungerer over TCP, TAP-adapteren er i bridge-tilstand (server-bridge).

beslutning

I stedet for at oprette forbindelse via USB, besluttede jeg at bruge én port på routeren og forbinde alle undernet, der har en VPN-bro, til Orange Pi. Det viser sig, at hardwaren fysisk vil hænge i de samme netværk som VPN-serveren på routeren. Derefter installerer vi nøjagtig de samme servere på Orange Pi, og på routeren sætter vi en slags proxy op, så den sender alle indgående forbindelser til den eksterne server, og hvis Orange Pi er død eller utilgængelig, så til intern reserveserver. Jeg tog HAProxy.

Det bliver sådan her:

  1. En klient ankommer
  2. Hvis den eksterne server ikke er tilgængelig, som før, går forbindelsen til den interne server
  3. Hvis det er tilgængeligt, accepteres klienten af ​​Orange Pi
  4. VPN på Orange Pi dekrypterer pakker og spytter dem tilbage i routeren
  5. Routeren dirigerer dem et sted hen

Implementeringseksempel

Så lad os sige, at vi har to netværk på routeren - main(1) og guest(2), for hver af dem er der en OpenVPN-server til ekstern forbindelse.

Netværkskonfiguration

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

På routeren, i Netværk/Switch-sektionen, opret VLAN'er (for eksempel 1 og 2) og aktiver dem i tagget tilstand på den ønskede port, tilføj de nyoprettede eth0.1 og eth0.2 til de tilsvarende netværk (f.eks. tilføje dem til brigde).

På Orange Pi opretter vi to VLAN-grænseflader (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-gæst

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

Og vi skaber straks to broer til dem:

/etc/netctl/br-main

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

/etc/netctl/br-gæst

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

Aktiver autostart for alle 4 profiler (netctl enable). Nu efter en genstart vil Orange Pi hænge på de to nødvendige netværk. Vi konfigurerer grænsefladeadresserne på Orange Pi i Static Leases på routeren.

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

Opsætning af en VPN

Dernæst kopierer vi indstillingerne for OpenVPN og nøgler fra routeren. Indstillinger kan normalt findes i /tmp/etc/openvpn*.conf

Som standard holder openvpn, der kører i TAP-tilstand og server-bridge, sin grænseflade inaktiv. For at alt skal fungere, skal du tilføje et script, der kører, når forbindelsen er aktiveret.

/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 forbindelsen opstår, vil vpn-main-grænsefladen blive tilføjet til br-main. For gæstegitteret - tilsvarende op til interfacenavnet og adressen i server-bridge.

Routing forespørgsler eksternt og proxy

På dette trin er Orange Pi allerede i stand til at acceptere forbindelser og forbinde klienter til de nødvendige netværk. Tilbage er kun at konfigurere proxy for indgående forbindelser på routeren.

Vi overfører 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

god fornøjelse

Hvis alt gik efter planen, vil klienterne skifte til Orange Pi, og routerens processor vil ikke længere varme op, og VPN-hastigheden vil stige betydeligt. Samtidig forbliver alle netværksregler, der er registreret på routeren, relevante. I tilfælde af en ulykke på Orange Pi, vil den falde af, og HAProxy overfører klienter til lokale servere.

Tak for din opmærksomhed, forslag og rettelser er velkomne.

Kilde: www.habr.com

Tilføj en kommentar