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

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

Bonjour Ă  tous, j'ai rĂ©cemment lu un ancien article sur la façon d'accĂ©lĂ©rer OpenVPN sur un routeur en transfĂ©rant le chiffrement sur un matĂ©riel sĂ©parĂ© qui est soudĂ© Ă  l'intĂ©rieur du routeur mĂȘme. J'ai un cas similaire Ă  celui de l'auteur — un TP-Link WDR3500 avec 128 mĂ©gaoctets de RAM et un processeur peu performant qui ne gĂšre pas du tout le chiffrement des tunnels. Cependant, je ne voulais absolument pas ouvrir le routeur avec un fer Ă  souder. Ci-dessous, mon expĂ©rience de transfert d'OpenVPN sur un matĂ©riel sĂ©parĂ© avec une sauvegarde sur le routeur en cas de panne.

La tĂąche

J'ai un routeur TP-Link WDR3500 et un Orange Pi Zero H2. Nous souhaitons que le chiffrement des tunnels soit géré par l'Orange Pi, tout en s'assurant que, si quelque chose lui arrive, le traitement VPN retourne sur le routeur. Tous les réglages du pare-feu sur le routeur doivent fonctionner comme avant. En général, l'ajout de matériel supplémentaire doit se faire de maniÚre transparente et discrÚte pour tous. OpenVPN fonctionne sur TCP, avec le adaptateur TAP en mode pont (server-bridge).

Solution

Au lieu de se connecter par USB, j'ai dĂ©cidĂ© d'utiliser un port du routeur et de le brancher Ă  toutes les sous-rĂ©seaux, oĂč se trouve le pont VPN. Cela signifie que le matĂ©riel sera physiquement connectĂ© aux mĂȘmes rĂ©seaux que les serveurs VPN sur le routeur. AprĂšs cela, nous configurons exactement les mĂȘmes serveurs sur l'Orange Pi, et sur le routeur, nous rĂ©glons un proxy pour rediriger toutes les connexions entrantes vers le serveur externe ; si l'Orange Pi tombe en panne ou n'est pas disponible, alors vers le serveur de secours interne. J'ai choisi HAProxy.

Il en ressort ceci :

  1. Un client arrive
  2. Si le serveur externe n'est pas disponible — tout comme avant, la connexion va vers le serveur interne
  3. S'il est disponible — le client est acceptĂ© par l'Orange Pi
  4. Le VPN sur l'Orange Pi déchiffre les paquets et les renvoie au routeur
  5. Le routeur les route quelque part

Exemple de mise en Ɠuvre

Ainsi, supposez 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 les connexions externes.

Configuration du réseau

Nous devons faire passer les deux réseaux par un seul port, donc nous créons 2 VLAN.

Sur le routeur, dans la section Réseau/Switch, nous créons des VLAN (par exemple 1 et 2) et les activons en mode tagué sur le port souhaité, ajoutons les eth0.1 et eth0.2 nouvellement créés aux réseaux correspondants (par exemple, ajoutons-les au pont).

Sur l'Orange Pi, nous créons deux interfaces VLAN (j'ai Archlinux ARM + netctl) :

/etc/netctl/vlan-main

Description='VLAN principal sur eth0'
Interface=vlan-main
Connection=vlan
BindsToInterfaces=eth0
VLANID=1
IP=no

/etc/netctl/vlan-guest

Description='VLAN invité sur 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-guest

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

Nous activons le démarrage automatique pour les 4 profils (netctl enable). Maintenant, aprÚs le redémarrage, l'Orange Pi sera connecté aux deux réseaux requis. Nous configurons les adresses des interfaces sur l'Orange Pi dans les baux statiques sur le routeur.

ip addr show

4: vlan-main@eth0:  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:  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:  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:  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 pour OpenVPN et les clĂ©s depuis le routeur. Les paramĂštres peuvent gĂ©nĂ©ralement ĂȘtre extraits de /tmp/etc/openvpn*.conf

Par défaut, openvpn, lorsqu'il est exécuté en mode TAP et server-bridge, garde son interface inactive. Pour que tout fonctionne, il faut ajouter un script qui se lance lors de l'activation de la connexion.

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

En consĂ©quence, dĂšs qu’une connexion est Ă©tablie, l'interface vpn-main sera ajoutĂ©e Ă  br-main. Pour le rĂ©seau invitĂ©, c’est la mĂȘme chose, sauf pour le nom de l’interface et l'adresse dans server-bridge.

Routage des requĂȘtes externes et proxying

À cette Ă©tape, l'Orange Pi peut dĂ©jĂ  accepter des connexions et laisser entrer les clients dans les bons rĂ©seaux. Il reste Ă  configurer le proxy pour les connexions entrantes sur le routeur.

Nous déplaçons les serveurs VPN du routeur vers d'autres ports, mettons 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

Nous nous amusons

Si tout se passe comme prévu, les clients passeront sur Orange Pi et le processeur du routeur ne chauffera plus, tandis que la vitesse du VPN augmentera considérablement. Tous les rÚgles réseau définies sur le routeur resteront toujours applicables. En cas de panne sur l'Orange Pi, il se déconnectera et HAProxy redirigera les clients vers les serveurs locaux.

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

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster