Påskynda OpenVPN på en Openwrt-router. Alternativ version utan lödkolv och hårdvaruextremism

Påskynda OpenVPN på en Openwrt-router. Alternativ version utan lödkolv och hårdvaruextremism

Hej alla, jag läste nyligen gammal artikel om hur du kan snabba upp OpenVPN på en router genom att överföra kryptering till en separat hårdvara, som löds in i själva routern. Jag har ett liknande fall som författaren - TP-Link WDR3500 med 128 megabyte RAM och en dålig processor som helt inte klarar av tunnelkryptering. Däremot ville jag absolut inte komma in i routern med en lödkolv. Nedan är min erfarenhet av att flytta OpenVPN till en separat hårdvara med backup på routern i händelse av en olycka.

Uppgift

Det finns en TP-Link WDR3500-router och en Orange Pi Zero H2. Vi vill att Orange Pi ska kryptera tunnlarna som vanligt, och om något händer med den kommer VPN-bearbetningen tillbaka till routern. Alla brandväggsinställningar på routern ska fungera som tidigare. Och i allmänhet bör det vara transparent och omärkligt för alla att lägga till ytterligare hårdvara. OpenVPN fungerar över TCP, TAP-adaptern är i bryggläge (serverbrygga).

beslutet

Istället för att ansluta via USB bestämde jag mig för att använda en port på routern och ansluta alla subnät som har en VPN-brygga till Orange Pi. Det visar sig att hårdvaran fysiskt kommer att hänga i samma nätverk som VPN-servern på routern. Efter det installerar vi exakt samma servrar på Orange Pi, och på routern ställer vi in ​​någon sorts proxy så att den skickar alla inkommande anslutningar till den externa servern, och om Orange Pi är död eller otillgänglig, sedan till intern reservserver. Jag tog HAProxy.

Det blir så här:

  1. En kund kommer
  2. Om den externa servern inte är tillgänglig, som tidigare, går anslutningen till den interna servern
  3. Om tillgängligt accepteras klienten av Orange Pi
  4. VPN på Orange Pi dekrypterar paket och spottar tillbaka dem i routern
  5. Routern dirigerar dem någonstans

Implementeringsexempel

Så låt oss säga att vi har två nätverk på routern - main(1) och guest(2), för var och en av dem finns det en OpenVPN-server för extern anslutning.

Nätverkskonfiguration

Vi måste dirigera båda nätverken genom en port, så vi skapar 2 VLAN.

På routern, i avsnittet Nätverk/Switch, skapa VLAN (till exempel 1 och 2) och aktivera dem i taggat läge på önskad port, lägg till de nyskapade eth0.1 och eth0.2 till motsvarande nätverk (till exempel, lägg till dem i brigde).

På Orange Pi skapar vi två VLAN-gränssnitt (jag 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

Och vi skapar omedelbart två broar för 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

Aktivera autostart för alla fyra profiler (netctl enable). Nu efter en omstart kommer Orange Pi att hänga på de två nödvändiga nätverken. Vi konfigurerar gränssnittsadresserna på Orange Pi i Static Leases på routern.

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

Konfigurera ett VPN

Därefter kopierar vi inställningarna för OpenVPN och nycklar från routern. Inställningar kan vanligtvis hittas i /tmp/etc/openvpn*.conf

Som standard håller openvpn som körs i TAP-läge och server-bridge sitt gränssnitt inaktivt. För att allt ska fungera måste du lägga till ett skript som körs när anslutningen är aktiverad.

/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 ett resultat, så snart anslutningen sker, kommer vpn-main-gränssnittet att läggas till br-main. För gästnätet - på samma sätt, upp till gränssnittets namn och adress i server-bridge.

Dirigera förfrågningar externt och proxy

I det här steget kan Orange Pi redan acceptera anslutningar och ansluta klienter till de nätverk som krävs. Allt som återstår är att konfigurera proxy för inkommande anslutningar på routern.

Vi överför routerns VPN-servrar till andra portar, installerar HAProxy på routern och konfigurerar:

/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

Njut av

Om allt gick enligt planerna kommer klienterna att byta till Orange Pi och routerns processor kommer inte längre att värmas upp, och VPN-hastigheten kommer att öka avsevärt. Samtidigt kommer alla nätverksregler som är registrerade på routern att förbli relevanta. I händelse av en olycka på Orange Pi kommer den att falla av och HAProxy kommer att överföra klienter till lokala servrar.

Tack för din uppmärksamhet, förslag och korrigeringar är välkomna.

Källa: will.com

Lägg en kommentar