Usar Discourse en una VPN privada: ¿qué pasa con el correo electrónico?

¡Hola!

Me gustaría usar Discourse en una configuración especial: el servidor web solo será accesible para un grupo de usuarios privados dentro de una VPN. La IP del servidor será algo como 10.0.0.1, por lo que está claro que no podré tener un nombre de dominio público válido para ello.

He leído que es muy recomendable configurar correctamente la transmisión de correo. También he leído que al menos se puede completar la generación de la cuenta de administrador con algunos trucos sin necesidad de correo electrónico.

Me pregunto, ¿cuál es la mejor opción?

a) Configurar Discourse completamente sin correo electrónico. ¿Funcionará? Supongo que tendré que seguir al menos algún procedimiento manual algo complicado para activar cada cuenta, pero eso está bien para el número limitado de usuarios que espero. ¿Funcionaría? ¿Cuáles serían las limitaciones de no tener funcionando la transmisión de correo? Por supuesto, no podré enviar notificaciones por correo (un inconveniente menor para mí), ¿es eso todo?

b) Aunque el servidor use una IP privada, quizás pueda tener también una dirección pública solo para el correo. Espero que todo esté optimizado (lo mejor posible) para una configuración sencilla, siguiendo algunas guías de instalación; ingresaré la dirección del servidor una sola vez, la cual probablemente se use tanto para redirecciones HTTP como para SMTP. ¿Es fácil diferenciar esto? ¿Puedo configurar fácilmente un servidor con una IP privada y un dominio que no coincide, usado solo para correo?

Debo aclarar que aún no tengo experiencia con Discourse. Estoy preparado para investigar por mi cuenta cuando enfrente problemas reales. Pero veo que hay una decisión fundamental que tomar sobre qué camino seguir (a o b), y sería genial recibir algún consejo para evitar tomar el camino equivocado al principio.

¡Gracias!

Necesitas tener un nombre de dominio. Discourse no se ejecutará con una dirección IP.

¿Puede el servidor acceder a Internet? Construir Discourse sin conexión a Internet es… complicado.

Si el servidor puede acceder a Internet, que pueda enviar correos electrónicos no será un problema.

Constrúyelo en una conexión pública, agrega una entrada DNS dentro de tu VPN a la IP privada y luego desactiva el acceso público.

No uses Let’s Encrypt, ya que las actualizaciones de certificados fallarán.

No podrás actualizarlo fácilmente, pero si lo estás aislando, estoy seguro de que eso ya era obvio.

El correo electrónico es fundamental para Discourse; sin él, muchas cosas no funcionarán.

Gracias por intentar ayudar. Supongo que tengo que elaborar un poco más.

Primero debería explicar qué parte conozco bien y cuál no ;). Entiendo bastante bien la parte de bajo nivel. Direcciones IP, TCP, etc. Pero no tengo experiencia en las cosas que hace una aplicación web compleja. También sobre el correo electrónico: ¿Cómo se autentica un remitente de correo? ¿Cómo se verifica que no envíe spam no autorizado? (No espero que ustedes me expliquen todo eso, solo aclarar mis preguntas…)

No tengo una infraestructura completa de VPN empresarial aquí; lo único que tengo actualmente es una subred VPN privada y reglas a nivel de IP.

La configuración es así: el servidor tiene un dominio accesible públicamente, pero todos los puertos están cerrados excepto el punto de entrada de la VPN. Los clientes que se conectan a la VPN obtienen una dirección 10.0.x.x. Luego, el servidor es accesible en 10.0.0.1:80.

Mi entendimiento (y creo que estoy equivocado aquí) es que el servidor espera ser accesible bajo su propio dominio.

Digamos que tengo el dominio xyz.com, que resuelve a la IP pública 8.7.6.5. Los clientes usan este dominio/IP solo para el túnel. Una vez configurado el túnel, sus navegadores se conectan a 10.0.0.1.

Como ya dije, no tengo experiencia con Discourse. Lo que espero que Discourse use su propio dominio para son las acciones de redirección. Por ejemplo, redirigir a nuevos clientes que abren 10.0.0.1 hacia 10.0.0.1/login.php. (O algo similar, solo como ejemplo). Si Discourse los redirigiera a .xyz Domain Names | Join Generation XYZ, se perderían, ya que el servidor no es accesible desde fuera de la VPN. Este es el tipo de problema que asumo que se evita configurando una dirección interna.

En cuanto al correo, necesito contactar servidores de correo externos. ¡El internet público es accesible en cualquier momento! Aunque no sé mucho sobre este tema. Solo espero que conectar a un servidor de correo público diciendo “oye, soy 10.0.0.1, por favor envíame algunos correos” no funcione, ya que estoy usando una dirección IP privada. Aquí asumo que necesito una dirección pública.

Leyendo sus respuestas con optimismo, asumo que el dominio configurado no se usa para las sesiones HTTP de los clientes. Si el servidor es accesible bajo una IP privada y me conecto a esa IP, todos los enlaces y redirecciones que se refieren a sí mismos son relativos, por lo que el usuario no es redirigido al dominio que el servidor espera que se use para la conexión. Solo puedo configurar xyz.com como dominio y aún así abrir Discourse en el navegador con 10.0.0.1, sin ser redirigido a direcciones de xyz.com (que no funcionarían).

Espero que mi pregunta sea algo clara. ¡Perdón por ser tan confuso!
Ah, y HTTPS no es necesario. Incluso prefiero no usarlo: estoy dentro de mi túnel y los usuarios no necesitan estar separados de forma segura. Me gustaría saltarme todos estos problemas con certificados y nombres de host coincidentes.

Eso depende del servidor de correo. Supongamos que usarás un servicio de correo como MailGun, SendGrid, etc. Por lo general, se autentican mediante una API como una URL más usuario/contraseña.

Mientras el servidor pueda alcanzar IPs externas (solo filtrado entrante), no deberías tener problemas para conectarte al servicio de correo.

Especialmente si el dominio se resuelve a la correcta IP.

Ni siquiera necesitarías abrir los puertos para la instalación. Porque puedes acceder al dominio example.com con la VPN si tienes el dominio apuntando a la IP privada al usar el túnel VPN.

No estoy tan seguro de que Discourse solo use URLs relativas; casi seguro que no. Pero puedes cambiar los registros DNS en el dominio de tal manera que tengas dos registros A: uno (el primero) apuntando a la dirección 10.0.0.1 y un segundo apuntando a la IP pública 8.7.6.5. Esto podría ser complicado a veces al resolver las direcciones y la caché, etc., pero podrías intentarlo.

Puedes hacer que xyz.com se resuelva a 10.0.0.1.

Si el servidor puede acceder a internet, el único problema es que no podrás crear un certificado HTTPS de Let’s Encrypt.

Aquí tienes una pregunta para ti: ¿qué logra tu VPN que SSL no lograría?

Una instancia de Discourse solo por invitación con SSL ya logra autenticación y cifrado. ¿Qué aporta una VPN?

Tengo otros servicios en ejecución que necesitan estar protegidos. Y me gusta la idea de tener solo un puerto no típico abierto.

Pero tienes razón: debería considerar relajar ese requisito y permitir que Discourse se ejecute en la interfaz pública, con SSL.

Gracias a todos ustedes. Supongo que ya tengo mis cosas resueltas:

  • Para un servidor web ejecutándose dentro de la VPN, el servidor VPN debe actuar también como DNS. El DNS interno debería resolver el mismo dominio a una IP interna, que se resuelve públicamente a una IP externa. Y debería dejar de usar la IP del servidor en cualquier lugar; que el DNS se encargue de esta complejidad. Actualmente, mi VPN solo funciona a nivel de IP, y ni siquiera era consciente de estos detalles.
    Desventaja: Podría estropear todo el sitio web de todos los usuarios.
  • También podría tener el servidor web ejecutándose simplemente en un puerto público y dejar que SSL se encargue de la protección.
    Desventaja: Quedo expuesto a todo el mal del mundo real.