Como tener un servidor web y servidor de correo gratis.


No quiero engañar a nadie. No es totalmente gratis, antes hay que tener un NAS y una IP publica lo que es lo mismo que no estar detrás de un CG-NAT, ademas de consumir electricidad.


Con respecto al NAS se pueden comprar uno o utilizar una PC y cargarle un sistema operativo para esto.

Tengan en cuenta que el servidor tendra que funcionar 24X7 y si utilizan una mini PC o raspberry pi no creo que lo soporte, mi experiencia es que una mini PC pario a los 9 meses y de ahi me pase a un NAS y discos para NAS.

Se puede usar un servidor linux (ubuntu, debian o los orientados a servidor NAS, nas4free, openvault, etc.).

La IP publica la necesitan para poder acceder al NAS por IPV4 o buscar una solución IPV6 to IPV4.

No voy a explicar como hacer una web ni que programas hay que cargar para esto ya que hay muchos sitios donde se explica como hacerlo.


Primera parte (servidor web)


Lo principal es tener el nombre de dominio y para ello yo uso Freenom.com.

Hay que suscribirse, despues ingresar un nombre de dominio(No usar google o similar) y nos da una lista de dominios gratis y de pago, seleccionan el deseado y siguen los pasos(creo que tambien tienen que crear un registro DNS tipo A como minimo). Podrian insertar los registros DNS y usar los servidores de Freenom pero yo prefiero usar los de dns.he.net por varias razones:

1- tiene actualizacion dinamica de DNS mucho mas facil para cuando cambia su IP y en un solo paso actualiza IPV + IPV6 .

2-tengo un script que les pasare mas adelante para actualizar DNS de dns.he.net.


En freenom tienen que actualizar los nameservers a los de dns.he.net que son

NSx.HE.NET, la x la suplantan por el 1 al 5.Una vez guardados se borran los registros de Freenom y hay que crearlos en He.net.

El dns.he.net agregan un nuevo dominio y colocando su dominio (midominio.tk), abren el dominio y agregan los registros del tpo A, AAAA, MX, TXT y CNAME.

Los registros que piden IP local son:

A IPV4

AAAA IPV6

Los registros NS son los del servidor DNS Nsx.HE.NET

CNAME redirigen a otro registro www.midominio.tk a midominio.tk

Para probar si estan bien y propagados usen whatismydns.net.

Ya podemos cargar nuestra web en el servidor

El ultimo paso es conseguir un certificado gratis de Lets’encript

Hay varias fmaneras de obtenerlo, Certbot, yo uso acme.sh porque puedo usar comodines para no tener que colocar todos los subdominios.En la web de github esta bien explicado como ejecutarlo y como poner una tarea para actualizarlo antes del vencimiento.

Con esto terminamos la primera parte y los desesperados ya pueden abrir su web segura.


Segunda parte (servidor mail)


Y la mas dificil…

Un poco de historia: cuando queria crear mi servidor web en todos los sitios leia que no se podia salir a internet, solo hacer correos internos en mi propia red porque al enviar correo seria detectado como spam asi que busque un servidor de correo proxy gratis y encontre SMTP2Go.com.Hay que registrarse y permite 1000 correos por mes limitado a 200 por dia, mas que suficiente para un servidor personal.

Instalamos un servidor de mail y hacemos la configuracion de correo, aconsejo usar midominio.tk y nada de pop. Imap. Smtp. Midominio.tk para complicar las cosas.

El correo quedaria como usuario@midominio.tk.

En SMTP2Go hay que seleccionar una free count y seguir los pasos.

Muy importante: en nuestro servidor de correo hay que seleccionar un servidor proxy SMTP y colocar mail.smtp2go.com, el usuario y contraseña con que entramos en SMTP2Go y el puerto seleccionado, normalmente el 2525.

Smtp2GO nos indicara que registros hay que crear en dns.he.net

Una vez finalizado probar si todo funciona.


Aqui el script para actualizar las IP del servidor.


Reemplazar midominio.tk por el dominio utilizado y CLAVE-registro-dinamico-HE.NET por la clave del registro dinamico de he.net en todas las ocurrencias del Script.


Script.sh

-----------------------------------------------------------------------------------------

#!/bin/bash

set -u


SALIDA="0"


for I in 1 2 3 4 5

do

IPDOM4="$(nslookup -type=A midominio.tk ns1.he.net | grep Address | sed -n '$p' | sed 's/1.1.1.1#53//g'| sed 's/Address://g' | sed 's/midominio.tk//g;s/^[ \t]*//')"

if [ "IPDOM4" != "" ]

then break

fi

IPDOM4="$(nslookup -type=A midominio.tk ns2.he.net | grep Address | sed -n '$p' | sed 's/1.1.1.1#53//g'| sed 's/Address://g' | sed 's/midominio.tk//g;s/^[ \t]*//')"

if [ "IPDOM4" != "" ]

then break

fi

IPDOM4="$(nslookup -type=A midominio.tk ns3.he.net | grep Address | sed -n '$p' | sed 's/1.1.1.1#53//g'| sed 's/Address://g' | sed 's/midominio.tk//g;s/^[ \t]*//')"

if [ "IPDOM4" != "" ]

then break

fi

IPDOM4="$(nslookup -type=A midominio.tk ns4.he.net | grep Address | sed -n '$p' | sed 's/1.1.1.1#53//g'| sed 's/Address://g' | sed 's/midominio.tk//g;s/^[ \t]*//')"

if [ "IPDOM4" != "" ]

then break

fi

done

# IPDOM4="$(curl -s -4 icanhazip.com)"

# IPDOMV6="$(nslookup -type=AAAA midominio.tk | grep address | sed 's/has AAAA address//g' | sed 's/midominio.tk//g;s/^[ \t]*//')"

# IPDOMV6="$(nslookup -type=AAAA midominio.tk | grep Address | sed -n '$p' | sed 's/1.1.1.1#53//g'| sed 's/Address://g' | sed 's/midominio.tk//g;s/^[ \t]*//')"


for I in 1 2 3 4 5

do

IPDOM6="$(nslookup -type=AAAA midominio.tk ns1.he.net | grep Address | sed -n '$p' | sed 's/1.1.1.1#53//g'| sed 's/Address://g' | sed 's/midominio.tk//g;s/^[ \t]*//')"

if [ "IPDOM6" != "" ]

then break

fi

IPDOM6="$(nslookup -type=AAAA midominio.tk ns2.he.net | grep Address | sed -n '$p' | sed 's/1.1.1.1#53//g'| sed 's/Address://g' | sed 's/midominio.tk//g;s/^[ \t]*//')"

if [ "IPDOM6" != "" ]

then break

fi

IPDOM6="$(nslookup -type=AAAA midominio.tk ns3.he.net | grep Address | sed -n '$p' | sed 's/1.1.1.1#53//g'| sed 's/Address://g' | sed 's/midominio.tk//g;s/^[ \t]*//')"

if [ "IPDOM6" != "" ]

then break

fi

IPDOM6="$(nslookup -type=AAAA midominio.tk ns4.he.net | grep Address | sed -n '$p' | sed 's/1.1.1.1#53//g'| sed 's/Address://g' | sed 's/midominio.tk//g;s/^[ \t]*//')"

if [ "IPDOM6" != "" ]

then break

fi

done


# Consulta las IP locales


MyIPV4="$(curl -4 ifconfig.me)"

if [ "MyIPV4" != "" ]

then

MyIPV4="$(curl -s -4 icanhazip.com)"

if [ "MyIPV4" == "" ]

then

echo "MyIPV4 esta vacio"

fi

fi


MyIPV6="$(ip addr show | grep 'scope global dynamic' | sed 's/inet6//' | sed 's\/64 scope global dynamic\\' | sed 's/ //g')"



echo "IPDOMV4: $IPDOM4"

echo " MyIPV4: $MyIPV4"

echo "IPDOMV6: $IPDOM6"

echo " MyIPV6: $MyIPV6"


if [ "$IPDOM4" != "$MyIPV4" ]

then

curl -4 "midominio.tk:CLAVE-registro-dinamico-HE.NET@dyn.dns.he.net/nic/update?hostname=midominio.tk"

echo -n "DNS4 actualizada"

SALIDA="1"

fi

if [ "$IPDOM6" != "" ]

then

if [ "$IPDOM6" != "$MyIPV6" ]

then

curl -6 "midominio.tk:CLAVE-registro-dinamico-HE.NET@dyn.dns.he.net/nic/update?hostname=midominio.tk"

echo -n "DNS6 actualizada"

SALIDA="1"

fi

else

echo -n "Mi IPv6 esta vacio\n"

SALIDA="1"

fi

if [ "$SALIDA" == "1" ]

then

exit 1

fi

exit 0

------------------------------------------------------------------------------------------