Introducción
Riverlight Gathering ya tiene una guía de eventos que funciona con IPv4. Los visitantes necesitan la misma guía completa por IPv6, incluida la información de llegada y el programa descargable. Las direcciones de red están preparadas, pero el servicio web aún no escucha en IPv6 y el registro AAAA apunta a una dirección incorrecta.
Separarás los problemas: primero harás funcionar el acceso directo a la aplicación por IPv6 y después corregirás el nombre. Debes conservar IPv4, el punto de bienvenida, los demás registros DNS y todos los bytes originales de páginas y descargas. Se requieren nociones de terminal, rutas y pestañas, y reconocer direcciones, nombres y puertos; no administración de Nginx o IPv6. Los 70 minutos son una estimación del autor.
Guide Server y Guide Client son nodos de red aislados que comparten el núcleo de esta instancia de formación. No son máquinas virtuales independientes. Cambia solo las sentencias de escucha de guide.conf y el AAAA objetivo y número de serie SOA de guide.zone; guarda las descargas en el espacio del cliente. No cambies rutas, direcciones, interruptores IPv6, otros sitios, páginas fuente ni ajustes de la plataforma. Es una red local preparada, sin IPv6 público, RA, DHCPv6, túneles ni NAT64.
Comparar las familias de direcciones
En este paso, leerás la guía IPv4 funcional y distinguirás una dirección IPv6 accesible de una aplicación a la escucha. Comienza en Guide Client. La terminal empieza en /home/labex/project/ipv6-guide/client; su shell y directorio persisten separados de Guide Server. pwd muestra el directorio actual:
pwd
IPv4 utiliza cuatro partes decimales, como 10.77.0.10. IPv6 utiliza ocho grupos de dígitos hexadecimales. Pueden omitirse los ceros iniciales de cada grupo; un único :: sustituye una secuencia de grupos compuestos por ceros. Aquí fd77:7::10 significa fd77:0007:0000:0000:0000:0000:0000:0010. El 10 final es hexadecimal, no la parte decimal final de la dirección IPv4. Estas direcciones privadas de formación no implican acceso a Internet público.
curl obtiene un recurso HTTP. -4 fuerza IPv4, -f considera fallos las respuestas HTTP de error, -s oculta el progreso y -S sigue mostrando errores. --noproxy '*' evita proxies para todos los hosts; las comillas mantienen * literal en lugar de expandir nombres de archivo. El puerto 8080 selecciona la aplicación de la guía. -o guarda los bytes recibidos en un archivo; v4 es una carpeta de salida preparada:
curl --noproxy '*' -4 -fsS http://guide.riverlight.test:8080/index.html -o v4/index.html
Una descarga guardada correctamente suele no imprimir nada. head -c 180 lee los primeros 180 bytes sin modificar el archivo:
head -c 180 v4/index.html
Espera HTML que contenga Riverlight Gathering. Esta es la referencia funcional que conservarás. Para mostrar el aspecto completo en el navegador también necesitarás la hoja de estilo, que guardarás después.
Prueba ahora la dirección IPv6 preparada. ping -6 envía solicitudes de eco IPv6; -c 1 termina tras una. Comprueba accesibilidad de red, no HTTP:
ping -6 -c 1 fd77:7::10
Debes recibir una respuesta. Una dirección IPv6 literal en una URL lleva corchetes para separar sus dos puntos del separador de puerto. Pon también toda la URL entre comillas. -6 fuerza IPv6; --max-time 3 limita la solicitud a tres segundos:
curl --noproxy '*' -6 -fsS --max-time 3 'http://[fd77:7::10]:8080/'
Esta solicitud debe fallar con curl: (7) y conexión rechazada. La dirección IPv6 existe y responde al eco, pero la aplicación no ha abierto ese destino IPv6. Un tiempo de espera agotado significa que no llegó una respuesta útil dentro del límite, algo distinto de un rechazo inmediato. No soluciones ninguno de los casos desactivando IPv6. Un navegador de doble pila normal puede reintentar por IPv4: ver una página allí no demuestra IPv6.
Un nombre mal escrito puede producir el error 6 de curl, que indica un fallo de resolución. Comprueba su escritura y repite el primer comando. Una ruta de salida incorrecta produce un error local de escritura; usa pwd y la ruta indicada v4/index.html. Son problemas distintos de HTTP 404, donde un servidor accesible informa de que falta el recurso solicitado.
Hacer que el servicio web escuche en IPv6
En este paso, conservarás la escucha IPv4 funcional y añadirás una escucha IPv6 separada. Cambia a Guide Server. Empieza en /home/labex/project/ipv6-guide/config. cat lee la tabla de destinos preparada y la configuración breve del sitio:
cat endpoints.tsv
cat guide.conf
La guía debe usar 10.77.0.10 y fd77:7::10, puerto 8080. El punto de bienvenida utiliza 8081; consérvalo. server_name selecciona el nombre del sitio, root ubica las páginas originales e index elige la página principal. Las llaves agrupan un servidor; cada directiva termina con punto y coma.
ss lee los sockets del núcleo. -l selecciona escuchas, -t TCP, -n direcciones y puertos numéricos, y -p los procesos propietarios:
ss -ltnp
Localiza Nginx en IPv4 10.77.0.10:8080; aún no hay escucha IPv6 para la guía. El socket IPv6 :8081 del punto de bienvenida no atiende el puerto de la guía.
Reemplazarás todo el archivo breve con una plantilla completa. cat > guide.conf escribe en ese archivo y sustituye su contenido anterior. <<'NGINX' inicia un here-document: el shell toma literalmente las líneas siguientes hasta una línea que contiene únicamente NGINX. Pega el bloque completo, incluido el marcador final. Primero, cp crea una copia local; el segundo nombre identifica esa copia:
cp guide.conf guide.conf.before
cat > guide.conf <<'NGINX'
server {
listen 10.77.0.10:8080;
listen [fd77:7::10]:8080 ipv6only=on;
server_name guide.riverlight.test;
root /opt/labex/ipv6-guide/www;
index index.html;
error_page 404 /404.html;
}
NGINX
listen abre un destino de aplicación. La nueva dirección entre corchetes es IPv6; ipv6only=on mantiene esa escucha exclusivamente IPv6. La línea IPv4 conservada atiende IPv4 de forma independiente. Configurar una dirección por sí solo nunca crearía ese socket de escucha.
El comando preparado guide-control comprueba o carga solo el servicio independiente de este laboratorio. web-check ejecuta la prueba de configuración de Nginx sin aplicar cambios:
guide-control web-check
Espera syntax is ok y test is successful. Si te equivocas en un punto y coma, llave o dirección, el error señala archivo y línea. No se ha cargado nada. Repite la plantilla completa y vuelve a comprobar. Para recuperar la configuración IPv4 funcional original, cp guide.conf.before guide.conf restaura la copia; compruébala antes de cargarla. No reinicies Nginx ni la red de la plataforma.
web-load vuelve a comprobar y solicita una recarga. La recarga conserva el proceso maestro del curso mientras aplica la configuración guardada; guardar un archivo por sí solo no cambia el servicio:
guide-control web-load
ss -ltnp
Espera que Nginx sea propietario tanto de 10.77.0.10:8080 como de [fd77:7::10]:8080. Si el registro indica un destino ocupado, compara el archivo con la plantilla y consulta ss; no detengas un servicio ajeno.
Cambia a Guide Client. -w imprime hechos de la conexión después del cuerpo. El formato entre comillas contiene \n para un salto de línea; curl sustituye %{remote_ip} por la dirección real del otro extremo y %{http_code} por el estado de respuesta:
curl --noproxy '*' -6 -fsS --max-time 3 -w '\npeer=%{remote_ip} status=%{http_code}\n' 'http://[fd77:7::10]:8080/'
Espera HTML de Riverlight y después peer=fd77:7::10 status=200. Lee también el contenido: una página predeterminada ajena con 200 sería incorrecta. Esta solicitud directa correcta aísla la capa de aplicación; todavía no has corregido el nombre de la guía.
Apuntar el nombre al servicio IPv6 funcional
En este paso, corregirás solo el AAAA objetivo y dejarás que una caché real se actualice naturalmente. Comienza en Guide Client. DNS, el sistema de nombres de dominio, relaciona nombres con datos. Un registro A proporciona IPv4; AAAA proporciona IPv6. La consulta DNS puede viajar por IPv4 y devolver una dirección IPv6.
dig consulta DNS. @10.77.0.2 selecciona el servidor autoritativo preparado, responsable de la zona. +noall +answer oculta otras secciones y muestra las filas de respuesta:
dig @10.77.0.2 guide.riverlight.test A +noall +answer
dig @10.77.0.2 guide.riverlight.test AAAA +noall +answer
El A es correcto: 10.77.0.10. El AAAA indica ahora fd77:7::99, que no coincide con el servicio funcional. Consulta la caché independiente del cliente en la dirección de loopback 127.0.0.1:
dig @127.0.0.1 guide.riverlight.test AAAA +noall +answer
Una fila contiene nombre, TTL, IN, tipo y valor. TTL significa Time To Live: los segundos restantes durante los que puede reutilizarse una respuesta en caché. La zona preparada usa 30 segundos. Esta consulta puede almacenar la dirección antigua; es normal.
Cambia a Guide Server y lee la zona completa:
cat guide.zone
$TTL 30 establece la duración predeterminada. @ representa la raíz de esta zona. El SOA (Start of Authority) incluye la versión de zona, o número de serie, como primer número entre paréntesis. NS identifica su autoridad. Los nombres terminados en punto son completos; nombres cortos como guide son relativos a riverlight.test. Conserva todos los registros salvo el AAAA de la guía e incrementa el número de serie de 1 a 2 para esta revisión. El número registra una versión de zona; no vacía las cachés existentes.
Crea una copia y usa el here-document ya explicado para reemplazar toda la zona breve. Las comillas simples de ZONE también protegen $TTL frente a la expansión de variables del shell:
cp guide.zone guide.zone.before
cat > guide.zone <<'ZONE'
$TTL 30
@ IN SOA ns.riverlight.test. admin.riverlight.test. (2 60 30 3600 30)
@ IN NS ns.riverlight.test.
ns IN A 10.77.0.2
guide IN A 10.77.0.10
guide IN AAAA fd77:7::10
desk IN A 10.77.0.10
desk IN AAAA fd77:7::10
contact IN TXT "Welcome desk opens at 10:00"
ZONE
dns-check ejecuta el validador nativo de zonas BIND. No cambia el DNS en funcionamiento:
guide-control dns-check
Espera loaded serial 2 y OK; aquí loaded describe al validador leyendo el archivo, no un cambio en la autoridad en ejecución. Si falla el análisis, lee el número de línea, repite la plantilla y comprueba otra vez. cp guide.zone.before guide.zone restaura el archivo original si es necesario; también devuelve el AAAA incorrecto, así que es un punto de recuperación y no la respuesta terminada.
dns-load comprueba y después utiliza un canal de control privado para recargar únicamente la zona del curso:
guide-control dns-load
Cambia a Guide Client y consulta autoridad y caché por separado:
dig @10.77.0.2 guide.riverlight.test AAAA +noall +answer
dig @127.0.0.1 guide.riverlight.test AAAA +noall +answer
La autoridad debe devolver ahora fd77:7::10. La caché puede mostrar aún la dirección antigua hasta agotar su TTL restante. sleep 31 espera 31 segundos sin cambiar ninguna caché:
sleep 31
dig @127.0.0.1 guide.riverlight.test AAAA +noall +answer
Ahora espera la dirección IPv6 correcta. No necesitas vaciar cachés globales ni editar el resolutor. Si la autoridad sigue mal, vuelve a la zona guardada y a dns-load; si la autoridad es correcta pero la caché difiere, lee el TTL y repite la espera limitada. Eliminar el AAAA quitaría el acceso IPv6 por nombre en vez de repararlo.
Finalmente fuerza una solicitud IPv6 por nombre:
curl --noproxy '*' -6 -fsS --max-time 3 -w '\npeer=%{remote_ip} status=%{http_code}\n' http://guide.riverlight.test:8080/
Espera HTML de Riverlight y peer=fd77:7::10 status=200. Si IPv6 directo funciona y por nombre falla, investiga DNS antes de reconstruir la escucha.
Leer y descargar la guía completa de ambas formas
En este paso, usarás la guía completa por ambas familias y conservarás el punto de bienvenida y los registros protegidos. Comienza en Guide Client. Una página principal correcta no demuestra que funcionen el detalle, los estilos ni la descarga completa.
Guarda los cuatro recursos originales por el nombre real usando IPv4. La carpeta preparada v4 contiene solo tus bytes descargados; cada ruta -o identifica el archivo guardado del recurso:
curl --noproxy '*' -4 -fsS http://guide.riverlight.test:8080/index.html -o v4/index.html
curl --noproxy '*' -4 -fsS http://guide.riverlight.test:8080/visit.html -o v4/visit.html
curl --noproxy '*' -4 -fsS http://guide.riverlight.test:8080/style.css -o v4/style.css
curl --noproxy '*' -4 -fsS http://guide.riverlight.test:8080/programme.txt -o v4/programme.txt
Repite por IPv6 y guarda por separado para que el éxito no sobrescriba las pruebas de IPv4:
curl --noproxy '*' -6 -fsS http://guide.riverlight.test:8080/index.html -o v6/index.html
curl --noproxy '*' -6 -fsS http://guide.riverlight.test:8080/visit.html -o v6/visit.html
curl --noproxy '*' -6 -fsS http://guide.riverlight.test:8080/style.css -o v6/style.css
curl --noproxy '*' -6 -fsS http://guide.riverlight.test:8080/programme.txt -o v6/programme.txt
cmp compara dos archivos byte a byte. Ninguna salida y el regreso al prompt indican igualdad; una diferencia notificada significa que los recursos discrepan. Compara cada recurso y lee el programa completo:
cmp v4/index.html v6/index.html
cmp v4/visit.html v6/visit.html
cmp v4/style.css v6/style.css
cmp v4/programme.txt v6/programme.txt
cat v6/programme.txt
Lee hasta WET WEATHER y la nota final de evento sintético. La existencia o tamaño de un archivo no demostraría que llegaron correctamente todo el horario y la información de accesibilidad. Si dos archivos incorrectos coinciden, cmp tampoco demuestra por sí solo el contenido original: las comprobaciones contrastan originales preparados y servicio real.
Cambia a Saved Guide. Selecciona Open IPv4 saved guide, lee las tarjetas del programa y selecciona Make a day of it para ver llegada y accesibilidad. Selecciona Save the programme en esa página para descargar el programa. Usa Back del navegador para volver del detalle a la página principal y Back otra vez para volver a la selección del visor. Selecciona Open IPv6 saved guide y repite los enlaces y la descarga. Ambas vistas deben mostrar la misma guía completa de Riverlight.

Lee las tres tarjetas y usa los enlaces de visita y descarga: esta página es tu guía realmente guardada.
El visor lee únicamente los archivos v4 y v6 de Guide Client y nunca obtiene un archivo ausente. Si faltan estilos o una página, vuelve a Guide Client, repite la descarga de esa familia y recurso exactos y recarga la página. La conexión entre navegador y visor es una vía de presentación; la prueba de IPv6 procede de las solicitudes de familia forzada y del destino real en la terminal, no de la URL del visor.
Cambia a Guide Client. Conserva el punto de bienvenida independiente por las dos familias:
curl --noproxy '*' -4 -fsS http://desk.riverlight.test:8081/
curl --noproxy '*' -6 -fsS http://desk.riverlight.test:8081/
Ambas solicitudes devuelven Welcome desk: open 10:00–20:00. Keep this site available.. Comprueba los registros A y TXT conservados:
dig @10.77.0.2 guide.riverlight.test A +short
dig @10.77.0.2 contact.riverlight.test TXT +short
Espera 10.77.0.10 y "Welcome desk opens at 10:00". Si cambia un valor protegido, restáuralo desde la plantilla original completa conservando el AAAA corregido; valida y recarga. No copies páginas fuente, añadas un proxy, sustituyas procesos ni cambies direcciones para conseguir una comprobación verde. Las comprobaciones observan servicios actuales y resultados guardados; GET y consultas DNS normales pueden añadir registros nativos, pero no cargan ni reparan tu trabajo.
Resumen
Has ampliado una guía IPv4 funcional con una escucha IPv6 real, corregido su AAAA y dejado que una caché DNS separada se actualice naturalmente. Las solicitudes de familia forzada entregaron la misma página principal, página de llegada, hoja de estilo y programa completo originales. Conservaste IPv4, el punto de bienvenida, otros registros y la red preparada. Accesibilidad, resolución de nombres, escucha y contenido correcto son hechos distintos.



