
Hallo zusammen, ich habe kürzlich gelesen 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:
- Ein Kunde kommt
- Ist der externe Server wie bisher nicht erreichbar, erfolgt die Verbindung zum internen Server
- Sofern verfügbar, wird der Client von Orange Pi akzeptiert
- VPN auf Orange Pi entschlüsselt Pakete und spuckt sie zurück in den Router
- 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
