Para empezar, hay momentos en los que necesita hacer una aplicación con una conexión a la base de datos. Esto se hace para no profundizar en el desarrollo del backend y centrarse en la interfaz debido a la falta de manos y habilidades. No pretendo decir que mi solución será segura, pero funciona.
Como no me gusta pagar por el alojamiento, utilicé la red en mi trabajo, allí hay una IP blanca. Aquí está su estructura:

Tengo acceso a varias computadoras con mayor precisión a 192.168.1.2 (también conocido como 192.168.0.2) Linux y 192.168.0.3 con Windows. En general, para mi aplicación, elegí mysql y miré qué hay en Linux. Ya estaba instalado allí, pero nadie sabe la contraseña, y los que sabían lo olvidaron (los que trabajaron antes que yo). Al descubrir que nadie lo necesita, lo eliminé e intenté reinstalarlo. No había suficiente memoria, y como tendría que conectar un monitor y un teclado con un mouse para solucionar este error, decidí abandonar este negocio. Además, una máquina con Windows es mucho más potente y además de todo, yo mismo la tengo en la computadora portátil de mi casa. En principio, no describiré la instalación en sí, hay un montón de manuales y videos al respecto. Habiendo instalado mysql en una máquina con Windows, decidí hacer una copia de seguridad de las tablas desde la computadora portátil a la estación de trabajo.
Esto se hace así (en mi caso):
mysqldump -uroot -p your_base > dump_file.sql
Luego, en la nueva base de datos, creamos la base de datos y restauramos la copia de seguridad en la máquina "nueva".
mysql -h localhost -u root -p
create database your_base; use your_base;
mysql -uroot -p your_base < dump_file.sql
show tables;
El archivo de copia de seguridad debe colocarse en una nueva máquina y, posiblemente, si no está en el directorio de la utilidad, la ruta completa al mismo. (Acabo de cargar una copia de seguridad en el github y la cloné en una nueva máquina). Agregaría cómo se crean las tablas en sí, pero no guardé las capturas de pantalla, y creo que no es difícil incluso para un estudiante de 2-3 años.
Cuando restauré todas las tablas, es hora de hacer accesible el acceso remoto a la base de datos. En general, tales comandos no condujeron al éxito (solo emitieron permisos de lectura para seleccionar)
create user 'client'@'%' IDENTIFIED by 'client'; grant select on your_base . * to 'client'@'%'; flush privileges;
Más precisamente, podría conectarme a la base de datos solo con un equipo,
mysql -h localhost -u client -pclient
pero este no pudo
mysql -h 192.168.0.3 -u client -pclient
no me convenía y no podía conectarse a través de esta dirección y desde la raíz.
El programa mysql workbench ayudó en la configuración, cambió localhost a% y funciona, aunque el cliente no lo ayudó. Ahora puede conectarse a la base de datos desde la consola o desde el código desde cualquier dirección.

También debe crear una red doméstica o empresarial y desactivar el firewall de Windows; de lo contrario, ni siquiera puede hacer ping a esta máquina (no es que se conecte a la base de datos).
La mitad del trabajo está hecho, entonces necesito poder conectarme a la base de datos desde casa.
Como se puede ver en el diagrama de red, debe ir de 192.168.0.3 a 192.168.1.1 (enrutador) a Internet, vamos en la dirección opuesta. Configure la ruta de 192.168.1.1 a 192.168.1.2 de esta manera:

En general, la imagen no se muestra; escribiré con las manos:
route add 192.168.0.0 mask 255.255.255.0 gateway 192.168.1.2
Esto solo se puede hacer en una subred, es decir, no se puede reenviar inmediatamente a la dirección 192.168.0.2 o 192.168.0.3
Esto es necesario para que el enrutador sepa dónde se encuentra la subred 192.168.0.0/24 (aprenda los conceptos básicos de las redes, esto es útil).
Ahora agregue el puerto probros 3306 (puerto mysql por defecto (si no lo cambió durante la instalación)) a la dirección 192.168.1.2

Queda por hacer lo más difícil es reenviar en una máquina Linux (hay dos tarjetas de red 192.168.1.2 (interfaz enp3s1) y 192.168.0.2 (interfaz enp3s0) para que las tarjetas de red sepan qué transferirlas de 192.168.1.2 a 192.168.0.2, y luego a nuestra máquina de windows con mysql.
sudo iptables -A FORWARD -i enp3s1 -o enp3s0 -p tcp --syn --dport 3306 -m conntrack --ctstate NEW -j ACCEPT sudo iptables -A FORWARD -i enp3s1 -o enp3s0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT sudo iptables -A FORWARD -i enp3s0 -o enp3s1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT sudo iptables -t nat -A PREROUTING -i enp3s1 -p tcp --dport 3306 -j DNAT --to-destination 192.168.0.3 sudo iptables -t nat -A POSTROUTING -o enp3s0 -p tcp --dport 3306 -d 192.168.0.3 -j SNAT --to-source 192.168.1.2 sudo service iptables-persistent save
Es decir La primera línea significa que aceptamos la primera conexión, la segunda y la tercera que puede iniciar paquetes en ambos lados, la cuarta y la quinta significa reemplazar la dirección de destino y la fuente. Y listo, puedes conectarte desde casa a través de mysql. Y finalmente, mi código C ++ que hace esto:
Ahora puede soltar este programa de forma segura para cualquier persona, y no necesita reescribirlo para que funcione localmente.