
Bonjour Ă tous, j'ai rĂ©cemment lu 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 :
- Un client arrive
- Si le serveur externe n'est pas disponible â tout comme avant, la connexion va vers le serveur interne
- S'il est disponible â le client est acceptĂ© par l'Orange Pi
- Le VPN sur l'Orange Pi déchiffre les paquets et les renvoie au routeur
- 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
