OpenVPN auf dem OpenWrt-Router beschleunigen. Alternativversion ohne Lötkolben und Hardware-Extremismus

OpenVPN auf dem OpenWrt-Router beschleunigen. Alternativversion ohne Lötkolben und Hardware-Extremismus

Hallo zusammen, ich habe neulich einen älteren Artikel gelesen darüber, wie man OpenVPN auf einem Router beschleunigen kann, indem man die Verschlüsselung auf ein separates Hardwaregerät verlagert, das im Router verbaut wird. Ich habe einen ähnlichen Fall wie der Autor – einen TP-Link WDR3500 mit 128 MB RAM und einem schwachen Prozessor, der mit der Verschlüsselung von Tunnelverbindungen völlig überfordert ist. Allerdings wollte ich auf keinen Fall mit einem Lötkolben am Router arbeiten. Nachfolgend teile ich meine Erfahrungen, wie ich OpenVPN auf eine separate Hardware ausgelagert habe, während der Router für Notfälle als Backup dient. Wie man OpenVPN auf einem Router beschleunigt, indem man die Verschlüsselung auf eine separate Hardware verlagert, die innerhalb des Routers fest verlötet ist. Ich habe einen ähnlichen Fall wie der Autor — einen TP-Link WDR3500 mit 128 Megabyte RAM und einem schwachen Prozessor, der mit der Verschlüsselung der Tunnel völlig überfordert ist. Allerdings wollte ich keinesfalls mit einem Lötkolben ins Routerinnere eingreifen. Im Folgenden teile ich meine Erfahrungen, OpenVPN auf eine separate Hardware auszulagern, mit einer Reservierung auf dem Router für den Notfall.

Ziel

Ich habe einen TP-Link WDR3500 Router und ein Orange Pi Zero H2. Wir möchten, dass die Verschlüsselung der Tunnelverbindungen im Normalbetrieb vom Orange Pi übernommen wird, und falls etwas mit ihm passiert, die Verarbeitung VPN wieder auf den Router zurückkehrt. Alle Firewall-Einstellungen auf dem Router sollten wie gewohnt funktionieren. Insgesamt sollte die Hinzufügung der zusätzlichen Hardware für alle transparent und unauffällig sein. OpenVPN läuft über TCP, der TAP-Adapter im Bridge-Modus (server-bridge).

Lösung

Anstelle einer USB-Verbindung habe ich beschlossen, einen Port des Routers zu nutzen und über ihn alle Subnetze, in denen sich der VPN-Bridge befindet, an das Orange Pi anzuschließen. So wird das Gerät physisch in den gleichen Netzwerken sein wie die VPN-Server im Router. Danach richten wir identische Server auf dem Orange Pi ein und konfigurieren im Router einen Proxy, der alle eingehenden Verbindungen an den externen Server weiterleitet. Falls das Orange Pi nicht erreichbar ist, wird auf den internen Fallback-Server umgeleitet. Ich habe HAProxy verwendet.

So ergibt sich:

  1. Ein Kunde kommt
  2. Wenn der externe Server nicht verfügbar ist, erfolgt die Verbindung wie zuvor zum internen Server.
  3. Wenn er verfügbar ist, übernimmt das Orange Pi den Kunden.
  4. Der VPN auf dem Orange Pi entschlüsselt die Pakete und lässt sie zurück in den Router.
  5. Der Router leitet sie irgendwohin.

Beispiel einer Implementierung

Angenommen, wir haben im Router zwei Netzwerke - main(1) und guest(2), für jedes davon gibt es einen OpenVPN-Server für externe Verbindungen.

Netzwerkkonfiguration

Wir müssen beide Netzwerke über einen Port leiten, daher erstellen wir 2 VLANs.

Im Abschnitt Network/Switch des Routers erstellen wir die VLANs (z.B. 1 und 2) und aktivieren sie im Tagged-Modus an dem entsprechenden Port. Die neu erstellten eth0.1 und eth0.2 fügen wir den entsprechenden Netzwerken hinzu (z.B. ins Bridge).

Wir erstellen zwei VLAN-Schnittstellen auf dem Orange Pi (ich verwende Archlinux ARM + netctl):

/etc/netctl/vlan-main

Description='Haupt-VLAN auf eth0'
Interface=vlan-main
Connection=vlan
BindsToInterfaces=eth0
VLANID=1
IP=no

/etc/netctl/vlan-guest

Description='Gast-VLAN auf eth0'
Interface=vlan-guest
Connection=vlan
BindsToInterfaces=eth0
VLANID=2
IP=no

Und wir erstellen sofort zwei Bridges dafür:

/etc/netctl/br-main

Description="Haupt-Bridgeverbindung"
Interface=br-main
Connection=bridge
BindsToInterfaces=(vlan-main)
IP=dhcp

/etc/netctl/br-guest

Description="Gast-Bridgeverbindung"
Interface=br-guest
Connection=bridge
BindsToInterfaces=(vlan-guest)
IP=dhcp

Wir aktivieren den Autostart für alle 4 Profile (netctl enable). Jetzt wird der Orange Pi nach einem Neustart in den beiden erforderlichen Netzwerken hängen. Die IP-Adressen der Schnittstellen auf dem Orange Pi konfigurieren wir in den Static Leases auf dem Router.

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

Im nächsten Schritt kopieren wir die Einstellungen vom Router für OpenVPN und die Schlüssel. Die Einstellungen können normalerweise in /tmp/etc/openvpn*.conf

Standardmäßig hält OpenVPN, das im TAP-Modus und im Server-Bridge-Modus läuft, sein Interface inaktiv. Damit alles funktioniert, muss ein Skript hinzugefügt werden, das beim Aktivieren der Verbindung ausgeführt wird.

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

Sobald die Verbindung hergestellt ist, wird das vpn-main-Interface zur br-main hinzugefügt. Für das Gästennetz erfolgt dies analog, wobei die Namen der Schnittstellen und die Adressen im server-bridge berücksichtigt werden.

Anfragen von außen routen und proxifizieren

In diesem Schritt kann der Orange Pi bereits Verbindungen akzeptieren und Kunden in die gewünschten Netzwerke einlassen. Nun fehlt nur noch die Konfiguration des Proxys für eingehende Verbindungen am Router.

Die VPN-Server des Routers auf andere Ports verschieben, HAProxy auf dem Router installieren und konfigurieren:

/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

Genießen

Wenn alles nach Plan läuft, wechseln die Kunden zu Orange Pi, der Router-Prozessor überhitzt nicht mehr und die VPN-Geschwindigkeit wird spürbar steigen. Dabei bleiben alle Netzwerkregeln, die auf dem Router festgelegt sind, weiterhin gültig. Sollte es zu einem Ausfall auf Orange Pi kommen, wird er ausfallen und HAProxy leitet die Kunden auf die lokalen Server um.

Vielen Dank für Ihre Aufmerksamkeit. Anregungen und Korrekturen sind willkommen.

Quelle: habr.com

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster