Wir beschleunigen OpenVPN Auf einem OpenWRT-Router. Eine alternative Version ohne Lötkolben und Hardware-Extremismus.

Wir beschleunigen OpenVPN Auf einem OpenWRT-Router. Eine alternative Version ohne Lötkolben und Hardware-Extremismus.

Hallo zusammen, ich habe kürzlich gelesen alter Artikel darüber, wie Sie beschleunigen können OpenVPN Auf dem Router habe ich die Verschlüsselung auf eine separate, im Router selbst verlötete Hardwarekomponente ausgelagert. Ich befinde mich in einer ähnlichen Situation wie der Autor – ein TP-Link WDR3500 mit 128 MB RAM und einem schwachen Prozessor, der die Tunnelverschlüsselung überhaupt nicht bewältigen kann. Ich wollte aber auf keinen Fall mit einem Lötkolben in den Router greifen. Meine Erfahrungen folgen weiter unten. OpenVPN auf ein separates Hardwaregerät mit Backup auf dem Router für den Notfall.

Aufgabe

Wir haben einen TP-Link WDR3500 Router und einen Orange Pi Zero H2. Im Normalmodus soll der Orange Pi die Tunnelverschlüsselung übernehmen, aber falls dem Orange Pi etwas zustößt, soll die Verarbeitung vom Pi übernommen werden. VPN Es wird wieder an den Router angeschlossen. Alle Firewall-Einstellungen des Routers sollten wie zuvor funktionieren. Insgesamt sollte die Installation der zusätzlichen Hardware für alle Beteiligten transparent und unmerklich erfolgen. OpenVPN Funktioniert über TCP, TAP-Adapter im Bridge-Modus (Server-Bridge).

Lösung

Anstatt eine Verbindung über USB herzustellen, habe ich mich entschieden, einen Port des Routers zu verwenden und alle Subnetze, die über eine VPN-Brücke verfügen, mit dem Orange Pi zu verbinden. Es stellt sich heraus, dass die Hardware physisch in denselben Netzwerken hängt wie der VPN-Server auf dem Router. Danach installieren wir genau die gleichen Server auf dem Orange Pi und richten auf dem Router eine Art Proxy ein, der alle eingehenden Verbindungen an den externen Server sendet, und wenn der Orange Pi tot oder nicht verfügbar ist, dann an den interner Fallback-Server. Ich habe HAProxy genommen.

Es stellt sich so heraus:

  1. Ein Kunde kommt
  2. Ist der externe Server wie bisher nicht erreichbar, erfolgt die Verbindung zum internen Server
  3. Sofern verfügbar, wird der Client von Orange Pi akzeptiert
  4. VPN auf Orange Pi entschlüsselt Pakete und spuckt sie zurück in den Router
  5. Der Router leitet sie irgendwohin

Implementierungsbeispiel

Nehmen wir also an, wir haben zwei Netzwerke auf dem Router – Hauptnetzwerk (1) und Gastnetzwerk (2) – für jedes von ihnen gibt es OpenVPN Server für Verbindungen von außerhalb.

Netzwerkkonfiguration

Wir müssen beide Netzwerke über einen Port routen, also erstellen wir zwei VLANs.

Erstellen Sie auf dem Router im Abschnitt „Netzwerk/Switch“ VLANs (z. B. 1 und 2) und aktivieren Sie sie im getaggten Modus am gewünschten Port. Fügen Sie die neu erstellten eth0.1 und eth0.2 zu den entsprechenden Netzwerken hinzu (z. B. fügen Sie sie zur Brücke hinzu).

Auf Orange Pi erstellen wir zwei VLAN-Schnittstellen (ich habe 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

Und wir schaffen gleich zwei Brücken für sie:

/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

Aktivieren Sie den Autostart für alle 4 Profile (netctl enable). Nach einem Neustart bleibt der Orange Pi nun in den beiden erforderlichen Netzwerken hängen. Wir konfigurieren die Schnittstellenadressen auf dem Orange Pi in Static Leases auf dem Router.

IP-Adresse anzeigen

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

Einrichten eines VPN

Als Nächstes kopieren wir die Einstellungen vom Router für OpenVPN und Schlüssel. Die Einstellungen können in der Regel übernommen werden von /tmp/etc/openvpn*.conf

Standardmäßig lässt OpenVPN im TAP-Modus und Server-Bridge seine Schnittstelle inaktiv. Damit alles funktioniert, müssen Sie ein Skript hinzufügen, das ausgeführt wird, wenn die Verbindung aktiviert 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 daher die VPN-Main-Schnittstelle zu br-main hinzugefügt. Für das Gast-Grid gilt das Gleiche, bis hin zum Schnittstellennamen und der Adresse in Server-Bridge.

Anfragen extern weiterleiten und per Proxy weiterleiten

Zu diesem Zeitpunkt ist Orange Pi bereits in der Lage, Verbindungen anzunehmen und Clients mit den erforderlichen Netzwerken zu verbinden. Es bleibt nur noch, das Proxying eingehender Verbindungen auf dem Router zu konfigurieren.

Wir übertragen die VPN-Server des Routers auf andere Ports, installieren HAProxy auf dem Router 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 auf Orange Pi, der Prozessor des Routers erwärmt sich nicht mehr und die VPN-Geschwindigkeit erhöht sich deutlich. Gleichzeitig bleiben alle Netzwerkregeln, die auf dem Router registriert sind, relevant. Bei einem Unfall auf dem Orange Pi fällt dieser ab und HAProxy überträgt Clients auf lokale Server.

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

Source: habr.com

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz und VPS-VDS-Servern 🔥 Kaufen Sie zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server | ProHoster