Wir beschleunigen OpenVPN auf dem Openwrt-Router. Alternative Version ohne Lötkolben und harten Extremismus



Hallo allerseits, ich habe kürzlich einen langjährigen Artikel darüber gelesen, wie man OpenVPN auf einem Router beschleunigt und die Verschlüsselung auf eine separate Hardware überträgt, die im Router selbst verlötet ist. Ich habe einen ähnlichen Fall mit dem Autor: TP-Link WDR3500 mit 128 Megabyte RAM und einem schlechten Prozessor, der die Tunnelverschlüsselung nicht bewältigen kann. Allerdings wollte ich unbedingt nicht mit einem Lötkolben in den Router klettern. Meine Erfahrung mit der Verlagerung von OpenVPN auf eine separate Hardware mit Redundanz auf einem Router im Falle eines Unfalls.

Herausforderung


Es gibt einen TP-Link WDR3500 Router und Orange Pi Zero H2. Wir möchten, dass Orange Pi die Verschlüsselung von Tunneln im normalen Modus durchführt. Wenn ihm etwas passiert, kehrt die VPN-Verarbeitung zum Router zurück. Alle Firewall-Einstellungen auf dem Router sollten wie zuvor funktionieren. Im Allgemeinen sollte das Hinzufügen zusätzlicher Hardware für alle transparent und unsichtbar sein. OpenVPN arbeitet über TCP, den TAP-Adapter im Bridge-Modus (Server-Bridge).

Lösung


Anstatt über USB anzuschließen, habe ich mich entschlossen, einen Port des Routers auszugeben und alle Subnetze, auf denen sich eine VPN-Brücke befindet, auf dem Orange Pi abzurufen. Es stellt sich heraus, dass das Eisenstück physisch in denselben Netzwerken hängt wie der VPN-Server auf dem Router. Danach erhöhen wir genau dieselben Server auf den Orange Pi und konfigurieren eine Art Proxy auf dem Router, sodass alle eingehenden Verbindungen an den externen Server gesendet werden. Wenn der Orange Pi tot oder nicht verfügbar ist, dann an den internen Fallback-Server. Ich habe HAProxy genommen.

Es stellt sich so heraus:

  1. Kunde kommt
  2. Wenn der externe Server nicht verfügbar ist, wird die Verbindung wie zuvor zum internen Server hergestellt
  3. Sofern verfügbar, akzeptiert der Kunde Orange Pi
  4. VPN auf Orange Pi entschlüsselt Pakete und gibt sie an den Router zurück
  5. Der Router leitet sie irgendwo hin

Implementierungsbeispiel


Lassen Sie uns also zwei Netzwerke auf dem Router haben - main (1) und guest (2). Für jedes von ihnen gibt es einen OpenVPN-Server für die Verbindung von außen.

Netzwerkkonfiguration


Wir müssen beide Netzwerke über einen Port weiterleiten, daher erstellen wir 2 VLAN'a.

Erstellen Sie auf dem Router im Bereich "Netzwerk / Switch" VLANs (z. B. 1 und 2) und aktivieren Sie diese im Tag-Modus auf dem gewünschten Port. Fügen Sie die neu erstellten eth0.1 und eth0.2 zu den entsprechenden Netzwerken hinzu (z. B. Add to Brigde).

Wir erstellen zwei VLAN-Schnittstellen auf dem Orange Pi (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 sofort schaffen wir 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 

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

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 

VPN-Einrichtung


Kopieren Sie anschließend die Einstellungen für OpenVPN und die Schlüssel vom Router. Einstellungen finden Sie normalerweise in /tmp/etc/openvpn*.conf

Standardmäßig wird openvpn im TAP-Modus ausgeführt und die Schnittstelle von server-bridge bleibt inaktiv. Damit dies 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 die VPN-Hauptschnittstelle zu br-main hinzugefügt. Für das Gast-Grid gilt das Gleiche bis zum Schnittstellennamen und der Adresse in der Server-Bridge.

Routing außerhalb und Proxy anfordern


In diesem Schritt ist Orange Pi bereits in der Lage, Verbindungen anzunehmen und Clients in die erforderlichen Netzwerke zuzulassen. Das Proxying eingehender Verbindungen auf dem Router muss noch konfiguriert werden.

Wir übertragen die Router-VPN-Server auf andere Ports, setzen sie auf den HAProxy-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 lief, fahren die Kunden zu Orange Pi, und der Prozessor des Routers heizt nicht mehr auf, und die VPN-Geschwindigkeit wird erheblich erhöht. In diesem Fall bleiben alle auf dem Router registrierten Netzwerkregeln relevant. Im Falle eines Unfalls auf Orange Pi fällt es ab und HAProxy wickelt Clients auf lokalen Servern ab.

Vielen Dank für Ihre Aufmerksamkeit, Vorschläge und Korrekturen sind willkommen.

Source: https://habr.com/ru/post/de485876/


All Articles