Merge branch 'master' of gitlab.com:naortega/ceu-notes

This commit is contained in:
Nicolás A. Ortega Froysa 2022-05-04 15:42:46 +02:00
commit 02be4e23db
28 changed files with 1631 additions and 384 deletions

105
1/GBD/t6-ex-nortega.sql Normal file
View File

@ -0,0 +1,105 @@
SET SERVEROUTPUT ON;
-- ej1
/* Declara una variable departamento que tenga como tipo de dato una fila
* completa de la tabla dept.
*
* Después, mediante un cursor implícito, guarda en esa variable departamento la
* fila de la tabla dept cuyo campo loc vale CHICAGO. Para terminar, utiliza un
* bucle FOR que recorra todas las letras del nombre (dname) de la fila guardada
* en la variable departamento y vaya mostrando en cada iteración, cada letra
* de dname.
*/
DECLARE
    departamento dept%ROWTYPE;
BEGIN
    SELECT * INTO departamento FROM dept WHERE loc='CHICAGO';
    FOR i IN 1..LENGTH(departamento.dname)
    LOOP
        dbms_output.put_line(SUBSTR(departamento.dname,i,1));
    END LOOP;
END;
/
-- ej2
/*
* Crea un tipo de dato registro con los campos id (tipo de dato igual a deptno de
* la tabla dept) y nombre (tipo de dato igual a dname de la tabla dept) y declara
* una variable departamento del tipo de ese registro. Ahora usa un cursor
* implícito para guardar en esa variable departamento el deptno y el dname de la
* fila de la tabla dept cuyo deptno vale 10. Para terminar, muestra por pantalla
* el id y el nombre de la variable departamento obtenido.
*/
DECLARE
    TYPE DEPT_DATA IS RECORD(
        id dept.deptno%type,
        nombre dept.dname%type);
    departamento DEPT_DATA;
BEGIN
    SELECT deptno, dname INTO departamento
        FROM dept WHERE deptno=10;
    dbms_output.put_line(departamento.id || ' ' ||
        departamento.nombre);
END;
/
-- ej3
/*
* Se necesita un registro para los empleados y otro para las localidades.
*
* El registro de empleados debe tener los siguientes campos: id (tipo de dato
* igual que el campo empno de la tabla emp), nombre (tipo de dato igual que el
* campo ename de la tabla emp), sueldo (tipo de dato igual que el campo sal de la
* tabla emp), localidad (tipo de dato igual que el registro de localidades).
*
* El registro de localidades debe tener los siguientes campos: ref (varchar
* tamaño 3 con valor MAI), localidad varchar tamaño 50 con valor MAIRENA,
* provincia (varchar tamaño 50 con valor SEVILLA) y cp (int tamaño 5 con valor
* 41927).
*
* Se quiere declarar una variable del tipo registro empleado y un cursor
* explícito que se traiga los campos empno, ename y sal de la tabla emp.
*
* Recorre todas las filas del cursor declarado con un bucle LOOP, guardando los
* datos extraídos en la variable del tipo registro empleado.
*
* En cada iteración del bucle LOOP muestra por pantalla id, nombre, sueldo, ref
* de localidad, localidad de localidad, provincia de localidad y cp de
* localidad.
*/
DECLARE
    TYPE LOC_DATA IS RECORD(
        ref VARCHAR(3) := 'MAI',
        localidad VARCHAR(50) := 'MAIRENA',
        provincia VARCHAR(50) := 'SEVILLA',
        cp INT(5) := 41927);
    TYPE EMP_DATA IS RECORD(
        id emp.empno%type,
        nombre emp.ename%type,
        sueldo emp.sal%type,
        loc LOC_DATA);
    empl EMP_DATA;
    CURSOR empls IS SELECT empno, ename, sal FROM emp;
BEGIN
    OPEN empls;
    LOOP
        FETCH empls INTO empl.id, empl.nombre, empl.sueldo;
        EXIT WHEN empls%notfound;
        dbms_output.put_line('-----');
        dbms_output.put_line('Empleado número ' || empl.id);
        dbms_output.put_line('Nombre: ' || empl.nombre);
        dbms_output.put_line('Sueldo: ' || empl.sueldo);
        dbms_output.put_line('Referencia de localidad: ' || empl.loc.ref);
        dbms_output.put_line('Nombre de localidad: ' || empl.loc.localidad);
        dbms_output.put_line('Provincia de localidad: ' || empl.loc.provincia);
        dbms_output.put_line('Código postal de localidad: ' || empl.loc.cp);
    END LOOP;
    CLOSE empls;
END;
/

Binary file not shown.

View File

@ -0,0 +1,399 @@
\documentclass[12pt,a4paper]{article}
\usepackage[spanish]{babel}
\usepackage{hyperref}
\usepackage{graphicx}
\usepackage{subcaption}
\title{Tema XI Ejercicio I: Instalación De Un S.O. De Servidor}
\author{Nicolás A. Ortega Froysa}
\begin{document}
\maketitle
\pagebreak
\tableofcontents
\pagebreak
\section{Introducción}
El objetivo de esta práctica es la instalación de un sistema operativo para el
propósito de ser usado como servidor (i.e.\ sin entorno gráfico), que
preferiblemente venga ya instalado con el servicio SSH que no servirá para
interactuar con la máquina de manera remota.
Este tipo de sistema nos es útil para aquellos casos donde la máquina no tiene
necesidad de mostrar ningún entorno gráfico, ya que su usuario no lo usa de
forma local, sino a través de unos servicios de red que se proveen (e.g.\
servidor web). En estos casos no es necesario ni que el ordenador esté conectado
a una pantalla para cumplir su función.
\section{Requisitos}
\begin{figure}[!htb]
\centering
\includegraphics[width=0.75\linewidth]{imgs/00-download.png}
\caption{Download.}
\label{fig:download}
\end{figure}
Hay muchas distribuciones GNU/Linux que se pueden usar como S.O. para un
servidor. En el caso de esta práctica, se documentará la instalación de Debian
11 (Bullseye). Para ello, se descarga la ISO de su página web, \url{debian.org},
que nos descargará la versión estable más reciente (actualmente Bullseye) de la
ISO de instalación por red que se denominan {\tt netinst} (figura
\ref{fig:download}).
Cuando ya esté completa la descarga, se tiene que instalar la ISO en un
dispositivo de instalación (e.g.\ CD, {\em pendrive}, tarjeta SD). En GNU/Linux
esto se puede hacer con el comando siguiente, cambiando {\tt \<dispositivo\>}
con el nombre del archivo de dispositivo donde queremos instalar la ISO:
\begin{verbatim}
$ dd if=debian-11.3.0-amd64-netinst.iso \
of=<dispositivo> bs=1M status=progress
\end{verbatim}
Una vez instalada la ISO en el dispositivo, iniciamos la máquina que nos servirá
de servidor y la arrancamos desde el dispositivo insertado.
\section{Configuración}
\begin{figure}[!htb]
\centering
\includegraphics[width=0.75\linewidth]{imgs/01-install-menu.png}
\caption{Install menu.}
\label{fig:install-menu}
\end{figure}
Una vez iniciada la máquina, nos abrirá un menú para seleccionar qué tipo de
instalación (o mejor dicho: instalador) queremos usar (figura
\ref{fig:install-menu}). Como un servidor no tiene por qué tener tarjeta
gráfica, usamos la instalación normal (no gráfica).
\subsection{Navegación Y Selección}
Como no tenemos acceso a un ratón para el proceso de esta instalación, tendremos
que usar el teclado para todo. Generalmente es bastante intuitivo usarse. Se
navega entre las distintas opciones con las flechas del teclado, y se selecciona
con el espacio o {\em Enter}. Luego, para salir de la selección principal y
entrar en la selección de {\em Continuar} o {\em Atrás}, se usa la tecla {\em
Tab}.
\subsection{Localización}
\begin{figure}[!htb]
\centering
\begin{subfigure}[tb]{0.45\textwidth}
\centering
\includegraphics[width=0.95\linewidth]{imgs/02-language-select.png}
\caption{Language select.}
\label{fig:language-select}
\end{subfigure}
\hfill
\begin{subfigure}[tb]{0.45\textwidth}
\centering
\includegraphics[width=0.95\linewidth]{imgs/03-location-select.png}
\caption{Location select.}
\label{fig:location-select}
\end{subfigure}
\hfill
\begin{subfigure}[tb]{0.45\textwidth}
\centering
\includegraphics[width=0.95\linewidth]{imgs/04-encoding-select.png}
\caption{Locale select.}
\label{fig:encoding-select}
\end{subfigure}
\caption{Locale configuration.}
\end{figure}
Lo primero que se nos pedirá es configurar la localización de nuestra máquina
(e.g.\ lengua, teclado, etc.). En primer lugar, definimos la lengua que queremos
usar para nuestro servidor (figura \ref{fig:language-select}). Usaremos el
inglés ya que tiene más soporte es confunde mucho cuando en la informática se
mezcla el inglés y el español. Notamos que aunque la lengua usada por el
servidor sea, por ejemplo, inglés, no quiere decir que no pueda proveer
servicios en otra, como el español. Sólo se trata de que en cuanto a la
administración del servidor en sí todos los mensajes nos van a salir en inglés.
En segundo lugar definimos la localización física de la máquina. En nuestro
caso: {\em Spain} (España). Como hemos puesto el inglés como lengua de nuestro
servidor, nos mostrará el principio sólo aquellos países donde se habla el
inglés como primera lengua. Como no queremos ninguno de éstos seleccionamos {\em
others} $\rightarrow$ {\em Europe} $\rightarrow$ {\em Spain} (figura
\ref{fig:location-select}).
Finalmente, definimos el {\em locale}. Como las lenguas no sólo dependen de
idioma, sino también de dialecto, y los caractéres que se necesitan pueden ser
diferentes dependiendo de esto, definimos el locale por el dialecto específico
que queremos usar. Como lo más cómodo (para mí) es el inglés estadounidense,
especificamos {\tt en\_US.UTF-8} (figura \ref{fig:encoding-select}).
\subsection{Red}
\begin{figure}[!htb]
\centering
\begin{subfigure}[tb]{0.45\textwidth}
\includegraphics[width=0.95\linewidth]{imgs/06-set-hostname.png}
\caption{Set hostname.}
\label{fig:set-hostname}
\end{subfigure}
\hfill
\begin{subfigure}[tb]{0.45\textwidth}
\includegraphics[width=0.95\linewidth]{imgs/07-set-domain-name.png}
\caption{Set domain name.}
\label{fig:set-domain-name}
\end{subfigure}
\caption{Network configuration.}
\end{figure}
A continuación nos pedirá configurar la red. Lo primero es definir el {\em
hostname}, que sería el nombre de red que tiene la máquina (figura
\ref{fig:set-hostname}). Esto es útil para la red interna para reconocer y
encontrar ordenadores por un nombre en vez de su dirección IP. También nos
permite distinguir entre máquinas dentro de la red en cuanto a archivos de {\em
logs}, correo electrónico, y demás.
En el caso de un servidor, es especialmente importante definir el {\em domain
name} (figura \ref{fig:set-domain-name}). Si es un servidor con acceso a la red
externa, esto debe de tener el nombre que usaremos en la red externa (e.g.\ {\tt
mi-servidor.es}). Como en nuestro caso estamos creando un servidor de pruebas de
uso interno, usaremos el dominio {\tt home-server.local}.
\subsection{Usuarios}
\begin{figure}[!htb]
\centering
\begin{subfigure}[tb]{0.45\textwidth}
\centering
\includegraphics[width=0.95\linewidth]{imgs/08-set-root-password.png}
\caption{Set root password.}
\label{fig:set-root-password}
\end{subfigure}
\hfill
\begin{subfigure}[tb]{0.45\textwidth}
\centering
\includegraphics[width=0.95\linewidth]{imgs/09-set-user-full-name.png}
\caption{Set user full name.}
\label{fig:set-user-full-name}
\end{subfigure}
\caption{User configuration.}
\end{figure}
A continuación configuramos los usuarios de nuestro sistema. En primer lugar,
configuramos la contraseña del usuario {\em Root} (figura
\ref{fig:set-root-password}), que es el usuario administrador del sistema. Este
usuario conviene que tenga una contraseña muy segura, ya que tiene todos los
permisos. Nos pedirá también verificar la contraseña, introduciendo ésta de
nuevo.
Después nos pide crear un usuario normal (figura \ref{fig:set-user-full-name}).
Para esto, primero nos pide el nombre completo, que se usa simplemente por
motivos estéticos y burocráticos. Posteriormente nos pedirá el nombre de
usuario, que es lo que usaremos para entrar en nuestro usuario en la máquina.
Para este nombre, hemos de evitar espacios (e.g.\ {\tt nicolas}). Finalmente
definimos la contraseña para este usuario.
\pagebreak
\subsection{Zona Horaria}
\begin{figure}[!htb]
\centering
\includegraphics[width=0.75\linewidth]{imgs/10-set-timezone.png}
\caption{Set timezone.}
\label{fig:set-timezone}
\end{figure}
Para tener la hora correcta, y poder sincronizar la hora con servidores
exteriores, es necesario definir nuestra zona horaria. Como ya habíamos
seleccionado el país antes como España, ahora nos mostrará tan sólo las zonas
horarias disponibles para nuestro país (figura \ref{fig:set-timezone}).
\subsection{Particionado Del Disco}
\begin{figure}[!htb]
\centering
\begin{subfigure}[tb]{0.45\textwidth}
\centering
\includegraphics[width=0.95\linewidth]{imgs/11-disk-setup-menu.png}
\caption{Disk setup menu.}
\label{fig:disk-setup-menu}
\end{subfigure}
\hfill
\begin{subfigure}[tb]{0.45\textwidth}
\centering
\includegraphics[width=0.95\linewidth]{imgs/12-select-partition-scheme.png}
\caption{Select partition scheme.}
\label{fig:select-partition-scheme}
\end{subfigure}
\hfill
\begin{subfigure}[tb]{0.45\textwidth}
\centering
\includegraphics[width=0.95\linewidth]{imgs/13-partitioning-overview.png}
\caption{Partitioning overview.}
\label{fig:partitioning-overview}
\end{subfigure}
\caption{Disk partitioning.}
\end{figure}
Para poder instalar debidamente el sistema operativo, hemos de particionar el
formatear el disco. Del formateo se encargará directamente el instalador, que
usará por defecto el formato EXT4.
La primera pantalla nos mostrará varias opciones para el particionado del disco
(figura \ref{fig:disk-setup-menu}). Como queremos usar el disco entero, y no
tenemos otros sistemas instalados, seleccionamos la primera opción: <<Guided --
use entire disk>>.
Para el particionado del disco, podemos dividir el sistema de archivos de
nuestro sistema en varias particiones. Lo más usual es que el directorio {\tt
/home/} tenga su propia partición, para poder separar los datos de usuario y los
archivos de sistema. En nuestro caso, no nos interesa, ya que como servidor los
usuarios no tendrán ficheros propios (por lo general). Seleccionamos la primera
opción: <<All files in one partition>> (figura
\ref{fig:select-partition-scheme}).
Finalizado esto, nos mostrará por pantalla un resumen de los cambios que se van
a realizar, y nos pedirá la confirmación (figura
\ref{fig:partitioning-overview}). Como esta acción es permanente y podemos
perder información que pueda haber en el disco anteriormente, la opción por
defecto es {\em no} hacer los cambios, luego entonces es necesario cambiar a
decir que sí.
\subsection{Instalación De Software}
\begin{figure}[!htb]
\centering
\begin{subfigure}[tb]{0.45\textwidth}
\centering
\includegraphics[width=0.95\linewidth]{imgs/15-scan-for-extra-installation-media.png}
\caption{Scan for extra installation media.}
\label{fig:scan-for-extra-installation-media}
\end{subfigure}
\hfill
\begin{subfigure}[tb]{0.45\textwidth}
\centering
\includegraphics[width=0.95\linewidth]{imgs/16-mirror-selection.png}
\caption{Mirror selection.}
\label{fig:mirror-selection}
\end{subfigure}
\hfill
\begin{subfigure}[tb]{0.45\textwidth}
\centering
\includegraphics[width=0.95\linewidth]{imgs/17-package-usage-survey.png}
\caption{Package usage survey.}
\label{fig:package-usage-survey}
\end{subfigure}
\hfill
\begin{subfigure}[tb]{0.45\textwidth}
\centering
\includegraphics[width=0.95\linewidth]{imgs/18-extra-packages.png}
\caption{Extra packages.}
\label{fig:extra-packages}
\end{subfigure}
\caption{Repository and package configuration/installation.}
\end{figure}
Para la instalación de {\em software} adicional, lo primero que nos va a
preguntar es por si queremos instalar algo de un dispositivo adicional (figura
\ref{fig:scan-for-extra-installation-media}). Se hace de los dispositivos ya que
es posible que la máquina no tenga acceso a {\em internet} por falta de los {\em
drivers} necesarios para los interfaces de red -- esto suele pasar con tarjetas
de Wi-Fi. Como en nuestro caso no nos hace falta, elegimos <<No>>.
A continuación pide que seleccionemos el espejo que se va a usar para descargar
paquetes software (figura \ref{fig:mirror-selection}). Son espejos porque todos
contienen los mismos paquetes (y las mismas versiones de cada paquete). Lo que
diferencia uno de otro es su localización. Se podrá descargar paquetes a mayor
velocidad de los servidores más cercanos físicamente que de los servidores más
lejanos. Como en nuestro caso estamos en España, elegimos cualquier espejo de
España.
También nos preguntará acerca de si queremos participar en el llamado <<Package
Usage Survey>> o <<Popularity Contest>> (figura \ref{fig:package-usage-survey}).
Se trata de que tu máquina enviará estadísticas anónimas a los servidores de
Debian que contendrán los paquetes que usas en tu máquina con el propósito de
saber qué paquetes son más populares y precisan de más atención de los
administradores.
Finalmente nos da algunas opciones de programas que instalar de forma adicional
(figura \ref{fig:extra-packages}). Las primeras opciones son de entornos
gráficos, que no nos sirven ya que vamos a montar un servidor. Sí que interesa
la instalación de un servidor web y servidor SSH. Lo primero nos permitirá
montar un sitio web en nuestra máquina, y lo segundo nos sirve para acceder a la
máquina de manera remota.
\subsection{GRUB}
\begin{figure}[!htb]
\centering
\begin{subfigure}[tb]{0.45\textwidth}
\centering
\includegraphics[width=0.95\linewidth]{imgs/19-grub-installation.png}
\caption{GRUB installation.}
\label{fig:grub-installation}
\end{subfigure}
\hfill
\begin{subfigure}[tb]{0.45\textwidth}
\centering
\includegraphics[width=0.95\linewidth]{imgs/20-select-disk-for-grub-installation.png}
\caption{Select disk for GRUB installation.}
\label{fig:select-disk-for-grub-installation}
\end{subfigure}
\caption{GRUB configuration.}
\end{figure}
El último paso de la instalación es de instalar y configurar GRUB, que nos sirve
para elegir el sistema que queremos inicializar, o la versión de kernel que
queremos usar. Como este es el único sistema que vamos a tener instalado,
instalamos GRUB (figura \ref{fig:grub-installation}). Es necesario especificar
el disco en el que queremos instalarlo (figura
\ref{fig:select-disk-for-grub-installation}), que como nuestra máquina tan sólo
tiene un disco, lo instalamos en aquel.
\subsection{Finalización}
\begin{figure}[!htb]
\centering
\begin{subfigure}[tb]{0.45\textwidth}
\centering
\includegraphics[width=0.95\linewidth]{imgs/21-installation-complete.png}
\caption{Installation complete.}
\label{fig:installation-complete}
\end{subfigure}
\hfill
\begin{subfigure}[tb]{0.45\textwidth}
\centering
\includegraphics[width=0.95\linewidth]{imgs/22-first-boot.png}
\caption{First boot.}
\label{fig:first-boot}
\end{subfigure}
\caption{Install completion.}
\end{figure}
Una vez que todo esté instalado y configurado nos pedirá reiniciar la máquina y
quitar el dispositivo de instalación (figura \ref{fig:installation-complete}).
En cuanto reiniciamos, mostrará por pantalla un {\em login} donde podemos meter
el usuario (igualmente podemos meter {\tt root}). Cuando nos pide la contraseña,
aunque no aparezca visiblemente ningún carácter en la pantalla, sí está grabando
las teclas para comparar (figura \ref{fig:first-boot}).
\section{Conclusión}
Es muchísimo más útil e intuitivo usar Debian para servidores que Windows Server
2008. Para empezar, no hay entorno gráfico, lo cual ahorramos recursos que
serían necesarios para servir a los clientes. El instalador de {\tt curses}
(i.e.\ el instalador no-gráfico) es también más bonito y me da nostalgia de mi
juventud.
\pagebreak
\section{Derechos de Autor y Licencia}
\noindent
Copyright \copyright\ \the\year\ Nicolás A. Ortega Froysa
<nicolas@ortegas.org> \\
\\
Este documento se distribuye bajo los términos y condiciones de la licencia
Creative Commons Attribution No Derivatives 4.0 International.
\end{document}

View File

@ -0,0 +1,15 @@
\babel@toc {spanish}{}\relax
\contentsline {section}{\numberline {1}Introducción}{3}{section.1}%
\contentsline {section}{\numberline {2}Requisitos}{3}{section.2}%
\contentsline {section}{\numberline {3}Configuración}{4}{section.3}%
\contentsline {subsection}{\numberline {3.1}Navegación Y Selección}{4}{subsection.3.1}%
\contentsline {subsection}{\numberline {3.2}Localización}{5}{subsection.3.2}%
\contentsline {subsection}{\numberline {3.3}Red}{6}{subsection.3.3}%
\contentsline {subsection}{\numberline {3.4}Usuarios}{7}{subsection.3.4}%
\contentsline {subsection}{\numberline {3.5}Zona Horaria}{8}{subsection.3.5}%
\contentsline {subsection}{\numberline {3.6}Particionado Del Disco}{8}{subsection.3.6}%
\contentsline {subsection}{\numberline {3.7}Instalación De Software}{10}{subsection.3.7}%
\contentsline {subsection}{\numberline {3.8}GRUB}{11}{subsection.3.8}%
\contentsline {subsection}{\numberline {3.9}Finalización}{12}{subsection.3.9}%
\contentsline {section}{\numberline {4}Conclusión}{12}{section.4}%
\contentsline {section}{\numberline {5}Derechos de Autor y Licencia}{13}{section.5}%

View File

@ -0,0 +1,27 @@
#!/bin/bash
if [ $# -lt 3 ]
then
echo "Son necesarias al menos 3 argumentos numéricos."
exit 1
fi
# a
echo "Se han introducido $# argumentos."
# b
SUM=0
for i in ${@:1:3}
do
SUM=$[$SUM+$i]
done
AVG=$(echo "scale=3; $SUM / 3" | bc)
echo $AVG
# c
echo $@
# d
echo $[$2 ** $3]

View File

@ -0,0 +1,13 @@
#!/bin/bash
# crear estructura:
mkdir -p /home/usuario/prueba/dir1/dir11
mkdir -p /home/usuario/prueba/dir2/dir41
mkdir -p /home/usuario/prueba/dir3/dir31
mkdir -p /home/usuario/prueba/dir4
# número de usuarios conectados
who | wc -l
# cuándo arrancó
uptime --pretty

View File

@ -0,0 +1,9 @@
3.a)
Quiere decir Ctrl
3.b)
i. Esc y después ':'
ii. Asumiendo que estamos en modo normal: ':wq'
NOTA: si hay algo entre comillas simples, es porque se interpreta lo que hay
dentro porque son comandos.

View File

@ -0,0 +1,25 @@
#!/bin/bash
function palindromo {
WORD=$1
REV=$(echo "$WORD" | rev)
if [ $WORD = $REV ]
then
echo "Es capicúa."
else
echo "No es capicúa."
fi
}
NUMERO=$1
if [ $NUMERO -lt 1000 ] || [ ${#NUMERO} -ne 5 ]
then
echo "Se necesita un número mayor que 1000 y con 5 cifras"
exit 1
fi
HALF=$(echo "scale=3; $NUMERO / 2" | bc)
echo $HALF
palindromo $NUMERO

View File

@ -0,0 +1,14 @@
#!/bin/bash
function impar {
LIM=$1
seq 1 2 $LIM
}
if [ ${#1} -ne 3 ]
then
echo "Se requiere un número de 3 cifras."
exit 1
fi
impar $1

View File

@ -0,0 +1,37 @@
<html>
<head>
</head>
<body>
<h1>Notas</h1>
<script type="text/javascript">
var nota1,nota2,nota3;
nota1=prompt('Ingrese 1ra. nota:','');
nota2=prompt('Ingrese 2da. nota:','');
nota3=prompt('Ingrese 3ra. nota:','');
//Convertimos los 3 string en enteros
nota1=parseInt(nota1);
nota2=parseInt(nota2);
nota3=parseInt(nota3);
var pro;
pro=(nota1+nota2+nota3)/3;
if (pro>=7)
{
document.write('promocionado');
}
else
{
if (pro>=4)
{
document.write('regular');
}
else
{
document.write('reprobado');
}
}</script>
</body>
</html>

View File

@ -0,0 +1,53 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/
xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Ejemplo de código JavaScript en el propio documento</title>
<script type="text/javascript">
/**function limita(maximoCaracteres) {
var elemento = document.getElementById("texto");
if(elemento.value.length >= maximoCaracteres ) {
return false;
}
else {
return true;
}
}
**/
function comprueba(){
var cuadrotxt = document.getElementById("elemento");
alert ("value; "+cuadrotxt.value+"\n type: "+cuadrotxt.type+"\n name: "+cuadrotxt.name);
alert ("elemento2: "+cuadrotxt.form.elemento2.value);
}
window.onload=function(){
if(document.forms.length > 0) {
if(document.forms[0].elements.length > 0) {
document.forms[0].elements[0].focus();
}
}
}
</script>
</head>
<body>
<form name="formulario" id="formulario" >
<input type="number" name="elemento" id="elemento" />
<input type="number" name="elemento2" id="elemento2" />
<textarea id="texto" onkeypress="return limita(100);"></textarea>
<input type="button" value="Enviar" onclick="this.value='enviando...';comprueba()"/>
</form>
</body>
</html>
<!--this.disabled=true;-->

View File

@ -0,0 +1,29 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Promedio de Notas</title>
<script type="text/javascript">
function average() {
var notaISO = parseInt(document.getElementById("notaISO").value);
var notaLMSGI = parseInt(document.getElementById("notaLMSGI").value);
var notaGBD = parseInt(document.getElementById("notaGBD").value);
var avg = (notaISO + notaLMSGI + notaGBD)/3;
document.getElementById("result").innerHTML = "<p>Resultado: " + avg + "</p>";
}
</script>
</head>
<body>
<h1>Calculadora Promedio Notas</h1>
<form onsubmit="event.preventDefault(); average()" >
<label>ISO:</label><br />
<input type="number" id="notaISO" name="notaISO" min="0" max="10" value="0" ><br />
<label>LMSGI:</label><br />
<input type="number" id="notaLMSGI" name="notaLMSGI" min="0" max="10" value="0" ><br />
<label>GBD:</label><br />
<input type="number" id="notaGBD" name="notaGBD" min="0" max="10" value="0" ><br />
<input type="submit" >
</form>
<div id="result" ></div>
</body>
</html>

View File

@ -0,0 +1,29 @@
<html>
<body>
<table>
<tr>
<th colspan="4" >Temporada:
{
doc("futbol1.xml")/marcador/competicion[id="1"]/temporada
}
-
Jornada:
{
doc("futbol1.xml")/marcador/competicion[id="1"]/jornada/id
}
</th>
</tr>
{
for $event in doc("futbol1.xml")/marcador/competicion[id="1"]/grupos/grupo[id="1"]/eventos/evento
return
<tr>
<td>{ string($event/id) }</td>
<td>{ string($event/equipolocal) } - { string($event/equipovisitante) }</td>
<td>{ string($event/resultadolocal) }</td>
<td>{ string($event/resultadovisitante) }</td>
</tr>
}
</tr>
</table>
</body>
</html>

View File

@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<marcador>
<competicion id="1"><nombre>LFP 1 DIVISION</nombre>
<competicion id="1">
<nombre>LFP 1 DIVISION</nombre>
<fase id="0"> </fase>
<jornada id="30" jornadaAnterior="https://www.marca.com/marcador/futbol/iphone/1/2021_22/fase0/jornada_29/marcador.xml" jornadaSiguiente="https://www.marca.com/marcador/futbol/iphone/1/2021_22/fase0/jornada_31/marcador.xml"></jornada>
<jornada id="30" jornadaAnterior="https://www.marca.com/marcador/futbol/iphone/1/2021_22/fase0/jornada_29/marcador.xml" jornadaSiguiente="https://www.marca.com/marcador/futbol/iphone/1/2021_22/fase0/jornada_31/marcador.xml"/>
<temporada>2021_22</temporada>
<grupos>
<grupo id="1">
@ -17,11 +18,13 @@
<tipodeporte>1</tipodeporte>
<escudoLocal>https://e00-marca.uecdn.es/assets/datos-deportivos/escudos/opta/png/ios/28px/2x/1450.png</escudoLocal>
<escudoVisitante>https://e00-marca.uecdn.es/assets/datos-deportivos/escudos/opta/png/ios/28px/2x/181.png</escudoVisitante>
<tv></tv>
<estadisticas></estadisticas>
<tv/>
<estadisticas/>
<alineaciones>https://www.marca.com/eventos/marcador/futbol/2021_22/la-liga/jornada_30/get_mal/alineaciones.html</alineaciones>
<comentariosLectores></comentariosLectores>
<previacronica>2</previacronica><enlaceDirecto>https://www.marca.com/eventos/marcador/futbol/2021_22/la-liga/jornada_30/get_mal/directo.xml</enlaceDirecto></evento>
<comentariosLectores/>
<previacronica>2</previacronica>
<enlaceDirecto>https://www.marca.com/eventos/marcador/futbol/2021_22/la-liga/jornada_30/get_mal/directo.xml</enlaceDirecto>
</evento>
<evento id="522007">
<fecha>02/04/2022 16:15</fecha>
<estado id="3">Finalizado</estado>
@ -32,11 +35,13 @@
<tipodeporte>1</tipodeporte>
<escudoLocal>https://e00-marca.uecdn.es/assets/datos-deportivos/escudos/opta/png/ios/28px/2x/855.png</escudoLocal>
<escudoVisitante>https://e00-marca.uecdn.es/assets/datos-deportivos/escudos/opta/png/ios/28px/2x/449.png</escudoVisitante>
<tv></tv>
<estadisticas></estadisticas>
<tv/>
<estadisticas/>
<alineaciones>https://www.marca.com/eventos/marcador/futbol/2021_22/la-liga/jornada_30/lev_vil/alineaciones.html</alineaciones>
<comentariosLectores></comentariosLectores>
<previacronica>-1</previacronica><enlaceDirecto>https://www.marca.com/eventos/marcador/futbol/2021_22/la-liga/jornada_30/lev_vil/directo.xml</enlaceDirecto></evento>
<comentariosLectores/>
<previacronica>-1</previacronica>
<enlaceDirecto>https://www.marca.com/eventos/marcador/futbol/2021_22/la-liga/jornada_30/lev_vil/directo.xml</enlaceDirecto>
</evento>
<evento id="522004">
<fecha>02/04/2022 18:30</fecha>
<estado id="3">Finalizado</estado>
@ -47,11 +52,13 @@
<tipodeporte>1</tipodeporte>
<escudoLocal>https://e00-marca.uecdn.es/assets/datos-deportivos/escudos/opta/png/ios/28px/2x/176.png</escudoLocal>
<escudoVisitante>https://e00-marca.uecdn.es/assets/datos-deportivos/escudos/opta/png/ios/28px/2x/186.png</escudoVisitante>
<tv></tv>
<estadisticas></estadisticas>
<tv/>
<estadisticas/>
<alineaciones>https://www.marca.com/eventos/marcador/futbol/2021_22/la-liga/jornada_30/cel_rma/alineaciones.html</alineaciones>
<comentariosLectores></comentariosLectores>
<previacronica>2</previacronica><enlaceDirecto>https://www.marca.com/eventos/marcador/futbol/2021_22/la-liga/jornada_30/cel_rma/directo.xml</enlaceDirecto></evento>
<comentariosLectores/>
<previacronica>2</previacronica>
<enlaceDirecto>https://www.marca.com/eventos/marcador/futbol/2021_22/la-liga/jornada_30/cel_rma/directo.xml</enlaceDirecto>
</evento>
<evento id="522002">
<fecha>02/04/2022 21:00</fecha>
<estado id="3">Finalizado</estado>
@ -62,11 +69,13 @@
<tipodeporte>1</tipodeporte>
<escudoLocal>https://e00-marca.uecdn.es/assets/datos-deportivos/escudos/opta/png/ios/28px/2x/175.png</escudoLocal>
<escudoVisitante>https://e00-marca.uecdn.es/assets/datos-deportivos/escudos/opta/png/ios/28px/2x/173.png</escudoVisitante>
<tv></tv>
<estadisticas></estadisticas>
<tv/>
<estadisticas/>
<alineaciones>https://www.marca.com/eventos/marcador/futbol/2021_22/la-liga/jornada_30/atm_ala/alineaciones.html</alineaciones>
<comentariosLectores></comentariosLectores>
<previacronica>2</previacronica><enlaceDirecto>https://www.marca.com/eventos/marcador/futbol/2021_22/la-liga/jornada_30/atm_ala/directo.xml</enlaceDirecto></evento>
<comentariosLectores/>
<previacronica>2</previacronica>
<enlaceDirecto>https://www.marca.com/eventos/marcador/futbol/2021_22/la-liga/jornada_30/atm_ala/directo.xml</enlaceDirecto>
</evento>
<evento id="522001">
<fecha>03/04/2022 14:00</fecha>
<estado id="3">Finalizado</estado>
@ -77,11 +86,13 @@
<tipodeporte>1</tipodeporte>
<escudoLocal>https://e00-marca.uecdn.es/assets/datos-deportivos/escudos/opta/png/ios/28px/2x/174.png</escudoLocal>
<escudoVisitante>https://e00-marca.uecdn.es/assets/datos-deportivos/escudos/opta/png/ios/28px/2x/954.png</escudoVisitante>
<tv></tv>
<estadisticas></estadisticas>
<tv/>
<estadisticas/>
<alineaciones>https://www.marca.com/eventos/marcador/futbol/2021_22/la-liga/jornada_30/ath_elc/alineaciones.html</alineaciones>
<comentariosLectores></comentariosLectores>
<previacronica>2</previacronica><enlaceDirecto>https://www.marca.com/eventos/marcador/futbol/2021_22/la-liga/jornada_30/ath_elc/directo.xml</enlaceDirecto></evento>
<comentariosLectores/>
<previacronica>2</previacronica>
<enlaceDirecto>https://www.marca.com/eventos/marcador/futbol/2021_22/la-liga/jornada_30/ath_elc/directo.xml</enlaceDirecto>
</evento>
<evento id="522008">
<fecha>03/04/2022 16:15</fecha>
<estado id="3">Finalizado</estado>
@ -92,11 +103,13 @@
<tipodeporte>1</tipodeporte>
<escudoLocal>https://e00-marca.uecdn.es/assets/datos-deportivos/escudos/opta/png/ios/28px/2x/185.png</escudoLocal>
<escudoVisitante>https://e00-marca.uecdn.es/assets/datos-deportivos/escudos/opta/png/ios/28px/2x/450.png</escudoVisitante>
<tv></tv>
<estadisticas></estadisticas>
<tv/>
<estadisticas/>
<alineaciones>https://www.marca.com/eventos/marcador/futbol/2021_22/la-liga/jornada_30/bet_osa/alineaciones.html</alineaciones>
<comentariosLectores></comentariosLectores>
<previacronica>2</previacronica><enlaceDirecto>https://www.marca.com/eventos/marcador/futbol/2021_22/la-liga/jornada_30/bet_osa/directo.xml</enlaceDirecto></evento>
<comentariosLectores/>
<previacronica>2</previacronica>
<enlaceDirecto>https://www.marca.com/eventos/marcador/futbol/2021_22/la-liga/jornada_30/bet_osa/directo.xml</enlaceDirecto>
</evento>
<evento id="522006">
<fecha>03/04/2022 18:30</fecha>
<estado id="3">Finalizado</estado>
@ -107,11 +120,13 @@
<tipodeporte>1</tipodeporte>
<escudoLocal>https://e00-marca.uecdn.es/assets/datos-deportivos/escudos/opta/png/ios/28px/2x/5683.png</escudoLocal>
<escudoVisitante>https://e00-marca.uecdn.es/assets/datos-deportivos/escudos/opta/png/ios/28px/2x/184.png</escudoVisitante>
<tv></tv>
<estadisticas></estadisticas>
<tv/>
<estadisticas/>
<alineaciones>https://www.marca.com/eventos/marcador/futbol/2021_22/la-liga/jornada_30/gda_ray/alineaciones.html</alineaciones>
<comentariosLectores></comentariosLectores>
<previacronica>2</previacronica><enlaceDirecto>https://www.marca.com/eventos/marcador/futbol/2021_22/la-liga/jornada_30/gda_ray/directo.xml</enlaceDirecto></evento>
<comentariosLectores/>
<previacronica>2</previacronica>
<enlaceDirecto>https://www.marca.com/eventos/marcador/futbol/2021_22/la-liga/jornada_30/gda_ray/directo.xml</enlaceDirecto>
</evento>
<evento id="522005">
<fecha>03/04/2022 18:30</fecha>
<estado id="3">Finalizado</estado>
@ -122,11 +137,13 @@
<tipodeporte>1</tipodeporte>
<escudoLocal>https://e00-marca.uecdn.es/assets/datos-deportivos/escudos/opta/png/ios/28px/2x/191.png</escudoLocal>
<escudoVisitante>https://e00-marca.uecdn.es/assets/datos-deportivos/escudos/opta/png/ios/28px/2x/1737.png</escudoVisitante>
<tv></tv>
<estadisticas></estadisticas>
<tv/>
<estadisticas/>
<alineaciones>https://www.marca.com/eventos/marcador/futbol/2021_22/la-liga/jornada_30/val_cad/alineaciones.html</alineaciones>
<comentariosLectores></comentariosLectores>
<previacronica>-1</previacronica><enlaceDirecto>https://www.marca.com/eventos/marcador/futbol/2021_22/la-liga/jornada_30/val_cad/directo.xml</enlaceDirecto></evento>
<comentariosLectores/>
<previacronica>-1</previacronica>
<enlaceDirecto>https://www.marca.com/eventos/marcador/futbol/2021_22/la-liga/jornada_30/val_cad/directo.xml</enlaceDirecto>
</evento>
<evento id="522003">
<fecha>03/04/2022 21:00</fecha>
<estado id="3">Finalizado</estado>
@ -137,11 +154,13 @@
<tipodeporte>1</tipodeporte>
<escudoLocal>https://e00-marca.uecdn.es/assets/datos-deportivos/escudos/opta/png/ios/28px/2x/178.png</escudoLocal>
<escudoVisitante>https://e00-marca.uecdn.es/assets/datos-deportivos/escudos/opta/png/ios/28px/2x/179.png</escudoVisitante>
<tv></tv>
<estadisticas></estadisticas>
<tv/>
<estadisticas/>
<alineaciones>https://www.marca.com/eventos/marcador/futbol/2021_22/la-liga/jornada_30/bar_sev/alineaciones.html</alineaciones>
<comentariosLectores></comentariosLectores>
<previacronica>2</previacronica><enlaceDirecto>https://www.marca.com/eventos/marcador/futbol/2021_22/la-liga/jornada_30/bar_sev/directo.xml</enlaceDirecto></evento>
<comentariosLectores/>
<previacronica>2</previacronica>
<enlaceDirecto>https://www.marca.com/eventos/marcador/futbol/2021_22/la-liga/jornada_30/bar_sev/directo.xml</enlaceDirecto>
</evento>
<evento id="522009">
<fecha>04/04/2022 21:00</fecha>
<estado id="3">Finalizado</estado>
@ -152,11 +171,13 @@
<tipodeporte>1</tipodeporte>
<escudoLocal>https://e00-marca.uecdn.es/assets/datos-deportivos/escudos/opta/png/ios/28px/2x/188.png</escudoLocal>
<escudoVisitante>https://e00-marca.uecdn.es/assets/datos-deportivos/escudos/opta/png/ios/28px/2x/177.png</escudoVisitante>
<tv></tv>
<estadisticas></estadisticas>
<tv/>
<estadisticas/>
<alineaciones>https://www.marca.com/eventos/marcador/futbol/2021_22/la-liga/jornada_30/rso_esp/alineaciones.html</alineaciones>
<comentariosLectores></comentariosLectores>
<previacronica>-1</previacronica><enlaceDirecto>https://www.marca.com/eventos/marcador/futbol/2021_22/la-liga/jornada_30/rso_esp/directo.xml</enlaceDirecto></evento>
<comentariosLectores/>
<previacronica>-1</previacronica>
<enlaceDirecto>https://www.marca.com/eventos/marcador/futbol/2021_22/la-liga/jornada_30/rso_esp/directo.xml</enlaceDirecto>
</evento>
</eventos>
<clasificacion>
<team>

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,206 @@
\documentclass[12pt,a4paper]{article}
\usepackage[spanish]{babel}
\usepackage{hyperref}
\usepackage{graphicx}
\usepackage{subcaption}
\title{Tema VIII Ejercicio VI}
\author{Nicolás A. Ortega Froysa}
\begin{document}
\maketitle
\pagebreak
\tableofcontents
\pagebreak
\section{Resumen Ejecutivo}
\begin{figure}[!htb]
\centering
\includegraphics[width=0.75\linewidth]{./mapa.PNG}
\caption{Mapa de red.}
\label{fig:mapa}
\end{figure}
El propósito de este documento es proveer los pasos necesarios para configurar
una red con asignación de direcciones dinámica, y redes virtuales internas, de
tal manera que se pueden expandir los terminales conectados a la red.
\section{Configuración}
\subsection{Switches}
Antes que nada se ha de configurar la seguridad del {\em switch} del
administrador con la contraseña {\tt 1234}, y con el MOTD <<Buenos dias,
Jefe!>>.
\begin{verbatim}
enable secret 1234
username admin password 0 1234
banner motd *Buenos dias, Jefe!*
\end{verbatim}
\subsubsection{VLANs}
En los {\em switches} será necesario crear las VLAN de nuestra red. En nuestro
caso nos hacen falta tres:
\begin{itemize}
\item VLAN 10: ADMIN
\item VLAN 20: COM
\item VLAN 30: INF
\end{itemize}
\noindent
Para este propósito hemos de correr los siguientes comandos en ambos switches
desde la consola de configuración:
\begin{verbatim}
vlan 10
name ADMIN
vlan 20
name COM
vlan 30
name INF
\end{verbatim}
\noindent
Con las VLAN creadas, ya podemos asignar VLANs a nuestros dispositivos, y
también consiguiendo una conexión de {\em trunk} entre los {\em switches}.
\begin{verbatim}
# Switch0
int range fa0/1-3
switchport mode access
switchport access vlan 10
int range fa0/4-5
switchport mode access
switchport access vlan 20
int fa0/6
switchport mode access
switchport access vlan 30
int range fa0/22-23
switchport mode trunk
# Switch1
int range fa0/1,3
switchport mode access
switchport access vlan 20
int fa0/2
switchport mode access
switchport access vlan 30
int range fa0/22-23
switchport mode trunk
\end{verbatim}
\noindent
Con esto configurado, ya todos los terminales y el servidor estarán conectados a
sus VLAN correspondientes, y no podrán comunicarse a los otros que no sean de su
VLAN.
\subsubsection{DHCP}
Para poder asignar de forma dinámica las direcciones de los terminales de
nuestra red, creamos varios {\em pools} DHCP en el Switch0; uno para cada VLAN.
Para ello, primer asignamos una dirección IP al {\em switch} en cada VLAN para
que así puedan comunicar los terminales con el servidor DHCP (siendo el mismo
{\em switch}):
\begin{verbatim}
int vlan 10
ip address 192.168.10.5
int vlan 20
ip address 192.168.20.5
int vlan 30
ip address 192.168.30.5
\end{verbatim}
\noindent
En segundo lugar creamos los {\em pools} de DHCP:
\begin{verbatim}
ip dhcp pool ADMIN
network 192.168.10.0 255.255.255.0
default-router 192.168.10.1
ip dhcp pool COM
network 192.168.20.0 255.255.255.0
default-router 192.168.20.1
ip dhcp pool INF
network 192.168.30.0 255.255.255.0
default-router 192.168.30.1
\end{verbatim}
Una vez que esté todo esto configurado, ya se puede usar la asignación de
direcciones dinámica, aunque todavía no podrá conectarse al {\em router}. Para
esto hemos de configurar la interfaz que nos conecta al {\em router} como
un enlace troncal ({\em trunk}) y luego configurar el {\em router} en sí:
\begin{verbatim}
int fa0/24
switchport mode trunk
\end{verbatim}
\subsection{Router}
El {\em router} nos servirá para acceder a internet. Para ello, hemos de
configurarlo con nuestra red interna. El primer paso es configurar las redes
virtuales:
\begin{verbatim}
vlan 10 name ADMIN
vlan 20 name COM
vlan 30 name INF
\end{verbatim}
Una vez creadas en nuestro {\em router}, hemos de asignarlas a unas interfaces.
Ahora, como el mismo {\em router} se encarga de proveer servicio a todas las
redes virtuales, pero nos conectamos por tan sólo una interfaz red, tendremos
que crear sub-interfaces por las cuales el mismo {\em router} puede tener varias
direcciones IP (una para cada red virtual, y una más para la red nativa):
\begin{verbatim}
# no usar fa0/0 directamente
int fa0/0
no ip address
# crear sub-interfaz nativa
int fa0/0.1
encapsulation dot1Q 1 native
ip address 192.168.0.1 255.255.255.0
# sub-interfaces de VLAN
int fa0/0.10
encapsulation dot1Q 10
ip address 192.168.10.1 255.255.255.0
switchport mode access vlan 10
int fa0/0.20
encapsulation dot1Q 20
ip address 192.168.20.1 255.255.255.0
switchport mode access vlan 20
int fa0/0.30
encapsulation dot1Q 30
ip address 192.168.30.1 255.255.255.0
switchport mode access vlan 30
\end{verbatim}
\subsection{Direcciones Estáticas}
Como el servidor tiene que tener una dirección IP estática, asignamos a él la
dirección IP {\tt 192.168.20.2}, ya que tenemos reservados las primeras cinco
direcciones de cada red virtual, y la primera se usará para el {\em router}.
\section{Conclusión}
Al final de este proceso, se tendrá una red interna de empresa en correcto
funcionamiento, como se puede ver en la simulación de {\em CISCO PacketTracer}.
\pagebreak
\section{Derechos de Autor y Licencia}
\noindent
Copyright \copyright\ \the\year\ Nicolás A. Ortega Froysa
<nicolas@ortegas.org> \\
\\
Este documento se distribuye bajo los términos y condiciones de la licencia
Creative Commons Attribution No Derivatives 4.0 International.
\end{document}

View File

@ -0,0 +1,10 @@
\babel@toc {spanish}{}\relax
\contentsline {section}{\numberline {1}Resumen Ejecutivo}{3}{section.1}%
\contentsline {section}{\numberline {2}Configuración}{3}{section.2}%
\contentsline {subsection}{\numberline {2.1}Switches}{3}{subsection.2.1}%
\contentsline {subsubsection}{\numberline {2.1.1}VLANs}{3}{subsubsection.2.1.1}%
\contentsline {subsubsection}{\numberline {2.1.2}DHCP}{5}{subsubsection.2.1.2}%
\contentsline {subsection}{\numberline {2.2}Router}{5}{subsection.2.2}%
\contentsline {subsection}{\numberline {2.3}Direcciones Estáticas}{6}{subsection.2.3}%
\contentsline {section}{\numberline {3}Conclusión}{6}{section.3}%
\contentsline {section}{\numberline {4}Derechos de Autor y Licencia}{7}{section.4}%

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

View File

@ -0,0 +1,225 @@
\documentclass[12pt,a4paper]{article}
\usepackage[spanish]{babel}
\usepackage{hyperref}
\usepackage{graphicx}
\usepackage{subcaption}
\title{Tema VIII Ejercicio VII}
\author{Nicolás A. Ortega Froysa}
\begin{document}
\maketitle
\pagebreak
\tableofcontents
\pagebreak
\section{Resumen Ejecutivo}
\begin{figure}[!htb]
\centering
\includegraphics[width=0.75\linewidth]{imgs/00-mapa-de-la-red.png}
\caption{Mapa de la red.}
\label{fig:mapa-de-la-red}
\end{figure}
El objetivo de esta práctica es crear una red dinámica en la que hay tres
servidores (DNS, DHCP, y HTTP), y cuatro redes (virtuales) distintas que tienen
al menos cinco terminales. Para montar esta red, se hará uso de cinco {\em
switches} y un {\em router}, de tal modo que quede como se puede ver en la
figura \ref{fig:mapa-de-la-red}.
\section{Configuración}
\subsection{Switches}
En todos los {\em switches} hemos de configurar algunas cosas básicas, como
sería las VLAN, la contraseña de entrada ({\tt ASIR1}) y el MOTD. Para esto, en
cada {\em switch} corremos los siguientes comandos:
\begin{verbatim}
enable
conf t
enable secret ASIR1
banner motd "Estas accediendo al switch, enhorabuena!"
vlan 10
name INF
vlan 20
name ASIR
vlan 30
name DAW
vlan 40
name DAM
\end{verbatim}
En aquellos {\em switches} que estén más cerca de los terminales y servidores
(i.e.\ S-INF, S-ASIR, S-DAW, y S-DAM) tenemos que configurar sus interfaces.
Asumimos que la interfaz FastEthernet0/1 siempre queda reservada para conectarse
al {\em switch} central (i.e.\ S-CENTRAL), y las demás las podemos usar para
terminales y servidores. Para esto corremos los comandos siguientes,
intercambiando {\tt \textless{}n\textgreater{}} por la VLAN que corresponde a la
red virtual asignada a este {\em switch}:
\begin{verbatim}
int fa0/1
switchport mode trunk
int range fa0/2-24
switchport mode access
switchport access vlan <n>
\end{verbatim}
Luego, en el {\em switch} central (S-CENTRAL) configuramos tal que todas las
interfaces que estamos usando (i.e. FastEthernet0/1-5) sean de tipo troncal:
\begin{verbatim}
int range fa0/1-5
switchport mode trunk
\end{verbatim}
\subsection{Servidores}
Todos los servidores de nuestra red se encuentran dentro de la VLAN 10 (con
nombre <<INF>>). Físicamente se encuentran conectados al {\em switch} S-INF.
\subsubsection{Servidor DHCP}
\begin{figure}[!htb]
\centering
\includegraphics[width=0.75\linewidth]{imgs/01-configuración-DHCP.png}
\caption{Configuración DHCP.}
\label{fig:configuracion-dhcp}
\end{figure}
El servidor DHCP lo configuramos manualmente con las direcciones IP siguientes:
\begin{itemize}
\item IP: 192.168.1.2
\item Máscara: 255.255.255.0
\item Gateway: 192.168.1.1
\item DNS: 192.168.1.3
\end{itemize}
\noindent
Luego configuramos cuatro {\em pools} de DHCP distintas para cada VLAN tal como
aparecen en la figura \ref{fig:configuracion-dhcp}. Empezamos a partir de la
dirección 192.168.x.10 de cada red para reservar las primeras direcciones por si
quisiéramos añadir más servidores que proveen servicios en cada red. Antes de
continuar nos aseguramos de que el servicio esté encendido.
\subsubsection{Servidor DNS}
\begin{figure}[!htb]
\centering
\includegraphics[width=0.75\linewidth]{imgs/02-configuración-DNS.png}
\caption{Configuración DNS.}
\label{fig:configuracion-dns}
\end{figure}
El servidor DNS lo configuramos manualmente con las direcciones IP siguientes:
\begin{itemize}
\item IP: 192.168.1.3
\item Máscara: 255.255.255.0
\item Gateway: 192.168.1.1
\item DNS: 192.168.1.3
\end{itemize}
Es aquí en este servidor donde tenemos que configurar el nombre de dominio de
nuestro servidor HTTP. Para esto añadimos una entrada apuntando el nombre de
dominio <<www.universidadasir.es>> a la dirección IP 192.168.1.4. Nos aseguramos
de que el servicio está encendido, de tal modo que el debería parecerse a la
figura \ref{fig:configuracion-dns}.
\subsubsection{Servidor HTTP}
El servidor HTTP lo configuramos manualmente con las direcciones IP siguientes:
\begin{itemize}
\item IP: 192.168.1.4
\item Máscara: 255.255.255.0
\item Gateway: 192.168.1.1
\item DNS: 192.168.1.3
\end{itemize}
Para este servidor tan sólo hemos de entrar en la configuración de HTTP y
asegurarnos de que esté encendido, y (opcionalmente) modificar el archivo {\tt
index.html} para que aparezca algún resultado más reconocible.
\subsection{Router}
Para la configuración del {\em router} tenemos que configurar primero las VLAN,
que se puede hacer con los comandos siguientes:
\begin{verbatim}
enable
vlan database
vlan 10 name INF
vlan 20 name ASIR
vlan 30 name DAW
vlan 40 name DAM
\end{verbatim}
A continuación configuramos la interfaz FastEthernet0/0 para que se divida en
varias sub-interfaces: una nativa (0/0.1), y una por cada VLAN de nuestra red.
También hemos de asignar un {\em helper address} que servirá para redireccionar
todas las peticiones de DHCP a nuestro servidor DHCP que se encuentra en la red
VLAN 10.
\begin{verbatim}
int fa0/0
no ip address
int fa0/0.1
encapsulation dot1Q 1 native
ip address 192.168.0.1
int fa0/0.10
encapsulation dot1Q 10
ip address 192.168.1.1
int fa0/0.20
encapsulation dot1Q 10
ip address 192.168.2.1
int fa0/0.20
encapsulation dot1Q 20
ip address 192.168.2.1
int fa0/0.30
encapsulation dot1Q 30
ip address 192.168.3.1
int fa0/0.40
encapsulation dot1Q 40
ip address 192.168.4.1
\end{verbatim}
\subsection{Terminales}
Con todo esto configurado, la configuración de los terminales es bien fácil. Tan
sólo hemos de entrar en la configuración de IP de cada terminal y cambiarlo de
modo estático al uso de DHCP. Entonces debería recibir la configuración dada por
el servidor DHCP al ordenador con una dirección IP nueva que corresponde a su
VLAN.
\section{Prueba}
\begin{figure}[!htb]
\centering
\includegraphics[width=0.75\linewidth]{imgs/03-prueba-conexión-HTTP.png}
\caption{Prueba conexión HTTP.}
\label{fig:prueba-conexion-http}
\end{figure}
Una vez que tengamos todo configurado, podemos verificar si nuestra red funciona
accediendo mediante navegador web desde un terminal en cualquier VLAN que no sea
la 10 (de INF) a nuestro servidor HTTP con el nombre de dominio que hemos
asignado anteriormente. Si todo funciona correctamente, ha de aparecer la página
{\tt index.html} que hemos modificado anteriormente (figura
\ref{fig:prueba-conexion-http}).
\pagebreak
\section{Derechos de Autor y Licencia}
\noindent
Copyright \copyright\ \the\year\ Nicolás A. Ortega Froysa
<nicolas@ortegas.org> \\
\\
Este documento se distribuye bajo los términos y condiciones de la licencia
Creative Commons Attribution No Derivatives 4.0 International.
\end{document}

View File

@ -0,0 +1,12 @@
\babel@toc {spanish}{}\relax
\contentsline {section}{\numberline {1}Resumen Ejecutivo}{3}{section.1}%
\contentsline {section}{\numberline {2}Configuración}{3}{section.2}%
\contentsline {subsection}{\numberline {2.1}Switches}{3}{subsection.2.1}%
\contentsline {subsection}{\numberline {2.2}Servidores}{4}{subsection.2.2}%
\contentsline {subsubsection}{\numberline {2.2.1}Servidor DHCP}{4}{subsubsection.2.2.1}%
\contentsline {subsubsection}{\numberline {2.2.2}Servidor DNS}{5}{subsubsection.2.2.2}%
\contentsline {subsubsection}{\numberline {2.2.3}Servidor HTTP}{6}{subsubsection.2.2.3}%
\contentsline {subsection}{\numberline {2.3}Router}{7}{subsection.2.3}%
\contentsline {subsection}{\numberline {2.4}Terminales}{7}{subsection.2.4}%
\contentsline {section}{\numberline {3}Prueba}{8}{section.3}%
\contentsline {section}{\numberline {4}Derechos de Autor y Licencia}{9}{section.4}%

Binary file not shown.

View File

@ -15,6 +15,12 @@ enable secret <password>
username <usuario> privilege 1 password 0 <password>
```
### MOTD
```
banner motd "<motd>"
```
## Sub-Interfaces
```
@ -73,3 +79,15 @@ default-router <ip>
dns-server <ip>
ip dhcp excluded-address <low-ip> <high-ip>
```
### Asignar Dirección Servidor DHCP
Hay veces que queremos asignar desde un __router__ o un __switch__ el servidor
DHCP con un cierto IP que está dentro de otra red. Para esto hacemos uso del
__helper address__. Simplemente entramos en la (sub-)interfaz a la que queremos
asignar este servidor, y añadimos el __helper__ como de forma siguiente:
```
int <if>[.<sub-if>]
ip helper-address <ip-dhcp>
```