
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:
- Le client vient
- Si le serveur externe n'est pas disponible - comme précédemment, la connexion est établie avec le serveur interne
- Si disponible, le client accepte Orange Pi
- Le VPN sur Orange Pi déchiffre les paquets et les rejette sur le routeur
- 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-mainDescription='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*.confPar 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
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.