soltecsis / fwcloud-api

API REST for the project FWCloud.net
GNU Affero General Public License v3.0
4 stars 6 forks source link

OpenVPN related fixes #834

Closed cmunyoz closed 1 week ago

cmunyoz commented 1 month ago
(1) Debería dar opción a configurar el repo oficial de OpenVPN en vez de usar la versión de la distro. Útil sobretodo si la versión que trae la distro no es muy reciente.
https://community.openvpn.net/openvpn/wiki/OpenvpnSoftwareRepos

(2) Cuando se sube la configuración del servidor OpenVPN, se deja en /etc/openvpn en vez de /etc/openvpn/server, que es donde el servicio systemd que se configura al instalar OpenVPN busca las configuraciones cuando se inicia.

(3) No se crea un servicio systemd asociado al fichero de configuración que se deja en /etc/openvpn, por lo que hay que crearlo a mano con systemctl enable openvpn@<fichero_server_ovpn.conf>. Pienso que es mejor implementar esto que (2) para poder gestionar por separado diferentes servidores OpenVPN si fuese necesario. Si se ponen clientes OpenVPN en el firewall con FWCloud se debería proceder igual, habilitando el servicio systemd.

(4) No se crea el directorio /etc/openvpn/ccd y falla el arranque ser servidor OpenVPN. La verdad es que no sé por qué no lo crea el propio paquete al instalarse, pero debería crearse en el paso (3).

(5) Faltan alguna forma de identificar qué versión de OpenVPN tiene el firewall (v2.5.x, v2.6.x) para implementar parámetros necesarios con OpenVPN 2.6:
    data-ciphers (server, client) relacionados con el DCO (Data channel offload).
    proto (server): ahora permite usar además udp4, udp6, tcp4, tcp6 para indicar IPv4 o IPv6 y evitar un warning en el log "Could not determine IPv4/IPv6 protocol. Using AF_INET". udp4 debería ser el valor por defecto para v2.6.
    fast-io se puede usar por defecto en Linux (server, client).

(6) Poder elegir la versión de OpenVPN que se usa al generar el instalador o, como mínimo, poder subir con qué msi generarlos. Ahora mismo se generan con v2.5.10 y no tiene las características de la v2.6 (sobretodo la mejora de rendimiento con DCO y con la gestión de MTU/MSS).

(7) Cuando se sube una configuración de servidor OpenVPN, estaría bien poder saber con qué configuración se está ejecutando, si con la anterior o con la nueva, y avisar de que para aplicar hay que hacer un restart del servidor OpenVPN (que desconecta todas las VPN). Parece ser que no soporta hacer un reload en caliente...

(8) Keepalived: he modificado sensiblemente StateChange.sh para usar task-spooler (apt install task-spooler, https://manpages.ubuntu.com/manpages/noble/man1/tsp.1.html), que garantiza el orden en que se ejecutan los comandos y no depende de que keepalived muera antes de que se hayan completado (keepalived los lanza y no espera, pero si finaliza su ejecución terminará los scripts con kill -9). Habría que comprobar qué distros tienen dicho comando/paquete, que se instale automáticamente y quizás modificar StateChange.sh con "if's" para que si existe el comando que lo use sin dar error si no está disponible. El código fuente está en http://viric.name/soft/ts/ y hay varios fork que no sé en qué se diferencian.

(9) Ayer se me rompió el cierre de una ventana, se tendía que poner un check que.... naaaaah, es broma :)

(10) Cuando haces discover de IPs no hay forma de saber qué nodo es "Master", cual "Slave" ni se pueden cambiar el rol para que cambie todas las IP de forma automática de uno a otro. Habría que darle una vuelta, porque por ejemplo si tienes IP flotantes, le haces discover a un nodo, algunas IP deberían ser "M" o "S", pero las otras debería ser "Flotantes". Pienso que la propiedad de "M" o "S" es algo más de la IP que del host o la interfaz.

(11) Cuando tienes reglas incompletas (p.ej. un DNAT sin la Translated Address), la compilación da error aunque la regla esté deshabilitada.