Hola a todos, hace poco leí
Tarea
Hay un enrutador TP-Link WDR3500 y Orange Pi Zero H2. Queremos que Orange Pi cifre los 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. Y, en general, en general, la adición de una pieza adicional de hierro debe ser transparente e imperceptible para todos. OpenVPN funciona sobre TCP, adaptador TAP en modo puente (servidor-puente).
Solución
En lugar de conectarme a través de USB, decidí gastar un puerto del enrutador y conectar todas las subredes que tienen un puente VPN a 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, levantamos exactamente los mismos servidores en el Orange Pi, y en el enrutador configuramos algún tipo de proxy para que envíe todas las conexiones entrantes al servidor externo, y si el Orange Pi está muerto o no está disponible, luego al servidor de respaldo interno. Tomé HAProxy.
Resulta así:
- llega el cliente
- Si el servidor externo no está disponible, como antes, la conexión va al servidor interno
- Si está disponible, el cliente es aceptado por Orange Pi
- VPN en Orange Pi descifra paquetes y los escupe al enrutador
- El enrutador los enruta a alguna parte
Ejemplo de implementación
Entonces, digamos que tenemos dos redes en el enrutador: principal (1) e invitada (2), para cada una de ellas hay un servidor OpenVPN para conectarse desde el exterior.
Configuración de la red
Necesitamos pasar ambas redes a través de un puerto, por lo que creamos 2 VLAN.
En el enrutador, en la sección Red/Conmutador, cree VLAN (por ejemplo, 1 y 2) y enciéndalas en modo etiquetado en el puerto deseado, agregue los eth0.1 y eth0.2 recién creados a las redes apropiadas (por ejemplo, agregar a puente).
En Orange Pi creamos dos interfaces VLAN (tengo Archlinux ARM + netctl):
/etc/netctl/vlan-principal
Description='Main VLAN on eth0'
Interface=vlan-main
Connection=vlan
BindsToInterfaces=eth0
VLANID=1
IP=no
/etc/netctl/vlan-invitado
Description='Guest VLAN on eth0'
Interface=vlan-guest
Connection=vlan
BindsToInterfaces=eth0
VLANID=2
IP=no
E inmediatamente crea 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-invitado
Description="Guest Bridge connection"
Interface=br-guest
Connection=bridge
BindsToInterfaces=(vlan-guest)
IP=dhcp
Habilite el inicio automático para los 4 perfiles (habilitar netctl). Ahora, después de reiniciar, Orange Pi se colgará en las dos redes requeridas. Las direcciones de interfaz en Orange Pi se configuran en Arrendamientos estáticos en el enrutador.
espectáculo ip addr
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. Por lo general, los ajustes se pueden tomar de /tmp/etc/openvpn*.conf
De forma predeterminada, openvpn se ejecuta en modo TAP y el puente del servidor 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
/etc/openvpn/vpn-up.sh
#!/bin/sh
ifconfig vpn-${profile_name} up
brctl addif br-${profile_name} vpn-${profile_name}
Como resultado, tan pronto como se produzca una conexión, la interfaz vpn-main se agregará a br-main. Para la cuadrícula de invitados, es similar hasta el nombre y la dirección de la interfaz en el puente del servidor.
Enrutamiento de solicitudes externas y proxy
En este paso, Orange Pi ya puede aceptar conexiones y permitir que los clientes ingresen a las redes deseadas. Queda por configurar el proxy de las conexiones entrantes en el enrutador.
Transferimos los servidores VPN del enrutador a otros puertos, instalamos HAProxy en el enrutador 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
Disfrutar
Si todo salió según lo planeado, los clientes irán a Orange Pi y el procesador del enrutador ya no se calentará, y la velocidad de VPN aumentará significativamente. Al mismo tiempo, todas las reglas de red registradas en el enrutador seguirán siendo relevantes. En caso de accidente en el Orange Pi, se caerá y HAProxy envolverá a los clientes en los servidores locales.
Gracias por su atención, sugerencias y correcciones son bienvenidas.
Fuente: habr.com