No puedo acceder a wp-admin desde WAN haciendo NAT?

Iniciado por Drakaris, 6 Noviembre 2019, 00:14 AM

0 Miembros y 2 Visitantes están viendo este tema.

Drakaris

Hola, al instalar LAMP en mi servidor RPi3, creé tres VirtualHosts en apache2:

  • Para trabajos de HTML/CSS (80)
  • Proyecto personal (puerto 8080)
  • Wordpress (puerto 8000)

configuré el router para que  cuando vaya a mi dominio "losheredia.ddns.net:8000" se redirija al puerto 8000 del server:

Lista de Servidores Virtuales
Nombre          WAN              IP LAN           LAN       Protocolo   Estado   Opciones
....
wordpress   8000   192.168.0.2   8000   TCP           Activado   Modificar/Eliminar


/etc/apache2/sites-enabled/000-default.conf

<VirtualHost *:80>
       # The ServerName directive sets the request scheme, hostname and port that
       # the server uses to identify itself. This is used when creating
       # redirection URLs. In the context of virtual hosts, the ServerName
       # specifies what hostname must appear in the request's Host: header to
       # match this virtual host. For the default virtual host (this file) this
       # value is not decisive as it is used as a last resort host regardless.
       # However, you must set it for any further virtual host explicitly.
       #ServerName www.example.com

       ServerAdmin webmaster@localhost
       DocumentRoot /home/webserver

       # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
       # error, crit, alert, emerg.
       # It is also possible to configure the loglevel for particular
       # modules, e.g.
       #LogLevel info ssl:warn

       ErrorLog ${APACHE_LOG_DIR}/error.log
       CustomLog ${APACHE_LOG_DIR}/access.log combined

       # For most configuration files from conf-available/, which are
       # enabled or disabled at a global level, it is possible to
       # include a line for only one particular virtual host. For example the
       # following line enables the CGI configuration for this host only
       # after it has been globally disabled with "a2disconf".
       #Include conf-available/serve-cgi-bin.conf
</VirtualHost>
<VirtualHost *:8080>
       ServerName GTE
       ServerAdmin webmaster@localhost
       #ServerAlias pruebas2.local
       DocumentRoot /home/gte/
       ErrorLog ${APACHE_LOG_DIR}/error_gte.log
       CustomLog ${APACHE_LOG_DIR}/access_gte.log combined
</VirtualHost>
<VirtualHost *:8000>
       ServerName wordpress
       ServerAdmin webmaster@localhost
       DocumentRoot /home/wordpress/
       ErrorLog ${APACHE_LOG_DIR}/error_wordpress.log
       CustomLog ${APACHE_LOG_DIR}/access_wordpress.log combined
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

/etc/apache2/sites-available/000-default.conf

<VirtualHost *:80>
       # The ServerName directive sets the request scheme, hostname and port that
       # the server uses to identify itself. This is used when creating
       # redirection URLs. In the context of virtual hosts, the ServerName
       # specifies what hostname must appear in the request's Host: header to
       # match this virtual host. For the default virtual host (this file) this
       # value is not decisive as it is used as a last resort host regardless.
       # However, you must set it for any further virtual host explicitly.
       #ServerName www.example.com

       ServerAdmin webmaster@localhost
       DocumentRoot /home/webserver

       # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
       # error, crit, alert, emerg.
       # It is also possible to configure the loglevel for particular
       # modules, e.g.
       #LogLevel info ssl:warn

       ErrorLog ${APACHE_LOG_DIR}/error.log
       CustomLog ${APACHE_LOG_DIR}/access.log combined

       # For most configuration files from conf-available/, which are
       # enabled or disabled at a global level, it is possible to
       # include a line for only one particular virtual host. For example the
       # following line enables the CGI configuration for this host only
       # after it has been globally disabled with "a2disconf".
       #Include conf-available/serve-cgi-bin.conf
</VirtualHost>
<VirtualHost *:8080>
       ServerName GTE
       ServerAdmin webmaster@localhost
       #ServerAlias pruebas2.local
       DocumentRoot /home/gte/
       ErrorLog ${APACHE_LOG_DIR}/error_gte.log
       CustomLog ${APACHE_LOG_DIR}/access_gte.log combined
</VirtualHost>
<VirtualHost *:8000>
       ServerName wordpress
       ServerAdmin webmaster@localhost
       DocumentRoot /home/wordpress/
       ErrorLog ${APACHE_LOG_DIR}/error_wordpress.log
       CustomLog ${APACHE_LOG_DIR}/access_wordpress.log combined
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet


y toda la configuración de wordpress esta bién (esta instalada en /home/wordpress/), en LAN va todo bien, pero al acceder desde el exterior (WAN) e inserto en el navegador "losheredia.ddns.net:8000" me accede a la página que estoy creando pero si accedo a "losheredia.ddns.net:8000/wp-admin" se queda cargando...

También pasa que me devuelve la ip local (http://192.168.0.2:8000) al hacer http://losheredia.ddns.net:8000


Temo que es alguna problematica de puertos. Mi pregunta es, ¿porque al acceder al losheredia.ddns.net:8000 puedo acceder pero al losheredia.ddns.net:8000/wp-admin no puedo?
Lo increible, no es lo que ves, sino como es

MinusFour

No es error de apache, es error de tu wordpress. Tu servidor me contesta correctamente con la instalación de wordpress pero tu HTML tiene rutas apuntando a tu ip privada. Por lo que significa que tu wordpress está mal configurado.

Drakaris

#2
Cita de: MinusFour en  6 Noviembre 2019, 00:32 AM
No es error de apache, es error de tu wordpress. Tu servidor me contesta correctamente con la instalación de wordpress pero tu HTML tiene rutas apuntando a tu ip privada. Por lo que significa que tu wordpress está mal configurado.

Es tema de puertos o urls?

Además en el colegio me redirreccionaba a http://192.168.0.2:8000/wp-admin, que es aquello que provoca que me de la ip local y no la wan?
Lo increible, no es lo que ves, sino como es

MinusFour

Cita de: Drakaris en  6 Noviembre 2019, 00:37 AM
Es tema de puertos o urls?

URLs. No hay ninguna URL cuando cargo tu wordpress que apunte a "losheredia.ddns.net:8000". Todas las URLs apuntan a tu IP privada.

Drakaris

Cita de: MinusFour en  6 Noviembre 2019, 00:44 AM
URLs. No hay ninguna URL cuando cargo tu wordpress que apunte a "losheredia.ddns.net:8000". Todas las URLs apuntan a tu IP privada.

Si y me fijé que me da una ip local

Es decir, cuando hago http://losheredia.ddns.net:8000/wp-admin me da http://192.168.0.2:8000/wp-admin haciendo así que no me vaya.
Pero en losheredia.ddns.net:8000 va bien.

Lo increible, no es lo que ves, sino como es

Drakaris

#5
Ya puede solucionarlo. El problema estaba en que, en la raiz no hay dirreccionamiento de url por la cual no afecta tanto entrar con el dominio o por ip privada pero una vez quieres entrar en wp-admin, el wp-admin redirecciona la url a la ip privada auque estes accediendo desde WAN, ya que esta configurado en el panel de wordpress, inserté esto en wp-config en mi caso (/home/wordpress/wp-config.php):


define('WP_HOME','http://losheredia.ddns.net');
define('WP_SITEURL','http://losheredia.ddns.net');


Con esto le estas diciendo a wordpress que las urls sean de tipo "htttp://losheredia.ddns.net/*". También si tienes phpmyadmin modifica la base de datos de wordpress, tabla wp_options. Mas información en https://kinsta.com/es/base-de-conocimiento/cambiar-wordpress-url/

Ahora si esto está configurado y el NAT esta bien configurado al acceder a http://losheredia.ddns.net:8000 podrás acceder a la web y si se cargan las imagenes significa que tienen acceso al panel de administración de wordpress.

Ahora toca en LAN, ya que si accedemos a 192.168.0.2/wp-admin lo encontrará pero sin formato, así que lo que debemos de hacer es. En el ordenador donde queremos acceder  por LAN a wp-admin/ debemos de modificar el archivo /etc/hosts y insertar esta linea:
192.168.0.2           losheredia.ddns.net

y en el host del servidor añadir el /etc/hosts:
127.0.0.1               losheredia.ddns.net

Para acceder desde LAN con esta configuración sería igual a la que si estuvieramos en WAN
http://losheredia.ddns.net/wp-admin

Así puedes acceder tanto en LAN como WAN y trabajar.
Lo increible, no es lo que ves, sino como es

WHK

Dos cosas:

Primero, eso pasó porque instalaste wordpress usando tu ip local en ves de la externa, Wordpress no es friendly al momento de migrar de un dominio a otro, debes modificar muchas cosas incluyendo configuraciones en la base de datos, temas, serializaciones, etc, es un verdadero parto. Si tu wordpress está recien instalado entonces te recomiendo que lo elimines y lo vuelvas a instalar pero usando el dominio externo.

Por otro lado tienes un problema con el servername del host virtual del apache:

ServerName wordpress

El ServerName en el virtualhost indica el dominio que se usará para acceder al sitio web, o sea, el apache tomará de tu cabecera http el host que quieres acceder y si existe ese host en tu host virtual entonces lo utilizará. Talves en tu caso lo usaste como traducción a tu host local.

Debes dejarlo masomenos así:

ServerName losheredia.ddns.net

Y la próxima ves debes acostumbrarte a crear archivos específicos para host virtuales específicos, no es buena idea usar el 000 default para rutear tus sitios personales sino cuando alguien acceda por ip a tu servidor el apache no śabrá como reaciconar y mostrará tu wordpress y causará fallas en las urls o podría incluso abrir problemas de seguridad.

Saludos.

Drakaris

Cita de: WHK en  6 Noviembre 2019, 15:00 PM
Dos cosas:

Primero, eso pasó porque instalaste wordpress usando tu ip local en ves de la externa, Wordpress no es friendly al momento de migrar de un dominio a otro, debes modificar muchas cosas incluyendo configuraciones en la base de datos, temas, serializaciones, etc, es un verdadero parto. Si tu wordpress está recien instalado entonces te recomiendo que lo elimines y lo vuelvas a instalar pero usando el dominio externo.

Por otro lado tienes un problema con el servername del host virtual del apache:

ServerName wordpress

El ServerName en el virtualhost indica el dominio que se usará para acceder al sitio web, o sea, el apache tomará de tu cabecera http el host que quieres acceder y si existe ese host en tu host virtual entonces lo utilizará. Talves en tu caso lo usaste como traducción a tu host local.

Debes dejarlo masomenos así:

ServerName losheredia.ddns.net

Y la próxima ves debes acostumbrarte a crear archivos específicos para host virtuales específicos, no es buena idea usar el 000 default para rutear tus sitios personales sino cuando alguien acceda por ip a tu servidor el apache no śabrá como reaciconar y mostrará tu wordpress y causará fallas en las urls o podría incluso abrir problemas de seguridad.

Saludos.

Ok gracias, estas diciendo, que si yo unicamente en mi VirtualHost de puerto 8000 de /etc/apache2/sites-available/000-default.conf inserto esta linea:
ServerName losheredia.ddns.net
Tendría acceso tanto en WAN o LAN, indiferentemente de que red pongas? (192.168.0.2 en local y losheredia.ddns.net en WAN)

P.D:
Y si creo otro archivo en sites-available como por ejemplo wordpress.conf y en sites-enabled funcionaría? No lo hago para no liarla y por desconocimiento.

Gracias.
Lo increible, no es lo que ves, sino como es

MinusFour

Cita de: Drakaris en  7 Noviembre 2019, 16:31 PM
Ok gracias, estas diciendo, que si yo unicamente en mi VirtualHost de puerto 8000 de /etc/apache2/sites-available/000-default.conf inserto esta linea:
ServerName losheredia.ddns.net
Tendría acceso tanto en WAN o LAN, indiferentemente de que red pongas? (192.168.0.2 en local y losheredia.ddns.net en WAN)

P.D:
Y si creo otro archivo en sites-available como por ejemplo wordpress.conf y en sites-enabled funcionaría? No lo hago para no liarla y por desconocimiento.

Gracias.

Si no puedes acceder al sitio desde dentro de tu LAN con la IP externa entonces es problema de tu router. Es una medida de seguridad de los routers para evitar spoofing. Generalmente hay una opción de Nat Loopback o Hairpining o similar que simplemente redirige los paquetes de vuelta. Si no puedes hacer eso, la entrada que pusiste en /etc/hosts va muy bien. El problema es cada dispositivo LAN que quiera acceder al sitio va a necesitar usar

ServerName no te va ayudar mucho en este aspecto, porque tienes los servidores haciendo matching por puerto. Es buena idea poner un ServerName si tienes un FQDN. Si no, realmente no importa.

Preferiblemente, si manejas multiples sitios por instalación de Apache entonces lo recomendable es tener los sitiosi en sus archivos correspondientes. Los archivos van en sites-available, la carpeta de sites-enabled solo debería tener symlinks a los archivos en sites-available. De tal forma, puedes deshabilitar y habilitar sitios simplemente borrando los symlinks en sites-enabled. No escribas directamente sobre sites-enabled.

De hecho, debian y compañia tienen scripts: "a2ensite" y "a2dissite" que hacen precisamente esto.