OpenVPN versnellen op een Openwrt-router. Alternatieve versie zonder soldeerbout en hardware-extremisme

OpenVPN versnellen op een Openwrt-router. Alternatieve versie zonder soldeerbout en hardware-extremisme

Hallo allemaal, heb ik onlangs gelezen oud artikel over hoe je OpenVPN op een router kunt versnellen door encryptie over te dragen naar een apart stuk hardware, dat in de router zelf is gesoldeerd. Ik heb een soortgelijk geval als de auteur: TP-Link WDR3500 met 128 megabytes RAM en een slechte processor die tunnelcodering totaal niet aankan. Ik wilde echter absoluut niet met een soldeerbout in de router komen. Hieronder vindt u mijn ervaring met het verplaatsen van OpenVPN naar een apart stuk hardware met back-up op de router in geval van een ongeluk.

Taak

Er is een TP-Link WDR3500-router en een Orange Pi Zero H2. We willen dat de Orange Pi de tunnels zoals gewoonlijk versleutelt, en als er iets mee gebeurt, keert de VPN-verwerking terug naar de router. Alle firewall-instellingen op de router zouden moeten werken zoals voorheen. En over het algemeen moet het toevoegen van extra hardware transparant en onmerkbaar voor iedereen zijn. OpenVPN werkt via TCP, de TAP-adapter bevindt zich in bridge-modus (server-bridge).

beslissing

In plaats van verbinding te maken via USB, besloot ik één poort van de router te gebruiken en alle subnetten die een VPN-brug hebben met de Orange Pi te verbinden. Het blijkt dat de hardware fysiek in dezelfde netwerken blijft hangen als de VPN-server op de router. Daarna installeren we precies dezelfde servers op de Orange Pi, en op de router zetten we een soort proxy op zodat deze alle inkomende verbindingen naar de externe server stuurt, en als de Orange Pi dood of niet beschikbaar is, dan naar de interne fallback-server. Ik heb HAProxy gebruikt.

Het blijkt als volgt:

  1. Er komt een cliΓ«nt aan
  2. Als de externe server niet beschikbaar is, zoals voorheen, gaat de verbinding naar de interne server
  3. Indien beschikbaar wordt de klant geaccepteerd door Orange Pi
  4. VPN op Orange Pi decodeert pakketten en spuugt ze terug in de router
  5. De router leidt ze ergens heen

Implementatie voorbeeld

Laten we dus zeggen dat we twee netwerken op de router hebben: main(1) en guest(2), voor elk daarvan is er een OpenVPN-server om extern verbinding te maken.

Netwerk configuratie

We moeten beide netwerken via één poort routeren, dus creëren we 2 VLAN's.

Maak op de router, in de sectie Netwerk/Switch, VLAN's aan (bijvoorbeeld 1 en 2) en schakel deze in getagde modus in op de gewenste poort. Voeg de nieuw gemaakte eth0.1 en eth0.2 toe aan de overeenkomstige netwerken (bijvoorbeeld voeg ze toe aan de brug).

Op Orange Pi creΓ«ren we twee VLAN-interfaces (ik heb 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

En we creΓ«ren meteen twee bruggen voor hen:

/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

Schakel autostart in voor alle vier de profielen (netctl enable). Nu zal de Orange Pi na een herstart op de twee vereiste netwerken blijven hangen. We configureren de interface-adressen op de Orange Pi in Static Leases op de 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

Een VPN instellen

Vervolgens kopiΓ«ren we de instellingen voor OpenVPN en sleutels van de router. Instellingen zijn meestal te vinden in /tmp/etc/openvpn*.conf

Standaard houdt openvpn in TAP-modus en server-bridge de interface inactief. Om alles te laten werken, moet je een script toevoegen dat wordt uitgevoerd wanneer de verbinding wordt geactiveerd.

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

Als gevolg hiervan wordt, zodra de verbinding tot stand komt, de vpn-main interface toegevoegd aan br-main. Voor het gastraster - op dezelfde manier, tot aan de interfacenaam en het adres in server-bridge.

Externe routering van verzoeken en proxying

Bij deze stap kan Orange Pi al verbindingen accepteren en clients verbinden met de vereiste netwerken. Het enige dat overblijft is het configureren van proxying van inkomende verbindingen op de router.

We zetten de VPN-servers van de router over naar andere poorten, installeren HAProxy op de router en configureren:

/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

Genieten

Als alles volgens plan verloopt, zullen klanten overstappen op Orange Pi, zal de processor van de router niet meer warm worden en zal de VPN-snelheid aanzienlijk toenemen. Tegelijkertijd blijven alle netwerkregels die op de router zijn geregistreerd relevant. Bij een ongeluk met de Orange Pi zal deze eraf vallen en zal HAProxy clients overbrengen naar lokale servers.

Bedankt voor uw aandacht, suggesties en correcties zijn welkom.

Bron: www.habr.com

Voeg een reactie