Hallo zusammen, ich habe kürzlich gelesen
Aufgabe
Es gibt einen TP-Link WDR3500-Router und einen Orange Pi Zero H2. Wir möchten, dass der Orange Pi die Tunnel wie gewohnt verschlüsselt, und wenn ihm etwas passiert, kehrt die VPN-Verarbeitung zum Router zurück. Alle Firewall-Einstellungen am Router sollten wie zuvor funktionieren. Und generell sollte das Hinzufügen zusätzlicher Hardware für jeden transparent und unmerklich sein. OpenVPN funktioniert über TCP, der TAP-Adapter befindet sich 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 – main(1) und Guest(2), für jedes von ihnen gibt es einen OpenVPN-Server für die Verbindung nach außen.
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 für OpenVPN und Schlüssel vom Router. Einstellungen finden Sie normalerweise in /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