Accélérer OpenVPN sur un routeur Openwrt. Version alternative sans fer à souder ni extrémisme matériel

Accélérer OpenVPN sur un routeur Openwrt. Version alternative sans fer à souder ni extrémisme matériel

Bonjour à tous, j'ai lu récemment ancien article sur la façon dont vous pouvez accélérer OpenVPN sur un routeur en transférant le cryptage sur un élément matériel distinct, soudé à l'intérieur du routeur lui-même. J'ai un cas similaire à celui de l'auteur - TP-Link WDR3500 avec 128 Mo de RAM et un processeur médiocre qui est complètement incapable de gérer le cryptage par tunnel. Cependant, je ne voulais absolument pas entrer dans le routeur avec un fer à souder. Vous trouverez ci-dessous mon expérience de déplacement d'OpenVPN vers un matériel distinct avec sauvegarde sur le routeur en cas d'accident.

Tâche

Il existe un routeur TP-Link WDR3500 et un Orange Pi Zero H2. Nous voulons que l'Orange Pi chiffre les tunnels comme d'habitude, et si quelque chose lui arrive, le traitement VPN reviendra au routeur. Tous les paramètres du pare-feu du routeur devraient fonctionner comme avant. Et en général, l’ajout de matériel supplémentaire doit être transparent et invisible pour tout le monde. OpenVPN fonctionne sur TCP, l'adaptateur TAP est en mode pont (serveur-pont).

décision

Au lieu de me connecter via USB, j'ai décidé d'utiliser un port du routeur et de connecter tous les sous-réseaux dotés d'un pont VPN à l'Orange Pi. Il s’avère que le matériel sera physiquement suspendu aux mêmes réseaux que le serveur VPN du routeur. Après cela, nous installons exactement les mêmes serveurs sur l'Orange Pi, et sur le routeur nous mettons en place une sorte de proxy pour qu'il envoie toutes les connexions entrantes au serveur externe, et si l'Orange Pi est mort ou indisponible, alors au serveur de secours interne. J'ai pris HAProxy.

Il se trouve comme ceci:

  1. Un client arrive
  2. Si le serveur externe est indisponible, comme auparavant, la connexion se fait sur le serveur interne
  3. Si disponible, le client est accepté par Orange Pi
  4. Le VPN sur Orange Pi décrypte les paquets et les renvoie dans le routeur
  5. Le routeur les achemine quelque part

Exemple de mise en œuvre

Supposons donc que nous ayons deux réseaux sur le routeur - main(1) et guest(2), pour chacun d'eux il y a un serveur OpenVPN pour se connecter en externe.

Configuration du réseau

Nous devons acheminer les deux réseaux via un seul port, nous créons donc 2 VLAN.

Sur le routeur, dans la section Réseau/Switch, créez les VLAN (par exemple 1 et 2) et activez-les en mode balisé sur le port souhaité, ajoutez les eth0.1 et eth0.2 nouvellement créés aux réseaux correspondants (par exemple, ajoutez-les au pont).

Sur Orange Pi nous créons deux interfaces VLAN (j'ai 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-invité

Description='Guest VLAN on eth0'
Interface=vlan-guest
Connection=vlan
BindsToInterfaces=eth0
VLANID=2
IP=no

Et nous créons immédiatement deux ponts pour eux :

/etc/netctl/br-main

Description="Main Bridge connection"
Interface=br-main
Connection=bridge
BindsToInterfaces=(vlan-main)
IP=dhcp

/etc/netctl/br-invité

Description="Guest Bridge connection"
Interface=br-guest
Connection=bridge
BindsToInterfaces=(vlan-guest)
IP=dhcp

Activez le démarrage automatique pour les 4 profils (netctl activé). Désormais, après un redémarrage, l'Orange Pi se bloquera sur les deux réseaux requis. Nous configurons les adresses d'interface sur l'Orange Pi en Static Leases sur le routeur.

ip addr show

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

Configuration VPN

Ensuite, nous copions les paramètres d'OpenVPN et les clés du routeur. Les paramètres se trouvent généralement dans /tmp/etc/openvpn*.conf

Par défaut, openvpn fonctionnant en mode TAP et server-bridge garde son interface inactive. Pour que tout fonctionne, vous devez ajouter un script qui s'exécute lorsque la connexion est activée.

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

Par conséquent, dès que la connexion sera établie, l'interface VPN-main sera ajoutée à br-main. Pour la grille d'invités - de même, jusqu'au nom et à l'adresse de l'interface dans le pont serveur.

Routage des requêtes en externe et proxy

A cette étape, Orange Pi est déjà capable d'accepter les connexions et de connecter les clients aux réseaux requis. Il ne reste plus qu'à configurer le proxy des connexions entrantes sur le routeur.

Nous transférons les serveurs VPN du routeur vers d'autres ports, installons HAProxy sur le routeur et configurons :

/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

Apprécier

Si tout se passe comme prévu, les clients passeront à Orange Pi, le processeur du routeur ne chauffera plus et la vitesse du VPN augmentera considérablement. Dans le même temps, toutes les règles réseau enregistrées sur le routeur resteront pertinentes. En cas d'accident sur l'Orange Pi, celui-ci tombera et HAProxy transférera les clients vers des serveurs locaux.

Merci de votre attention, les suggestions et corrections sont les bienvenues.

Source: habr.com

Ajouter un commentaire