
Hola a todos, recientemente leí un
artículo de larga data sobre cómo acelerar OpenVPN en un enrutador, transfiriendo el cifrado a una pieza de hardware separada, que está soldada dentro del enrutador. Tengo un caso similar con el autor: TP-Link WDR3500 con 128 megabytes de RAM y un procesador deficiente que no puede hacer frente al cifrado de túnel. Sin embargo, categóricamente no quería subir al enrutador con un soldador. Bajo el corte, mi experiencia de mover OpenVPN a una pieza de hardware separada con redundancia en un enrutador en caso de accidente.
Desafío
Hay un enrutador TP-Link WDR3500 y Orange Pi Zero H2. Queremos que Orange Pi realice el cifrado de túneles en el modo normal, y si algo le sucede, el procesamiento de VPN volverá al enrutador. Todas las configuraciones de firewall en el enrutador deberían funcionar como antes. En general, en general, la adición de hardware adicional debe ser transparente e invisible para todos. OpenVPN funciona sobre TCP, el adaptador TAP en modo puente (puente de servidor).
Solución
En lugar de conectarme a través de USB, decidí pasar un puerto del enrutador y obtener todas las subredes que tienen un puente VPN en el Orange Pi. Resulta que la pieza de hierro colgará físicamente en las mismas redes que el servidor VPN en el enrutador. Después de eso, elevamos exactamente los mismos servidores al Orange Pi, y configuramos algún tipo de proxy en el enrutador para que envíe todas las conexiones entrantes al servidor externo, y si el Orange Pi está muerto o no está disponible, entonces al servidor de reserva interno. Tomé HAProxy.
Resulta así:
- El cliente viene
- Si el servidor externo no está disponible, como antes, la conexión va al servidor interno
- Si está disponible, el cliente acepta Orange Pi
- VPN en Orange Pi descifra los paquetes y los escupe de nuevo al enrutador
- El enrutador los está enrutando a alguna parte
Ejemplo de implementación
Entonces, tengamos dos redes en el enrutador: principal (1) e invitado (2), para cada una de ellas hay un servidor OpenVPN para conectarse desde el exterior.
Configuración de red
Necesitamos reenviar ambas redes a través de un puerto, por lo tanto, creamos 2 VLAN'a.
En el enrutador en la sección Red / Conmutador, cree VLAN (por ejemplo, 1 y 2) y actívelas en modo etiquetado en el puerto deseado, agregue el eth0.1 y eth0.2 recién creado a las redes correspondientes (por ejemplo, agregue a brigde).
Creamos dos interfaces VLAN en Orange Pi (tengo 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
E inmediatamente creamos dos puentes para ellos:
/ 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
Habilitamos el inicio automático en los 4 perfiles (habilitación de netctl). Ahora, después de un reinicio, el Orange Pi se bloqueará en las dos redes requeridas. Las direcciones de interfaz en Orange Pi se configuran en Arrendamientos estáticos en el enrutador.
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
Configuración de VPN
A continuación, copie la configuración de OpenVPN y las claves del enrutador. La configuración generalmente se puede encontrar en
/tmp/etc/openvpn*.confPor defecto, openvpn se ejecuta en modo TAP y server-bridge mantiene su interfaz inactiva. Para que funcione, debe agregar un script que se ejecute cuando se active la conexión.
/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
Como resultado, tan pronto como ocurra la conexión, la interfaz vpn-main se agregará a br-main. Para la grilla invitada, lo mismo es cierto hasta el nombre y la dirección de la interfaz en el puente del servidor.
Solicitar enrutamiento externo y proxy
En este paso, Orange Pi ya puede aceptar conexiones y permitir que los clientes ingresen a las redes necesarias. Queda por configurar el proxy de las conexiones entrantes en el enrutador.
Transferimos los servidores VPN del enrutador a otros puertos, lo colocamos en el enrutador HAProxy y configuramos:
/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
Disfruta
Si todo salió según lo planeado, los clientes se irán a Orange Pi y el procesador del enrutador ya no se calentará, y la velocidad de la VPN aumentará significativamente. En este caso, todas las reglas de red que están registradas en el enrutador seguirán siendo relevantes. En caso de accidente en Orange Pi, se caerá y HAProxy envolverá a los clientes en los servidores locales.
Gracias por su atención, sugerencias y correcciones son bienvenidas.