Nous accélérons OpenVPN sur le routeur Openwrt. Version alternative sans fer à souder et extrémisme dur



Bonjour Ă  tous, j'ai rĂ©cemment lu un article de longue date sur la façon d'accĂ©lĂ©rer OpenVPN sur un routeur, en transfĂ©rant le cryptage sur un autre matĂ©riel, qui est soudĂ© Ă  l'intĂ©rieur du routeur lui-mĂȘme. J'ai un cas similaire avec l'auteur - TP-Link WDR3500 avec 128 mĂ©gaoctets de RAM et un processeur mĂ©diocre qui ne peut pas faire face au cryptage de tunnel. Cependant, je ne voulais absolument pas monter dans le routeur avec un fer Ă  souder. Sous la coupe, mon expĂ©rience de dĂ©placer OpenVPN vers un matĂ©riel distinct avec redondance sur un routeur en cas d'accident.

DĂ©fi


Il existe un routeur TP-Link WDR3500 et Orange Pi Zero H2. Nous voulons que l'Orange Pi gĂšre le cryptage du tunnel en mode normal, et si quelque chose lui arrive, le traitement VPN reviendra au routeur. Tous les paramĂštres du pare-feu sur le routeur doivent fonctionner comme auparavant. En gĂ©nĂ©ral, 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 en mode pont (bridge-serveur).

Solution


Au lieu de me connecter via USB, j'ai dĂ©cidĂ© de dĂ©penser un port du routeur et d'obtenir tous les sous-rĂ©seaux avec un pont VPN dessus sur l'Orange Pi. Il s'avĂšre que le morceau de fer se bloque physiquement dans les mĂȘmes rĂ©seaux que le serveur VPN sur le routeur. AprĂšs cela, nous Ă©levons exactement les mĂȘmes serveurs Ă  l'Orange Pi, et configurons une sorte de proxy sur le routeur afin qu'il envoie toutes les connexions entrantes au serveur externe, et si l'Orange Pi est mort ou indisponible, puis au serveur de secours interne. J'ai pris HAProxy.

Il se présente comme ceci:

  1. Le client vient
  2. Si le serveur externe n'est pas disponible - comme précédemment, la connexion est établie avec le serveur interne
  3. Si disponible, le client accepte Orange Pi
  4. Le VPN sur Orange Pi déchiffre les paquets et les rejette sur le routeur
  5. Le routeur les achemine quelque part

Exemple d'implémentation


Donc, laissez-nous avoir deux réseaux sur le routeur - principal (1) et invité (2), pour chacun d'eux il y a un serveur OpenVPN pour se connecter de l'extérieur.

Configuration du réseau


Nous devons transférer les deux réseaux via un seul port, nous créons donc 2 VLAN'a.

Sur le routeur dans la section Réseau / Commutateur, créez des 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 à brigde).

Nous créons deux interfaces VLAN sur l'Orange Pi (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-guest
 Description='Guest VLAN on eth0' Interface=vlan-guest Connection=vlan BindsToInterfaces=eth0 VLANID=2 IP=no 

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

/ 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 sur les 4 profils (netctl enable). Maintenant, aprÚs un redémarrage, l'Orange Pi se bloque dans les deux réseaux requis. Les adresses d'interface sur Orange Pi sont configurées dans des baux statiques 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, copiez 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 s'exécutant en mode TAP et server-bridge maintient son interface inactive. Pour le faire fonctionner, 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 se produit, l'interface vpn-main sera ajoutĂ©e Ă  br-main. Pour la grille d'invitĂ©, il en va de mĂȘme jusqu'au nom et Ă  l'adresse de l'interface dans le pont de serveur.

Demander le routage à l'extérieur et le proxy


À cette Ă©tape, Orange Pi est dĂ©jĂ  en mesure d'accepter les connexions et de laisser les clients dans les rĂ©seaux nĂ©cessaires. Il reste Ă  configurer le proxy des connexions entrantes sur le routeur.

Nous transférons les serveurs VPN du routeur vers d'autres ports, le mettons sur le routeur HAProxy 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 

Profitez


Si tout se déroule comme prévu, les clients partiront pour Orange Pi et le processeur du routeur ne chauffera plus, et la vitesse VPN augmentera considérablement. Dans ce cas, toutes les rÚgles de réseau enregistrées sur le routeur resteront pertinentes. En cas d'accident sur Orange Pi, il tombera et HAProxy enroulera les clients sur les serveurs locaux.

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

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


All Articles