From 7aff4e3bbd8ebb39ccbd7eef9008e06dccf6a81d Mon Sep 17 00:00:00 2001 From: Elvia Patricia Barron Cano Date: Fri, 28 Aug 2015 18:45:25 -0500 Subject: [PATCH 01/15] Cambios al 28 de Ago --- doc/usr/es/intro-nat64.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/usr/es/intro-nat64.md b/doc/usr/es/intro-nat64.md index 8ac30e6fa..6d60319c8 100644 --- a/doc/usr/es/intro-nat64.md +++ b/doc/usr/es/intro-nat64.md @@ -97,7 +97,7 @@ La idea es, simplemente remover _el prefijo_ durante el mapeo de IPv6 a IPv4, y Por supuesto, esto significa que la dirección IPv4 de cada nodo en IPv6 tiene que ser codificada dentro de su dirección, lo cual es un poco engorroso. -Podría parecerte que SIIT con "EAM" y SIIT "tradicional" son cosas diferentes, pero pueden trabajar a la par. En implementaciones de este tipo, primeramente se intentará mapear las direcciones IP consultando la tabla EAM (según SIIT con EAM), y si NO están registradas, se retrocede y se añade o se remueve el prefijo (según SIIT). +Podría parecerte que SIIT con "EAM" y SIIT "tradicional" son cosas diferentes, pero pueden trabajar a la par. En implementaciones de este tipo, primeramente se intentará mapear las direcciones IP consultando la tabla EAM (según SIIT con EAM), y si NO están registradas, se retrocede y se añade o se remueve el prefijo (según SIIT). Puedes encontrar un ejemplo concreto de como SIIT "tradicional" y "EAM" pueden ser combinados eficientemente para cumplir un caso de uso en la siguiente propuesta de solución para Centros de Datos: [draft-v6ops-siit-dc]({{ site.draft-siit-dc }}). From efaa036960193cc222d11ca105d39e06ca0b8b9c Mon Sep 17 00:00:00 2001 From: Elvia Patricia Barron Cano Date: Fri, 28 Aug 2015 19:03:16 -0500 Subject: [PATCH 02/15] Actualizacion al 28 de Ago -p2 --- doc/usr/es/intro-nat64.md | 122 +++++++++++++++++++------------------- 1 file changed, 61 insertions(+), 61 deletions(-) diff --git a/doc/usr/es/intro-nat64.md b/doc/usr/es/intro-nat64.md index 6d60319c8..4c610095e 100644 --- a/doc/usr/es/intro-nat64.md +++ b/doc/usr/es/intro-nat64.md @@ -2,148 +2,148 @@ language: es layout: default category: Documentation -title: Documentación - Introducción a los Mecanismos de Transición +title: Documentación - Introducción a los Mecanismos de Transición --- -[Documentación](documentation.html) > [Introducción](documentation.html#introduccion) > Mecanismos de Transición +[Documentación](documentation.html) > [Introducción](documentation.html#introduccion) > Mecanismos de Transición -## Mecanismos de Transición de IPv6 soportados por Jool +## Mecanismos de Transición de IPv6 soportados por Jool -## Índice +## Ãndice -1. [Introducción](#introduccion) -2. [Ejemplos de Traducción IPv4/IPv6](#traduccion-ipv4ipv6) +1. [Introducción](#introduccion) +2. [Ejemplos de Traducción IPv4/IPv6](#traduccion-ipv4ipv6) 1. [`SIIT con EAM`](#siit-con-eam) 2. [`SIIT tradicional`](#siit-tradicional) 3. [`Stateful NAT64`](#stateful-nat64) -## Introducción - Este documento proporciona una introducción general a los tres mecanismos de traducción implementados en Jool. +## Introducción + Este documento proporciona una introducción general a los tres mecanismos de traducción implementados en Jool. -El algoritmo para SIIT fue definido formalmente a inicios del 2000 por Erik Nordmark de SUN Microsystems en el [RFC 2765] (https://tools.ietf.org/html/rfc2765). Este ha sido actualizado en varias ocasiones: [(RFC 6145, 2011)] (https://tools.ietf.org/html/rfc6145), [(RFC6791, 2012)] (https://tools.ietf.org/html/rfc6791) e inclusive [hasta nuestros días] (https://tools.ietf.org/id/siit?maxhits=100&key=date&dir=desc). De éstos, ya están incluidos en Jool el [(draft-ietf-v6ops-siit-dc, 2015)] ({{ site.draft-siit-dc }}), el [(draft-ietf-v6ops-siit-dc-2xlat, 2015)] ({{ site.draft-siit-dc-2xlat }}) y el [(draft-anderson-v6ops-siit-eam, 2015)] ({{ site.draft-siit-eam }}). Estas tres adiciones a SIIT han sido propuestas y promovidas por [Tore Anderson] (http://www.redpill-linpro.com/tore-anderson#overlay-context=about-us/our-consultants) de la compañía Redpill Linpro en Noruega. +El algoritmo para SIIT fue definido formalmente a inicios del 2000 por Erik Nordmark de SUN Microsystems en el [RFC 2765] (https://tools.ietf.org/html/rfc2765). Este ha sido actualizado en varias ocasiones: [(RFC 6145, 2011)] (https://tools.ietf.org/html/rfc6145), [(RFC6791, 2012)] (https://tools.ietf.org/html/rfc6791) e inclusive [hasta nuestros días] (https://tools.ietf.org/id/siit?maxhits=100&key=date&dir=desc). De éstos, ya están incluidos en Jool el [(draft-ietf-v6ops-siit-dc, 2015)] ({{ site.draft-siit-dc }}), el [(draft-ietf-v6ops-siit-dc-2xlat, 2015)] ({{ site.draft-siit-dc-2xlat }}) y el [(draft-anderson-v6ops-siit-eam, 2015)] ({{ site.draft-siit-eam }}). Estas tres adiciones a SIIT han sido propuestas y promovidas por [Tore Anderson] (http://www.redpill-linpro.com/tore-anderson#overlay-context=about-us/our-consultants) de la compañía Redpill Linpro en Noruega. -La metodología del Stateful NAT64 fue uno de los resultados del [**Proyecto Trilogy**] (http://trilogy-project.org/trilogy-and-the-ietf.html), organizado por [la Unión Europea] (http://europa.eu/rapid/press-release_IP-11-1294_es.htm), con una inversión aprox. de 9 millones de Euros, por un período de 3 años (2008 al 2010) donde participaron 5 Universidades, 4 compañías de telecomunicación y 2 centros de investigación. El estándar para el NAT64 que es el [RFC 6146] (https://tools.ietf.org/html/rfc6146) fue publicado en el 2011 por el mismo coordinador del projecto, el [Dr. Marcelo Bagnulo Braun] (http://www.it.uc3m.es/marcelo/) de la Universidad Carlos III y otros dos colaboradores del proyecto. +La metodología del Stateful NAT64 fue uno de los resultados del [**Proyecto Trilogy**] (http://trilogy-project.org/trilogy-and-the-ietf.html), organizado por [la Unión Europea] (http://europa.eu/rapid/press-release_IP-11-1294_es.htm), con una inversión aprox. de 9 millones de Euros, por un período de 3 años (2008 al 2010) donde participaron 5 Universidades, 4 compañías de telecomunicación y 2 centros de investigación. El estándar para el NAT64 que es el [RFC 6146] (https://tools.ietf.org/html/rfc6146) fue publicado en el 2011 por el mismo coordinador del projecto, el [Dr. Marcelo Bagnulo Braun] (http://www.it.uc3m.es/marcelo/) de la Universidad Carlos III y otros dos colaboradores del proyecto. -:bulb: Conoce más trabajos elaborados por la IETF acerca de NAT64 en [TOOLS IETF] (https://tools.ietf.org/id/nat64?maxhits=100&key=date&dir=desc) y en [Datatracker] (https://datatracker.ietf.org/doc/search/?name=nat64&sort=&rfcs=on&activedrafts=on). +:bulb: Conoce más trabajos elaborados por la IETF acerca de NAT64 en [TOOLS IETF] (https://tools.ietf.org/id/nat64?maxhits=100&key=date&dir=desc) y en [Datatracker] (https://datatracker.ietf.org/doc/search/?name=nat64&sort=&rfcs=on&activedrafts=on). -## Ejemplos de Traducción IPv4/IPv6 +## Ejemplos de Traducción IPv4/IPv6 - SIIT (_Stateless IP/ICMP Translation_) y NAT64 ("NAT seis cuatro", no "NAT sesenta y cuatro") son tecnologías orientadas a comunicar nodos de red que únicamente hablan [IPv4](http://es.wikipedia.org/wiki/IPv4) con nodos que solo hablan [IPv6](http://es.wikipedia.org/wiki/IPv6). - La idea es básicamente la de un [NAT](http://es.wikipedia.org/wiki/Traducci%C3%B3n_de_direcciones_de_red) mejorado; es decir que, un "Traductor IPv4/IPv6" no solo reemplaza direcciones y/o puertos en los paquetes, sino también encabezados de capa 3. + SIIT (_Stateless IP/ICMP Translation_) y NAT64 ("NAT seis cuatro", no "NAT sesenta y cuatro") son tecnologías orientadas a comunicar nodos de red que únicamente hablan [IPv4](http://es.wikipedia.org/wiki/IPv4) con nodos que solo hablan [IPv6](http://es.wikipedia.org/wiki/IPv6). + La idea es básicamente la de un [NAT](http://es.wikipedia.org/wiki/Traducci%C3%B3n_de_direcciones_de_red) mejorado; es decir que, un "Traductor IPv4/IPv6" no solo reemplaza direcciones y/o puertos en los paquetes, sino también encabezados de capa 3. - **SIIT**, es la manera sencilla, permitiendo MAPEOS 1-a-1 preconfigurados entre IPv4 e IPv6.
- Es decir, que en SIIT tú establecerás lo siguiente:
- a) Para cada uno de tus nodos en IPv6 existirá una dirección alterna en IPv4.
- b) Para cada uno de tus nodos en IPv4 existirá una dirección alterna en IPv6. - - - **Stateful NAT64**, o simplemente NAT64, permite que VARIOS NODOS IPv6 compartan UN RANGO PEQUEÑO de direcciones IPv4.
- Es decir, que en NAT64 tú establecerás lo siguiente:
- a) Para cada uno de tus nodos en IPv4 existirá una dirección alterna en IPv6, pero esa nueva dirección estará formada de un prefijo de IPv6 + dir. en IPv4.
- b) Los nodos en IPv6 será identificados por una o varias IP válidas en _T_ (Jool), aparentando ser una "Red Privada de IPv4" (red local). + Es decir, que en SIIT tú establecerás lo siguiente:
+ a) Para cada uno de tus nodos en IPv6 existirá una dirección alterna en IPv4.
+ b) Para cada uno de tus nodos en IPv4 existirá una dirección alterna en IPv6. + + - **Stateful NAT64**, o simplemente NAT64, permite que VARIOS NODOS IPv6 compartan UN RANGO PEQUEÑO de direcciones IPv4.
+ Es decir, que en NAT64 tú establecerás lo siguiente:
+ a) Para cada uno de tus nodos en IPv4 existirá una dirección alterna en IPv6, pero esa nueva dirección estará formada de un prefijo de IPv6 + dir. en IPv4.
+ b) Los nodos en IPv6 será identificados por una o varias IP válidas en _T_ (Jool), aparentando ser una "Red Privada de IPv4" (red local). -NAT64 es definitivamente útil cuando se dispone de un [número restringido de direcciones de IPv4](http://es.wikipedia.org/wiki/Agotamiento_de_las_direcciones_IPv4). +NAT64 es definitivamente útil cuando se dispone de un [número restringido de direcciones de IPv4](http://es.wikipedia.org/wiki/Agotamiento_de_las_direcciones_IPv4). -Por razones históricas, algunas veces etiquetamos a SIIT como "Stateless NAT64". Ya que esta expresión no parece estar incluida en ningún estándar relevante, la consideramos imprecisa, a pesar de que tiene cierto grado de sentido. Si es possible, por favor trata de no usarla. +Por razones históricas, algunas veces etiquetamos a SIIT como "Stateless NAT64". Ya que esta expresión no parece estar incluida en ningún estándar relevante, la consideramos imprecisa, a pesar de que tiene cierto grado de sentido. Si es possible, por favor trata de no usarla. -En una implementación SIIT siempre se modifican los encabezados de red y en algunas veces los checksums. En un Stateful NAT64 también se manipulan los identificadores de transporte. +En una implementación SIIT siempre se modifican los encabezados de red y en algunas veces los checksums. En un Stateful NAT64 también se manipulan los identificadores de transporte. ### `SIIT con EAM` -Esta parte es la más fácil de explicar. Considera la siguiente configuración: +Esta parte es la más fácil de explicar. Considera la siguiente configuración: ![Fig.1 - Red de ejemplo EAM](images/network/eam.png "Fig.1 - Red de ejemplo EAM") -(_T_ representa "Translating box". En español "Caja de traducción".) +(_T_ representa "Translating box". En español "Caja de traducción".) -Asumiendo que la puerta de enlace por default de todos es _T_, comó comunicarías _A_ (IPv6) con _V_ (IPv4)? +Asumiendo que la puerta de enlace por default de todos es _T_, comó comunicarías _A_ (IPv6) con _V_ (IPv4)? -Para lograr la comunicación entre _A_ y _V_ bastaría con establecer lo siguiente: +Para lograr la comunicación entre _A_ y _V_ bastaría con establecer lo siguiente: -- Le dices a _A_, "la dirección de _V_ es 2001:db8:4::16". -- Le dices a _V_, "la dirección de _A_ es 198.51.100.8 ". -- Le dices a _T_, "La dirección IPv4 de _A_ debe de ser 198.51.100.8,
- y la dirección IPv6 de _V_ debe de ser 2001:db8:4::16". +- Le dices a _A_, "la dirección de _V_ es 2001:db8:4::16". +- Le dices a _V_, "la dirección de _A_ es 198.51.100.8 ". +- Le dices a _T_, "La dirección IPv4 de _A_ debe de ser 198.51.100.8,
+ y la dirección IPv6 de _V_ debe de ser 2001:db8:4::16". -La primera es resuelta por SIIT, las demás pueden ser realizadas vía DNS. +La primera es resuelta por SIIT, las demás pueden ser realizadas vía DNS. Veamos: ![Fig.2 - Flujo EAM](images/flow/eam.png "Fig.2 - Flujo EAM") -El traductor esta "engañando" a ambos nodos haciéndoles pensar que el otro puede hablar el mismo lenguaje. +El traductor esta "engañando" a ambos nodos haciéndoles pensar que el otro puede hablar el mismo lenguaje. -"EAM" significa por sus siglas en inglés "Explicit Address Mapping", mapeo de direcciones explícitas. Es más versátil que un simple mapeo de direcciones aribtrarias a otras direcciones arbitrarias. +"EAM" significa por sus siglas en inglés "Explicit Address Mapping", mapeo de direcciones explícitas. Es más versátil que un simple mapeo de direcciones aribtrarias a otras direcciones arbitrarias. :bulb: Revisa [nuestro resumen](eamt.html) o repasa sus especificaciones en el [draft EAM]({{ site.draft-siit-eam }}). ### `SIIT (tradicional)` -El modo básico es un poco más complejo. Las direcciones no son remplazadas completamente por otras, sino una parte será usada en su dirección asociada con el otro protocolo. Considera la siguiente configuración: +El modo básico es un poco más complejo. Las direcciones no son remplazadas completamente por otras, sino una parte será usada en su dirección asociada con el otro protocolo. Considera la siguiente configuración: ![Fig.3 - Red de ejemplo Vanilla](images/network/vanilla.png "Fig.3 - Red de ejemplo Vanilla") -Para lograr la comunicación entre _A_ y _V_ bastaría con establecer lo siguiente: +Para lograr la comunicación entre _A_ y _V_ bastaría con establecer lo siguiente: -- Le dices a _A_, "la dirección de _V_ es 2001:db8:192.0.2.16". -- Le dices a _V_, "la dirección de _A_ es 198.51.100.8 ". -- Le dices a _T_, "La dirección IPv4 de _A_ debe de ser 198.51.100.8,
- y la dirección IPv6 de _V_ debe de ser 2001:db8:192.0.2.16". +- Le dices a _A_, "la dirección de _V_ es 2001:db8:192.0.2.16". +- Le dices a _V_, "la dirección de _A_ es 198.51.100.8 ". +- Le dices a _T_, "La dirección IPv4 de _A_ debe de ser 198.51.100.8,
+ y la dirección IPv6 de _V_ debe de ser 2001:db8:192.0.2.16". La idea es, simplemente remover _el prefijo_ durante el mapeo de IPv6 a IPv4, y adjuntarlo en el otro sentido. Como lo puedes apreciar en la siguiente figura: ![Fig.4 - Flujo Vanilla](images/flow/vanilla.png "Fig.4 - Flujo Vanilla") -Por supuesto, esto significa que la dirección IPv4 de cada nodo en IPv6 tiene que ser codificada dentro de su dirección, lo cual es un poco engorroso. +Por supuesto, esto significa que la dirección IPv4 de cada nodo en IPv6 tiene que ser codificada dentro de su dirección, lo cual es un poco engorroso. -Podría parecerte que SIIT con "EAM" y SIIT "tradicional" son cosas diferentes, pero pueden trabajar a la par. En implementaciones de este tipo, primeramente se intentará mapear las direcciones IP consultando la tabla EAM (según SIIT con EAM), y si NO están registradas, se retrocede y se añade o se remueve el prefijo (según SIIT). +Podría parecerte que SIIT con "EAM" y SIIT "tradicional" son cosas diferentes, pero pueden trabajar a la par. En implementaciones de este tipo, primeramente se intentará mapear las direcciones IP consultando la tabla EAM (según SIIT con EAM), y si NO están registradas, se retrocede y se añade o se remueve el prefijo (según SIIT). -Puedes encontrar un ejemplo concreto de como SIIT "tradicional" y "EAM" pueden ser combinados eficientemente para cumplir un caso de uso en la siguiente propuesta de solución para Centros de Datos: [draft-v6ops-siit-dc]({{ site.draft-siit-dc }}). +Puedes encontrar un ejemplo concreto de como SIIT "tradicional" y "EAM" pueden ser combinados eficientemente para cumplir un caso de uso en la siguiente propuesta de solución para Centros de Datos: [draft-v6ops-siit-dc]({{ site.draft-siit-dc }}). -Dependiendo de la longitud del prefijo, la dirección IPv4 se incorporará en diferentes posiciones dentro de nuestro rango de 128 bits según se establece en el [RFC 6052](http://tools.ietf.org/html/rfc6052). +Dependiendo de la longitud del prefijo, la dirección IPv4 se incorporará en diferentes posiciones dentro de nuestro rango de 128 bits según se establece en el [RFC 6052](http://tools.ietf.org/html/rfc6052). -:warning: Siempre que el RFC 6052 esté involucrado, es muy conveniente dar de alta también un [DNS64](dns64.html) para que
+:warning: Siempre que el RFC 6052 esté involucrado, es muy conveniente dar de alta también un [DNS64](dns64.html) para que
los usuarios no necesiten estar al tanto del prefijo, y resuelva por nombre. ### `Stateful NAT64` -Este modo es el más parecido a lo que la gente entiende como **NAT**, por sus siglas en inglés de _IP Network Address Translator_. Recordemos, un NAT opera de la siguiente manera: +Este modo es el más parecido a lo que la gente entiende como **NAT**, por sus siglas en inglés de _IP Network Address Translator_. Recordemos, un NAT opera de la siguiente manera: ![Fig.5 - Red de ejemplo NAT](images/network/nat.png "Fig.5 - Red de ejemplo NAT") -Note que, la red de la izquierda es llamada "Privada" por que usa [Direcciones no disponibles en la Internet Global](http://es.wikipedia.org/wiki/Red_privada). _NAT_ modifica las direcciones de los paquetes para que los nodos externos piensen que el tráfico proveniente de los nodos internos fue en realidad iniciado por el _NAT_: +Note que, la red de la izquierda es llamada "Privada" por que usa [Direcciones no disponibles en la Internet Global](http://es.wikipedia.org/wiki/Red_privada). _NAT_ modifica las direcciones de los paquetes para que los nodos externos piensen que el tráfico proveniente de los nodos internos fue en realidad iniciado por el _NAT_: ![Fig.6 - Flujo NAT](images/flow/nat.png "Fig.6 - Flujo NAT") -Es decir que para propósitos externos, los nodos desde _A_ hasta _E_ están "compartiendo" la misma dirección global de _NAT_ (o grupo de direcciones). +Es decir que para propósitos externos, los nodos desde _A_ hasta _E_ están "compartiendo" la misma dirección global de _NAT_ (o grupo de direcciones). -Aunque NAT ayuda a reducir el empleo de direcciones globales en Internet de IPv4, esto tiene un precio: _NAT_ tiene que recordar cual nodo privado emitió el paquete a _V_, porque la dirección de _A_ fue suprimida dentro de la respuesta de _V_. Por eso, es que es llamado ***stateful***, porque guarda el estado de las sesiones, pues crea mapeos de direcciones y los recuerda por un tiempo. +Aunque NAT ayuda a reducir el empleo de direcciones globales en Internet de IPv4, esto tiene un precio: _NAT_ tiene que recordar cual nodo privado emitió el paquete a _V_, porque la dirección de _A_ fue suprimida dentro de la respuesta de _V_. Por eso, es que es llamado ***stateful***, porque guarda el estado de las sesiones, pues crea mapeos de direcciones y los recuerda por un tiempo. Dos cosas que hay que tomar en cuenta es: - Cada mapeo require memoria. -- _V_ no puede **iniciar** la comunicación con _A_, porque primeramente el _NAT_ **debe** aprender el mapeo en el sentido de la Red_Privada-a-Red_Externa (de izquierda a derecha). +- _V_ no puede **iniciar** la comunicación con _A_, porque primeramente el _NAT_ **debe** aprender el mapeo en el sentido de la Red_Privada-a-Red_Externa (de izquierda a derecha). -Si quieres saber más sobre NAT y sus diferentes tipos, consulta los siguientes documentos: [RFC 2663](https://tools.ietf.org/html/rfc2663#section-3), [RFC 2766](https://tools.ietf.org/html/rfc2766) y [RFC 3022](https://tools.ietf.org/html/rfc3022). +Si quieres saber más sobre NAT y sus diferentes tipos, consulta los siguientes documentos: [RFC 2663](https://tools.ietf.org/html/rfc2663#section-3), [RFC 2766](https://tools.ietf.org/html/rfc2766) y [RFC 3022](https://tools.ietf.org/html/rfc3022). -**Stateful NAT64** es muy similar a un NAT-PT (_Protocol Translation_). La única diferencia es que la "Red Privada" es de hecho una red IPv6: +**Stateful NAT64** es muy similar a un NAT-PT (_Protocol Translation_). La única diferencia es que la "Red Privada" es de hecho una red IPv6: ![Fig.7 - Red de ejemplo Stateful NAT64](images/network/stateful.png "Fig.7 - Red de ejemplo Stateful NAT64") -Para lograr la comunicación entre _A_ y _V_ bastaría con establecer lo siguiente: +Para lograr la comunicación entre _A_ y _V_ bastaría con establecer lo siguiente: -- Le dices a _A_, "la dirección de _V_ es 2001:db8:203.0.113.16". -- Le dices a _V_, "la dirección de _A_ es 203.0.113.2 (_T_)". -- Le dices a _T_, "La dirección IPv4 de _A_ debe de ser 203.0.113.2 (_T_),
- y la dirección IPv6 de _V_ debe de ser 2001:db8:203.0.113.16". +- Le dices a _A_, "la dirección de _V_ es 2001:db8:203.0.113.16". +- Le dices a _V_, "la dirección de _A_ es 203.0.113.2 (_T_)". +- Le dices a _T_, "La dirección IPv4 de _A_ debe de ser 203.0.113.2 (_T_),
+ y la dirección IPv6 de _V_ debe de ser 2001:db8:203.0.113.16". -La idea es, enmascarar _A_ y remover el prefijo a _V_ durante el mapeo de IPv6 a IPv4, y adjuntar el prefijo en _V_ y quitar la máscara a _A_ cuando va de IPV4 a IPv6. Como lo puedes apreciar en la siguiente figura: +La idea es, enmascarar _A_ y remover el prefijo a _V_ durante el mapeo de IPv6 a IPv4, y adjuntar el prefijo en _V_ y quitar la máscara a _A_ cuando va de IPV4 a IPv6. Como lo puedes apreciar en la siguiente figura: ![Fig.8 - Flujo Stateful](images/flow/stateful.png "Fig.8 - Flujo Stateful") -NAT64 maneja otros escenarios y es aquí donde termina la similitud con NAT. Debido a que en IPv6 la capacidad de identificación de los nodos es sumamente enorme, se contempla que cada dispositivo cuente con una dirección pública de IPv6. En otras palabras se prevé o planea que TODOS los dispositivos en IPv6 tenga acceso a Internet. Considerando esto, una conectividad posible sería: +NAT64 maneja otros escenarios y es aquí donde termina la similitud con NAT. Debido a que en IPv6 la capacidad de identificación de los nodos es sumamente enorme, se contempla que cada dispositivo cuente con una dirección pública de IPv6. En otras palabras se prevé o planea que TODOS los dispositivos en IPv6 tenga acceso a Internet. Considerando esto, una conectividad posible sería: ![Fig.9 - Internet Stateful NAT64](images/network/full.png "Fig.9 - Internet Stateful NAT64") From 7dad6b497478da897ced2d00d232b2843bc86867 Mon Sep 17 00:00:00 2001 From: patybarron Date: Tue, 1 Sep 2015 22:22:19 -0500 Subject: [PATCH 03/15] Cambios al 1 de Sept -p1 --- doc/usr/es/index.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/doc/usr/es/index.md b/doc/usr/es/index.md index d92c17d16..9535b89b2 100644 --- a/doc/usr/es/index.md +++ b/doc/usr/es/index.md @@ -16,7 +16,7 @@ Jool es un [SIIT y NAT64](intro-nat64.html) para Linux. Desarrollado sobre Ubunt * [Haz click aquí](documentation.html) para empezar a familiarizarte con el software. * [Haz click aquí](download.html) para descargar Jool. -:sparkles: Agradecemos a Namsep por su aportación hecha sobre Raspbian. +![sparkles](../images/sparkles.png) Agradecemos a Namsep por su aportación hecha sobre Raspbian. ------------------- @@ -43,7 +43,7 @@ Nuestra versión más reciente es la [3.3.3](https://github.com/NICMx/NAT64/issu Versión 3.3.3 liberada. -[Error crítico #166 corregido](https://github.com/NICMx/NAT64/issues/166):heavy_exclamation_mark: +[Error crítico #166 corregido](https://github.com/NICMx/NAT64/issues/166) ![heavy_exclamation_mark](../images/heavy_exclamation_mark.png) Además en esta versión: @@ -68,12 +68,12 @@ Se dieron de alta dos listas de correo: [jool@nic.mx](mailto:jool@nic.mx) aún puede ser utilizado para accesar a los desrrolladores. -:small_red_triangle_down: También nos gustaria disculparnos por el [inconveniente que tuvimos recientemente con el certificado](https://github.com/NICMx/NAT64/issues/149). Aunque están siendo generados, los archivos de la lista de correos no están disponibles todavia, y esto está en la lista de pendientes de nuestros administradores. +![small_red_triangle_down](../images/small_red_triangle_down.png) También nos gustaria disculparnos por el [inconveniente que tuvimos recientemente con el certificado](https://github.com/NICMx/NAT64/issues/149). Aunque están siendo generados, los archivos de la lista de correos no están disponibles todavia, y esto está en la lista de pendientes de nuestros administradores. ### 2015-03-11 -[Error importante #137 descubierto](https://github.com/NICMx/NAT64/issues/137):heavy_exclamation_mark: +[Error importante #137 descubierto](https://github.com/NICMx/NAT64/issues/137) ![heavy_exclamation_mark](../images/heavy_exclamation_mark.png) Precisamente, ya liberamos Jool 3.3.1 para resolver dicho problema. @@ -81,7 +81,7 @@ Precisamente, ya liberamos Jool 3.3.1 para resolver dicho problema. Se ha concluido Jool 3.3.0. -:small_red_triangle_down: [Las polítcas de Filtrado aún no son soportadas en esta versión](https://github.com/NICMx/NAT64/issues/41#issuecomment-76861510), pero las traducciones tipo Stateless para IP/ICMP (SIIT) son ahora soportadas. +![small_red_triangle_down](../images/small_red_triangle_down.png) [Las polítcas de Filtrado aún no son soportadas en esta versión](https://github.com/NICMx/NAT64/issues/41#issuecomment-76861510), pero las traducciones tipo Stateless para IP/ICMP (SIIT) son ahora soportadas. Lee la [introducción a SIIT/NAT64](intro-nat64.html) para conocer este nuevo paradigma. [Aqui encontras un tutorial](mod-run-vanilla.html). Para su mejor comprensión, ve a [464XLAT](mod-run-464xlat.html). @@ -101,7 +101,7 @@ El error im La documentación provista sobre `--plateaus` ha sido [mejorada](usr-flags-plateaus.html). Su [definición](usr-flags-global.html#mtu-plateaus) también. -:small_red_triangle_down: Ha llamado nuestra atención que no hemos incluido una explicación acerca de las IP literals, esto quedará dentro de la próxima actualización. +![small_red_triangle_down](../images/small_red_triangle_down.png) Ha llamado nuestra atención que no hemos incluido una explicación acerca de las IP literals, esto quedará dentro de la próxima actualización. ### 2014-10-08 @@ -134,9 +134,9 @@ El segundo cambio más importante es el pequeña confusión saco a luz que el path a la libnl había sido codificada en el script de configuración. Si usted ha tenido problemas para compilar la Herramienta de Configuración de Jool, entonces pruebe esta nueva versión. -Lo menos relevante incluye un complemento al viejo caso #65, más documentación del código :smiley:. La documentación para los usuarios se ha actualizado significativamente, para ver los cambios vaya aquí. +Lo menos relevante incluye un complemento al viejo caso #65, más documentación del código. ![smiley](../images/smiley.png) La documentación para los usuarios se ha actualizado significativamente, para ver los cambios vaya aquí. -:small_red_triangle_down: No se completaron los cambios para la nueva implementación del mecanismo de fragmentación. Esto fue uno de los principales motivos para el retrazo de esta versión. Al parecer se requiere conciliar el desfragmentador del kernel y el RFC para poder implementar las políticas de filtrado. Sigue siendo un caso activo. +![small_red_triangle_down](../images/small_red_triangle_down.png) No se completaron los cambios para la nueva implementación del mecanismo de fragmentación. Esto fue uno de los principales motivos para el retrazo de esta versión. Al parecer se requiere conciliar el desfragmentador del kernel y el RFC para poder implementar las políticas de filtrado. Sigue siendo un caso activo. También se liberó el 3.1.6, el cual contiene pequeñas correciones al 3.1.5. Esto se hizo en consideración a los usuarios que por alguna razón requerian continuar usando la serie 3.1.x. @@ -166,7 +166,7 @@ La version 3.1.4 ha sido liberada, y corrige: 2. La Herramienta de Configuración del Jool ahora resuelve nombres. 3. Se añade el soporte para Linux 3.13+. -:x: No recomendamos el uso de Jool en el kernel 3.12. +![x](../images/x.png) No recomendamos el uso de Jool en el kernel 3.12. ### 2014-03-26 @@ -179,11 +179,11 @@ La version 3.1.3 ha sido liberada, y corrige: ### 2014-03-04 -:bell: Website ha sido liberado. *!Este website!* +![bell](../images/bell.png) Website ha sido liberado. *!Este website!* y con este viene un nueva actualización 3.1.2, que: -1. estándariza el procedimiento de compilación e instalación en la Herramienta de Configuración de Jool. +1. Estándariza el procedimiento de compilación e instalación en la Herramienta de Configuración de Jool. 2. Hace más explicto el manejo de sufijos de prefijos. 3. No se inhibe cuando el comando modprobe recibe argumentos inválidos . @@ -198,7 +198,7 @@ Esta contiene dos correcciones: ### 2014-01-15 -:small_orange_diamond: La version 3.1.0 ha sido liberada. ¡Jool, finalmente, maneja fragmentación! +![small_orange_diamond](../images/small_orange_diamond.png) La version 3.1.0 ha sido liberada. ¡Jool, finalmente, maneja fragmentación! Otras correcciones importantes: From 540a9ffda45c7947da759fa6f4a5df7d2373039d Mon Sep 17 00:00:00 2001 From: patybarron Date: Tue, 1 Sep 2015 22:29:06 -0500 Subject: [PATCH 04/15] Cambios al 1 de Sept -p2 --- doc/usr/images/bell.png | Bin 0 -> 1150 bytes doc/usr/images/bulb.png | Bin 0 -> 895 bytes doc/usr/images/email.png | Bin 0 -> 1023 bytes doc/usr/images/heavy_exclamation_mark.png | Bin 0 -> 502 bytes doc/usr/images/mailbox.png | Bin 0 -> 1110 bytes doc/usr/images/mailbox_with_mail.png | Bin 0 -> 1208 bytes doc/usr/images/small_orange_diamond.png | Bin 0 -> 500 bytes doc/usr/images/small_red_triangle_down.png | Bin 0 -> 530 bytes doc/usr/images/smiley.png | Bin 0 -> 1276 bytes doc/usr/images/sparkles.png | Bin 0 -> 800 bytes doc/usr/images/thumbsup.png | Bin 0 -> 1031 bytes doc/usr/images/warning.png | Bin 0 -> 938 bytes doc/usr/images/x.png | Bin 0 -> 897 bytes 13 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/usr/images/bell.png create mode 100644 doc/usr/images/bulb.png create mode 100644 doc/usr/images/email.png create mode 100644 doc/usr/images/heavy_exclamation_mark.png create mode 100644 doc/usr/images/mailbox.png create mode 100644 doc/usr/images/mailbox_with_mail.png create mode 100644 doc/usr/images/small_orange_diamond.png create mode 100644 doc/usr/images/small_red_triangle_down.png create mode 100644 doc/usr/images/smiley.png create mode 100644 doc/usr/images/sparkles.png create mode 100644 doc/usr/images/thumbsup.png create mode 100644 doc/usr/images/warning.png create mode 100644 doc/usr/images/x.png diff --git a/doc/usr/images/bell.png b/doc/usr/images/bell.png new file mode 100644 index 0000000000000000000000000000000000000000..ea879ead19b31683aef5e742e0d9bd4400c598ce GIT binary patch literal 1150 zcmV-^1cCdBP)~9vC=}N6xDJGfM_C# zrfL5TTq(t+p8N)s#{-C0mcwr+$I{w9hg1tAIAV&msR~zyPAte+@G92pbtbM| zVAJY2nrhK1KSH-AP|Y@II<4wMnzPfOBx`!&j9j}wypHp+=n)Iy zIK*9xgeWt8KesY?Vf+@Io{p2WFl-Yu=3>|hgcU9dGzcr6D z&vPjykFqz}kcnftF^p&oGunZOrqLrQ&@`mb&z#HHPCO93Nr3bLn^(jz=W*ED^7RuAU^-iR%>d`K4_cIXg(VHA6D( zVkSB;quw0YNu$|5y5%G6G{R0}Mm@}A2gweXZfk~-p~1y%$=$il>w(|vg9^qlfq zt;V-s4RGnyQA#a?a&;Vu#4;lkt92S-i_TO6-_g-DDArp%mAAq zag Q)&Kwi07*qoM6N<$f(Ex6CIA2c literal 0 HcmV?d00001 diff --git a/doc/usr/images/bulb.png b/doc/usr/images/bulb.png new file mode 100644 index 0000000000000000000000000000000000000000..1eaf67188e242ea03bedfe8e4f8dd98bb7570a77 GIT binary patch literal 895 zcmV-_1AzRAP)C*3E8PMHImC|IGcc9Vd?M ze9@*&DjGW#5l}?K$AWeN5)u-;Ko^L<0BfG4s>BPhVZo*f>VhH=t%M?_rG-F3oHh=z zo5t5TuCL>{b6B)U6_93}N?nvA&EiU<`RUBeJ#&<`R(OV?pC$JH0DaeqiRrOZtMVY) z0)cdHgyIXw3Bq(=pmMo1_39e8zWWM#5ry$_wAM6gbxh(j`}T)S&di~dasm&`aI><^ z;=)BvpF6{3`4hC41vFy2)Yrb|$AwFDJLft1%3Dq#)>_$bv|Eu}{`@ofiCSt7>5hKyo6}f!zQ`xC)?7Pn64#e=9>WuF za$>GPW$AmT1fK}j*Kc#IJcVMMhbN=}c{Cnn~<95FdNe;{@sm@kfU;DqO=4^}}Ebmk~JJB3(_ zO{y$kyTb7FdyE~KdU{YP#mwC642--%<<TC=tG4c%m#^69hqzFU<% zuy}`I$crzZWpnKwrngNP=J5PswC=L8vdZMCb7ZqwCkz~mccC~&#}-*yyn*a)6L$@{ zR>F=m@^=Q<^DJC=@ZKM?RnL3+oFMYgxZ@2jBMyQz6Z$>GY%jGn`-i zQmMq%tKYJ8<0ihJVx*Ac!iA6f2AwiYl7w_R&HVfsB-x|WZZJ1@ic~5^9LI>bcbZNu zhKOK{A&z63%_i1bhK7d7WHJOnfag%O`vM<_|FwW)FY|XepW$H^|F3xd8{y|4{0ncc VgQ?KmpyMIRTPGwJ6|^T*m2e$ zas;s*BsL@ke;}d^6bmJENJ!97P@?@0{0ER|kXGBK*pkEorA!wIC23;9hGdd>X1wvt z+@F%?D#K@>$OrKnUYl*{G&1G&7s#C2VgB%xBNV4CJN zm{AmhAjrC~R z)09G?fa5rLo`=>ty8wLOCkO&+wHiW*sp*>;L`q4aP(TR5`T2SFvWtrgf*_z?ual-J zN~!w+@&9~@jG{3J_$Nh4l29s@&{`7&0sVfT!C*kWUeD4siqgy=`#(Hm|Hq$5hQl!! zr4&+1;y7k*ZVu1$==b|H8jUfCo7#M8*IfL5fIxs@FxUSB@!KyP%2&Mo5Isx@I45=9Yy3c6+`kdkCA9Iv1Ain>Ocb|$rt;B;EPeKAHd{tIqLgB3X$c_&-ENn)wKWXGAW4$3HlG$1aoc@l z7=}27LN+;jy&m~|o*)R2QexXSmSwTAv4QKltgo*lgdmP%0BqYPNfNZyv|6oe{%@@# zdDp!*zF!ad&dv_2tE)7dO*S_-ky2usW)_W+o=mctB!1-BwrzHIcQH+qX0u7V-KJbF z)9rRqN?}>nje<7whGyF~dwY9CQADfNB1saWD5BkNQ!14*7}GST`k4vDwrzU79%pA~ zbUK|(?nm>d)oS6oF5PZ76SaE>F${y_<6}-vPFPu4A)n72xv?8`Z&8HI-6kY1-f4zuT;tW{%@nkr&u*k(YuNiQ4q%Qf6X~PeVJ=J z-AfM!iy}B83>ugih=HJBx-Vev8<_Y4#)5%hV6yS%=89q85GR2lT_ z4hB~IqxkA8QB~tVBO>^4ctpMP3gHAq0I)v|{`#C`KEpT1H9wy`r~CE`+7Se3Y)SU? z5!HN#cl``2a{>X?6>x?QdH{HrB)Ib%G=KpDge1lnc?(1YnU*XugmyznW4h&}1prbN zEKxeA8%8~RJ_4Wv;HrYA>rfy7mJe|KYz?AvLKAx$puu1=#%1Xmbc-DArv!`!L#72j zN!GxRhJI0GKQM-l$cO%`HE z8WUf>xPI8_H|xb7_1AAm64Se|iI1W-hpJk=*t5?MAKU9ox9#24`}Sjd$5hqK%sjxa zH}CoMVw>f`F&*IW*-P?!w}=OWHe{`VBMrD!+5622L3Mpab>kY@)?N0;DZe*MrVqAA shr@qE9_;S&{liDn@rdb_8PO`_U$aJ(6z3H85&!@I07*qoM6N<$f~RoTH2?qr literal 0 HcmV?d00001 diff --git a/doc/usr/images/mailbox.png b/doc/usr/images/mailbox.png new file mode 100644 index 0000000000000000000000000000000000000000..5e39d8525ab8f1c5c453e79c0fc9978ab94f1532 GIT binary patch literal 1110 zcmV-c1gZOpP)1}R zotb;yo^xEx2yP~U31S!d!R2o5J$%k{4(C2s<(vz5N%a2>_;#W%=kEQwct{F)Ytf6fRC{IKr<&d)A#_`xZb4=qwv)z&aR z1itv?5+}nH>V|{0i|F}9%EA)e%YQL5b1%uQpg#YM9hZ9K3DqC81J~bwld}h2;moP? zoLl*cw_ZFygU@=&2U^cQmwZfCrO|;RZJz#Hw@&$$B zxt*3rUzn!dImpS=zw!Nv7vcX$Q5XpSF!m)^rqfd_h#a?vA6h}lwKi>$BTVfXG4Fr^e+9k4Ev z3>c#^Nn?$|*i6O{V!?GYsT5)?$n8YD0Mri2LJ~nF6H+F$3uTk9;P5?D3ekCDFHl+4 z$5>6W8e=q7PK1!Ddk_Q+g}TnvJwL!?QW8XjkTT*Tu(4)?4O|GdC)XYs0E{(Q+ehWB zaZW%PVg^$Ry^g2bY*So~NJb0<)%`w`oNvbiS6UT9#4n&WLkYgf?kb*EC!iJDd zFb@~07*qoM6N<$g3q`Bg#Z8m literal 0 HcmV?d00001 diff --git a/doc/usr/images/mailbox_with_mail.png b/doc/usr/images/mailbox_with_mail.png new file mode 100644 index 0000000000000000000000000000000000000000..2b03ba3382813f302581c8059b0ed273f394d9f3 GIT binary patch literal 1208 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 B=Gy=O literal 0 HcmV?d00001 diff --git a/doc/usr/images/warning.png b/doc/usr/images/warning.png new file mode 100644 index 0000000000000000000000000000000000000000..1570e846ebd7c0915eccb76bf5ba50198b1c1f58 GIT binary patch literal 938 zcmV;b16BNqP)C)=O_2RTRMS|BO9;j2$=5 z!)+ieAQDoAR3wDNqQH_ZEcqC$SiqO*qPwn|AO$rIYN$knRH0^52_e-9P{$s{NYpvrP!#_{#{{a@yGTB;7vcCgBZK8$mpMAY& z`XcK63fus09KN4DP7RLs_b_UWu(m^3`wOGi813)9I&c_mP;YGFl6_nTTSe1Dz2Vf6CBLH{0&iA`*lQ79P-C4hqFP+VWf@uuj1o-L zG#BRr=H3Ws)D%WZv=q2BB`n;gzq|E(pw^nCe~YTuMkE5O6-FzZ5X>}-OidPWLSnSU zYK2Gy6|YSat)R6&5gdDHdfnfs`YY%(N2|j!IdIDI{^bB`!6}K=7Cf*9{8Ur*Z_(?1 z!ln7krw65!VBP-6v^D2!BCrLjtbHl$i{?Rt-E*L$S;VC_~K zm_HGj!Wnb;XmEyTC|O+IVR3nfcp$;)C*~MrrU=X*n0Sdi&!1h=sIx&;ts-)RRZq7% zR>Mr_@$FZa0GJLvbY^k?>4?P0QK_ub?|jCa?|gJTI2w&G@glzNlIG+4Dm8-7KMW75 zF)~Lm0AZnC>|&yuj9Tweuh++e$)H2%?t^m##c|-l;ZfosS1gQO)8naCd!KaBp0QC(=)B3`6nA;Ap~(8ljr#hft5;yX0u7TTs|2*k9hqX;nyGh8?8d|d`mc4L;wH) M07*qoM6N<$g8#&`0{{R3 literal 0 HcmV?d00001 diff --git a/doc/usr/images/x.png b/doc/usr/images/x.png new file mode 100644 index 0000000000000000000000000000000000000000..0d89954c3572806365f4bcf8bc0709991bce3b0a GIT binary patch literal 897 zcmV-{1AhF8P)5mCsL9R}{xTcRCbos4mKn z@Jn7914FyU1`DI98)SvM{sY~xoy1j3%(NtK+>VR7(N%S$(RM_m6H5RYnc$C5W=ycm zV9Gd56BC=r%;U}dcEPVfhQ^-cBsb@s`+4V__r32LYpvKaX>)0e;X|xizHjHDyFq#4 zKK9A;4}t;MC(kKQ+(+(4MbKK6U03T@uW7ZtUxmRDxrwB#wg2gEBB{dQh*sPCwSM)Q z%C0MGt+3YW-IeRgwfAe0pwa}j7CI|;_F$+xo77t9tkMLvNRM(yPw3s1>$29$2T*Ki zPAeaKxRYZlzw+9|B!7=aAd{nn#Q@C% zy)<6@9)LplC-PG%1k~aKr-g>-7)?W=oeuT@0rC^Svo`u8WL7C5Ks0^bv-!g57l5G_ z15PVV(I03YI=N>g`+(cf+-L-wS!Dwuw)BRf27}LOr6oGH4+a%FthDB#lQdr%qukbr z0E@w55KwMwr1?^H*nvQRh9mXVAFjhicw6ow>JQh^aHRgAZPkI^qa?4w5%Q@l<%)P2 z$fvTr3PD{yZdSQu|e`Gi3w57A|=y^JZPVF0d$IvOd zqv!ECt@zpe558Q;@Ooisw`I3j)cl30e*5H0-RT@qrb=b+dnOjwoz4OMdgu$yUx>;r z7WbZIuT=bt}c(evH6_-kwT%f?!ZG3I|=0g~|fcE$29 Xs5VjuKx=gH00000NkvXXu0mjfIWe>X literal 0 HcmV?d00001 From ea5cedc65d080ed35cda93e42f6783e1c9217ab2 Mon Sep 17 00:00:00 2001 From: patybarron Date: Tue, 1 Sep 2015 22:41:52 -0500 Subject: [PATCH 05/15] Cambios al 1 de Sept -p3 --- doc/usr/es/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/usr/es/index.md b/doc/usr/es/index.md index 9535b89b2..8041cc480 100644 --- a/doc/usr/es/index.md +++ b/doc/usr/es/index.md @@ -134,7 +134,7 @@ El segundo cambio más importante es el pequeña confusión saco a luz que el path a la libnl había sido codificada en el script de configuración. Si usted ha tenido problemas para compilar la Herramienta de Configuración de Jool, entonces pruebe esta nueva versión. -Lo menos relevante incluye un complemento al viejo caso #65, más documentación del código. ![smiley](../images/smiley.png) La documentación para los usuarios se ha actualizado significativamente, para ver los cambios vaya aquí. +Lo menos relevante incluye un complemento al viejo caso #65, más documentación del código ![smiley](../images/smiley.png). La documentación para los usuarios se ha actualizado significativamente, para ver los cambios vaya aquí. ![small_red_triangle_down](../images/small_red_triangle_down.png) No se completaron los cambios para la nueva implementación del mecanismo de fragmentación. Esto fue uno de los principales motivos para el retrazo de esta versión. Al parecer se requiere conciliar el desfragmentador del kernel y el RFC para poder implementar las políticas de filtrado. Sigue siendo un caso activo. From adddbeefdee91830d036b7b5b312d96c9d08a415 Mon Sep 17 00:00:00 2001 From: patybarron Date: Wed, 2 Sep 2015 17:05:27 -0500 Subject: [PATCH 06/15] Cambios al 2 de Sept -p1 --- doc/usr/es/index.md | 10 ++++------ doc/usr/es/intro-nat64.md | 32 ++++++++++++++++---------------- 2 files changed, 20 insertions(+), 22 deletions(-) diff --git a/doc/usr/es/index.md b/doc/usr/es/index.md index 8041cc480..322a9a102 100644 --- a/doc/usr/es/index.md +++ b/doc/usr/es/index.md @@ -11,13 +11,11 @@ title: Home ## Introducción -Jool es un [SIIT y NAT64](intro-nat64.html) para Linux. Desarrollado sobre Ubuntu. Probado en Debian, CentOS, SuSE, RedHat y recientemente en [Raspbian] (http://namsep.blogspot.nl/2015/07/raspberry-pi-debian-nat64-dns64-joolmx.html). +Jool es un [SIIT y NAT64](intro-nat64.html) para Linux. Desarrollado sobre Ubuntu. Probado en Debian, CentOS, SuSE, RedHat y recientemente en [Raspbian](http://namsep.blogspot.nl/2015/07/raspberry-pi-debian-nat64-dns64-joolmx.html). * [Haz click aquí](documentation.html) para empezar a familiarizarte con el software. * [Haz click aquí](download.html) para descargar Jool. -![sparkles](../images/sparkles.png) Agradecemos a Namsep por su aportación hecha sobre Raspbian. - ------------------- ## Estatus @@ -47,8 +45,8 @@ Versión 3.3.3 liberada. Además en esta versión: -1. [Se añadió el soporte para el framework DKMS!] (https://github.com/NICMx/NAT64/pull/165) -2. Se corrigieron los errores [#150] (https://github.com/NICMx/NAT64/issues/150) y [#151] (https://github.com/NICMx/NAT64/issues/151) al usar la Herramienta de Configuración de Jool en el despliege de las tablas (bib, sessions y pools) cuando están vacías. +1. [Se añadió el soporte para el framework DKMS!](https://github.com/NICMx/NAT64/pull/165) +2. Se corrigieron los errores [#150](https://github.com/NICMx/NAT64/issues/150) y [#151] (https://github.com/NICMx/NAT64/issues/151) al usar la Herramienta de Configuración de Jool en el despliege de las tablas (bib, sessions y pools) cuando están vacías. ### 2015-04-14 @@ -205,5 +203,5 @@ Otras correcciones importantes: * Se realizaron optimizaciones relevantes en ambas base de datos: BIB y session. El módulo deberá escalar mucho más elegantemente cuando los clientes se encuentren demandando más tráfico. * Jool ya no requiere de otra dirección IPv4 por separado. * El pánico del kernel cuando se removia el módulo ha sido suprimido. -* [Y además] (https://github.com/NICMx/NAT64/issues?milestone=11&state=closed). +* [Y además](https://github.com/NICMx/NAT64/issues?milestone=11&state=closed). diff --git a/doc/usr/es/intro-nat64.md b/doc/usr/es/intro-nat64.md index 4c610095e..60cd9f008 100644 --- a/doc/usr/es/intro-nat64.md +++ b/doc/usr/es/intro-nat64.md @@ -20,11 +20,11 @@ title: Documentación - Introducción a los Mecanismos de Transición ## Introducción Este documento proporciona una introducción general a los tres mecanismos de traducción implementados en Jool. -El algoritmo para SIIT fue definido formalmente a inicios del 2000 por Erik Nordmark de SUN Microsystems en el [RFC 2765] (https://tools.ietf.org/html/rfc2765). Este ha sido actualizado en varias ocasiones: [(RFC 6145, 2011)] (https://tools.ietf.org/html/rfc6145), [(RFC6791, 2012)] (https://tools.ietf.org/html/rfc6791) e inclusive [hasta nuestros días] (https://tools.ietf.org/id/siit?maxhits=100&key=date&dir=desc). De éstos, ya están incluidos en Jool el [(draft-ietf-v6ops-siit-dc, 2015)] ({{ site.draft-siit-dc }}), el [(draft-ietf-v6ops-siit-dc-2xlat, 2015)] ({{ site.draft-siit-dc-2xlat }}) y el [(draft-anderson-v6ops-siit-eam, 2015)] ({{ site.draft-siit-eam }}). Estas tres adiciones a SIIT han sido propuestas y promovidas por [Tore Anderson] (http://www.redpill-linpro.com/tore-anderson#overlay-context=about-us/our-consultants) de la compañía Redpill Linpro en Noruega. +El algoritmo para SIIT fue definido formalmente a inicios del 2000 por Erik Nordmark de SUN Microsystems en el [RFC 2765](https://tools.ietf.org/html/rfc2765). Este ha sido actualizado en varias ocasiones: [(RFC 6145, 2011)](https://tools.ietf.org/html/rfc6145), [(RFC6791, 2012)](https://tools.ietf.org/html/rfc6791) e inclusive [hasta nuestros días](https://tools.ietf.org/id/siit?maxhits=100&key=date&dir=desc). De éstos, ya están incluidos en Jool el [(draft-ietf-v6ops-siit-dc, 2015)]({{ site.draft-siit-dc }}), el [(draft-ietf-v6ops-siit-dc-2xlat, 2015)]({{ site.draft-siit-dc-2xlat }}) y el [(draft-anderson-v6ops-siit-eam, 2015)]({{ site.draft-siit-eam }}). Estas tres adiciones a SIIT han sido propuestas y promovidas por [Tore Anderson](http://www.redpill-linpro.com/tore-anderson#overlay-context=about-us/our-consultants) de la compañía Redpill Linpro en Noruega. -La metodología del Stateful NAT64 fue uno de los resultados del [**Proyecto Trilogy**] (http://trilogy-project.org/trilogy-and-the-ietf.html), organizado por [la Unión Europea] (http://europa.eu/rapid/press-release_IP-11-1294_es.htm), con una inversión aprox. de 9 millones de Euros, por un período de 3 años (2008 al 2010) donde participaron 5 Universidades, 4 compañías de telecomunicación y 2 centros de investigación. El estándar para el NAT64 que es el [RFC 6146] (https://tools.ietf.org/html/rfc6146) fue publicado en el 2011 por el mismo coordinador del projecto, el [Dr. Marcelo Bagnulo Braun] (http://www.it.uc3m.es/marcelo/) de la Universidad Carlos III y otros dos colaboradores del proyecto. +La metodología del Stateful NAT64 fue uno de los resultados del [**Proyecto Trilogy**](http://trilogy-project.org/trilogy-and-the-ietf.html), organizado por [la Unión Europea](http://europa.eu/rapid/press-release_IP-11-1294_es.htm), con una inversión aprox. de 9 millones de Euros, por un período de 3 años (2008 al 2010) donde participaron 5 Universidades, 4 compañías de telecomunicación y 2 centros de investigación. El estándar para el NAT64 que es el [RFC 6146](https://tools.ietf.org/html/rfc6146) fue publicado en el 2011 por el mismo coordinador del projecto, el [Dr. Marcelo Bagnulo Braun](http://www.it.uc3m.es/marcelo/) de la Universidad Carlos III y otros dos colaboradores del proyecto. -:bulb: Conoce más trabajos elaborados por la IETF acerca de NAT64 en [TOOLS IETF] (https://tools.ietf.org/id/nat64?maxhits=100&key=date&dir=desc) y en [Datatracker] (https://datatracker.ietf.org/doc/search/?name=nat64&sort=&rfcs=on&activedrafts=on). +![bulb](../images/bulb.png) Conoce más trabajos elaborados por la IETF acerca de NAT64 en [TOOLS IETF](https://tools.ietf.org/id/nat64?maxhits=100&key=date&dir=desc) y en [Datatracker](https://datatracker.ietf.org/doc/search/?name=nat64&sort=&rfcs=on&activedrafts=on). ## Ejemplos de Traducción IPv4/IPv6 @@ -52,7 +52,7 @@ En una implementación SIIT siempre se modifican los encabezados de red y en alg Esta parte es la más fácil de explicar. Considera la siguiente configuración: -![Fig.1 - Red de ejemplo EAM](images/network/eam.png "Fig.1 - Red de ejemplo EAM") +![Fig.1 - Red de ejemplo EAM](../images/network/eam.svg "Fig.1 - Red de ejemplo EAM") (_T_ representa "Translating box". En español "Caja de traducción".) @@ -69,20 +69,20 @@ La primera es resuelta por SIIT, las demás pueden ser realizadas vía DNS. Veamos: -![Fig.2 - Flujo EAM](images/flow/eam.png "Fig.2 - Flujo EAM") +![Fig.2 - Flujo EAM](../images/flow/eam-es.svg "Fig.2 - Flujo EAM") El traductor esta "engañando" a ambos nodos haciéndoles pensar que el otro puede hablar el mismo lenguaje. "EAM" significa por sus siglas en inglés "Explicit Address Mapping", mapeo de direcciones explícitas. Es más versátil que un simple mapeo de direcciones aribtrarias a otras direcciones arbitrarias. -:bulb: Revisa [nuestro resumen](eamt.html) o repasa sus especificaciones en el [draft EAM]({{ site.draft-siit-eam }}). +![bulb](../images/bulb.png) Revisa [nuestro resumen](eamt.html) o repasa sus especificaciones en el [draft EAM]({{ site.draft-siit-eam }}). ### `SIIT (tradicional)` El modo básico es un poco más complejo. Las direcciones no son remplazadas completamente por otras, sino una parte será usada en su dirección asociada con el otro protocolo. Considera la siguiente configuración: -![Fig.3 - Red de ejemplo Vanilla](images/network/vanilla.png "Fig.3 - Red de ejemplo Vanilla") +![Fig.3 - Red de ejemplo Vanilla](../images/network/vanilla.svg "Fig.3 - Red de ejemplo Vanilla") Para lograr la comunicación entre _A_ y _V_ bastaría con establecer lo siguiente: @@ -93,7 +93,7 @@ Para lograr la comunicación entre _A_ y _V_ bastaría con establecer lo siguien La idea es, simplemente remover _el prefijo_ durante el mapeo de IPv6 a IPv4, y adjuntarlo en el otro sentido. Como lo puedes apreciar en la siguiente figura: -![Fig.4 - Flujo Vanilla](images/flow/vanilla.png "Fig.4 - Flujo Vanilla") +![Fig.4 - Flujo Vanilla](../images/flow/vanilla-es.svg "Fig.4 - Flujo Vanilla") Por supuesto, esto significa que la dirección IPv4 de cada nodo en IPv6 tiene que ser codificada dentro de su dirección, lo cual es un poco engorroso. @@ -103,7 +103,7 @@ Puedes encontrar un ejemplo concreto de como SIIT "tradicional" y "EAM" pueden s Dependiendo de la longitud del prefijo, la dirección IPv4 se incorporará en diferentes posiciones dentro de nuestro rango de 128 bits según se establece en el [RFC 6052](http://tools.ietf.org/html/rfc6052). -:warning: Siempre que el RFC 6052 esté involucrado, es muy conveniente dar de alta también un [DNS64](dns64.html) para que
+![warning](../images/warning.png) Siempre que el RFC 6052 esté involucrado, es muy conveniente dar de alta también un [DNS64](dns64.html) para que
los usuarios no necesiten estar al tanto del prefijo, y resuelva por nombre. ### `Stateful NAT64` @@ -111,11 +111,11 @@ Dependiendo de la longitud del prefijo, la dirección IPv4 se incorporará en di Este modo es el más parecido a lo que la gente entiende como **NAT**, por sus siglas en inglés de _IP Network Address Translator_. Recordemos, un NAT opera de la siguiente manera: -![Fig.5 - Red de ejemplo NAT](images/network/nat.png "Fig.5 - Red de ejemplo NAT") +![Fig.5 - Red de ejemplo NAT](../images/network/nat-es.svg "Fig.5 - Red de ejemplo NAT") Note que, la red de la izquierda es llamada "Privada" por que usa [Direcciones no disponibles en la Internet Global](http://es.wikipedia.org/wiki/Red_privada). _NAT_ modifica las direcciones de los paquetes para que los nodos externos piensen que el tráfico proveniente de los nodos internos fue en realidad iniciado por el _NAT_: -![Fig.6 - Flujo NAT](images/flow/nat.png "Fig.6 - Flujo NAT") +![Fig.6 - Flujo NAT](../images/flow/nat-es.svg "Fig.6 - Flujo NAT") Es decir que para propósitos externos, los nodos desde _A_ hasta _E_ están "compartiendo" la misma dirección global de _NAT_ (o grupo de direcciones). @@ -130,7 +130,7 @@ Si quieres saber más sobre NAT y sus diferentes tipos, consulta los siguientes **Stateful NAT64** es muy similar a un NAT-PT (_Protocol Translation_). La única diferencia es que la "Red Privada" es de hecho una red IPv6: -![Fig.7 - Red de ejemplo Stateful NAT64](images/network/stateful.png "Fig.7 - Red de ejemplo Stateful NAT64") +![Fig.7 - Red de ejemplo Stateful NAT64](../images/network/stateful.svg "Fig.7 - Red de ejemplo Stateful NAT64") Para lograr la comunicación entre _A_ y _V_ bastaría con establecer lo siguiente: @@ -141,14 +141,14 @@ Para lograr la comunicación entre _A_ y _V_ bastaría con establecer lo siguien La idea es, enmascarar _A_ y remover el prefijo a _V_ durante el mapeo de IPv6 a IPv4, y adjuntar el prefijo en _V_ y quitar la máscara a _A_ cuando va de IPV4 a IPv6. Como lo puedes apreciar en la siguiente figura: -![Fig.8 - Flujo Stateful](images/flow/stateful.png "Fig.8 - Flujo Stateful") +![Fig.8 - Flujo Stateful](../images/flow/stateful-es.svg "Fig.8 - Flujo Stateful") NAT64 maneja otros escenarios y es aquí donde termina la similitud con NAT. Debido a que en IPv6 la capacidad de identificación de los nodos es sumamente enorme, se contempla que cada dispositivo cuente con una dirección pública de IPv6. En otras palabras se prevé o planea que TODOS los dispositivos en IPv6 tenga acceso a Internet. Considerando esto, una conectividad posible sería: -![Fig.9 - Internet Stateful NAT64](images/network/full.png "Fig.9 - Internet Stateful NAT64") +![Fig.9 - Internet Stateful NAT64](../images/network/full-es.svg "Fig.9 - Internet Stateful NAT64") De esta manera, los nodos _A_ hasta _E_ son solo de _IPv6_, pero tienen acceso a ambas Internets. A la IPv6 mediante un ruteador _R_, y a la IPv4 mediante _T_. -Si gustas conocer el resto de los **escenarios posibles en Stateful NAT64 y SIIT** consulta el [RFC 6144, cap. 2] (https://tools.ietf.org/html/rfc6144#section-2). +Si gustas conocer el resto de los **escenarios posibles en Stateful NAT64 y SIIT** consulta el [RFC 6144, cap. 2](https://tools.ietf.org/html/rfc6144#section-2). -:warning: Para soportar direccionamiento por nombre se requiere habilitar el [DNS64](dns64.html). +![warning](../images/warning.png) Para soportar direccionamiento por nombre se requiere habilitar el [DNS64](dns64.html). From a1a7277be5cc78d3a7efb25b924e9c27637d7081 Mon Sep 17 00:00:00 2001 From: patybarron Date: Wed, 2 Sep 2015 17:47:56 -0500 Subject: [PATCH 07/15] Cambios al 2 de Sept -p2 --- doc/usr/es/about.md | 2 +- doc/usr/es/contact.md | 6 +++--- doc/usr/es/download.md | 2 +- doc/usr/es/intro-jool.md | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/doc/usr/es/about.md b/doc/usr/es/about.md index b8c3e95c3..0104dd6c2 100644 --- a/doc/usr/es/about.md +++ b/doc/usr/es/about.md @@ -13,7 +13,7 @@ JOOL es un [Traductor IPv4/IPv6](intro-nat64.html) de código abierto. Jool naci Jool es financiado y desarrollado por [NIC Mexico](http://nicmexico.mx/) en colaboración con el [ITESM](http://www.itesm.mx/). -Contactáctanos por medio de [jool@nic.mx](mailto:jool@nic.mx). :mailbox: +Contactáctanos por medio de [jool@nic.mx](mailto:jool@nic.mx). ![mailbox](../images/mailbox.png) diff --git a/doc/usr/es/contact.md b/doc/usr/es/contact.md index 2cd7564c6..7481faf83 100644 --- a/doc/usr/es/contact.md +++ b/doc/usr/es/contact.md @@ -13,7 +13,7 @@ Ponte en contacto con nosotros mediante: -- jool-list@nic.mx es una lista de correo general para la discusión pública del proyecto y la difusión de noticias. -:email: Sus preguntas, solicitudes y comentarios son bienvenidos. Registrate [aquí](https://mail-lists.nic.mx/listas/listinfo/jool-list). +![email](../images/email.png) Sus preguntas, solicitudes y comentarios son bienvenidos. Registrate [aquí](https://mail-lists.nic.mx/listas/listinfo/jool-list). Actualmente, existe un problema de "exceso" de seguridad que está siendo corregido. @@ -21,7 +21,7 @@ Actualmente, existe un problema de "exceso" de seguridad que está siendo correg -- jool-news@nic.mx es una lista de correos para informar solo noticias. -:mailbox_with_mail: Es utilizada para notificar sobre las nuevas versiones que están siendo liberadas en este sitio. Suscribete [aquí](https://mail-lists.nic.mx/listas/listinfo/jool-news). +![mailbox_with_mail](../images/mailbox_with_mail.png) Es utilizada para notificar sobre las nuevas versiones que están siendo liberadas en este sitio. Suscribete [aquí](https://mail-lists.nic.mx/listas/listinfo/jool-news). Solo el equipo de desarrollo puede enviar mails en esta lista, así que no tienes que preocuparte de recibir *spam*.
Debido a este próposito, esta lista raramente genera más de un e-mail por mes. @@ -30,7 +30,7 @@ Debido a este próposito, esta lista raramente genera más de un e-mail por mes. -- [Github corner](https://github.com/NICMx/NAT64/issues) es nuestra lista oficial de errores. -:pencil: Este también es un buen lugar para solicitar nuevas características. +![pencil](../images/pencil.png) Este también es un buen lugar para solicitar nuevas características. ## Mail a los Desarrolladores diff --git a/doc/usr/es/download.md b/doc/usr/es/download.md index f7cd7e7fd..d38e1211c 100644 --- a/doc/usr/es/download.md +++ b/doc/usr/es/download.md @@ -13,7 +13,7 @@ title: Descarga --> * Las versión resaltada en **negritas** es la última actualización y es la más recomendable a instalar. -* Las versiones no resaltadas son versiones estables pero anteriores. Éstas se podrían requerir en caso de que alguna opción, en la más nueva, falle. [¡Los reportes son bienvenidos!] (https://github.com/NICMx/NAT64/issues). +* Las versiones no resaltadas son versiones estables pero anteriores. Éstas se podrían requerir en caso de que alguna opción, en la más nueva, falle. [¡Los reportes son bienvenidos!](https://github.com/NICMx/NAT64/issues). * Las versiones tachadas no son recomedables, pues son muy antiguas o tienen errores críticos ya bien identificados. ## 3.3.x diff --git a/doc/usr/es/intro-jool.md b/doc/usr/es/intro-jool.md index 2a6fb5be6..b2449e6b7 100644 --- a/doc/usr/es/intro-jool.md +++ b/doc/usr/es/intro-jool.md @@ -40,7 +40,7 @@ Este es el estatus actual de cumplimiento de Jool 3.3: | [draft-ietf-6man-deprecate-atomfrag-generation]({{ site.draft-deprecate-atomfrag-generation }}) | Deprecación de los Fragmentos Atómicos | Los continuamos soportando, pero [no recomendamos su uso](usr-flags-atomic.html#overview). | | [draft-anderson-v6ops-siit-eam]({{ site.draft-siit-eam }}) | EAM | Cumple totalmente. | -:email: Por favor, [haznos saber](https://github.com/NICMx/NAT64/issues) si encuentras problemas de cumplimiento adicionales o RFCs/drafts que no hayamos considerado. +![email](../images/email.png) Por favor, [haznos saber](https://github.com/NICMx/NAT64/issues) si encuentras problemas de cumplimiento adicionales o RFCs/drafts que no hayamos considerado. ## Compatibilidad @@ -63,4 +63,4 @@ Este es el estatus actual de cumplimiento de Jool 3.3: | Ubuntu 14.04 | 3.12.22-031222-generic, 3.13.11-03131103-generic | | Ubuntu 14.10 | 3.14.8-031408-generic, 3.15.1-031501-generic | -:small_red_triangle_down: Red Hat y CentOS muestran un warning debido a un error entre el kernel de base usado en Red Hat y el de Debian. Estamos buscando aún cómo eliminarlo, pero este mensaje no es crítico porque no nos ha ocasionado problemas durante las pruebas. +![small_red_triangle_down](../images/small_red_triangle_down.png) Red Hat y CentOS muestran un warning debido a un error entre el kernel de base usado en Red Hat y el de Debian. Estamos buscando aún cómo eliminarlo, pero este mensaje no es crítico porque no nos ha ocasionado problemas durante las pruebas. From 8e512c0c96c1bd9b6311b30097d4f4b7c7c01d08 Mon Sep 17 00:00:00 2001 From: patybarron Date: Wed, 2 Sep 2015 17:51:25 -0500 Subject: [PATCH 08/15] Cambios al 2 de Sept -p3 --- doc/usr/images/bulb.png | Bin 895 -> 857 bytes doc/usr/images/pencil.png | Bin 0 -> 1192 bytes doc/usr/images/small_red_triangle_down.png | Bin 530 -> 495 bytes doc/usr/images/warning.png | Bin 938 -> 909 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/usr/images/pencil.png diff --git a/doc/usr/images/bulb.png b/doc/usr/images/bulb.png index 1eaf67188e242ea03bedfe8e4f8dd98bb7570a77..cd65be5c8a5753e2728acbfad023154d6e36b0d4 100644 GIT binary patch delta 833 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 KMNUMnLSTZu6P{WC delta 913 zcmV;C18)3{2dW1liBL{Q4GJ0x0000DNk~Le0000S0000V2nGNE0Q8xyI*}nLe@sb4 zK~zYI<7u)?nji%= z4Qi-FgjAtsQwbr}2~fu*_Kcl)9{0^6p|r$FlRmO2M;d8#&mH~lJ-SzOJZr7v9K%0P z?Ee84&obFsOR~QMKy9Lh@1K3We`oq4>ir7b0B#(9*v1j zY?e_d844wX%~Bc@n+*E*UM?8-y9C9%lw69og71FVW@)v9vWgNZLGdnef4_Tb@WgB3 zoMRZRGdtDB=9=xH=Id{M1`Ahie#%?TfJUv&ZnVzi)E9W3_hLJYdXET$I}}8M5h+GX zl+-A#F;1aHN}-OidPWLSnSUYK2Gy6|YSat)R6&5gdDHdfnfs`YY%(N2|j! zIdIDI{^bB`!6}K=7Cf*9{8Ur*Z_(?1!ln7krw65!nnCOz83LSC;^o4n1^casTOv#K=*ptkUm% z#+&babUZj3jWF>dzV4FdNpU*B|^FtwQm9OE_6X00000NkvXXu0mjflr*uR From 3f216dc76567b780d84ecd8319aad85b5db715c3 Mon Sep 17 00:00:00 2001 From: patybarron Date: Wed, 2 Sep 2015 18:00:28 -0500 Subject: [PATCH 09/15] Cambios al 2 de Sept -p4 --- doc/usr/images/mailbox.png | Bin 1110 -> 1045 bytes doc/usr/images/mailbox_with_mail.png | Bin 1208 -> 1154 bytes doc/usr/images/thumbsup.png | Bin 1031 -> 1009 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/usr/images/mailbox.png b/doc/usr/images/mailbox.png index 5e39d8525ab8f1c5c453e79c0fc9978ab94f1532..c81f9627563ee21f1207096d4486a40b6046b299 100644 GIT binary patch delta 1021 zcmVDE8O zg$q}%M66Pa;)6b<3Vncm*`%>edhh+sqZ#L)iJ9C&hrj%0oAHr{L zvM8tixWUHi73OWr<<#)|s#4<^e+7$2c;$z$=pxjAB!9p6e$LPBPL5r@#+C6& zUbKaY*6_<)&(NP=zy;yTqeob~E|h*^FtdkmfBT824@Ug@#(=A95x1jKRdCMW8iR8N zYr%IsAvIiD4@3jDT8W2MijY#F z9Y9iWRNA)C4&n$dh$yN`l7fZ|R6JBt8!2r>N0{>t?}tAq#S(&oe{tjju2u%UNWZf| z4K1n#RY65bS#hDidEF`!1F3CCu*Z2f!X2uP&?==kQmI3Dkmz^%5C#-2$Oz6^=)`uj zVvrOFZ96=^_ju=rU++*g#5SY3K?;ae+BVa6S_my=gsLi%6`$f(D>O%9Xi+z;SiBp- z9#x2gK>ETYv27_# z^2uu-(vdzl$L^x`dsG#QC`E*-ibO$j+IrF|LQZ)EE7m#GIjkt97*a^6-X@Ms!Pqo) zW1Xr>)k4(~oCQrn*{rzMipD_hZD5?mIE%GzxST`Ag_wkre}!5y2B@`CC7>}aQfU$-u>WXUVZ)O_Vf7P!g`or zm}URNi|pUKQ;VxBw^@tlagDuW-nOu_mR&Pb+&w?X+@9TJ{}*!?R)-_?P6cfT8w`zW rP%}of9mI^|TnB6J3~$@x{~CV-t}0GZ4IXUv00000NkvXXu0mjf&0ORn delta 1087 zcmV-F1i<^12-XN8iBL{Q4GJ0x0000DNk~Le0000Z0000W2nGNE0GLg|_mLqefA~p6 zK~z|U?bpp~TvZsy@$Y%LGs!eBhBi$Ksa0dFl?t_5qvAqET`1^6sOVM~;$C#`(yf1l z3m2|jiCCo;#TWV_Rp<-YH=8tVGo6`x-kx(@%m{8KfeB(4`N8FG?mc|Ya}MV|SLK`w zcS-dB4fuDqF~hQr8J4>WV>f#se7$*rJ1 z|BM}%dgKY!AG8D4-+z;{2VUXKsq>s$`H8n)JWR9M936A~%wzJpcHi(JfxWtvmj<9w;k-LH3^j^OE z{b!yz=r^p+P|SL}$JI5Df7wwek}yVLDupo$t-&@eE>v7vcX$Q5XpSF!m)^rqfd_h# za?vA6h}lwKi>$BTVfXG4Fr^e+9k4Ev3>c#^Nn?$|*i6O{V!?GYsT5)?$n8YD0Mri2 zLJ~nF6H+F$3uTk9;P5?D3ekCDFHl+4$5>6W8e=q7PK1!Ddk_Q+e}%fv)IC4IWKt4D zgpe}gBCxS$gAH5=wI|me832qmSldVCtZ`028Da)g3cZe}+iX)@jYvi$AxQ{PFs{3C zSvJEY?+A50z*vkm1CT+);A$afL&&9%=>@vYF1Q|9GHHN`G12t(Rw@H2I9y%#m&RJG zvHiO>h$ws=kyw#3f235X>qymSif zU2Zk*p>#VGN#rEtlqe!3pGa{_7?6~RAr3HtHU=>UorIhff58Pr?%*4f(3qmM*C`?t z$rKr2VnRY9Z>2J&6vR7Xr;RciWi(ow{$&hlEa5{U$3)2yHF&2ahj>p(iIRj8g&ZPD z*OW~TnxU9htHsO93#>aq>5Nhelz{3l*~;x3eD&>@R8^s2AxWWEE1o{G%>7IANGgyu zrC3TdOiwP+e`>Wh#HdmK4vruDhL1mZhldu%S(u+-?Y86exm&#V;U~QI#?euR+`OL| z7Hwf}eun*zEUb_oLjCw1Xl>Y)(yx!0*AvB;0Xwj8*2R8Kgoq}&vR+1f5BUaUZAI^ zrz<=+H^=PkEVWt-~Ygw^FQ;_o~J1YAy`;A!|?DhLI~>hI%8vFl{{Ftg|R(af!!!e@_Sy$1&AvmA<|{ zDwSRi95}$mix+7uFHxlbpPhlP5W%lVg;+mx@B6KpdBe zF@7ndU~3fnHg$>j}S#AvNj0oDdEWyNm{xMd5X0b>kQTyv{J+(yFbU^3D$z2 zBniE}y-ZF{a_WoEe^J`vk^qHA;mI>aUTT9(vDRRX#uM8>R0}PD}v-D>Jl_|9M7(61=h%7~<9b}qzN0y?}6sy(x8$&>VwT>*y$g+%Pvx#?( zxL6`hHR*6Kl@&wB^dLKJycRfP@W$Yb#VCdQH(>y+HF=)Xe{42cT3W(6M{iuFt>DDV z$0(VUcA<(-+jwi%ge}fktW>x_-!B}7;oV|sHk(|#c8xeL6NVv5X>_N9E>!V_DkLqu zwRmfB*5Y;d04Ei$WV^!Nd!!VkX^NDRMx#L#MMP0VlC)WEwUEl7J2}qDZr?eN(>YGd zt_|9NwOA<;fBhNWdkU3Gg^7s?q*RQKZpM3$)*2zin(+}gu3m=Z6N;h3SdSE*-BVL+ z86CkIz(?Rc#unLFdxA=(La@G%*W>i*(|qvmn`|8}v8i6B*_K?o(&qgSKjzTk!~e1k?um**;Nc+m=DD-%M#{S1CM%`EcO~YJFu!K{jq+^sy0KX_fjPw}_(PfxPg6 xyL7Wn5RsaYTQVfkA&vswZ|ecPhk5*e@fW;Ye^G?Z>39GD002ovPDHLkV1flGB$)sJ delta 1185 zcmV;S1YY}s3AhO%iBL{Q4GJ0x0000DNk~Le0000Y0000P2nGNE095+?tdSuoe_BaI zK~zYI?U&DMTvZguKX2a5$&NDHty=8(A9PSLA>`EV^(hg;0c0&c72ig zx89>zzX`b&3~MdjM_**?>o4Cw5Tz7zb92nj&a$+$h%o`Z!{byo??g*OP72=m{Cfsc zfxBbs`DoxQQ~6Civ8|8Y6Wb{ki=Bf=DLH=pI44e=z*++Y7_Cs>ea-0pe^;1z;TXDk z9a4|L;qU}_0s`cQDnIp(bN;JyTwJL0+M#FYS|e3!g3Qd!Fg-m@wOU0=fe->)D3Di@ zU#36c$lg)*?|Bjv1xNw*=p+n3NNOyP?VIG`y&GseJ<0iRzUB0}A9!xhtfHAY58$g+$ie@VD9f0>WJm?7TvDEmr|NWf=DUZOqmEItD(E#`89v5t0i zj4yvY!&AF<5=GJaK;k&2*=#aUtFgGW$k5Ob2M-=($BrG$&(CxA%o$G3%`#tavd2J( zXX%Ee{WH)OSZi>`VVy6==)09S|fp?CmP$Wq- z$zV6-B}3bEA=@py7C2+@#^8*_D22NpAOKoxvMi&~Xt1!bfOC%Ss6zKu#)Lf6;aZ;=M;oL6Rg$DXG`%gkeY+hQx7;kG0zRK3YcOsi=B^oWs#mg<;e)oM29X`Bn zzm7Mw5UBR|vVE+^wk`c!yOGdHuaNK1v2&0Rsy!u!Hf~_}p&?vxncA;63B%y;AOD3q zUY-L22tpE*l}_ee{8Mm^!xui@hANbmXnE%6*b6E00000NkvXXu0mjf9m6k$ diff --git a/doc/usr/images/thumbsup.png b/doc/usr/images/thumbsup.png index e462a2c69a38eb2a8a3639aa3614cbecaaa093a1..94f383ab2f11c6198537fb0c74c83d9a688b4918 100644 GIT binary patch delta 952 zcmV;p14sOa2=NCYiBL{Q4GJ0x0000DNk~Le0000M0000N2nGNE01xQDo{=Faf0Ic> zK~y-6wbk2iltmcF@$bw#@4JWYsi*Bip&}S0DH`!`VYoK&U(kQj8@*A^Z1kqm-oFT%mLA zGgMT1ZH;^rc<^+Saql6>DbKcke_`+5#=q9Q5uDAAY0S5%EY(@K*kQPPpFEzuJ#39e zN&(IjmLgo9ko_Mp{4-xEkV2rd3~TM%!zzkUfkG9Iv_If@d`wWPyd8Wp>XRIH2?L29 zj5v6>iE6Z|)|;XbfCEt!6dG2q-(>aLjZ-+8jCt_$cX&NT3h)MM^*L&-66IPI5$8CqIojVN z2n6j;6CFyLqKb3^f0A&pf3wS@J3rF7a-ARyU%-PW5AgYr&eivk)?tpOsA>gSFC$Wo z%`)QAkgdCa5)(0Z>lTOrsRTkwOp$Z2-=lo_3y|`(z(O&ZB9%ghAgYtZfJkK%4;El!SIo+*C)H)raC_06Waaf-t zG6RJsolX!!P+x9?_Xr>ee-#3FxN(Q`S1uui#9E6jG$)e@z5PC)-+b@vJJuqk7>;PP zns{f)Pi74Fx?EWQ2o*&LDTvAy&aJJoeSe!!1w?am#BoBA8;U|>f{4Y{wX<;Z;#Kbc z_7jsqABkuD>^V<%di0J98kLYp39yDdO^{(gQfL-0cW4CxT5HCGe?tOWIg=m4Ip^az z=Kk*+^t*qdlM}RclowW5I)8z9*k^LEOFkLljK*5aN#SUB|h3Qc|f@D3wYGAy7(Dtya$jlXzFZ a^xtA9-{}IAyQBaB3IG5}MNUMnLSTZv(!I_A delta 970 zcmV;*12z2d2ZsnDiBL{Q4GJ0x0000DNk~Le0000U0000T2nGNE0KKH#43Qxyf2m1C zK~zYI<6d_VzQBhPS zO-dheBB!-uJF%VnoEIC!0x)tbg)VybXMS_$bw)VnJg*_->p)*CtX?%SK00Lo{tqZ6 zDL2>XT>l6al@`u_<%$PSA2RN3e}SCxeEUcC?r*$Q{wu@T?3l)Ki^|zLD;GNqcOQ_) zv(tyI(MT!4dBReJ%M-Hy1BO3up%h3V&{>AH_Vi&DMW{fb3P;)>a6CRHC{<1uJ{k2% z4!eYbL=Q$BY&}FZ+EnY!#V7udR-y;|V%T@qi2hqDqZ$&hq~!Tx1F9bc{d{Ej7t!Bl-_FXtrAf)d)XJ zNsq^5qak+M<>|c_WN88pL{U&^SigCj_3O75hm*;e&F{a$>nT!zH&ClDQEQbb*Q$s( z$7#*c{vJUfXm^_EP|_4tf20%mlZ1n3yF9x4EuE`33I4VXbK$|0O?*D2bM0-Ub(o_m zs#-zT%ZOBCvy6B&Wc%K4#6&FJxdS3VDuIv^Q{)`%_b6Za1mr)@@LV`M9?)2BpdyKM zpjKNT!Q*j-#v0AA`;6Mk3ZH%X19*4rno!@?`f`euzHG41!IC*V=8XpP5n<-=Q)ms{j{jxh#rEI!ZaZa<>d=@3QH z;;=Ce>vKeApwOh#2|@_!t8MTe0R(@cLI7JEcR7FcGEzvawb(*)GMUiZ@AL8PxBhkf zxv&-?#c)KU)xE_fS!Ukb=1PZF5TJjxW;{3~ zu$8&*x0v_KjN_OGziiO&{*F#g(AH62S>x>a3&g`dlY?FI$p~jO)>=*qN2}doWpxeb zEMc|IuO2L=q*AF+DwPmI spp>FotR From 8f606166e4f02b4f29a25c5ae73bd0050b407b1c Mon Sep 17 00:00:00 2001 From: patybarron Date: Wed, 2 Sep 2015 21:13:28 -0500 Subject: [PATCH 10/15] Cambios al 2 de Sept -p5 --- doc/usr/es/documentation.md | 8 ++++---- doc/usr/es/eamt.md | 16 +++++++-------- doc/usr/es/intro-jool.md | 4 ++-- doc/usr/es/intro-nat64.md | 8 ++++---- doc/usr/es/mod-install.md | 36 +++++++++++++++++----------------- doc/usr/es/mod-run-eam.md | 24 +++++++++++------------ doc/usr/es/mod-run-stateful.md | 24 +++++++++++------------ doc/usr/es/mod-run-vanilla.md | 32 +++++++++++++++--------------- doc/usr/es/rfc6791.md | 18 ++++++++--------- doc/usr/es/usr-install.md | 26 ++++++++++++------------ 10 files changed, 98 insertions(+), 98 deletions(-) diff --git a/doc/usr/es/documentation.md b/doc/usr/es/documentation.md index 5d74e3598..f40b1f3de 100644 --- a/doc/usr/es/documentation.md +++ b/doc/usr/es/documentation.md @@ -5,18 +5,18 @@ category: Download title: Documentación - Ãndice --- -# Documentación +# Documentacion Bienvenido al índice de la documentación de Jool. -## Introducción +## Introduccion 1. [Qué es SIIT/NAT64?](intro-nat64.html) 2. [Qué es Jool?](intro-jool.html) Consulta el [RFC 6586](https://tools.ietf.org/html/rfc6586) para experiencias de desarrollo usando NAT64 Stateful. -## Instalación +## Instalacion 1. [Servidor Jool](mod-install.html) 2. [Herramienta de Configuración](usr-install.html) @@ -32,7 +32,7 @@ Consulta el [RFC 6586](https://tools.ietf.org/html/rfc6586) para experiencias de 4. [DNS64](dns64.html) 5. [464XLAT - SIIIT/DC Modo de traducción dual](mod-run-464xlat.html) -## Herramienta de Configuración +## Herramienta de Configuracion 1. [Banderas](usr-flags.html) diff --git a/doc/usr/es/eamt.md b/doc/usr/es/eamt.md index 6fa446ddf..3139bb325 100644 --- a/doc/usr/es/eamt.md +++ b/doc/usr/es/eamt.md @@ -11,14 +11,14 @@ title: EAMT ## Ãndice -1. [Definición](#definicion) -2. [Ejemplos] (#ejemplos) - 1. [`Registro 01`] (#registro-01) - 2. [`Registro 02`] (#registro-02) - 3. [`Registro 03`] (#registro-03) -3. [Resumen y Notas Adicionales] (#resumen-notas-adicionales) +1. [Definicion](#definicion) +2. [Ejemplos](#ejemplos) + 1. [`Registro 01`](#registro-01) + 2. [`Registro 02`](#registro-02) + 3. [`Registro 03`](#registro-03) +3. [Resumen y Notas Adicionales](#resumen-y-notas-adicionales) -## Definición +## Definicion La tabla EAMT (_Explicit Address Mappings Table_) por sus siglas en inglés, es una colección de registros en un servidor SIIT y en ella se guarda la relación de cómo las diferentes direcciones deben de ser traducidas. @@ -36,7 +36,7 @@ Aquí se encuentra un ejemplo de una tabla EAMT: Un registro EAMT está compuesto en pares, un prefijo IPv4 y un prefijo IPv6. Cuando una dirección esta siendo traducida, su prefijo es literalmente reemplazado de acuerdo a la tabla. - NOTA IMPORTANTE: En la implementación de Jool, todos los registros son bidireccionales. + NOTA IMPORTANTE: En la implementación de Jool, todos los registros son bidireccionales. ### Registro 01 diff --git a/doc/usr/es/intro-jool.md b/doc/usr/es/intro-jool.md index b2449e6b7..241ff8c79 100644 --- a/doc/usr/es/intro-jool.md +++ b/doc/usr/es/intro-jool.md @@ -11,11 +11,11 @@ title: Introducción a Jool ## Ãndice -1. [Descripción](#descripcion) +1. [Descripcion](#descripcion) 2. [Cumplimiento](#cumplimiento) 3. [Compatibilidad](#compatibilidad) -## Descripción +## Descripcion Jool es una implementación de varios mecanismos de transición en IPv6. Todos en la categoría de traducción: [Stateful NAT64, SIIT y SIIT con EAM.] (intro-nat64.html) Jool es una aplicación de código abierto (open source) en Linux, desarrollado sobre Ubuntu, y probado en otros Linux (Debian, CentOS, Raspbian, RedHat, SuSE). diff --git a/doc/usr/es/intro-nat64.md b/doc/usr/es/intro-nat64.md index 60cd9f008..6076e2790 100644 --- a/doc/usr/es/intro-nat64.md +++ b/doc/usr/es/intro-nat64.md @@ -11,13 +11,13 @@ title: Documentación - Introducción a los Mecanismos de Transición ## Ãndice -1. [Introducción](#introduccion) -2. [Ejemplos de Traducción IPv4/IPv6](#traduccion-ipv4ipv6) +1. [Introduccion](#introduccion) +2. [Ejemplos de Traduccion](#ejemplos-de-traduccion) 1. [`SIIT con EAM`](#siit-con-eam) 2. [`SIIT tradicional`](#siit-tradicional) 3. [`Stateful NAT64`](#stateful-nat64) -## Introducción +## Introduccion Este documento proporciona una introducción general a los tres mecanismos de traducción implementados en Jool. El algoritmo para SIIT fue definido formalmente a inicios del 2000 por Erik Nordmark de SUN Microsystems en el [RFC 2765](https://tools.ietf.org/html/rfc2765). Este ha sido actualizado en varias ocasiones: [(RFC 6145, 2011)](https://tools.ietf.org/html/rfc6145), [(RFC6791, 2012)](https://tools.ietf.org/html/rfc6791) e inclusive [hasta nuestros días](https://tools.ietf.org/id/siit?maxhits=100&key=date&dir=desc). De éstos, ya están incluidos en Jool el [(draft-ietf-v6ops-siit-dc, 2015)]({{ site.draft-siit-dc }}), el [(draft-ietf-v6ops-siit-dc-2xlat, 2015)]({{ site.draft-siit-dc-2xlat }}) y el [(draft-anderson-v6ops-siit-eam, 2015)]({{ site.draft-siit-eam }}). Estas tres adiciones a SIIT han sido propuestas y promovidas por [Tore Anderson](http://www.redpill-linpro.com/tore-anderson#overlay-context=about-us/our-consultants) de la compañía Redpill Linpro en Noruega. @@ -26,7 +26,7 @@ La metodología del Stateful NAT64 fue uno de los resultados del [**Proyecto Tri ![bulb](../images/bulb.png) Conoce más trabajos elaborados por la IETF acerca de NAT64 en [TOOLS IETF](https://tools.ietf.org/id/nat64?maxhits=100&key=date&dir=desc) y en [Datatracker](https://datatracker.ietf.org/doc/search/?name=nat64&sort=&rfcs=on&activedrafts=on). -## Ejemplos de Traducción IPv4/IPv6 +## Ejemplos de Traduccion SIIT (_Stateless IP/ICMP Translation_) y NAT64 ("NAT seis cuatro", no "NAT sesenta y cuatro") son tecnologías orientadas a comunicar nodos de red que únicamente hablan [IPv4](http://es.wikipedia.org/wiki/IPv4) con nodos que solo hablan [IPv6](http://es.wikipedia.org/wiki/IPv6). La idea es básicamente la de un [NAT](http://es.wikipedia.org/wiki/Traducci%C3%B3n_de_direcciones_de_red) mejorado; es decir que, un "Traductor IPv4/IPv6" no solo reemplaza direcciones y/o puertos en los paquetes, sino también encabezados de capa 3. diff --git a/doc/usr/es/mod-install.md b/doc/usr/es/mod-install.md index 2ed88252a..6ae2f4ea0 100644 --- a/doc/usr/es/mod-install.md +++ b/doc/usr/es/mod-install.md @@ -2,27 +2,27 @@ language: es layout: default category: Documentation -title: Instalación de los Módulos de Kernel +title: Instalación del Servidor Jool --- [Documentación](documentation.html) > [Instalación](documentation.html#instalacion) > Servidor Jool -# Instalación de los Módulos de Kernel +# Instalación del Servidor Jool ## Ãndice -1. [Introducción](#introduccion) +1. [Introduccion](#introduccion) 2. [Requerimientos](#requerimientos) - 1. [`Kernels Válidos`](#kernels-soportados) - 2. [`Encabezados del Kernel`](#encabezado-kernel) - 3. [`Interfaces de Red`](#interfaces) - 4. [`Ethtool`] (#ethtool) -3. [Baja, Compila e Instala](#baja-compila-instala) - 1. [`De la Web Oficial`] (#web_oficial) - 2. [`Del Repositorio GIT`] (#github) -4. [Genera Archivo de Dependencias] (#genera-make) + 1. [`Kernels Validos`](#kernels-validos) + 2. [`Encabezados del Kernel`](#encabezados-del-kernel) + 3. [`Interfaces de Red`](#interfaces-de-red) + 4. [`Ethtool`](#ethtool) +3. [Baja Compila e Instala](#baja-compila-e-instala) + 1. [`De la Web Oficial`](#de-la-web-oficial) + 2. [`Del Repositorio GIT`](#del-repositorio-git) +4. [Genera Archivo de Dependencias](#genera-archivo-de-dependencias) -## Introducción +## Introduccion Jool tiene cuatro componentes, es decir, cuatro ejecutables: @@ -37,13 +37,13 @@ Las aplicaciones en el espacio de usuario son para configuración de Jool, la ex ## Requerimientos -### `Kernels Válidos` +### `Kernels Validos` Jool fue desarrollado sobre ambiente linux y lenguaje de programación "C". Para conocer la lista actualizada de kernels soportados y probados en las diferentes distribuciones de Linux [haz click aquí](intro-jool.html#compatibilidad). Es factible que no vaya a haber problema alguno, al compilar Jool en versiones más recientes de kernel. ¡Ãnimo, prueba y compartenos tu experiencia! NOTA: No recomendamos usar el kernel 3.12 porque [el sistema se inhibe cuando se invoca la función icmpv6_send](https://github.com/NICMx/NAT64/issues/90). -Para validar la versión de tu kernel, usa el siguiente comando: +Para verificar la versión de tu kernel, usa el siguiente comando: {% highlight bash %} $ /bin/uname -r @@ -101,7 +101,7 @@ Si buscas la versión más estable o versiónes anteriores de Jool, entonces des 4) Descomprime -:small_orange_diamond: Asumiendo que lo bajastes en formato ZIP, en la carpeta de _Downloads_ y lo quieres colocar en _Desktop_, ejecuta los siguientes comandos: +![small_orange_diamond](../images/small_orange_diamond.png) Asumiendo que lo bajastes en formato ZIP, en la carpeta de _Downloads_ y lo quieres colocar en _Desktop_, ejecuta los siguientes comandos: {% highlight bash %} user@node:$ cd Downloads @@ -135,7 +135,7 @@ Si descargas Jool del [Repositorio de Github](https://github.com/NICMx/NAT64), t 4) Descomprime -:small_orange_diamond: Asumiendo que se descargó en _Downloads_ y lo quieres colocar en _Desktop_, ejecuta los siguientes comandos: +![small_orange_diamond](../images/small_orange_diamond.png) Asumiendo que se descargó en _Downloads_ y lo quieres colocar en _Desktop_, ejecuta los siguientes comandos: {% highlight bash %} user@node:$ cd Downloads @@ -167,9 +167,9 @@ user@node:~# depmod Mediante el comando **depmod** se genera el archivo de dependencias *Makefile* que usará **modprobe** para cargar los módulos, aprende cómo hacerlo consultando el [ejemplo básico de SIIT](mod-run-vanilla.html). -:thumbsup: ¡LISTO! Jool puede ser inicializado ahora. +![thumbsup](../images/thumbsup.png) ¡LISTO! Jool puede ser inicializado ahora. -:warning: A D V E R T E N C I A +![warning](../images/warning.png) A D V E R T E N C I A > > A partir del kernel 3.7 en Ubuntu puedes autentificar tus módulos, lo cual es una buena práctica. Te recomendamos, firmar tus modulos de kernel para asegurarte de que los estás agregando de manera responsable. > diff --git a/doc/usr/es/mod-run-eam.md b/doc/usr/es/mod-run-eam.md index 2c2f18d93..c999e6f94 100644 --- a/doc/usr/es/mod-run-eam.md +++ b/doc/usr/es/mod-run-eam.md @@ -11,21 +11,21 @@ title: SIIT-EAM - Ejemplo de uso ## Ãndice -1. [Introducción](#introduccion) +1. [Introduccion](#introduccion) 2. [Red de ejemplo](#red-de-ejemplo) - 1. [`Configuración de Nodos en IPv6`] (#nodos-ipv6) - 2. [`Configuración de Nodos en IPv4`] (#nodos-ipv4) - 3. [`Configuración de Nodo Traductor`] (#nodo-jool) + 1. [`Configuracion de Nodos en IPv6`](#configuracion-de-nodos-en-ipv6) + 2. [`Configuracion de Nodos en IPv4`](#configuracion-de-nodos-en-ipv4) + 3. [`Configuracion del Nodo Traductor`](#configuracion-del-nodo-traductor) 3. [Jool](#jool) 4. [Pruebas](#pruebas) - 1. [`Conectividad de IPv4 a IPv6`] (#ping4to6) - 2. [`Conectividad de IPv6 a IPv4`] (#ping6to4) - 3. [`Conectividad a un Web Server en IPv4`] (#WebServer-ipv4) - 4. [`Conectividad a un Web Server en IPv6`] (#WebServer-ipv6) + 1. [`Conectividad de IPv6 a IPv4`](#conectividad-de-ipv6-a-ipv4) + 2. [`Conectividad de IPv4 a IPv6`](#conectividad-de-ipv4-a-ipv6) + 3. [`Conectividad a un Web Server en IPv4`](#conectividad-a-un-web-server-en-ipv4) + 4. [`Conectividad a un Web Server en IPv6`](#conectividad-a-un-web-server-en-ipv6) 5. [Deteniendo Jool](#deteniendo-jool) 6. [Lecturas adicionales](#lecturas-adicionales) -## Introducción +## Introduccion Este documento explica cómo ejecutar Jool en modo EAM. Si no tienes nociones de este tipo de traducción ingresa a [SIIT-EAM ](intro-nat64.html#siit-con-eam). @@ -44,7 +44,7 @@ Aquí también, son válidas y aplican las observaciones mencionadas de la [secc - Jool requiere Linux, los otros Nodos no necesariamente. - Para este tutorial, consideraremos que: a)todos están en Linux, b)la configuración de red se hará manualmente, c) todo el tráfico será redirigido por defecto hacia _T_. -### `Configuración de Nodos en IPv6` +### `Configuracion de Nodos en IPv6` Para los nodos de _A_ a _E_, ejecuta la siguiente secuencia de comandos con permisos de administrador: @@ -56,7 +56,7 @@ user@A:~# /sbin/ip addr add 2001:db8:6::8/96 dev eth0 user@A:~# /sbin/ip route add default via 2001:db8:6::1 {% endhighlight %} -### `Configuración de Nodos en IPv4` +### `Configuracion de Nodos en IPv4` Para los nodos de _V_ a _Z_, ejecuta la siguiente secuencia de comandos con permisos de administrador: @@ -68,7 +68,7 @@ user@V:~# /sbin/ip addr add 192.0.2.16/24 dev eth0 user@V:~# /sbin/ip route add default via 192.0.2.1 {% endhighlight %} -### `Configuración del Nodo Traductor` +### `Configuracion del Nodo Traductor` Para el Nodo _T_, ejecuta la siguiente secuencia de comandos con permisos de administrador: diff --git a/doc/usr/es/mod-run-stateful.md b/doc/usr/es/mod-run-stateful.md index 7392e0804..f9a109494 100644 --- a/doc/usr/es/mod-run-stateful.md +++ b/doc/usr/es/mod-run-stateful.md @@ -5,26 +5,26 @@ category: Documentation title: Stateful NAT64 - Ejemplo de uso --- -[Documentación](documentation.html) > [Ejemplos de uso](documentation.html#ejemplosdeuso) > Stateful NAT64 +[Documentación](documentation.html) > [Ejemplos de uso](documentation.html#ejemplos-de-uso) > Stateful NAT64 # Stateful NAT64: Ejemplo de Uso ## Ãndice -1. [Introducción](#introduccion) +1. [Introduccion](#introduccion) 2. [Red de ejemplo](#red-de-ejemplo) - 1. [`Configuración de Nodos en IPv6`] (#nodos-ipv6) - 2. [`Configuración de Nodos en IPv4`] (#nodos-ipv4) - 3. [`Configuración de Nodo Traductor`] (#nodo-jool) + 1. [`Configuracion de Nodos en IPv6`](#configuracion-de-nodos-en-ipv6) + 2. [`Configuracion de Nodos en IPv4`](#configuracion-de-nodos-en-ipv4) + 3. [`Configuracion del Nodo Traductor`](#configuracion-del-nodo-traductor) 3. [Jool](#jool) 4. [Pruebas](#pruebas) - 1. [`Conectividad de IPv6 a IPv4`] (#ping6to4) - 2. [`Conectividad a un Web Server en IPv4`] (#WebServer-ipv4) + 1. [`Conectividad de IPv6 a IPv4`](#conectividad-de-ipv6-a-ipv4) + 2. [`Conectividad a un Web Server en IPv4`](#conectividad-a-un-web-server-en-ipv4) 5. [Deteniendo Jool](#deteniendo-jool) 6. [Lecturas adicionales](#lecturas-adicionales) -## Introducción +## Introduccion Este documento explica como ejecutar Jool en modo Stateful NAT64. Si no tienes nociones de este tipo de traducción ingresa a [Stateful NAT64](intro-nat64.html#stateful-nat64). @@ -40,7 +40,7 @@ Aquí también, son válidas y aplican las observaciones mencionadas de la [secc - Jool requiere Linux, los otros Nodos no necesariamente. - Para este tutorial, consideraremos que: a)todos están en Linux, b)su configuración de red se hará manualmente. -### `Configuración de Nodos en IPv6` +### `Configuracion de Nodos en IPv6` Para los nodos de _A_ a _E_, ejecuta la siguiente secuencia de comandos con permisos de administrador: @@ -52,7 +52,7 @@ user@A:~# /sbin/ip address add 2001:db8::8/96 dev eth0 user@A:~# /sbin/ip route add default via 2001:db8::1 {% endhighlight %} -### `Configuración de Nodos en IPv4` +### `Configuracion de Nodos en IPv4` Para los nodos de _V_ a _Z_, ejecuta la siguiente secuencia de comandos con permisos de administrador: @@ -65,7 +65,7 @@ user@V:~# /sbin/ip address add 203.0.113.16/24 dev eth0 Estos nodos no necesitan una ruta por defecto. Esto es consecuencia de que se encuentran en la misma red junto con el NAT64. Como la dirección 203.0.113.2 estará enmascarando los nodos IPv6, asi que desde _V_ hasta _Z_ piensan que están hablando directamente con _T_. -### `Configuración del Nodo Traductor` +### `Configuracion del Nodo Traductor` Para el Nodo _T_, ejecuta la siguiente secuencia de comandos con permisos de administrador: @@ -165,7 +165,7 @@ user@T:~# /sbin/modprobe -r jool ## Lecturas adicionales -1. Un nodo IPv4 externo no puede iniciar la comunicación por que el ve a la red IPv6 como una red privada IPv4 que está atrás de un NAT. Para remediar esto, Jool te permite configurar el "redireccionamiento de puertos"(port forwarding). Ingresa [aqui](static-bindings.html) si estás interesado. +1. Un nodo IPv4 externo no puede iniciar la comunicación por que el ve a la red IPv6 como una red privada IPv4 que está atrás de un NAT. Para remediar esto, Jool te permite configurar el "redireccionamiento de puertos" (port forwarding). Ingresa [aqui](static-bindings.html) si estás interesado. 2. Aprende más sobre la [pool IPv4](pool4.html). 3. El [documento de DNS64](dns64.html) te dirá como configurar un DNS64 para hacer transparente el uso de dirección-prefijo a los usuarios. 4. Por favor, lee acerca de [problemas con MTUs](mtu.html) antes de seleccionar alguno. diff --git a/doc/usr/es/mod-run-vanilla.md b/doc/usr/es/mod-run-vanilla.md index 782a2cd5d..71f6d2ec9 100644 --- a/doc/usr/es/mod-run-vanilla.md +++ b/doc/usr/es/mod-run-vanilla.md @@ -11,21 +11,21 @@ title: SIIT - Ejemplo básico ## Ãndice -1. [Introducción](#introduccion) +1. [Introduccion](#introduccion) 2. [Red de ejemplo](#red-de-ejemplo) - 1. [`Configuración de Nodos en IPv6`] (#nodos-ipv6) - 2. [`Configuración de Nodos en IPv4`] (#nodos-ipv4) - 3. [`Configuración de Nodo Traductor`] (#nodo-jool) + 1. [`Configuracion de Nodos en IPv6`](#configuracion-de-nodos-en-ipv6) + 2. [`Configuracion de Nodos en IPv4`](#configuracion-de-nodos-en-ipv4) + 3. [`Configuracion del Nodo Traductor`](#configuracion-del-nodo-traductor) 3. [Jool](#jool) 4. [Pruebas](#pruebas) - 1. [`Conectividad de IPv4 a IPv6`] (#ping4to6) - 2. [`Conectividad de IPv6 a IPv4`] (#ping6to4) - 3. [`Conectividad a un Web Server en IPv4`] (#WebServer-ipv4) - 4. [`Conectividad a un Web Server en IPv6`] (#WebServer-ipv6) + 1. [`Conectividad de IPv4 a IPv6`](#conectividad-de-ipv4-a-ipv6) + 2. [`Conectividad de IPv6 a IPv4`](#conectividad-de-ipv6-a-ipv4) + 3. [`Conectividad a un Web Server en IPv4`](#conectividad-a-un-web-server-en-ipv4) + 4. [`Conectividad a un Web Server en IPv6`](#conectividad-a-un-web-server-en-ipv6) 5. [Deteniendo Jool](#deteniendo-jool) 6. [Lecturas adicionales](#lecturas-adicionales) -## Introducción +## Introduccion Este documento explica cómo ejecutar Jool en modo SIIT. Si no tienes nociones de este tipo de traducción ingresa a [SIIT Tradicional](intro-nat64.html#siit-tradicional). @@ -35,7 +35,7 @@ Para la implementación de las pruebas, puedes usar alternativamente máquinas v ## Red de ejemplo -![Figura 1 - Red de ejemplo](../images/network/vanilla.svg) +![Figura 1 - Red de ejemplo Vanilla](../images/network/vanilla.svg "Figura 1 - Red de ejemplo Vanilla") No es necesario que des de alta todos los nodos que se muestran en el diagrama; puedes lograrlo con solo 3 nodos: _A_, _T_ y _V_. El resto son muy similares a _A_ y _V_ y son mostrados para propósitos ilustrativos. @@ -47,7 +47,7 @@ Sin embargo para efectos de simplicidad, los ejemplos aqui mencionados asumen qu Dependiendo de tu distribución de linux, la forma de cómo deshabilitar el administrador de red puede variar. Esto se requiere, para que tomes control sobre las direcciones y rutas de tus interfaces; de otra forma, los comandos `ip` pudieran no tener efecto. -### `Configuración de Nodos en IPv6` +### `Configuracion de Nodos en IPv6` Para los nodos de _A_ a _E_, ejecuta la siguiente secuencia de comandos con permisos de administrador: @@ -60,7 +60,7 @@ user@A:~# ip route add default via 2001:db8::198.51.100.1 {% endhighlight %} -### `Configuración de Nodos en IPv4` +### `Configuracion de Nodos en IPv4` Para los nodos de _V_ a _Z_, ejecuta la siguiente secuencia de comandos con permisos de administrador: @@ -72,7 +72,7 @@ user@V:~# ip addr add 192.0.2.16/24 dev eth0 user@V:~# ip route add default via 192.0.2.1 {% endhighlight %} -### `Configuración del Nodo Traductor` +### `Configuracion del Nodo Traductor` Para el Nodo _T_, ejecuta la siguiente secuencia de comandos con permisos de administrador: @@ -88,7 +88,7 @@ user@T:~# ip addr add 192.0.2.1/24 dev eth1 Hasta aqui, no hemos convertido a _T_ en un traductor todavia, pues el servicio está dado de baja; por lo cual, los nodos desde _A_ hasta _E_ no pueden interactuar todavía con los nodos _V_ hasta _Z_. Pero, quizá quieras asegurarte de que _T_ puede comunicarse con todos los nodos antes de continuar. -La única precaución que debes tener en mente antes de activar Jool (o lidiar con IPv6 en general) son los offloads. Offloading es una característica de los nodos terminales, y para los que no lo son esto es un problema, por lo cual es importante apagarlos en todos los ruteadores. [Lee este documento](offloading.html) si quieres conocer más detalles sobre esta problemática. +La única precaución que debes tener en mente antes de activar Jool (o lidiar con IPv6 en general) son los "offloads". "Offloading" es una característica de los nodos terminales, y para los que no lo son esto es un problema, por lo cual es importante apagarlos en todos los ruteadores. [Lee este documento](offloading.html) si quieres conocer más detalles sobre esta problemática. Hazlo por medio de `ethtool`: @@ -105,8 +105,8 @@ user@T:~# ethtool --offload eth1 gro off user@T:~# ethtool --offload eth1 lro off {% endhighlight %} - NOTA: Si no puedes cambiar alguno de los parámetros, considera que es posible que ya este apagado. - Ejecuta `sudo ethtool --show-offload [interface]` para averiguarlo. + NOTA: Si no puedes cambiar alguno de los parámetros, considera que es posible que ya este apagado. + Ejecuta `sudo ethtool --show-offload [interface]` para averiguarlo. ## Jool diff --git a/doc/usr/es/rfc6791.md b/doc/usr/es/rfc6791.md index 71d0cde89..2627e3395 100644 --- a/doc/usr/es/rfc6791.md +++ b/doc/usr/es/rfc6791.md @@ -12,26 +12,26 @@ title: RFC 6791 ## Ãndice -1. [Introducción](#introduccion) -2. [Definición del Problema](#definicion) -3. [Ejemplo] (#ejemplo) -4. [Notas Adicionales] (#notas-adicionales) +1. [Introduccion](#introduccion) +2. [Definicion del Problema](#definicion-del-problema) +3. [Ejemplo](#ejemplo) +4. [Notas Adicionales](#notas-adicionales) -## Introducción +## Introduccion -Este estandar fue propuesto en Nov 2011 y aprobado como tal un año después. Presentado por [Xing Li] (http://www.researchgate.net/profile/Xing_Li7) y [Congxiao Bao] (http://www.arkko.com/tools/allstats/congxiaobao.html) del Centro CERNET de la Universidad de Tsinghua y [Dan Wing] (https://www.linkedin.com/profile/view?id=2606930&authType=name&authToken=oIy6) de [Cisco] (https://www.ciscolive.com/online/connect/speakerDetail.ww?PERSON_ID=69812EB76A23BD5B510E823E51292E72&tclass=popup). +Este estandar fue propuesto en Nov 2011 y aprobado como tal un año después. Presentado por [Xing Li](http://www.researchgate.net/profile/Xing_Li7) y [Congxiao Bao](http://www.arkko.com/tools/allstats/congxiaobao.html) del Centro CERNET de la Universidad de Tsinghua y [Dan Wing](https://www.linkedin.com/profile/view?id=2606930&authType=name&authToken=oIy6) de [Cisco](https://www.ciscolive.com/online/connect/speakerDetail.ww?PERSON_ID=69812EB76A23BD5B510E823E51292E72&tclass=popup). En este se establece la forma de cómo proveer de direcciones válidas en IPv4 a los HOPs de IPv6 en el caso de que alguno de ellos requiera reportar algún error de ICMP. -## Definición del Problema +## Definicion del Problema Un traductor Stateless IPv4/IPv6 podría recibir paquetes de IPv6 que contengan direcciones **no-traducibles** a IPv4 como dirección fuente, provenientes de los enlaces entre redes. Se entiende por **no-traducibles** cuando se cumple estas dos condiciones:
-a) Que no siga la norma establecida en el [RFC 6052, cap2.] (https://tools.ietf.org/html/rfc6052#section-2),
-b) Ni que esté dado de alta en la table EAM, ver [draft EAM, sección 3.2] ({{ site.draft-siit-eam }}#section-3.2). +a) Que no siga la norma establecida en el [RFC 6052, cap2.](https://tools.ietf.org/html/rfc6052#section-2),
+b) Ni que esté dado de alta en la table EAM, ver [draft EAM, sección 3.2]({{ site.draft-siit-eam }}#section-3.2). Si esto sucede, entonces implica que dos condiciones ocurrieron: diff --git a/doc/usr/es/usr-install.md b/doc/usr/es/usr-install.md index 4e1d13040..09a98da33 100644 --- a/doc/usr/es/usr-install.md +++ b/doc/usr/es/usr-install.md @@ -11,19 +11,19 @@ title: Instalación de la Herramienta de Configuración de Jool ## Ãndice -1. [Introducción](#introduccion) +1. [Introduccion](#introduccion) 2. [Requerimientos](#requerimientos) 1. [`Libnl-3`](#libnl-3) 2. [`Autoconf`](#autoconf) -3. [Genera, Compila e Instala](#crea_compila_instala) - 1. [`De la Web Oficial`] (#web_oficial) - 2. [`Del Repositorio GIT`] (#github) -4. [Validación] (#validacion) - 1. [Versión] (#version) - 2. [Ayuda] (#ayuda) - 3. [Uso] (#uso) +3. [Genera Compila e Instala](#genera-compila-e-instala) + 1. [`De la Web Oficial`](#de-la-web-oficial) + 2. [`Del Repositorio GIT`](#del-repositorio-git) +4. [Validacion](#validacion) + 1. [Version](#version) + 2. [Ayuda](#ayuda) + 3. [Uso](#uso) -## Introducción +## Introduccion Jool tiene cuatro componentes, es decir, cuatro ejecutables: @@ -38,7 +38,7 @@ Para ver detalles de los requisitos e instalación de los módulos de kernel [ac ### `Libnl-3` -> **NOTA: Libnl, libnl-1.x, 2.x no son compatibles. Se necesita Libnl-3 ver. 3.1 o superior.** +> **NOTA:** Libnl, libnl-1.x, 2.x no son compatibles. Se necesita Libnl-3 ver. 3.1 o superior. Jool emplea [NETLINK] (http://www.carisma.slowglass.com/~tgr/libnl/) para comunicar sus procesos de espacio de usuario con los de kernel, y viceversa. @@ -58,7 +58,7 @@ user@node:~#apt-get install libnl-3-dev ### `Autoconf` -> **NOTA: Se necesita autoconf ver. 2.68 o superior.** +> **NOTA:** Se necesita autoconf ver. 2.68 o superior. Si descargas Jool del Repositorio de Desarrollo de NICMx, te será necesario instalar la aplicación de autoconf para que se pueda generar de manera automática el script de configuración y los makefiles. Para llevarlo a cabo la instalación hazlo con permisos de administrador: @@ -91,11 +91,11 @@ user@node:~/Desktop/NAT64-/usr$ #Con acceso de administrador instala user@node:~/Desktop/NAT64-/usr# make install {% endhighlight %} -## Validación +## Validacion Ahora, podemos ejecutar varias acciones como: validar que versión de Jool compilamos y consultar la ayuda en línea. -### `Versión` +### `Version` Para desplegar la versión de Jool ejecuta: From f3fc9cc9f83bb3f435006c266df5fe7fcc85e7aa Mon Sep 17 00:00:00 2001 From: patybarron Date: Thu, 3 Sep 2015 19:24:52 -0500 Subject: [PATCH 11/15] Cambios al 3 de Sept -p1 --- doc/usr/es/documentation.md | 26 +++++++++--------- doc/usr/es/download.md | 6 ++-- doc/usr/es/eamt.md | 42 ++++++++++++---------------- doc/usr/es/index.md | 18 ++++++------ doc/usr/es/intro-jool.md | 8 +++--- doc/usr/es/intro-nat64.md | 22 +++++++-------- doc/usr/es/mod-install.md | 50 ++++++++++++++++------------------ doc/usr/es/mod-run-eam.md | 40 +++++++++++++-------------- doc/usr/es/mod-run-stateful.md | 30 ++++++++++---------- doc/usr/es/mod-run-vanilla.md | 42 ++++++++++++++-------------- doc/usr/es/rfc6791.md | 8 +++--- doc/usr/es/usr-install.md | 42 ++++++++++++++-------------- 12 files changed, 162 insertions(+), 172 deletions(-) diff --git a/doc/usr/es/documentation.md b/doc/usr/es/documentation.md index f40b1f3de..782e1336f 100644 --- a/doc/usr/es/documentation.md +++ b/doc/usr/es/documentation.md @@ -1,38 +1,38 @@ --- language: es layout: default -category: Download +category: Documentation title: Documentación - Ãndice --- -# Documentacion +# Documentación Bienvenido al índice de la documentación de Jool. -## Introduccion +## Introducción 1. [Qué es SIIT/NAT64?](intro-nat64.html) 2. [Qué es Jool?](intro-jool.html) Consulta el [RFC 6586](https://tools.ietf.org/html/rfc6586) para experiencias de desarrollo usando NAT64 Stateful. -## Instalacion +## Instalación 1. [Servidor Jool](mod-install.html) 2. [Herramienta de Configuración](usr-install.html) ## Ejemplos de uso -1. [SIIT](mod-run-vanilla.html) - 1. [RFC 6791](rfc6791.html) -2. [SIIT +EAM](mod-run-eam.html) - 1. [EAMT](eamt.html) -3. [NAT64 Stateful](mod-run-stateful.html) - 1. [pool IPv4](pool4.html) - 2. [BIB](bib.html) - 3. [Mapeos Estáticos](static-bindings.html) +1. [SIIT](mod-run-vanilla.html)
+ a) [RFC 6791](rfc6791.html) +2. [SIIT + EAM](mod-run-eam.html)
+ a) [EAMT](eamt.html) +3. [NAT64 Stateful](mod-run-stateful.html)
+ a) [Pool IPv4](pool4.html)
+ b) [BIB](bib.html)
+ c) [Mapeos Estáticos](static-bindings.html) 4. [DNS64](dns64.html) 5. [464XLAT - SIIIT/DC Modo de traducción dual](mod-run-464xlat.html) -## Herramienta de Configuracion +## Herramienta de Configuración 1. [Banderas](usr-flags.html) diff --git a/doc/usr/es/download.md b/doc/usr/es/download.md index d38e1211c..b1ae0dcfc 100644 --- a/doc/usr/es/download.md +++ b/doc/usr/es/download.md @@ -13,7 +13,7 @@ title: Descarga --> * Las versión resaltada en **negritas** es la última actualización y es la más recomendable a instalar. -* Las versiones no resaltadas son versiones estables pero anteriores. Éstas se podrían requerir en caso de que alguna opción, en la más nueva, falle. [¡Los reportes son bienvenidos!](https://github.com/NICMx/NAT64/issues). +* Las versiones no resaltadas son versiones estables pero anteriores. Éstas se podrían requerir en caso de que alguna opción, en la más nueva, falle. [¡Los reportes son bienvenidos!](https://github.com/NICMx/NAT64/issues) * Las versiones tachadas no son recomedables, pues son muy antiguas o tienen errores críticos ya bien identificados. ## 3.3.x @@ -35,7 +35,7 @@ La serie de versiones 3.2 mejora la 3.1 implementando _Apertura simultánea de 3.2.3 es la última actualización de esta serie de versiones. -La documentación en este sitio pertenece a la serie de versiones 3.3. Se puede descargar una imágen de la documentación de la serie 3.2 [aquí](https://www.jool.mx/download/Jool-3.2-doc.zip) (Esta documentación está en inglés). +La documentación en este sitio pertenece a la serie de versiones 3.3. Se puede descargar una imágen de la documentación de la serie 3.2 [aquí](https://www.jool.mx/download/Jool-3.2-doc.zip) (**Nota:** está en inglés). | Descarga | SHA512 | MD5| Git commit | |----------|--------|----|------------| @@ -53,7 +53,7 @@ La serie de versiones 3.1 esta bastante apegada al estándar stateful NAT64. Sus La última actualización de esta serie de versiones es la 3.1.6. -La documentación en este sitio pertenece a la serie de versiones 3.3. Se puede descargar una imágen de la documentación de la serie 3.1 [aquí](https://www.jool.mx/download/Jool-3.1-doc.zip) (Esta documentación está en inglés). +La documentación en este sitio pertenece a la serie de versiones 3.3. Se puede descargar una imágen de la documentación de la serie 3.1 [aquí](https://www.jool.mx/download/Jool-3.1-doc.zip) (**Nota:** está en inglés). | Download | SHA512 | MD5| Git commit | |----------|--------|----|------------| diff --git a/doc/usr/es/eamt.md b/doc/usr/es/eamt.md index 3139bb325..8f492715f 100644 --- a/doc/usr/es/eamt.md +++ b/doc/usr/es/eamt.md @@ -11,14 +11,14 @@ title: EAMT ## Ãndice -1. [Definicion](#definicion) -2. [Ejemplos](#ejemplos) - 1. [`Registro 01`](#registro-01) - 2. [`Registro 02`](#registro-02) - 3. [`Registro 03`](#registro-03) +1. [Definición](#definicin) +2. [Ejemplos](#ejemplos)
+ a) [Registro 01](#registro-01)
+ b) [Registro 02](#registro-02)
+ c) [Registro 03](#registro-03) 3. [Resumen y Notas Adicionales](#resumen-y-notas-adicionales) -## Definicion +## Definición La tabla EAMT (_Explicit Address Mappings Table_) por sus siglas en inglés, es una colección de registros en un servidor SIIT y en ella se guarda la relación de cómo las diferentes direcciones deben de ser traducidas. @@ -78,24 +78,16 @@ La dirección `203.0.113.8` se convierte en `2001:db8:cccc::`, no en `2001:db8:c - `203.0.113.14` <-> `2001:db8:cccc::6` - `203.0.113.15` <-> `2001:db8:cccc::7` -## Resumen y Notas Adicionales - -En el mecanisimo de transición SIIT-EAM se emplea y se mantiene la tabla de direcciones de mapeo explicito. - -En dicha tabla existen duplas con prefijos de IPv4 e IPv6 válidos. - -El prefijo es remplazado a nivel de bits. - -La dirección IPv4 no forma parte de la dirección IPv6 a usar. - -Los registros son bidireccionales. - -Los registros EAMT no se pueden intersectar. - -Los paquetes que empleen dichas direcciones se tratarán como tales, es decir, con ese tipo de traducción. - -Si Jool no encuentra una coincidencia en la tabla para una dirección, intenta traducir basado en el prefijo [`pool6`](usr-flags-pool6.html). - -Si eso también falla, el paquete es devuelto al kernel. Se asume que el paquete no debe ser traducido. +## Resumen y Notas Adicionales: + +* En el mecanisimo de transición SIIT-EAM se emplea y se mantiene la tabla de direcciones de mapeo explicito. +* En dicha tabla existen duplas con prefijos de IPv4 e IPv6 válidos. +* El prefijo es remplazado a nivel de bits. +* La dirección IPv4 no forma parte de la dirección IPv6 a usar. +* Los registros son bidireccionales. +* Los registros EAMT no se pueden intersectar. +* Los paquetes que empleen dichas direcciones se tratarán como tales, es decir, con ese tipo de traducción. +* Si Jool no encuentra una coincidencia en la tabla para una dirección, intenta traducir basado en el prefijo [`pool6`](usr-flags-pool6.html). +* Si eso también falla, el paquete es devuelto al kernel. Se asume que el paquete no debe ser traducido. Ve la [demostración](mod-run-eam.html) o el [material de referencia](usr-flags-eamt.html) para obtener información de cómo crear y destruir registros manualmente. diff --git a/doc/usr/es/index.md b/doc/usr/es/index.md index 322a9a102..9c45f691a 100644 --- a/doc/usr/es/index.md +++ b/doc/usr/es/index.md @@ -93,7 +93,7 @@ También se liberó la actualización de Jool 3.2.3, para corregir [los errores ### 2014-10-24 -El error importante #112 fue descubierto, y la version 3.2.2 queda ya desactualizada. +El error importante #112 fue descubierto, y la versión 3.2.2 queda ya desactualizada. ### 2014-10-17 @@ -103,7 +103,7 @@ La documentación provista sobre `--plateaus` ha sido [mejorada](usr-flags-plate ### 2014-10-08 -Version 3.2.1 liberada. La serie 3.2 es considerada más madura que la 3.1. +versión 3.2.1 liberada. La serie 3.2 es considerada más madura que la 3.1. Los cambios importantes son: @@ -120,7 +120,7 @@ NOTA: Cuando un error de ICMP es demasiado grande, no se fragmenta; se trunca. E ### 2014-09-01 -Nos tomo más tiempo del planeado la realización de las pruebas, pero finalmente la version 3.2.0 es liberada. +Nos tomo más tiempo del planeado la realización de las pruebas, pero finalmente la versión 3.2.0 es liberada. Note que se cambio el número de versión menor, porque la Herrmienta de Configuración del Jool es ligeramente diferente. Los parámetros de configuración de un sólo valor han sido juntados en la opción de [`--general`](usr-flags-global.html) y ésta remplaza a `--filtering`, `--translate` y `--fragmentation`. La aplicación tiene además tres nuevas caracteristicas: @@ -140,11 +140,11 @@ También se liberó el 3.1.6, el cual contiene pequeñas correciones al 3.1.5. E ### 2014-06-26 -Si está familiarizado con los Markdown y los Github's diffs, puedes encontrar los cambios en la documentación de la version 3.1.5 aquí, aquí y aquí. +Si está familiarizado con los Markdown y los Github's diffs, puedes encontrar los cambios en la documentación de la versión 3.1.5 aquí, aquí y aquí. ### 2014-06-18 -La version 3.1.5 fue liberada. +La versión 3.1.5 fue liberada. La más importante corrección fue al caso #92. Errores incorrectos de ICMP confunden a los nodos de IPv4, lo cual baja la confibilidad en el tráfico de 4-a-6. @@ -158,7 +158,7 @@ Si nadie encuentra algún error crítico en esta versión, esta actualización s ### 2014-04-25 -La version 3.1.4 ha sido liberada, y corrige: +La versión 3.1.4 ha sido liberada, y corrige: 1. Dos problemas de inhibición del equipo caso#90 y caso#84. 2. La Herramienta de Configuración del Jool ahora resuelve nombres. @@ -168,7 +168,7 @@ La version 3.1.4 ha sido liberada, y corrige: ### 2014-03-26 -La version 3.1.3 ha sido liberada, y corrige: +La versión 3.1.3 ha sido liberada, y corrige: 1. El uso de una incorrecta validación no permite la configuración de Jool en ciertos sistemas. 2. Un error que provoca que Jool no envíe ciertos errores de ICMP. @@ -187,7 +187,7 @@ y con este viene un nueva actualización 3.1.2, que: ### 2014-02-21 -La version 3.1.1 ha sido liberada. +La versión 3.1.1 ha sido liberada. Esta contiene dos correcciones: @@ -196,7 +196,7 @@ Esta contiene dos correcciones: ### 2014-01-15 -![small_orange_diamond](../images/small_orange_diamond.png) La version 3.1.0 ha sido liberada. ¡Jool, finalmente, maneja fragmentación! +![small_orange_diamond](../images/small_orange_diamond.png) La versión 3.1.0 ha sido liberada. ¡Jool, finalmente, maneja fragmentación! Otras correcciones importantes: diff --git a/doc/usr/es/intro-jool.md b/doc/usr/es/intro-jool.md index 241ff8c79..a7d19e8fb 100644 --- a/doc/usr/es/intro-jool.md +++ b/doc/usr/es/intro-jool.md @@ -5,19 +5,19 @@ category: Documentation title: Introducción a Jool --- -[Documentación](documentation.html) > [Introducción](documentation.html#introduccion) > Jool +[Documentación](documentation.html) > [Introducción](documentation.html#introduccin) > Jool # Introducción a Jool ## Ãndice -1. [Descripcion](#descripcion) +1. [Descripción](#descripcin) 2. [Cumplimiento](#cumplimiento) 3. [Compatibilidad](#compatibilidad) -## Descripcion +## Descripción -Jool es una implementación de varios mecanismos de transición en IPv6. Todos en la categoría de traducción: [Stateful NAT64, SIIT y SIIT con EAM.] (intro-nat64.html) Jool es una aplicación de código abierto (open source) en Linux, desarrollado sobre Ubuntu, y probado en otros Linux (Debian, CentOS, Raspbian, RedHat, SuSE). +Jool es una implementación de varios mecanismos de transición en IPv6. Todos en la categoría de traducción: [Stateful NAT64, SIIT y SIIT con EAM.](intro-nat64.html) Jool es una aplicación de código abierto (open source) en Linux, desarrollado sobre Ubuntu, y probado en otros Linux (Debian, CentOS, Raspbian, RedHat, SuSE). De Jool 1.0 a Jool 3.2.3 -> Stateful NAT64
De Jool 3.3.0 en delante -> Stateful NAT64, SIIT y SIIT con EAM diff --git a/doc/usr/es/intro-nat64.md b/doc/usr/es/intro-nat64.md index 6076e2790..bafbcd45a 100644 --- a/doc/usr/es/intro-nat64.md +++ b/doc/usr/es/intro-nat64.md @@ -5,19 +5,19 @@ category: Documentation title: Documentación - Introducción a los Mecanismos de Transición --- -[Documentación](documentation.html) > [Introducción](documentation.html#introduccion) > Mecanismos de Transición +[Documentación](documentation.html) > [Introducción](documentation.html#introduccin) > Mecanismos de Transición ## Mecanismos de Transición de IPv6 soportados por Jool ## Ãndice -1. [Introduccion](#introduccion) -2. [Ejemplos de Traduccion](#ejemplos-de-traduccion) - 1. [`SIIT con EAM`](#siit-con-eam) - 2. [`SIIT tradicional`](#siit-tradicional) - 3. [`Stateful NAT64`](#stateful-nat64) +1. [Introducción](#introduccin) +2. [Ejemplos de Traducción](#ejemplos-de-traduccin)
+ a) [SIIT con EAM](#siit-con-eam)
+ b) [SIIT tradicional](#siit-tradicional)
+ c) [Stateful NAT64](#stateful-nat64) -## Introduccion +## Introducción Este documento proporciona una introducción general a los tres mecanismos de traducción implementados en Jool. El algoritmo para SIIT fue definido formalmente a inicios del 2000 por Erik Nordmark de SUN Microsystems en el [RFC 2765](https://tools.ietf.org/html/rfc2765). Este ha sido actualizado en varias ocasiones: [(RFC 6145, 2011)](https://tools.ietf.org/html/rfc6145), [(RFC6791, 2012)](https://tools.ietf.org/html/rfc6791) e inclusive [hasta nuestros días](https://tools.ietf.org/id/siit?maxhits=100&key=date&dir=desc). De éstos, ya están incluidos en Jool el [(draft-ietf-v6ops-siit-dc, 2015)]({{ site.draft-siit-dc }}), el [(draft-ietf-v6ops-siit-dc-2xlat, 2015)]({{ site.draft-siit-dc-2xlat }}) y el [(draft-anderson-v6ops-siit-eam, 2015)]({{ site.draft-siit-eam }}). Estas tres adiciones a SIIT han sido propuestas y promovidas por [Tore Anderson](http://www.redpill-linpro.com/tore-anderson#overlay-context=about-us/our-consultants) de la compañía Redpill Linpro en Noruega. @@ -26,7 +26,7 @@ La metodología del Stateful NAT64 fue uno de los resultados del [**Proyecto Tri ![bulb](../images/bulb.png) Conoce más trabajos elaborados por la IETF acerca de NAT64 en [TOOLS IETF](https://tools.ietf.org/id/nat64?maxhits=100&key=date&dir=desc) y en [Datatracker](https://datatracker.ietf.org/doc/search/?name=nat64&sort=&rfcs=on&activedrafts=on). -## Ejemplos de Traduccion +## Ejemplos de Traducción SIIT (_Stateless IP/ICMP Translation_) y NAT64 ("NAT seis cuatro", no "NAT sesenta y cuatro") son tecnologías orientadas a comunicar nodos de red que únicamente hablan [IPv4](http://es.wikipedia.org/wiki/IPv4) con nodos que solo hablan [IPv6](http://es.wikipedia.org/wiki/IPv6). La idea es básicamente la de un [NAT](http://es.wikipedia.org/wiki/Traducci%C3%B3n_de_direcciones_de_red) mejorado; es decir que, un "Traductor IPv4/IPv6" no solo reemplaza direcciones y/o puertos en los paquetes, sino también encabezados de capa 3. @@ -47,7 +47,7 @@ Por razones históricas, algunas veces etiquetamos a SIIT como "Stateless NAT64" En una implementación SIIT siempre se modifican los encabezados de red y en algunas veces los checksums. En un Stateful NAT64 también se manipulan los identificadores de transporte. -### `SIIT con EAM` +### SIIT con EAM Esta parte es la más fácil de explicar. Considera la siguiente configuración: @@ -77,7 +77,7 @@ El traductor esta "engañando" a ambos nodos haciéndoles pensar que el otro pue ![bulb](../images/bulb.png) Revisa [nuestro resumen](eamt.html) o repasa sus especificaciones en el [draft EAM]({{ site.draft-siit-eam }}). -### `SIIT (tradicional)` +### SIIT (tradicional) El modo básico es un poco más complejo. Las direcciones no son remplazadas completamente por otras, sino una parte será usada en su dirección asociada con el otro protocolo. Considera la siguiente configuración: @@ -106,7 +106,7 @@ Dependiendo de la longitud del prefijo, la dirección IPv4 se incorporará en di ![warning](../images/warning.png) Siempre que el RFC 6052 esté involucrado, es muy conveniente dar de alta también un [DNS64](dns64.html) para que
los usuarios no necesiten estar al tanto del prefijo, y resuelva por nombre. -### `Stateful NAT64` +### Stateful NAT64 Este modo es el más parecido a lo que la gente entiende como **NAT**, por sus siglas en inglés de _IP Network Address Translator_. Recordemos, un NAT opera de la siguiente manera: diff --git a/doc/usr/es/mod-install.md b/doc/usr/es/mod-install.md index 6ae2f4ea0..b38ef0889 100644 --- a/doc/usr/es/mod-install.md +++ b/doc/usr/es/mod-install.md @@ -5,24 +5,24 @@ category: Documentation title: Instalación del Servidor Jool --- -[Documentación](documentation.html) > [Instalación](documentation.html#instalacion) > Servidor Jool +[Documentación](documentation.html) > [Instalación](documentation.html#instalacin) > Servidor Jool # Instalación del Servidor Jool ## Ãndice -1. [Introduccion](#introduccion) -2. [Requerimientos](#requerimientos) - 1. [`Kernels Validos`](#kernels-validos) - 2. [`Encabezados del Kernel`](#encabezados-del-kernel) - 3. [`Interfaces de Red`](#interfaces-de-red) - 4. [`Ethtool`](#ethtool) -3. [Baja Compila e Instala](#baja-compila-e-instala) - 1. [`De la Web Oficial`](#de-la-web-oficial) - 2. [`Del Repositorio GIT`](#del-repositorio-git) +1. [Introducción](#introduccin) +2. [Requerimientos](#requerimientos)
+ a) [Kernels Válidos](#kernels-vlidos)
+ b) [Encabezados del Kernel](#encabezados-del-kernel)
+ c) [Interfaces de Red](#interfaces-de-red)
+ d) [Ethtool](#ethtool) +3. [Baja, Compila e Instala](#baja-compila-e-instala)
+ a) [De la Web Oficial](#de-la-web-oficial)
+ b) [Del Repositorio GIT](#del-repositorio-git) 4. [Genera Archivo de Dependencias](#genera-archivo-de-dependencias) -## Introduccion +## Introducción Jool tiene cuatro componentes, es decir, cuatro ejecutables: @@ -37,7 +37,7 @@ Las aplicaciones en el espacio de usuario son para configuración de Jool, la ex ## Requerimientos -### `Kernels Validos` +### Kernels Válidos Jool fue desarrollado sobre ambiente linux y lenguaje de programación "C". Para conocer la lista actualizada de kernels soportados y probados en las diferentes distribuciones de Linux [haz click aquí](intro-jool.html#compatibilidad). Es factible que no vaya a haber problema alguno, al compilar Jool en versiones más recientes de kernel. ¡Ãnimo, prueba y compartenos tu experiencia! @@ -49,7 +49,7 @@ Para verificar la versión de tu kernel, usa el siguiente comando: $ /bin/uname -r {% endhighlight %} -### `Encabezados del Kernel` +### Encabezados del Kernel Para que Jool se compile y lige sin problemas es necesario que tu equipo cuente con los encabezados de kernel para la versión en la que te dispones a trabajar. Para ello, ejecuta con permisos de administrador lo siguiente: @@ -57,7 +57,7 @@ Para que Jool se compile y lige sin problemas es necesario que tu equipo cuente user@node# apt-get install linux-headers-$(uname -r) {% endhighlight %} -### `Interfaces de Red` +### Interfaces de Red Jool requiere al menos de una interfaz de red para poder comunicarse con los nodos via IPv6 e IPv4. Esto es posible, al habilitar una sola interfaz de red, con doble pila y varios protocolos, pues el kernel lo permite; sin embargo, por consideración a las personas que están incursionando en este tipo de aplicaciones se usarán `dos interfaces de red separadas: una para IPv6 y otra para IPv4`. Y de esta manera, poder identificar más facilmente los paquetes al usar las aplicaciones de debugeo como WireShark y otros. Entonces, para validar cuáles y cuántas interfaces de red están disponibles ejecuta lo siguiente: @@ -70,7 +70,7 @@ $ ip link show link/ether 08:00:27:ca:18:c8 brd ff:ff:ff:ff:ff:ff {% endhighlight %} -### `Ethtool` +### Ethtool Ethtool es una utilería para configurar las tarjetas Ethernet, con ella se pueden visualizar y modificar sus parámetros. Para instalarla ejecuta con permisos de administrador: @@ -89,7 +89,7 @@ Existen algunas pequeñas variantes al bajarlo de un portal u otro, no tan solo Quizá estes acostumbrado a un procedimiento estándar de tres pasos para compilar e instalar programas: `./configure && make && make install`. Los módulos de kernel no vienen con un script `configure`, para generar el Makefile, sino ya está hecho, por lo que solo se requiere ejecutar los últimos dos pasos. -### `De la Web Oficial` +### De la Web Oficial Si buscas la versión más estable o versiónes anteriores de Jool, entonces descárgalo desde este mismo portal, dirigiendote a la [página de Descarga](download.html). Sigue estos pasos: @@ -123,7 +123,7 @@ El proceso de instalación consiste en copiar `los binarios generados` a `tu p user@node:~/Jool-/mod# make modules_install {% endhighlight %} -### `Del Repositorio GIT` +### Del Repositorio GIT Si descargas Jool del [Repositorio de Github](https://github.com/NICMx/NAT64), te sugerimos acceder el último commit de la rama principal, porque las otras ramas son para desarrollo, y están en constante cambio y no hay garantía. Sigue estos pasos: @@ -165,14 +165,12 @@ El hecho de que residan en la pool no significa que ya hayan sido indizados, ent user@node:~# depmod {% endhighlight %} -Mediante el comando **depmod** se genera el archivo de dependencias *Makefile* que usará **modprobe** para cargar los módulos, aprende cómo hacerlo consultando el [ejemplo básico de SIIT](mod-run-vanilla.html). +Mediante el comando **depmod** se genera el archivo de dependencias *Makefile* que usará **modprobe** para cargar los módulos, aprende cómo hacerlo consultando [el ejemplo básico de SIIT](mod-run-vanilla.html). -![thumbsup](../images/thumbsup.png) ¡LISTO! Jool puede ser inicializado ahora. +![thumbsup](../images/thumbsup.png) Jool puede ser inicializado ahora. -![warning](../images/warning.png) A D V E R T E N C I A -> -> A partir del kernel 3.7 en Ubuntu puedes autentificar tus módulos, lo cual es una buena práctica. Te recomendamos, firmar tus modulos de kernel para asegurarte de que los estás agregando de manera responsable. -> -> Si tu kernel NO fue configurado para _solicitar_ esta característica no tendrás problema. Los kernels de muchas distribuciones no lo hacen. Solo ten en cuenta que cuando corras el comando `make modules_install`, se mostrará el siguiente mensaje: "Can't read private key"; esto puede parecer un error, pero de hecho es una advertencia, [así que puedes continuar la instalación](https://github.com/NICMx/NAT64/issues/94#issuecomment-45248942). -> -> Si tu kernel _fue_ compilado para solicitar el firmado de módulos, probablemente ya sepas como llevarlo a cabo. Lo omitiremos aquí. +> **ADVERTENCIA :**
+> +> A partir del **kernel 3.7** en Ubuntu puedes autentificar tus módulos, lo cual es una buena práctica. Te recomendamos, firmar tus modulos de kernel para asegurarte de que los estás agregando de manera responsable. +> Si tu kernel NO fue configurado para _solicitar_ esta característica no tendrás problema. Los kernels de muchas distribuciones no lo hacen. Solo ten en cuenta que cuando corras el comando `make modules_install`, se mostrará el siguiente mensaje: **"Can't read private key"**; esto puede parecer un error, pero de hecho es una advertencia, [así que puedes continuar la instalación](https://github.com/NICMx/NAT64/issues/94#issuecomment-45248942). +> Si tu kernel _fue_ compilado para solicitar el firmado de módulos, probablemente ya sepas como llevarlo a cabo. **Nota:** Lo omitiremos aquí. diff --git a/doc/usr/es/mod-run-eam.md b/doc/usr/es/mod-run-eam.md index c999e6f94..af176534d 100644 --- a/doc/usr/es/mod-run-eam.md +++ b/doc/usr/es/mod-run-eam.md @@ -11,21 +11,21 @@ title: SIIT-EAM - Ejemplo de uso ## Ãndice -1. [Introduccion](#introduccion) -2. [Red de ejemplo](#red-de-ejemplo) - 1. [`Configuracion de Nodos en IPv6`](#configuracion-de-nodos-en-ipv6) - 2. [`Configuracion de Nodos en IPv4`](#configuracion-de-nodos-en-ipv4) - 3. [`Configuracion del Nodo Traductor`](#configuracion-del-nodo-traductor) +1. [Introducción](#introduccin) +2. [Red de ejemplo](#red-de-ejemplo)
+ a) [Configuración de Nodos en IPv6](#configuracin-de-nodos-en-ipv6)
+ b) [Configuración de Nodos en IPv4](#configuracin-de-nodos-en-ipv4)
+ c) [Configuración del Nodo Traductor](#configuracin-del-nodo-traductor) 3. [Jool](#jool) -4. [Pruebas](#pruebas) - 1. [`Conectividad de IPv6 a IPv4`](#conectividad-de-ipv6-a-ipv4) - 2. [`Conectividad de IPv4 a IPv6`](#conectividad-de-ipv4-a-ipv6) - 3. [`Conectividad a un Web Server en IPv4`](#conectividad-a-un-web-server-en-ipv4) - 4. [`Conectividad a un Web Server en IPv6`](#conectividad-a-un-web-server-en-ipv6) +4. [Pruebas](#pruebas)
+ a) [Conectividad de IPv6 a IPv4](#conectividad-de-ipv6-a-ipv4)
+ b) [Conectividad de IPv4 a IPv6](#conectividad-de-ipv4-a-ipv6)
+ c) [Conectividad a un Web Server en IPv4](#conectividad-a-un-web-server-en-ipv4)
+ d) [Conectividad a un Web Server en IPv6](#conectividad-a-un-web-server-en-ipv6) 5. [Deteniendo Jool](#deteniendo-jool) 6. [Lecturas adicionales](#lecturas-adicionales) -## Introduccion +## Introducción Este documento explica cómo ejecutar Jool en modo EAM. Si no tienes nociones de este tipo de traducción ingresa a [SIIT-EAM ](intro-nat64.html#siit-con-eam). @@ -44,7 +44,7 @@ Aquí también, son válidas y aplican las observaciones mencionadas de la [secc - Jool requiere Linux, los otros Nodos no necesariamente. - Para este tutorial, consideraremos que: a)todos están en Linux, b)la configuración de red se hará manualmente, c) todo el tráfico será redirigido por defecto hacia _T_. -### `Configuracion de Nodos en IPv6` +### Configuración de Nodos en IPv6 Para los nodos de _A_ a _E_, ejecuta la siguiente secuencia de comandos con permisos de administrador: @@ -56,7 +56,7 @@ user@A:~# /sbin/ip addr add 2001:db8:6::8/96 dev eth0 user@A:~# /sbin/ip route add default via 2001:db8:6::1 {% endhighlight %} -### `Configuracion de Nodos en IPv4` +### Configuración de Nodos en IPv4 Para los nodos de _V_ a _Z_, ejecuta la siguiente secuencia de comandos con permisos de administrador: @@ -68,7 +68,7 @@ user@V:~# /sbin/ip addr add 192.0.2.16/24 dev eth0 user@V:~# /sbin/ip route add default via 192.0.2.1 {% endhighlight %} -### `Configuracion del Nodo Traductor` +### Configuración del Nodo Traductor Para el Nodo _T_, ejecuta la siguiente secuencia de comandos con permisos de administrador: @@ -93,7 +93,7 @@ user@T:~# ethtool --offload eth1 gro off user@T:~# ethtool --offload eth1 lro off {% endhighlight %} -Hasta aqui, no hemos convertido a _T_ en un traductor todavia; pero, quizá quieras asegurarte de que _T_ puede comunicarse con todos los nodos antes de continuar. +Hasta aquí, no hemos convertido a _T_ en un traductor todavía; pero, quizá quieras asegurarte de que _T_ puede comunicarse con todos los nodos antes de continuar. ## Jool @@ -119,7 +119,7 @@ Y de nuevo, el prefijo IPv6 y la tabla EAM no son modos de operación exclusivos ## Pruebas -### `Conectividad de IPv6 a IPv4` +### Conectividad de IPv6 a IPv4 Haz un ping a _V_ desde _A_: @@ -136,7 +136,7 @@ PING 2001:db8:4::10(2001:db8:4::10) 56 data bytes rtt min/avg/max/mdev = 2.790/3.370/4.131/0.533 ms {% endhighlight %} -### `Conectividad de IPv4 a IPv6` +### Conectividad de IPv4 a IPv6 Haz un ping a _A_ desde _V_ de esta forma: @@ -153,13 +153,13 @@ PING 198.51.100.8 (198.51.100.8) 56(84) bytes of data. rtt min/avg/max/mdev = 1.930/3.001/5.042/1.204 ms {% endhighlight %} -### `Conectividad a un Web Server en IPv4` +### Conectividad a un Web Server en IPv4 Agrega un servidor en _Y_ y accesalo desde _D_: ![Figura 1 - IPv4 TCP desde un nodo IPv6](../images/run-eam-firefox-4to6.png) -### `Conectividad a un Web Server en IPv6` +### Conectividad a un Web Server en IPv6 Agrega un servidor en _B_ y haz una solicitud desde _X_: @@ -169,7 +169,7 @@ Si algo no funciona, consulta el [FAQ](faq.html). ## Deteniendo Jool -Para detener Jool, de igual manera: +Para detener Jool, emplea de nuevo el comando modprobe usando el parámetro `-r`: {% highlight bash %} user@T:~# modprobe -r jool_siit diff --git a/doc/usr/es/mod-run-stateful.md b/doc/usr/es/mod-run-stateful.md index f9a109494..717983aef 100644 --- a/doc/usr/es/mod-run-stateful.md +++ b/doc/usr/es/mod-run-stateful.md @@ -11,20 +11,20 @@ title: Stateful NAT64 - Ejemplo de uso ## Ãndice -1. [Introduccion](#introduccion) -2. [Red de ejemplo](#red-de-ejemplo) - 1. [`Configuracion de Nodos en IPv6`](#configuracion-de-nodos-en-ipv6) - 2. [`Configuracion de Nodos en IPv4`](#configuracion-de-nodos-en-ipv4) - 3. [`Configuracion del Nodo Traductor`](#configuracion-del-nodo-traductor) +1. [Introducción](#introduccin) +2. [Red de ejemplo](#red-de-ejemplo)
+ a) [Configuración de Nodos en IPv6](#configuracin-de-nodos-en-ipv6)
+ b) [Configuración de Nodos en IPv4](#configuracin-de-nodos-en-ipv4)
+ c) [Configuración del Nodo Traductor](#configuracin-del-nodo-traductor) 3. [Jool](#jool) -4. [Pruebas](#pruebas) - 1. [`Conectividad de IPv6 a IPv4`](#conectividad-de-ipv6-a-ipv4) - 2. [`Conectividad a un Web Server en IPv4`](#conectividad-a-un-web-server-en-ipv4) +4. [Pruebas](#pruebas)
+ a) [Conectividad de IPv6 a IPv4](#conectividad-de-ipv6-a-ipv4)
+ b) [Conectividad a un Web Server en IPv4](#conectividad-a-un-web-server-en-ipv4) 5. [Deteniendo Jool](#deteniendo-jool) 6. [Lecturas adicionales](#lecturas-adicionales) -## Introduccion +## Introducción Este documento explica como ejecutar Jool en modo Stateful NAT64. Si no tienes nociones de este tipo de traducción ingresa a [Stateful NAT64](intro-nat64.html#stateful-nat64). @@ -40,7 +40,7 @@ Aquí también, son válidas y aplican las observaciones mencionadas de la [secc - Jool requiere Linux, los otros Nodos no necesariamente. - Para este tutorial, consideraremos que: a)todos están en Linux, b)su configuración de red se hará manualmente. -### `Configuracion de Nodos en IPv6` +### Configuración de Nodos en IPv6 Para los nodos de _A_ a _E_, ejecuta la siguiente secuencia de comandos con permisos de administrador: @@ -52,7 +52,7 @@ user@A:~# /sbin/ip address add 2001:db8::8/96 dev eth0 user@A:~# /sbin/ip route add default via 2001:db8::1 {% endhighlight %} -### `Configuracion de Nodos en IPv4` +### Configuración de Nodos en IPv4 Para los nodos de _V_ a _Z_, ejecuta la siguiente secuencia de comandos con permisos de administrador: @@ -65,7 +65,7 @@ user@V:~# /sbin/ip address add 203.0.113.16/24 dev eth0 Estos nodos no necesitan una ruta por defecto. Esto es consecuencia de que se encuentran en la misma red junto con el NAT64. Como la dirección 203.0.113.2 estará enmascarando los nodos IPv6, asi que desde _V_ hasta _Z_ piensan que están hablando directamente con _T_. -### `Configuracion del Nodo Traductor` +### Configuración del Nodo Traductor Para el Nodo _T_, ejecuta la siguiente secuencia de comandos con permisos de administrador: @@ -128,7 +128,7 @@ Jool escuchará en la dirección `203.0.113.2` y para los paquetes en IPv4 agreg ## Pruebas -### `Conectividad de IPv6 a IPv4` +### Conectividad de IPv6 a IPv4 Haz un ping a _V_ desde _C_: @@ -145,7 +145,7 @@ PING 64:ff9b::192.0.2.16(64:ff9b::c000:210) 56 data bytes rtt min/avg/max/mdev = 1.136/6.528/15.603/5.438 ms {% endhighlight %} -### `Conectividad a un Web Server en IPv4` +### Conectividad a un Web Server en IPv4 Agrega un servidor en _Z_ y accesalo desde _A_: @@ -157,7 +157,7 @@ Si algo no funciona, consulta el [FAQ](faq.html). ## Deteniendo Jool -Para detener Jool, de igual manera: +Para detener Jool, emplea de nuevo el comando modprobe usando el parámetro `-r`: {% highlight bash %} user@T:~# /sbin/modprobe -r jool diff --git a/doc/usr/es/mod-run-vanilla.md b/doc/usr/es/mod-run-vanilla.md index 71f6d2ec9..12e89e027 100644 --- a/doc/usr/es/mod-run-vanilla.md +++ b/doc/usr/es/mod-run-vanilla.md @@ -11,21 +11,21 @@ title: SIIT - Ejemplo básico ## Ãndice -1. [Introduccion](#introduccion) -2. [Red de ejemplo](#red-de-ejemplo) - 1. [`Configuracion de Nodos en IPv6`](#configuracion-de-nodos-en-ipv6) - 2. [`Configuracion de Nodos en IPv4`](#configuracion-de-nodos-en-ipv4) - 3. [`Configuracion del Nodo Traductor`](#configuracion-del-nodo-traductor) +1. [Introducción](#introduccin) +2. [Red de ejemplo](#red-de-ejemplo)
+ a) [Configuración de Nodos en IPv6](#configuracin-de-nodos-en-ipv6)
+ b) [Configuración de Nodos en IPv4](#configuracin-de-nodos-en-ipv4)
+ c) [Configuración del Nodo Traductor](#configuracin-del-nodo-traductor) 3. [Jool](#jool) -4. [Pruebas](#pruebas) - 1. [`Conectividad de IPv4 a IPv6`](#conectividad-de-ipv4-a-ipv6) - 2. [`Conectividad de IPv6 a IPv4`](#conectividad-de-ipv6-a-ipv4) - 3. [`Conectividad a un Web Server en IPv4`](#conectividad-a-un-web-server-en-ipv4) - 4. [`Conectividad a un Web Server en IPv6`](#conectividad-a-un-web-server-en-ipv6) +4. [Pruebas](#pruebas)
+ a) [Conectividad de IPv4 a IPv6](#conectividad-de-ipv4-a-ipv6)
+ b) [Conectividad de IPv6 a IPv4](#conectividad-de-ipv6-a-ipv4)
+ c) [Conectividad a un Web Server en IPv4](#conectividad-a-un-web-server-en-ipv4)
+ d) [Conectividad a un Web Server en IPv6](#conectividad-a-un-web-server-en-ipv6) 5. [Deteniendo Jool](#deteniendo-jool) 6. [Lecturas adicionales](#lecturas-adicionales) -## Introduccion +## Introducción Este documento explica cómo ejecutar Jool en modo SIIT. Si no tienes nociones de este tipo de traducción ingresa a [SIIT Tradicional](intro-nat64.html#siit-tradicional). @@ -43,11 +43,11 @@ Considera que tienes un bloque de direcciones 198.51.100.8/29 para distribuirlo Jool requiere que _T_ tenga instalado Linux. El resto de los nodos puede tener cualquier otro sistema operativo, siempre y cuando manejen TCP/IP. -Sin embargo para efectos de simplicidad, los ejemplos aqui mencionados asumen que todos los nodos tienen instalado Linux y que todo esta siendo configurado estáticamente usando el bien-conocido comando `ip`. Y además, todo el tráfico será redirigido por defecto hacia _T_. +Sin embargo para efectos de simplicidad, los ejemplos aquí mencionados asumen que todos los nodos tienen instalado Linux y que todo esta siendo configurado estáticamente usando el bien-conocido comando `ip`. Y además, todo el tráfico será redirigido por defecto hacia _T_. Dependiendo de tu distribución de linux, la forma de cómo deshabilitar el administrador de red puede variar. Esto se requiere, para que tomes control sobre las direcciones y rutas de tus interfaces; de otra forma, los comandos `ip` pudieran no tener efecto. -### `Configuracion de Nodos en IPv6` +### Configuración de Nodos en IPv6 Para los nodos de _A_ a _E_, ejecuta la siguiente secuencia de comandos con permisos de administrador: @@ -60,7 +60,7 @@ user@A:~# ip route add default via 2001:db8::198.51.100.1 {% endhighlight %} -### `Configuracion de Nodos en IPv4` +### Configuración de Nodos en IPv4 Para los nodos de _V_ a _Z_, ejecuta la siguiente secuencia de comandos con permisos de administrador: @@ -72,7 +72,7 @@ user@V:~# ip addr add 192.0.2.16/24 dev eth0 user@V:~# ip route add default via 192.0.2.1 {% endhighlight %} -### `Configuracion del Nodo Traductor` +### Configuración del Nodo Traductor Para el Nodo _T_, ejecuta la siguiente secuencia de comandos con permisos de administrador: @@ -86,7 +86,7 @@ user@T:~# ip link set eth1 up user@T:~# ip addr add 192.0.2.1/24 dev eth1 {% endhighlight %} -Hasta aqui, no hemos convertido a _T_ en un traductor todavia, pues el servicio está dado de baja; por lo cual, los nodos desde _A_ hasta _E_ no pueden interactuar todavía con los nodos _V_ hasta _Z_. Pero, quizá quieras asegurarte de que _T_ puede comunicarse con todos los nodos antes de continuar. +Hasta aquí, no hemos convertido a _T_ en un traductor todavía, pues el servicio está dado de baja; por lo cual, los nodos desde _A_ hasta _E_ no pueden interactuar todavía con los nodos _V_ hasta _Z_. Pero, quizá quieras asegurarte de que _T_ puede comunicarse con todos los nodos antes de continuar. La única precaución que debes tener en mente antes de activar Jool (o lidiar con IPv6 en general) son los "offloads". "Offloading" es una característica de los nodos terminales, y para los que no lo son esto es un problema, por lo cual es importante apagarlos en todos los ruteadores. [Lee este documento](offloading.html) si quieres conocer más detalles sobre esta problemática. @@ -138,7 +138,7 @@ Eso significa que: "La representación IPv6 de cualquier dirección IPv4 va a se ## Pruebas -### `Conectividad de IPv4 a IPv6` +### Conectividad de IPv4 a IPv6 Haz un ping a _A_ desde _V_ de esta forma: @@ -155,7 +155,7 @@ PING 198.51.100.8 (198.51.100.8) 56(84) bytes of data. rtt min/avg/max/mdev = 1.649/3.914/7.450/2.249 ms {% endhighlight %} -### `Conectividad de IPv6 a IPv4` +### Conectividad de IPv6 a IPv4 Haz un ping a _V_ desde _A_: @@ -172,13 +172,13 @@ PING 2001:db8::192.0.2.16(2001:db8::c000:210) 56 data bytes rtt min/avg/max/mdev = 1.384/4.529/10.522/3.546 ms {% endhighlight %} -### `Conectividad a un Web Server en IPv4` +### Conectividad a un Web Server en IPv4 Agrega un servidor en _X_ y accesalo desde _D_: ![Figura 1 - IPv4 TCP desde un nodo IPv6](../images/run-vanilla-firefox-4to6.png) -### `Conectividad a un Web Server en IPv6` +### Conectividad a un Web Server en IPv6 Agrega un servidor en _C_ y haz una solicitud desde _W_: @@ -188,7 +188,7 @@ Si algo no funciona, consulta el [FAQ](faq.html). ## Deteniendo Jool -Para detener Jool, revierte el modprobe usando solamente el parámetro `-r`: +Para detener Jool, emplea de nuevo el comando modprobe usando el parámetro `-r`: {% highlight bash %} user@T:~# modprobe -r jool_siit diff --git a/doc/usr/es/rfc6791.md b/doc/usr/es/rfc6791.md index 2627e3395..72fad15a8 100644 --- a/doc/usr/es/rfc6791.md +++ b/doc/usr/es/rfc6791.md @@ -12,19 +12,19 @@ title: RFC 6791 ## Ãndice -1. [Introduccion](#introduccion) -2. [Definicion del Problema](#definicion-del-problema) +1. [Introducción](#introduccin) +2. [Definición del Problema](#definicin-del-problema) 3. [Ejemplo](#ejemplo) 4. [Notas Adicionales](#notas-adicionales) -## Introduccion +## Introducción Este estandar fue propuesto en Nov 2011 y aprobado como tal un año después. Presentado por [Xing Li](http://www.researchgate.net/profile/Xing_Li7) y [Congxiao Bao](http://www.arkko.com/tools/allstats/congxiaobao.html) del Centro CERNET de la Universidad de Tsinghua y [Dan Wing](https://www.linkedin.com/profile/view?id=2606930&authType=name&authToken=oIy6) de [Cisco](https://www.ciscolive.com/online/connect/speakerDetail.ww?PERSON_ID=69812EB76A23BD5B510E823E51292E72&tclass=popup). En este se establece la forma de cómo proveer de direcciones válidas en IPv4 a los HOPs de IPv6 en el caso de que alguno de ellos requiera reportar algún error de ICMP. -## Definicion del Problema +## Definición del Problema Un traductor Stateless IPv4/IPv6 podría recibir paquetes de IPv6 que contengan direcciones **no-traducibles** a IPv4 como dirección fuente, provenientes de los enlaces entre redes. diff --git a/doc/usr/es/usr-install.md b/doc/usr/es/usr-install.md index 09a98da33..1e9845fb3 100644 --- a/doc/usr/es/usr-install.md +++ b/doc/usr/es/usr-install.md @@ -5,25 +5,25 @@ category: Documentation title: Instalación de la Herramienta de Configuración de Jool --- -[Documentación](documentation.html) > [Instalación](documentation.html#instalacion) > Herramienta de Configuración de Jool +[Documentación](documentation.html) > [Instalación](documentation.html#instalacin) > Herramienta de Configuración de Jool # Instalación del Configurador de Jool ## Ãndice -1. [Introduccion](#introduccion) -2. [Requerimientos](#requerimientos) - 1. [`Libnl-3`](#libnl-3) - 2. [`Autoconf`](#autoconf) -3. [Genera Compila e Instala](#genera-compila-e-instala) - 1. [`De la Web Oficial`](#de-la-web-oficial) - 2. [`Del Repositorio GIT`](#del-repositorio-git) -4. [Validacion](#validacion) - 1. [Version](#version) - 2. [Ayuda](#ayuda) - 3. [Uso](#uso) +1. [Introducción](#introduccin) +2. [Requerimientos](#requerimientos)
+ a) [Libnl-3](#libnl-3)
+ b) [Autoconf](#autoconf) +3. [Genera, Compila e Instala](#genera-compila-e-instala)
+ a) [De la Web Oficial](#de-la-web-oficial)
+ b) [Del Repositorio GIT](#del-repositorio-git) +4. [Validación](#validacin)
+ a) [Versión](#versin)
+ b) [Ayuda](#ayuda)
+ c) [Uso](#uso) -## Introduccion +## Introducción Jool tiene cuatro componentes, es decir, cuatro ejecutables: @@ -36,7 +36,7 @@ Para ver detalles de los requisitos e instalación de los módulos de kernel [ac ## Requerimientos -### `Libnl-3` +### Libnl-3 > **NOTA:** Libnl, libnl-1.x, 2.x no son compatibles. Se necesita Libnl-3 ver. 3.1 o superior. @@ -56,7 +56,7 @@ Entonces, instala la libería ejecutando el siguiente comando con permisos de ad user@node:~#apt-get install libnl-3-dev {% endhighlight %} -### `Autoconf` +### Autoconf > **NOTA:** Se necesita autoconf ver. 2.68 o superior. @@ -70,7 +70,7 @@ user@node:~#apt-get install autoconf Asumiendo que previamente ya se instaló el Servidor Jool, solo pasate a la carpeta USR, genera los archivos MAKEFILES, conforme GNU, compila todo e instala. -### `De la Web Oficial` +### De la Web Oficial {% highlight bash %} user@node:~/Desktop/Jool-$ cd usr @@ -80,7 +80,7 @@ user@node:~/Desktop/Jool-$ #Con acceso de administrador instala user@node:~/Jool/usr# make install {% endhighlight %} -### `Del Repositorio GIT` +### Del Repositorio GIT {% highlight bash %} user@node:~/Desktop/NAT64-$ cd usr @@ -91,11 +91,11 @@ user@node:~/Desktop/NAT64-/usr$ #Con acceso de administrador instala user@node:~/Desktop/NAT64-/usr# make install {% endhighlight %} -## Validacion +## Validación Ahora, podemos ejecutar varias acciones como: validar que versión de Jool compilamos y consultar la ayuda en línea. -### `Version` +### Versión Para desplegar la versión de Jool ejecuta: @@ -105,7 +105,7 @@ user@node:~/Jool/usr/stateful$ ./jool --v {% endhighlight %} -### `Ayuda` +### Ayuda Para desplegar la ayuda en linea sobre los parámetros configurables y desplegables de Jool puedes usar las opciones `-?` o `--help`, de la siguiente manera: @@ -117,7 +117,7 @@ user@node:~/Jool/usr/stateful$ ./jool -? user@node:~/Jool/usr/stateless$ ./jool_siit --help {% endhighlight %} -### `Uso` +### Uso Para desplegar en forma resumida cuáles son las combinaciones válidas de los parámetros configurables y desplegables de Jool es con: From b2ed011e9da754281767cce2b45a31567884d9f3 Mon Sep 17 00:00:00 2001 From: patybarron Date: Mon, 7 Sep 2015 16:49:34 -0500 Subject: [PATCH 12/15] Cambios al 7 de Sept -p1 --- doc/usr/_site/about.html | 11 + doc/usr/_site/contact.html | 11 + doc/usr/_site/css/print.css | 10 + doc/usr/_site/css/style.css | 401 ++++++++ doc/usr/_site/doc-index.html | 11 + doc/usr/_site/download.html | 11 + doc/usr/_site/en/about.html | 88 ++ doc/usr/_site/en/bib.html | 124 +++ doc/usr/_site/en/contact.html | 97 ++ doc/usr/_site/en/dns64.html | 212 ++++ doc/usr/_site/en/documentation.html | 145 +++ doc/usr/_site/en/download.html | 246 +++++ doc/usr/_site/en/eamt.html | 147 +++ doc/usr/_site/en/faq.html | 206 ++++ doc/usr/_site/en/index.html | 295 ++++++ doc/usr/_site/en/intro-jool.html | 228 +++++ doc/usr/_site/en/intro-nat64.html | 197 ++++ doc/usr/_site/en/logging.html | 127 +++ doc/usr/_site/en/mod-install.html | 192 ++++ doc/usr/_site/en/mod-run-464xlat.html | 296 ++++++ doc/usr/_site/en/mod-run-alternate.html | 124 +++ doc/usr/_site/en/mod-run-eam.html | 210 ++++ doc/usr/_site/en/mod-run-stateful.html | 215 +++++ doc/usr/_site/en/mod-run-vanilla.html | 250 +++++ doc/usr/_site/en/mtu.html | 133 +++ doc/usr/_site/en/offloading.html | 169 ++++ doc/usr/_site/en/pool4.html | 123 +++ doc/usr/_site/en/rfc6791.html | 147 +++ doc/usr/_site/en/static-bindings.html | 157 +++ doc/usr/_site/en/usr-flags-atomic.html | 269 ++++++ doc/usr/_site/en/usr-flags-bib.html | 223 +++++ doc/usr/_site/en/usr-flags-blacklist.html | 161 ++++ doc/usr/_site/en/usr-flags-eamt.html | 214 ++++ doc/usr/_site/en/usr-flags-global.html | 613 ++++++++++++ doc/usr/_site/en/usr-flags-help.html | 113 +++ doc/usr/_site/en/usr-flags-plateaus.html | 181 ++++ doc/usr/_site/en/usr-flags-pool4.html | 251 +++++ doc/usr/_site/en/usr-flags-pool6.html | 156 +++ doc/usr/_site/en/usr-flags-pool6791.html | 157 +++ doc/usr/_site/en/usr-flags-quick.html | 102 ++ doc/usr/_site/en/usr-flags-session.html | 207 ++++ doc/usr/_site/en/usr-flags.html | 126 +++ doc/usr/_site/en/usr-install.html | 130 +++ doc/usr/_site/es/about.html | 92 ++ doc/usr/_site/es/bib.html | 176 ++++ doc/usr/_site/es/contact.html | 118 +++ doc/usr/_site/es/dns64.html | 213 ++++ doc/usr/_site/es/documentation.html | 128 +++ doc/usr/_site/es/download.html | 250 +++++ doc/usr/_site/es/eamt.html | 198 ++++ doc/usr/_site/es/faq.html | 234 +++++ doc/usr/_site/es/index.html | 315 ++++++ doc/usr/_site/es/intro-jool.html | 234 +++++ doc/usr/_site/es/intro-nat64.html | 241 +++++ doc/usr/_site/es/logging.html | 83 ++ doc/usr/_site/es/mod-install.html | 237 +++++ doc/usr/_site/es/mod-run-464xlat.html | 306 ++++++ doc/usr/_site/es/mod-run-alternate.html | 123 +++ doc/usr/_site/es/mod-run-eam.html | 249 +++++ doc/usr/_site/es/mod-run-stateful.html | 252 +++++ doc/usr/_site/es/mod-run-vanilla.html | 279 ++++++ doc/usr/_site/es/mtu.html | 139 +++ doc/usr/_site/es/offloading.html | 172 ++++ doc/usr/_site/es/pool4.html | 181 ++++ doc/usr/_site/es/rfc6791.html | 181 ++++ doc/usr/_site/es/static-bindings.html | 157 +++ doc/usr/_site/es/usr-flags-atomic.html | 294 ++++++ doc/usr/_site/es/usr-flags-bib.html | 224 +++++ doc/usr/_site/es/usr-flags-blacklist.html | 160 +++ doc/usr/_site/es/usr-flags-eamt.html | 183 ++++ doc/usr/_site/es/usr-flags-global.html | 666 +++++++++++++ doc/usr/_site/es/usr-flags-help.html | 112 +++ doc/usr/_site/es/usr-flags-plateaus.html | 178 ++++ doc/usr/_site/es/usr-flags-pool4.html | 163 ++++ doc/usr/_site/es/usr-flags-pool6.html | 156 +++ doc/usr/_site/es/usr-flags-pool6791.html | 156 +++ doc/usr/_site/es/usr-flags-quick.html | 107 ++ doc/usr/_site/es/usr-flags-session.html | 207 ++++ doc/usr/_site/es/usr-flags.html | 126 +++ doc/usr/_site/es/usr-install.html | 192 ++++ doc/usr/_site/images/atomic-double-frag.png | Bin 0 -> 84136 bytes doc/usr/_site/images/banner1.gif | Bin 0 -> 166 bytes doc/usr/_site/images/banner2.gif | Bin 0 -> 158 bytes doc/usr/_site/images/banner_100px.gif | Bin 0 -> 314 bytes doc/usr/_site/images/banner_50px.gif | Bin 0 -> 314 bytes doc/usr/_site/images/bell.png | Bin 0 -> 1150 bytes doc/usr/_site/images/body.png | Bin 0 -> 3529 bytes doc/usr/_site/images/bulb.png | Bin 0 -> 857 bytes doc/usr/_site/images/email.png | Bin 0 -> 1023 bytes doc/usr/_site/images/flow/464-literal-en.svg | 440 +++++++++ doc/usr/_site/images/flow/464-literal-es.svg | 440 +++++++++ doc/usr/_site/images/flow/464-mirror-en.svg | 511 ++++++++++ doc/usr/_site/images/flow/464-mirror-es.svg | 522 ++++++++++ doc/usr/_site/images/flow/464-normal-en.svg | 605 ++++++++++++ doc/usr/_site/images/flow/464-normal-es.svg | 605 ++++++++++++ doc/usr/_site/images/flow/464-sful-en.svg | 440 +++++++++ doc/usr/_site/images/flow/464-sful-es.svg | 440 +++++++++ doc/usr/_site/images/flow/464-sless-en.svg | 440 +++++++++ doc/usr/_site/images/flow/464-sless-es.svg | 440 +++++++++ doc/usr/_site/images/flow/eam-en.svg | 415 ++++++++ doc/usr/_site/images/flow/eam-es.svg | 426 ++++++++ .../_site/images/flow/mtu-frag-fail-en.svg | 568 +++++++++++ .../_site/images/flow/mtu-frag-fail-es.svg | 568 +++++++++++ .../_site/images/flow/mtu-frag-success-en.svg | 484 ++++++++++ .../_site/images/flow/mtu-frag-success-es.svg | 484 ++++++++++ doc/usr/_site/images/flow/nat-en.svg | 435 +++++++++ doc/usr/_site/images/flow/nat-es.svg | 436 +++++++++ .../_site/images/flow/pool4-simple1-en.svg | 353 +++++++ .../_site/images/flow/pool4-simple2-en.svg | 355 +++++++ .../_site/images/flow/pool4-simple3-en.svg | 355 +++++++ doc/usr/_site/images/flow/stateful-en.svg | 434 +++++++++ doc/usr/_site/images/flow/stateful-es.svg | 463 +++++++++ doc/usr/_site/images/flow/vanilla-en.svg | 433 +++++++++ doc/usr/_site/images/flow/vanilla-es.svg | 433 +++++++++ .../_site/images/heavy_exclamation_mark.png | Bin 0 -> 502 bytes doc/usr/_site/images/jool.png | Bin 0 -> 30663 bytes doc/usr/_site/images/logo-nic.png | Bin 0 -> 5331 bytes doc/usr/_site/images/logo-tec.png | Bin 0 -> 7715 bytes doc/usr/_site/images/mailbox.png | Bin 0 -> 1045 bytes doc/usr/_site/images/mailbox_with_mail.png | Bin 0 -> 1154 bytes doc/usr/_site/images/network/464-needed.svg | 340 +++++++ doc/usr/_site/images/network/464-network.svg | 391 ++++++++ doc/usr/_site/images/network/alternate.svg | 406 ++++++++ doc/usr/_site/images/network/eam.svg | 587 +++++++++++ doc/usr/_site/images/network/full-en.svg | 377 ++++++++ doc/usr/_site/images/network/full-es.svg | 377 ++++++++ doc/usr/_site/images/network/mtu-frag.svg | 346 +++++++ doc/usr/_site/images/network/nat-en.svg | 600 ++++++++++++ doc/usr/_site/images/network/nat-es.svg | 600 ++++++++++++ doc/usr/_site/images/network/rfc6791.svg | 298 ++++++ .../_site/images/network/src-icmp6-better.svg | 362 +++++++ doc/usr/_site/images/network/stateful.svg | 587 +++++++++++ doc/usr/_site/images/network/vanilla.svg | 591 ++++++++++++ doc/usr/_site/images/offload-none.svg | 912 ++++++++++++++++++ doc/usr/_site/images/offload-right.svg | 552 +++++++++++ doc/usr/_site/images/offload-router.svg | 592 ++++++++++++ doc/usr/_site/images/pencil.png | Bin 0 -> 1192 bytes doc/usr/_site/images/planet.png | Bin 0 -> 1917 bytes doc/usr/_site/images/plateaus-attempt1.svg | 441 +++++++++ doc/usr/_site/images/plateaus-attempt2.svg | 473 +++++++++ doc/usr/_site/images/plateaus-attempt3.svg | 467 +++++++++ doc/usr/_site/images/plateaus-network.svg | 329 +++++++ doc/usr/_site/images/run-eam-firefox-4to6.png | Bin 0 -> 26094 bytes doc/usr/_site/images/run-eam-firefox-6to4.png | Bin 0 -> 26157 bytes .../images/run-stateful-firefox-4to6.png | Bin 0 -> 26248 bytes .../_site/images/run-vanilla-firefox-4to6.png | Bin 0 -> 26115 bytes .../_site/images/run-vanilla-firefox-6to4.png | Bin 0 -> 26136 bytes doc/usr/_site/images/small_orange_diamond.png | Bin 0 -> 500 bytes .../_site/images/small_red_triangle_down.png | Bin 0 -> 495 bytes doc/usr/_site/images/smiley.png | Bin 0 -> 1276 bytes doc/usr/_site/images/sparkles.png | Bin 0 -> 800 bytes doc/usr/_site/images/static-hiya.png | Bin 0 -> 24912 bytes doc/usr/_site/images/static-network.svg | 895 +++++++++++++++++ doc/usr/_site/images/thumbsup.png | Bin 0 -> 1009 bytes doc/usr/_site/images/tut2.3-network.svg | 881 +++++++++++++++++ doc/usr/_site/images/tut4-arrows.svg | 623 ++++++++++++ doc/usr/_site/images/tut4-setup.svg | 563 +++++++++++ doc/usr/_site/images/usr-dropaddr-1.svg | 864 +++++++++++++++++ doc/usr/_site/images/usr-dropaddr-2.svg | 836 ++++++++++++++++ doc/usr/_site/images/usr-dropaddr-3.svg | 832 ++++++++++++++++ doc/usr/_site/images/usr-session.svg | 769 +++++++++++++++ doc/usr/_site/images/warning.png | Bin 0 -> 909 bytes doc/usr/_site/images/x.png | Bin 0 -> 897 bytes doc/usr/_site/index.html | 11 + doc/usr/_site/intro-jool.html | 11 + doc/usr/_site/intro-nat64.html | 11 + doc/usr/_site/misc-bib.html | 11 + doc/usr/_site/misc-eamt.html | 11 + doc/usr/_site/misc-faq.html | 11 + doc/usr/_site/misc-mtu.html | 11 + doc/usr/_site/misc-offloading.html | 11 + doc/usr/_site/misc-rfc6791.html | 11 + doc/usr/_site/mod-install.html | 11 + doc/usr/_site/mod-run-464xlat.html | 11 + doc/usr/_site/mod-run-alternate.html | 11 + doc/usr/_site/mod-run-eam.html | 11 + doc/usr/_site/mod-run-stateful.html | 11 + doc/usr/_site/mod-run-vanilla.html | 11 + doc/usr/_site/obj/464xlat/ipv4-n4.pcapng | Bin 0 -> 548 bytes doc/usr/_site/obj/464xlat/ipv4-n6.pcapng | Bin 0 -> 552 bytes doc/usr/_site/obj/464xlat/ipv4-plat.pcapng | Bin 0 -> 528 bytes doc/usr/_site/obj/464xlat/ipv4-r.pcapng | Bin 0 -> 528 bytes doc/usr/_site/obj/464xlat/ipv6-n4.pcapng | Bin 0 -> 548 bytes doc/usr/_site/obj/464xlat/ipv6-n6.pcapng | Bin 0 -> 592 bytes doc/usr/_site/obj/464xlat/ipv6-plat.pcapng | Bin 0 -> 528 bytes doc/usr/_site/obj/464xlat/ipv6-r.pcapng | Bin 0 -> 568 bytes doc/usr/_site/obj/atomic-double-frag.pcapng | Bin 0 -> 4880 bytes doc/usr/_site/obj/bib.csv | 5 + doc/usr/_site/obj/eamt.csv | 6 + doc/usr/_site/obj/session.csv | 4 + doc/usr/_site/obj/tut2.1-wireshark.wsk | Bin 0 -> 1814 bytes doc/usr/_site/op-dns64.html | 11 + doc/usr/_site/op-pool4.html | 11 + doc/usr/_site/op-static-bindings.html | 11 + doc/usr/_site/usr-flags-atomic.html | 11 + doc/usr/_site/usr-flags-bib.html | 11 + doc/usr/_site/usr-flags-blacklist.html | 11 + doc/usr/_site/usr-flags-eamt.html | 11 + doc/usr/_site/usr-flags-global.html | 11 + doc/usr/_site/usr-flags-help.html | 11 + doc/usr/_site/usr-flags-plateaus.html | 11 + doc/usr/_site/usr-flags-pool4.html | 11 + doc/usr/_site/usr-flags-pool6.html | 11 + doc/usr/_site/usr-flags-pool6791.html | 11 + doc/usr/_site/usr-flags-quick.html | 11 + doc/usr/_site/usr-flags-session.html | 11 + doc/usr/_site/usr-flags.html | 11 + doc/usr/_site/usr-install.html | 11 + doc/usr/es/bib.md | 59 +- doc/usr/es/mod-run-eam.md | 2 +- doc/usr/images/flow/stateful-es.svg | 65 +- 211 files changed, 42836 insertions(+), 41 deletions(-) create mode 100644 doc/usr/_site/about.html create mode 100644 doc/usr/_site/contact.html create mode 100644 doc/usr/_site/css/print.css create mode 100644 doc/usr/_site/css/style.css create mode 100644 doc/usr/_site/doc-index.html create mode 100644 doc/usr/_site/download.html create mode 100644 doc/usr/_site/en/about.html create mode 100644 doc/usr/_site/en/bib.html create mode 100644 doc/usr/_site/en/contact.html create mode 100644 doc/usr/_site/en/dns64.html create mode 100644 doc/usr/_site/en/documentation.html create mode 100644 doc/usr/_site/en/download.html create mode 100644 doc/usr/_site/en/eamt.html create mode 100644 doc/usr/_site/en/faq.html create mode 100644 doc/usr/_site/en/index.html create mode 100644 doc/usr/_site/en/intro-jool.html create mode 100644 doc/usr/_site/en/intro-nat64.html create mode 100644 doc/usr/_site/en/logging.html create mode 100644 doc/usr/_site/en/mod-install.html create mode 100644 doc/usr/_site/en/mod-run-464xlat.html create mode 100644 doc/usr/_site/en/mod-run-alternate.html create mode 100644 doc/usr/_site/en/mod-run-eam.html create mode 100644 doc/usr/_site/en/mod-run-stateful.html create mode 100644 doc/usr/_site/en/mod-run-vanilla.html create mode 100644 doc/usr/_site/en/mtu.html create mode 100644 doc/usr/_site/en/offloading.html create mode 100644 doc/usr/_site/en/pool4.html create mode 100644 doc/usr/_site/en/rfc6791.html create mode 100644 doc/usr/_site/en/static-bindings.html create mode 100644 doc/usr/_site/en/usr-flags-atomic.html create mode 100644 doc/usr/_site/en/usr-flags-bib.html create mode 100644 doc/usr/_site/en/usr-flags-blacklist.html create mode 100644 doc/usr/_site/en/usr-flags-eamt.html create mode 100644 doc/usr/_site/en/usr-flags-global.html create mode 100644 doc/usr/_site/en/usr-flags-help.html create mode 100644 doc/usr/_site/en/usr-flags-plateaus.html create mode 100644 doc/usr/_site/en/usr-flags-pool4.html create mode 100644 doc/usr/_site/en/usr-flags-pool6.html create mode 100644 doc/usr/_site/en/usr-flags-pool6791.html create mode 100644 doc/usr/_site/en/usr-flags-quick.html create mode 100644 doc/usr/_site/en/usr-flags-session.html create mode 100644 doc/usr/_site/en/usr-flags.html create mode 100644 doc/usr/_site/en/usr-install.html create mode 100644 doc/usr/_site/es/about.html create mode 100644 doc/usr/_site/es/bib.html create mode 100644 doc/usr/_site/es/contact.html create mode 100644 doc/usr/_site/es/dns64.html create mode 100644 doc/usr/_site/es/documentation.html create mode 100644 doc/usr/_site/es/download.html create mode 100644 doc/usr/_site/es/eamt.html create mode 100644 doc/usr/_site/es/faq.html create mode 100644 doc/usr/_site/es/index.html create mode 100644 doc/usr/_site/es/intro-jool.html create mode 100644 doc/usr/_site/es/intro-nat64.html create mode 100644 doc/usr/_site/es/logging.html create mode 100644 doc/usr/_site/es/mod-install.html create mode 100644 doc/usr/_site/es/mod-run-464xlat.html create mode 100644 doc/usr/_site/es/mod-run-alternate.html create mode 100644 doc/usr/_site/es/mod-run-eam.html create mode 100644 doc/usr/_site/es/mod-run-stateful.html create mode 100644 doc/usr/_site/es/mod-run-vanilla.html create mode 100644 doc/usr/_site/es/mtu.html create mode 100644 doc/usr/_site/es/offloading.html create mode 100644 doc/usr/_site/es/pool4.html create mode 100644 doc/usr/_site/es/rfc6791.html create mode 100644 doc/usr/_site/es/static-bindings.html create mode 100644 doc/usr/_site/es/usr-flags-atomic.html create mode 100644 doc/usr/_site/es/usr-flags-bib.html create mode 100644 doc/usr/_site/es/usr-flags-blacklist.html create mode 100644 doc/usr/_site/es/usr-flags-eamt.html create mode 100644 doc/usr/_site/es/usr-flags-global.html create mode 100644 doc/usr/_site/es/usr-flags-help.html create mode 100644 doc/usr/_site/es/usr-flags-plateaus.html create mode 100644 doc/usr/_site/es/usr-flags-pool4.html create mode 100644 doc/usr/_site/es/usr-flags-pool6.html create mode 100644 doc/usr/_site/es/usr-flags-pool6791.html create mode 100644 doc/usr/_site/es/usr-flags-quick.html create mode 100644 doc/usr/_site/es/usr-flags-session.html create mode 100644 doc/usr/_site/es/usr-flags.html create mode 100644 doc/usr/_site/es/usr-install.html create mode 100644 doc/usr/_site/images/atomic-double-frag.png create mode 100644 doc/usr/_site/images/banner1.gif create mode 100644 doc/usr/_site/images/banner2.gif create mode 100644 doc/usr/_site/images/banner_100px.gif create mode 100644 doc/usr/_site/images/banner_50px.gif create mode 100644 doc/usr/_site/images/bell.png create mode 100644 doc/usr/_site/images/body.png create mode 100644 doc/usr/_site/images/bulb.png create mode 100644 doc/usr/_site/images/email.png create mode 100644 doc/usr/_site/images/flow/464-literal-en.svg create mode 100644 doc/usr/_site/images/flow/464-literal-es.svg create mode 100644 doc/usr/_site/images/flow/464-mirror-en.svg create mode 100644 doc/usr/_site/images/flow/464-mirror-es.svg create mode 100644 doc/usr/_site/images/flow/464-normal-en.svg create mode 100644 doc/usr/_site/images/flow/464-normal-es.svg create mode 100644 doc/usr/_site/images/flow/464-sful-en.svg create mode 100644 doc/usr/_site/images/flow/464-sful-es.svg create mode 100644 doc/usr/_site/images/flow/464-sless-en.svg create mode 100644 doc/usr/_site/images/flow/464-sless-es.svg create mode 100644 doc/usr/_site/images/flow/eam-en.svg create mode 100644 doc/usr/_site/images/flow/eam-es.svg create mode 100644 doc/usr/_site/images/flow/mtu-frag-fail-en.svg create mode 100644 doc/usr/_site/images/flow/mtu-frag-fail-es.svg create mode 100644 doc/usr/_site/images/flow/mtu-frag-success-en.svg create mode 100644 doc/usr/_site/images/flow/mtu-frag-success-es.svg create mode 100644 doc/usr/_site/images/flow/nat-en.svg create mode 100644 doc/usr/_site/images/flow/nat-es.svg create mode 100644 doc/usr/_site/images/flow/pool4-simple1-en.svg create mode 100644 doc/usr/_site/images/flow/pool4-simple2-en.svg create mode 100644 doc/usr/_site/images/flow/pool4-simple3-en.svg create mode 100644 doc/usr/_site/images/flow/stateful-en.svg create mode 100644 doc/usr/_site/images/flow/stateful-es.svg create mode 100644 doc/usr/_site/images/flow/vanilla-en.svg create mode 100644 doc/usr/_site/images/flow/vanilla-es.svg create mode 100644 doc/usr/_site/images/heavy_exclamation_mark.png create mode 100644 doc/usr/_site/images/jool.png create mode 100644 doc/usr/_site/images/logo-nic.png create mode 100644 doc/usr/_site/images/logo-tec.png create mode 100644 doc/usr/_site/images/mailbox.png create mode 100644 doc/usr/_site/images/mailbox_with_mail.png create mode 100644 doc/usr/_site/images/network/464-needed.svg create mode 100644 doc/usr/_site/images/network/464-network.svg create mode 100644 doc/usr/_site/images/network/alternate.svg create mode 100644 doc/usr/_site/images/network/eam.svg create mode 100644 doc/usr/_site/images/network/full-en.svg create mode 100644 doc/usr/_site/images/network/full-es.svg create mode 100644 doc/usr/_site/images/network/mtu-frag.svg create mode 100644 doc/usr/_site/images/network/nat-en.svg create mode 100644 doc/usr/_site/images/network/nat-es.svg create mode 100644 doc/usr/_site/images/network/rfc6791.svg create mode 100644 doc/usr/_site/images/network/src-icmp6-better.svg create mode 100644 doc/usr/_site/images/network/stateful.svg create mode 100644 doc/usr/_site/images/network/vanilla.svg create mode 100644 doc/usr/_site/images/offload-none.svg create mode 100644 doc/usr/_site/images/offload-right.svg create mode 100644 doc/usr/_site/images/offload-router.svg create mode 100644 doc/usr/_site/images/pencil.png create mode 100644 doc/usr/_site/images/planet.png create mode 100644 doc/usr/_site/images/plateaus-attempt1.svg create mode 100644 doc/usr/_site/images/plateaus-attempt2.svg create mode 100644 doc/usr/_site/images/plateaus-attempt3.svg create mode 100644 doc/usr/_site/images/plateaus-network.svg create mode 100644 doc/usr/_site/images/run-eam-firefox-4to6.png create mode 100644 doc/usr/_site/images/run-eam-firefox-6to4.png create mode 100644 doc/usr/_site/images/run-stateful-firefox-4to6.png create mode 100644 doc/usr/_site/images/run-vanilla-firefox-4to6.png create mode 100644 doc/usr/_site/images/run-vanilla-firefox-6to4.png create mode 100644 doc/usr/_site/images/small_orange_diamond.png create mode 100644 doc/usr/_site/images/small_red_triangle_down.png create mode 100644 doc/usr/_site/images/smiley.png create mode 100644 doc/usr/_site/images/sparkles.png create mode 100644 doc/usr/_site/images/static-hiya.png create mode 100644 doc/usr/_site/images/static-network.svg create mode 100644 doc/usr/_site/images/thumbsup.png create mode 100644 doc/usr/_site/images/tut2.3-network.svg create mode 100644 doc/usr/_site/images/tut4-arrows.svg create mode 100644 doc/usr/_site/images/tut4-setup.svg create mode 100644 doc/usr/_site/images/usr-dropaddr-1.svg create mode 100644 doc/usr/_site/images/usr-dropaddr-2.svg create mode 100644 doc/usr/_site/images/usr-dropaddr-3.svg create mode 100644 doc/usr/_site/images/usr-session.svg create mode 100644 doc/usr/_site/images/warning.png create mode 100644 doc/usr/_site/images/x.png create mode 100644 doc/usr/_site/index.html create mode 100644 doc/usr/_site/intro-jool.html create mode 100644 doc/usr/_site/intro-nat64.html create mode 100644 doc/usr/_site/misc-bib.html create mode 100644 doc/usr/_site/misc-eamt.html create mode 100644 doc/usr/_site/misc-faq.html create mode 100644 doc/usr/_site/misc-mtu.html create mode 100644 doc/usr/_site/misc-offloading.html create mode 100644 doc/usr/_site/misc-rfc6791.html create mode 100644 doc/usr/_site/mod-install.html create mode 100644 doc/usr/_site/mod-run-464xlat.html create mode 100644 doc/usr/_site/mod-run-alternate.html create mode 100644 doc/usr/_site/mod-run-eam.html create mode 100644 doc/usr/_site/mod-run-stateful.html create mode 100644 doc/usr/_site/mod-run-vanilla.html create mode 100644 doc/usr/_site/obj/464xlat/ipv4-n4.pcapng create mode 100644 doc/usr/_site/obj/464xlat/ipv4-n6.pcapng create mode 100644 doc/usr/_site/obj/464xlat/ipv4-plat.pcapng create mode 100644 doc/usr/_site/obj/464xlat/ipv4-r.pcapng create mode 100644 doc/usr/_site/obj/464xlat/ipv6-n4.pcapng create mode 100644 doc/usr/_site/obj/464xlat/ipv6-n6.pcapng create mode 100644 doc/usr/_site/obj/464xlat/ipv6-plat.pcapng create mode 100644 doc/usr/_site/obj/464xlat/ipv6-r.pcapng create mode 100644 doc/usr/_site/obj/atomic-double-frag.pcapng create mode 100644 doc/usr/_site/obj/bib.csv create mode 100644 doc/usr/_site/obj/eamt.csv create mode 100644 doc/usr/_site/obj/session.csv create mode 100644 doc/usr/_site/obj/tut2.1-wireshark.wsk create mode 100644 doc/usr/_site/op-dns64.html create mode 100644 doc/usr/_site/op-pool4.html create mode 100644 doc/usr/_site/op-static-bindings.html create mode 100644 doc/usr/_site/usr-flags-atomic.html create mode 100644 doc/usr/_site/usr-flags-bib.html create mode 100644 doc/usr/_site/usr-flags-blacklist.html create mode 100644 doc/usr/_site/usr-flags-eamt.html create mode 100644 doc/usr/_site/usr-flags-global.html create mode 100644 doc/usr/_site/usr-flags-help.html create mode 100644 doc/usr/_site/usr-flags-plateaus.html create mode 100644 doc/usr/_site/usr-flags-pool4.html create mode 100644 doc/usr/_site/usr-flags-pool6.html create mode 100644 doc/usr/_site/usr-flags-pool6791.html create mode 100644 doc/usr/_site/usr-flags-quick.html create mode 100644 doc/usr/_site/usr-flags-session.html create mode 100644 doc/usr/_site/usr-flags.html create mode 100644 doc/usr/_site/usr-install.html diff --git a/doc/usr/_site/about.html b/doc/usr/_site/about.html new file mode 100644 index 000000000..5352d51b2 --- /dev/null +++ b/doc/usr/_site/about.html @@ -0,0 +1,11 @@ + + + + + + Redirect + + + Redirecting to en/about.html... + + diff --git a/doc/usr/_site/contact.html b/doc/usr/_site/contact.html new file mode 100644 index 000000000..fe4ce167e --- /dev/null +++ b/doc/usr/_site/contact.html @@ -0,0 +1,11 @@ + + + + + + Redirect + + + Redirecting to en/contact.html... + + diff --git a/doc/usr/_site/css/print.css b/doc/usr/_site/css/print.css new file mode 100644 index 000000000..6853ec27d --- /dev/null +++ b/doc/usr/_site/css/print.css @@ -0,0 +1,10 @@ +/* Remove unwanted elements */ +#header, #footer, #sidebar_navigation, #language_selector { + display: none; +} + +.worklogo img { + margin: 0 auto; + display:block; + width: 30%; +} diff --git a/doc/usr/_site/css/style.css b/doc/usr/_site/css/style.css new file mode 100644 index 000000000..c0ed95612 --- /dev/null +++ b/doc/usr/_site/css/style.css @@ -0,0 +1,401 @@ +/* +Design by Free CSS Templates +http://www.freecsstemplates.org +Released for free under a Creative Commons Attribution 2.5 License +*/ + +* { + margin: 0px; + padding: 0px; +} + +body { + background: url(../images/body.png) repeat-x left top; + font-family: Arial, "Helvetica", sans-serif; + text-align: justify; + font-size: 15px; + color: #595959; +} + +h1, h2 { + font-family: Monaco, "Lucida Console", monospace; + /* font-weight: normal; */ +} + +h1, h2, h3 { + margin-top: 2em; + margin-bottom: 0.5em; +} + + +h1 a, h2 a, h3 a { + text-decoration: none; +} + +h1 a:hover, h2 a:hover, h3 a:hover { + text-decoration: underline; +} + +h1 { + margin-top: 1em; + letter-spacing: -2px; + font-size: 30px; + color: #00619f; +} + +h2 { + letter-spacing: -1px; + font-size: 20px; + color: #2e5c76; +} + +h3 { + /* font-size: 1em; */ +} + +p { + margin-bottom: 1em; + margin-top: 1em; + line-height: 150%; +} + +ul, ol { + line-height: 150%; + margin-left: 3em; +} + +blockquote { + padding: 1em; + border-radius: 3px; + border: 1px solid #ddd; + color: #707070; + font-size: 90%; + margin-left: 3em; + margin-right: 3em; + margin-bottom: 10px; +} + +blockquote strong { + color: #800; +} + +#page a { + text-decoration: none; + color: #00619f; +} + +#page a:hover { + text-decoration: underline; + color: #549DC7; +} + +/* Logo */ + +#logo { + width: 960px; + height: 80px; + margin: 0 auto; + text-align: center; +} + +#logo h1, #logo h2 { + float: left; + margin: 0; + padding-top: 5px; +} + +#logo h1 a { + padding: 0px 0 0 310px; + color: #004085; +} + + +#logo h1 a:hover { + text-decoration: none; + background: none; + +} + +#logo h2 { + padding: 18px 0 40px 7px; + letter-spacing: normal; + font-size: 1.4em; +} + +/* Page */ + +#page { + width: auto; + margin: 0 auto; + margin-top: 60px; +} + +/* Sidebars */ + +.sidebar { + float: left; + width: 200px; + margin-top: 152px; + padding-top: 20px; +} + +.sidebar ul { + margin: 0; + padding: 0; + list-style: none; +} + +.sidebar li { + padding-bottom: 30px; +} + +.sidebar li ul { + padding-bottom: 15px; +} + +.sidebar li li { + padding: 0; +} + +.sidebar h2 { + height: 40px; + margin: 1em 0px 0px 1em; + letter-spacing: normal; + font-size: 1.2em; + font-family: Monaco,"Lucida Console",monospace; + font-weight: normal; +} + +#language_selector { + float: left; + margin-top: 154px; + margin-left: 20px; + background: #F5F5F5; + border-radius: 5px 5px 0px 0px; + padding: 0px 10px 0px 10px; +} + +#language_selector .selected { + font-weight: bold; +} + +/* sidebar_navigation */ + +#sidebar_navigation { + padding-bottom: 15px; +} + +#sidebar_navigation li li { + padding: 5px; + text-align: center; + font-size: 15px; + background: url(../images/banner1.gif) repeat-x +} + + +/* Content */ + +#contentwrapper { + width: 1250px; + margin: 0 auto; +} + +#content { + float: left; + width: 842px; + background: -moz-linear-gradient(top, #ffffff 0%, #ebebeb 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ffffff), color-stop(100%,#ebebeb)); + background: -webkit-linear-gradient(top, #ffffff 0%,#ebebeb 100%); + background: -o-linear-gradient(top, #ffffff 0%,#ebebeb 100%); + background: -ms-linear-gradient(top, #ffffff 0%,#ebebeb 100%); + background: linear-gradient(to bottom, #ffffff 0%,#ebebeb 100%); + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#ebebeb',GradientType=0 ); + border: 2px solid #ebebeb; + -webkit-border-radius: 0px 10px 10px 10px; + border-radius: 10px; + margin: 0 auto; +} + +.workarea { + min-height: 800px; +} + +.content_text { + padding: 0px 25px 40px 25px; +} + +.title { + margin: 0; + padding: 20px 0px; +} + + +.content_text .title1 { + margin: 0; + padding: 5px 65px; + background: url(../images/banner1.gif) repeat-x; +} + +.content_text .entry { + padding: 10px; + border-bottom: 1px solid #CDCDCD; +} + +.post .tags, .post .links { + margin: 0; + line-height: normal; + font-size: smaller; + text-align: center; +} + +.post .tags { + padding-top: 10px; + border-top: 1px dashed #D9EBFF; +} + +.correlate1 { + background-color: #eff; +} +.correlate2 { + background-color: #def; +} + +/* Footer */ + +#footer { + min-width: 1250px; + height: 100px; + padding: 15px 0; + text-align: center; + background: #00619f; +} + + +.legal { + padding-left: 90px; + margin: 0 auto; + float: center; + font-size: 13px; + line-height: normal; + color: #ffffff; +} + + +pre code { + font-size: 13px; + display: block; + overflow: auto; + padding: 6px 10px; + border-radius: 3px; + margin-bottom: 20px; +} + +code { + font-size: 14px; + background-color: #f8f8f8; + border: 1px solid #ddd; + padding-left: 0.3em; + padding-right: 0.3em; +} + +.bash .c { + color: #058; +} + +table { + background-color: #f8f8f8; +} + +td, th { + border: 1px solid #ddd; + padding: 0.5em; + text-align: center; +} + +hr { + margin-top: 2em; + margin-bottom: 2em; +} + +.logo-tec { + position: absolute; + float: left; + display: block; + overflow: auto; + padding-left: 10px; +} + +.logo-nic { + padding-right: 10px; + float: right; + display: block; + overflow: auto; + padding-left: 10px; +} + +.left_sidebar_menu a:hover { + display:block; + width:100%; + height:100%; +} + +.right_sidebar h3 { + padding: 4px 15px 9px 0; +} + +.left_sidebar_menu h3 { + padding: 4px 15px 5px 0; +} + +.left_sidebar_menu_selected { + position: relative; + background: url(../images/banner_100px.gif) repeat-x; + border: none; + width: 200px; + height: 35px; + text-align: center; + line-height: 37px; + color: #00619f; + font-weight: bold; +} + +.left_sidebar_menu_button { + position: relative; + background: url(../images/banner_50px.gif) repeat-x; + border: none; + cursor: pointer; + width: 200px; + height: 35px; +} + +.left_sidebar_menu_button a { + text-align: center; + line-height: 37px; + color: #7a7a7a; + display:block; + width:100%; + height:100%; + text-decoration: none; +} + +.left_sidebar_menu_button a:hover { + color: #000; + text-decoration: none; +} + +.left_sidebar_menu_button:hover { + background: url(../images/banner_100px.gif) repeat-x; +} + +.worklogo { + margin: 0 auto; + display:block; + width:488px; + height:198px; +} + +.worklogo a { + display:block; + width:100%; + height:100%; +} diff --git a/doc/usr/_site/doc-index.html b/doc/usr/_site/doc-index.html new file mode 100644 index 000000000..703d2ed9e --- /dev/null +++ b/doc/usr/_site/doc-index.html @@ -0,0 +1,11 @@ + + + + + + Redirect + + + Redirecting to en/documentation.html... + + diff --git a/doc/usr/_site/download.html b/doc/usr/_site/download.html new file mode 100644 index 000000000..7d22d056c --- /dev/null +++ b/doc/usr/_site/download.html @@ -0,0 +1,11 @@ + + + + + + Redirect + + + Redirecting to en/download.html... + + diff --git a/doc/usr/_site/en/about.html b/doc/usr/_site/en/about.html new file mode 100644 index 000000000..e1f98c324 --- /dev/null +++ b/doc/usr/_site/en/about.html @@ -0,0 +1,88 @@ + + + + + About + + + + + +

+
+ +
+ +
+
+ +

About

+ +

Jool is an Open Source IPv4/IPv6 Translator, funded by NIC Mexico and co-developed with ITESM.

+ +

Both code and documentation are relased under the GPLv3 license.

+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/en/bib.html b/doc/usr/_site/en/bib.html new file mode 100644 index 000000000..ac533fb00 --- /dev/null +++ b/doc/usr/_site/en/bib.html @@ -0,0 +1,124 @@ + + + + + BIB + + + + + +
+
+ +
+ +
+
+ +

Documentation > Runs > Stateful NAT64 > BIB

+ +

BIB

+ +

The Binding Information Base (BIB) is a collection of tables in a stateful NAT64. It is defined in RFC 6146. Hopefully, this document can serve as a friendly overview.

+ +

Records in this database map the IPv6 transport addresses of a IPv6 node’s connection to the IPv4 transport address Jool is using to mask it. For example, if the following mapping exists in your NAT64:

+ + + + + + + + + + + + + + + + +
IPv6 transport addressIPv4 transport addressProtocol
6::6#664.4.4.4#44TCP
+ +

Then IPv4 nodes can find the TCP service published in 6::6 on port 66, by querying 4.4.4.4 on port 44. In other words, Jool fools IPv4 nodes into thinking that 6::6#66 is 4.4.4.4#44.

+ +
    +
  • We call “BIB entry†a record in a BIB table (ie. a descriptor of a mask).
  • +
  • We call “BIB table†a collection of records which share a protocol. There are three supported protocols (TCP, UDP and ICMP), therefore Jool has three BIB tables.
  • +
  • We call “BIB†the collection of Jool’s three BIB tables.
  • +
+ +

There are two types of BIB entries:

+ +
    +
  • Static: You create them manually, to publish a IPv6 service to the IPv4 Internet. This is analogous to port forwarding in normal NATs.
  • +
  • Dynamic: Jool creates these on the fly. This has to be done because IPv6-started connections also need IPv4 masks (otherwise they wouldn’t be able to receive answers).
  • +
+ +

See the walkthrough or the reference material for information on how to create and destroy entries manually. See --address-dependent-filtering if you think dynamic entries are dangerous.

+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/en/contact.html b/doc/usr/_site/en/contact.html new file mode 100644 index 000000000..79eaa4c28 --- /dev/null +++ b/doc/usr/_site/en/contact.html @@ -0,0 +1,97 @@ + + + + + Contact + + + + + +
+
+ +
+ +
+
+ +

Contact

+ +
    +
  • jool-list@nic.mx is a mail list intended for general public discussion and news. Questions, requests and comments welcomed.
    +A misplaced security gimmic currently prevents the archives from being public, but they are actually being built and will become available as soon as the TODO reaches one of our admins.
    +You can register to this list here.
  • +
  • jool-news@nic.mx is a mail list intended to inform news to its recipients. At this point, it is only used to signal new releases being published at this site.
    +Anyone can listen, but only the dev team can place mails here, so you don’t have to worry about spam.
    +You can register to this list here.
    +Because of its purpose, this list rarely sees more than one e-mail a month.
  • +
  • jool@nic.mx is a mail alias you can use to reach us developers only.
    +Though we’re willing to provide advice via this medium, we’d be grateful is you used jool-list@nic.mx for this purpose instead so a future archive surfer can benefit from the experience.
  • +
  • Our official bug tracker is the Github corner. This is also a good place to request features.
  • +
+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/en/dns64.html b/doc/usr/_site/en/dns64.html new file mode 100644 index 000000000..bef5152e5 --- /dev/null +++ b/doc/usr/_site/en/dns64.html @@ -0,0 +1,212 @@ + + + + + DNS64 + + + + + +
+
+ +
+ +
+
+ +

Documentation > Runs > DNS64

+ +

DNS64 Tutorial

+ +

Index

+ +
    +
  1. Introduction
  2. +
  3. Network
  4. +
  5. Configuration +
      +
    1. BIND
    2. +
    3. Everything else
    4. +
    +
  6. +
  7. Outcome
  8. +
+ +

Introduction

+ +

This document focuses on DNS64, the last key to have a fully-sensical NAT64 installation.

+ +

Any correct DNS64 implementation is supposed to work; BIND will be used for illustration here. I expect you to be already familiarized with DNS and have at least an idea of what BIND’s configuration looks like.

+ +

Network

+ +

Fig.1 - Setup

+ +

Though Jool and the DNS64 are portrayed as separate nodes, there’s nothing preventing you from joining them in a single machine (unless Jool is monopolizing all of its node’s IPv4 addresses, of course).

+ +

Configuration

+ +

BIND

+ +

First, I will clarify what we want to achieve.

+ +

example.com is a domain that is available from both the IPv4 and the IPv6 internets, and hence it has both kinds of records:

+ +
$ dig example.com A
+(...)
+;; ANSWER SECTION:
+example.com.		66029	IN	A	93.184.216.119
+(...)
+
+$ dig example.com AAAA
+(...)
+;; ANSWER SECTION:
+example.com.		86040	IN	AAAA	2606:2800:220:6d:26bf:1447:1097:aa7
+(...)
+ +

nat64-tutorial.mx is an example of a domain available only from IPv4:

+ +
$ dig nat64-tutorial.mx A
+(...)
+;; ANSWER SECTION:
+nat64-tutorial.mx.	66029	IN	A	200.94.182.36
+(...)
+
+$ dig nat64-tutorial.mx AAAA
+(...)
+;; AUTHORITY SECTION:
+nat64-tutorial.mx.	240	IN	SOA	potato.mx. hostmaster.jool.mx. 2013070801 3600 900 604800 1800
+(...)
+ +

There’s no need for an IPv6 node to access example.com via the NAT64. On the other hand, nat64-tutorial.mx cannot be accessed from IPv6 without one.

+ +

In other words, we want the DNS64 service to return 2606:2800:220:6d:26bf:1447:1097:aa7 when asked for the AAAA record of example.com (which is what it normally does), and 64:ff9b::200.94.182.36 (i.e. the NAT64 prefix plus the IPv4 address) when asked for the AAAA record of nat64-tutorial.mx (which is the whole NAT64 hack).

+ +

First, have a working BIND server. On Ubuntu, the only thing you have to do (assuming you don’t already have one) is run

+ +
user@B:~# apt-get install bind9
+ +

The most basic configuration is very minimalistic. In order to turn on DNS64, the options section from the named.conf file (in my case, /etc/bind/named.conf.options) is the only one in which statements must be updated:

+ +
options {
+	(...)
+
+	# Listening on IPv6 is off by default.
+	listen-on-v6 { any; };
+
+	# This is the key. Note that you can write multiple of these if you need
+	# more IPv6 prefixes.
+	# "64:ff9b::/96" has to be the same as Jool's `pool6`.
+	dns64 64:ff9b::/96 {
+		# Options per prefix (if you need them) here.
+		# More info here: https://kb.isc.org/article/AA-01031
+	};
+};
+ +

And remember to reload.

+ +
user@B:~# sudo service bind9 restart
+ +

That’s it!

+ +

Everything else

+ +

The outermost networks changed, and that should probably be reflected in everyone’s routing tables:

+ +
user@J:~# /sbin/ip -6 route del 2001:db8:1::/64
+user@J:~# /sbin/ip -6 route add default via 2001:db8:2::1 dev eth0
+ +

(Similar instructions should be echoed in the routers and the nodes)

+ +

Jool or J don’t need to be aware of the DNS64 because domain names are completely transparent to NAT64, so you don’t need to do anything else in J.

+ +

As for the leaf nodes, any IPv6 node which needs to access IPv4-only content should use the DNS64 as its default name server (unless you want to specify it manually in your dig commands, I guess).

+ +

Outcome

+ +

From one of those IPv6 nodes:

+ +
$ dig example.com AAAA
+(...)
+;; ANSWER SECTION:
+example.com.		86040	IN	AAAA	2606:2800:220:6d:26bf:1447:1097:aa7
+(...)
+
+$ dig nat64-tutorial.mx AAAA
+(...)
+;; AUTHORITY SECTION:
+nat64-tutorial.mx.	86040	IN	AAAA	64:ff9b::c85e:b624
+(...)
+ +

If you sniff the traffic, you should see packets towards example.com on R, and packets towards nat64-tutorial.mx via S:

+ +

Fig.2 - Arrows

+ +

Happy ending!

+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/en/documentation.html b/doc/usr/_site/en/documentation.html new file mode 100644 index 000000000..a02f65f9a --- /dev/null +++ b/doc/usr/_site/en/documentation.html @@ -0,0 +1,145 @@ + + + + + Documentation Index + + + + + +
+
+ +
+ +
+
+ +

Documentation

+ +

Welcome to Jool’s documentation index.

+ +

Introduction

+ +
    +
  1. What is SIIT/NAT64?
  2. +
  3. What is Jool?
  4. +
+ +

See RFC 6586 for deployment experiences using Stateful NAT64.

+ +

Installation

+ +
    +
  1. Kernel module
  2. +
  3. Userspace application
  4. +
+ +

Runs

+ +
    +
  1. SIIT +
      +
    1. RFC 6791
    2. +
    +
  2. +
  3. SIIT + EAM +
      +
    1. The EAMT
    2. +
    +
  4. +
  5. Stateful NAT64 +
      +
    1. The IPv4 Transport Address Pool
    2. +
    3. BIB + +
    4. +
    +
  6. +
  7. DNS64
  8. +
  9. 464XLAT - SIIT/DC Dual Translation Mode
  10. +
+ +

Userspace Application

+ +
    +
  1. Flags
  2. +
+ +

Miscellaneous

+ +
    +
  1. FAQ
  2. +
  3. Logging
  4. +
  5. MTU and Fragmentation
  6. +
  7. The problem with Offloading
  8. +
  9. Single Interface
  10. +
+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/en/download.html b/doc/usr/_site/en/download.html new file mode 100644 index 000000000..cc879b5ed --- /dev/null +++ b/doc/usr/_site/en/download.html @@ -0,0 +1,246 @@ + + + + + Download + + + + + +
+
+ +
+ +
+
+ +

Download

+ + + +
    +
  • Bold marks the most recommended version(s).
  • +
  • Normal font signals recommended fallback versions in case the previous option fails you (bug reports welcomed).
  • +
  • Striked versions are not recommended (either because they’re too old or have known critical bugs).
  • +
+ +

3.3.x

+ +

Jool 3.3 is a fairly compliant SIIT and Stateful NAT64.

+ +

3.3.2 is the latest version. It is also considered the most mature version of Jool.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DownloadSHA512MD5Git commit
3.3.2SHA512MD5Link
3.3.1SHA512MD5Link
3.3.0SHA512MD5Link
+ +

3.2.x

+ +

The 3.2 series improves 3.1 by implementing Simultaneous Open. It also has provides an option to flush its pools and has several internal tweaks.

+ +

3.2.3 is the latest version.

+ +

The documentation on this site pertains the 3.3 series. You can download a snapshot of the 3.2 documentation here.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DownloadSHA512MD5Git commit
3.2.3SHA512MD5Link
3.2.2SHA512MD5Link
3.2.1SHA512MD5Link
3.2.0SHA512MD5Link
+ +

3.1.x

+ +

The 3.1 series is a fairly standard-compliant stateful NAT64. Its missing features are

+ +
    +
  • Filtering policies.
  • +
  • Simultaneous Open of TCP Connections.
  • +
+ +

The latest version is 3.1.6.

+ +

The documentation on this site pertains the 3.3 series. You can download a snapshot of the 3.1 documentation here.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DownloadSHA512MD5Git commit
3.1.6SHA512MD5Link
3.1.5SHA512MD5Link
3.1.4SHA512MD5Link
3.1.3SHA512MD5Link
3.1.2SHA512MD5Link
3.1.1SHA512MD5Link
3.1.0SHA512MD5Link
+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/en/eamt.html b/doc/usr/_site/en/eamt.html new file mode 100644 index 000000000..3fa5083db --- /dev/null +++ b/doc/usr/_site/en/eamt.html @@ -0,0 +1,147 @@ + + + + + EAMT + + + + + +
+
+ +
+ +
+
+ +

Documentation > Runs > SIIT + EAM > EAMT

+ +

EAMT

+ +

The Explicit Address Mappings Table (EAMT) is a collection of records in an SIIT device which describe how different addresses should be translated. As of 2015-08-28, its latest revision is draft-anderson-v6ops-siit-eam.

+ +

Here’s an example of an EAMT:

+ + + + + + + + + + + + + + + + + + + + + + +
IPv4 PrefixIPv6 Prefix
192.0.2.1/322001:db8:aaaa::5/128
198.51.100.0/242001:db8:bbbb::/120
203.0.113.8/292001:db8:cccc::/125
+ +

An EAMT entry is composed of an IPv4 prefix and an IPv6 prefix. When an address is being translated, its prefix is literally replaced according to the table. In Jool’s implementation, all records are bidirectional.

+ +

The first record shown is the simplest case. Because there is no suffix, the record literally says “Address 192.0.2.1 should always be translated as 2001:db8:aaaa::5, and vice versaâ€. Whether the address is source, destination, or lies within the inner packet of an ICMP error, doesn’t matter. The IPv6 representation of 192.0.2.1 is 2001:db8:aaaa::5, and the IPv4 representation of 2001:db8:aaaa::5 is 192.0.2.1. Period.

+ +

The second entry is more interesting. Because there is a full byte of suffix, the record is saying “198.51.100.x should be translated as 2001:db8:bbbb::x, and vice versa. x is any number between 0-255.â€

+ +

As in:

+ +
    +
  • 198.51.100.0 <-> 2001:db8:bbbb::0
  • +
  • 198.51.100.1 <-> 2001:db8:bbbb::1
  • +
  • 198.51.100.2 <-> 2001:db8:bbbb::2
  • +
  • …
  • +
  • 198.51.100.254 <-> 2001:db8:bbbb::fe
  • +
  • 198.51.100.255 <-> 2001:db8:bbbb::ff
  • +
+ +

This form can help you simplify configuration when you have lots of addresses to map; the suffix is always preserved, so the point is a single EAMT entry can describe the translation of an entire network.

+ +

(Also, a single EAMT entry describing a /16 is way more efficient than the equivalent 65536 atomic records.)

+ +

The prefix replacement is done at bit level. The third entry exemplifies this: Address 203.0.113.8 becomes 2001:db8:cccc::, not 2001:db8:cccc::8. This is because .8’s binary form is 00001000, and the one is at the prefix side. These are some other mappings generated by the entry:

+ +
    +
  • 203.0.113.9 <-> 2001:db8:cccc::1
  • +
  • 203.0.113.10 <-> 2001:db8:cccc::2
  • +
  • 203.0.113.12 <-> 2001:db8:cccc::4
  • +
  • 203.0.113.15 <-> 2001:db8:cccc::7
  • +
+ +

If Jool doesn’t find a match in the table for an address, it tries to translate based on the pool6 prefix. If that also fails, the packet is returned to the kernel (ie. it is assumed it wasn’t meant to be translated).

+ +

See the walkthrough or the reference material for information on how to create and destroy entries manually.

+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/en/faq.html b/doc/usr/_site/en/faq.html new file mode 100644 index 000000000..09931328a --- /dev/null +++ b/doc/usr/_site/en/faq.html @@ -0,0 +1,206 @@ + + + + + FAQ + + + + + +
+
+ +
+ +
+
+ +

Documentation > Miscellaneous > FAQ

+ +

Troubleshooting/FAQ

+ +

This sums up problems we’ve seen users run into.

+ +

I modprobed Jool but it doesn’t seem to be doing anything.

+ +

Modprobing Jool without enough arguments is legal. It will assume you intend to finish configuring using the userspace app, and sit idle until you’ve done so.

+ +

Use the userspace app’s --global flag to figure out Jool’s status:

+ +
$ jool_siit --global
+  Status: Disabled
+ +
$ jool --global
+  Status: Disabled
+ +

SIIT Jool’s minimum configuration requirements are

+ + + +

Stateful Jool’s minimum configuration requirements are

+ + + +

If that doesn’t seem to be the problem, try the logs.

+ +

What do I do with this error message? It’s horribly ambiguous.

+ +

This happens if your text terminal is not listening to kernel messages of error severity.

+ +

The jist of it is, if a problem with the incoming configuration is detected in kernelspace, Jool doesn’t send the friendly version of the error message to the userspace application because it’s lazy. Instead, it writes it in the kernel logs. The userspace application is then stuck with a generic Unix error code, and that’s what it reports to the user.

+ +

Run dmesg or one of its variats to query the kernel logs, as shown in the issue report.

+ +

Jool is intermitently unable to translate traffic.

+ +

Did you run something in the lines of

+ +
ip addr flush dev eth1
+ +

?

+ +

Then you might have deleted the interface’s Link address.

+ +

Link addresses are used by several relevant IPv6 protocols. In particular, they are used by the Neighbor Discovery Protocol, which means if you don’t have them, the translating machine will have trouble finding its IPv6 neighbors.

+ +

Check the output of ip addr.

+ +
user@T:~$ /sbin/ip address
+1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
+    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
+    inet 127.0.0.1/8 scope host lo
+    inet6 ::1/128 scope host 
+       valid_lft forever preferred_lft forever
+2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
+    link/ether 08:00:27:83:d9:40 brd ff:ff:ff:ff:ff:ff
+    inet6 2001:db8:aaaa::1/64 scope global 
+       valid_lft forever preferred_lft forever
+    inet6 fe80::a00:27ff:fe83:d940/64 scope link 
+       valid_lft forever preferred_lft forever
+3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
+    link/ether 08:00:27:c6:01:48 brd ff:ff:ff:ff:ff:ff
+    inet6 2001:db8:bbbb::1/64 scope global tentative 
+       valid_lft forever preferred_lft forever
+
+ +

Interface eth0 is correctly configured; it has both a “scope global†address (used for typical traffic) and a “scope link†address (used for internal management). Interface eth1 lacks a link address, and is therefore a headache inducer.

+ +

The easiest way to restore scope link addresses, we have found, is to just reset the interface:

+ +
ip link set eth1 down
+ip link set eth1 up
+ +

Yes, I’m serious:

+ +
user@T:~$ /sbin/ip address
+1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
+    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
+    inet 127.0.0.1/8 scope host lo
+    inet6 ::1/128 scope host 
+       valid_lft forever preferred_lft forever
+2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
+    link/ether 08:00:27:83:d9:40 brd ff:ff:ff:ff:ff:ff
+    inet6 2001:db8:aaaa::1/64 scope global 
+       valid_lft forever preferred_lft forever
+    inet6 fe80::a00:27ff:fe83:d940/64 scope link 
+       valid_lft forever preferred_lft forever
+3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
+    link/ether 08:00:27:c6:01:48 brd ff:ff:ff:ff:ff:ff
+    inet6 fe80::a00:27ff:fec6:148/64 scope link 
+       valid_lft forever preferred_lft forever
+
+ +

(Note, you need to add the global address again)

+ +

Also, for future reference, keep in mind that the “correct†way to flush an interface is

+ +
ip addr flush dev eth1 scope global
+ +

IPv4 doesn’t need link addresses that much.

+ +

The throughput is terrible!

+ +

Turn offloads off!

+ +

If you’re running Jool in a guest virtual machine, something important to keep in mind is that you might rather or also have to disable offloads in the VM host’s uplink interface.

+ +

I can’t ping the IPv4 pool address.

+ +

Actually, this is normal in Jool 3.2.x and below. The destination address of the ping packet is translatable, so Jool is stealing the packet. Unfortunately, it doesn’t have a relevant BIB entry (because the ping wasn’t started from IPv6), so the translation is a failure (and the packet is dropped).

+ +

It looking weird aside, it doesn’t cause any other catastrophes; just ping the node address.

+ +

Jool 3.3+ handles this better and the ping should succeed.

+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/en/index.html b/doc/usr/_site/en/index.html new file mode 100644 index 000000000..55bdf0400 --- /dev/null +++ b/doc/usr/_site/en/index.html @@ -0,0 +1,295 @@ + + + + + Home + + + + + +
+
+ +
+ +
+
+ +

Home

+ +
+ +

Introduction

+ +

Jool is an Open Source SIIT and NAT64 for Linux.

+ + + +
+ +

Status

+ +

As far as we know, Jool is a fairly compliant SIIT and Stateful NAT64. This is the roadmap as of 2015-08-19:

+ +
    +
  1. Milestone 4.0.0 will be a framework switch. Jool might become a device driver or a userspace daemon. This will free Jool from most of its compliance problems and might make it more intuitive to configure.
  2. +
  3. Milestone 4.1.0 will add several new features.
  4. +
+ +

New bug reports might interpolate other milestones in-between. Feedback from users can persuade us to change priorities. See Contact for options on this.

+ +

Our latest release is version 3.4.0.

+ +
+ +

News

+ +

2015-04-14

+ +

Version 3.3.2 released.

+ +

This is the summary:

+ + + +

Also, unrelated to the code, we now have two mailing lists:

+ +
    +
  • jool-news@nic.mx is intended to spread news. Since we currently don’t have other major events, the plan is to only use it to announce new releases coming out. Click here to start listening.
  • +
  • jool-list@nic.mx can be used for public discussion (help, proposals, whatever). I will also drop the news here so people doesn’t have to subscribe to both at a time. Click here to register.
  • +
+ +

jool@nic.mx can still be used to reach us developers only.

+ +

We’d also like to apologize for the certificate hiccup we had recently. Though they are being generated, the mailing list archives are also not available yet, and this is in our admins’ TODO list.

+ +

2015-03-11

+ +

Important bug discovered!

+ +

We just released Jool 3.3.1.

+ +

2015-03-09

+ +

Jool 3.3.0 is finished.

+ +

Filtering couldn’t make it into the milestone, but Stateless IP/ICMP Translation (SIIT) is now supported.

+ +

See the updated SIIT/NAT64 introduction for an improved picture of the SIIT paradigm. Here’s the tutorial. Also keep an eye on 464XLAT.

+ +

We also refactored the userspace app somewhat; please review your scripts:

+ + + +

We also released Jool 3.2.3, which is bugfixes since 3.2.2. One of the bugs is a DoS vulnerability, so upgrading to at least 3.2.3 is highly recommended.

+ +

2014-10-24

+ +

An important bug was discovered, and version 3.2.2 is out.

+ +

2014-10-17

+ +

The documentation of --plateaus proved to be lacking, so there’s now a full article dedicated to it. The original definition also received improvements.

+ +

It has come to our attention that we are also lacking an explanation of IP literals, so there should be another codeless update like this in the near future.

+ +

2014-10-08

+ +

Version 3.2.1 released. The 3.2 series is now considered more mature than 3.1.

+ +

The important changes are

+ +
    +
  1. Jool used to always attempt to mask packets using the first prefix of the pool. This meant that Jool was unable to handle more than one prefix.
  2. +
  3. The memory leak in the core has been purged.
  4. +
+ +

The less noticeable ones are

+ +
    +
  1. log_martians is no longer a step in modprobing Jool (though it doesn’t bite if you keep it).
  2. +
  3. The SNMP stat updates returned. See nstat and netstat -s.
  4. +
  5. Corner-case packets now get checksums updated correctly.
  6. +
+ +

2014-09-01

+ +

It took it a really long time to overcome testing, but version 3.2.0 is finally released.

+ +

We changed the minor version number this time, because the userspace application has a slightly different interface; the single-value configuration parameters have been joined: --general replaced --filtering, --translate and --fragmentation. The application also has three new features:

+ +
    +
  1. The ability to flush the pools.
  2. +
  3. The addition of --quick.
  4. +
  5. The addition of --svg, in BIB and session.
  6. +
+ +

The second main novelty is the finally correct implementation of Simultaneous Open of TCP Connections. The translation pipeline should now be completely quirkless.

+ +

A little confusion also revealed that the path to libnl used to be hardcoded in the configuration script. If you used to have trouble compiling the userspace application, you might want to try again using the new version.

+ +

The more unnoticeable stuff includes a complement to the old issue #65 and a healthier code-to-comment ratio :). The user documentation, on the other hand, received a significant refactor, so looking at the diff might not be overly productive this time.

+ +

One thing we did not complete was the fragmentation refactor. This is in fact the reason why this milestone dragged. We appear to really need to reconcile the kernel’s defragmenter and the RFC in order to implement filtering policies however, so it’s still considered an active issue.

+ +

We also released 3.1.6, which is small fixes from 3.1.5, in case somebody has a reason to continue using the 3.1.x series.

+ +

2014-06-26

+ +

By the way:

+ +

If you can read Markdown and Github’s diffs, you can find the documentation changes for version 3.1.5 here, here and here.

+ +

2014-06-18

+ +

Version 3.1.5 released.

+ +

Our most important fix is issue #92. Incorrect ICMP errors used to confuse IPv4 nodes, which lowered the reliability of 4-to-6 traffic.

+ +

Aside from that, the userspace application has been tightened. It doesn’t crash silly anymore when it has to output large BIB or session tables, and works a lot harder to keep the database free from trashy leftover records.

+ +

Then we have a couple of performance optimizations. In particular (and more or less as a side effect), by aligning log priorities to those from the rest of the kernel, more care has been taken to keep the log cleaner.

+ +

If you care about performance, you might want to read the as-of-now-missing documentation of --minMTU6, a configuration parameter that helps you avoid fragmentation.

+ +

If people doesn’t find critical bugs in this version, this appears to be the end of the 3.1.x series. We’ll go back to aim for 100% RFC compliance in the next update.

+ +

2014-04-25

+ +

Version 3.1.4 released. Fixes:

+ +
    +
  1. Two kernel crashes.
  2. +
  3. The userspace application now resolves names.
  4. +
  5. Added support for Linux 3.13+.
  6. +
+ +

Also, we no longer recommend usage of Jool in kernel 3.12.

+ +

2014-03-26

+ +

Version 3.1.3 released. Fixes:

+ +
    +
  1. An incorrect implementation used to ban configuration on certain systems.
  2. +
  3. A bug used to prevent Jool from sending certain ICMP errors.
  4. +
  5. A memory leak.
  6. +
  7. Slightly optimized the packet translation algorithm by replacing some spinlocks with RCUs.
  8. +
+ +

2014-03-04

+ +

Website released. This website!

+ +

And with it comes a new release. 3.1.2 fixes:

+ +
    +
  1. 21-centuried the userspace-app’s installation procedure.
  2. +
  3. Jool is now more explicit regarding the suffix of prefixes.
  4. +
  5. Jool no longer wrecks itself when modprobed with invalid arguments.
  6. +
+ +

2014-02-21

+ +

Version 3.1.1 released.

+ +

It contains two bugfixes:

+ +
    +
  1. Added permission checking to the admin-related userspace requests.
  2. +
  3. Fixed compatibility issues with ~3.1 kernels.
  4. +
+ +

2014-01-15

+ +

Version 3.1.0 released. Jool finally handles fragments!

+ +

Other important fixes:

+ +
    +
  • Major optimizations on both the BIB and session databases. The module should scale a lot more gracefully as clients demand more traffic.
  • +
  • Jool no longer requires a separate IPv4 address.
  • +
  • Kernel panic during removal of the module fixed.
  • +
  • And More stuff.
  • +
+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/en/intro-jool.html b/doc/usr/_site/en/intro-jool.html new file mode 100644 index 000000000..5e8d29dd9 --- /dev/null +++ b/doc/usr/_site/en/intro-jool.html @@ -0,0 +1,228 @@ + + + + + Introduction to Jool + + + + + +
+
+ +
+ +
+
+ +

Documentation > Introduction > Jool

+ +

Introduction to Jool

+ +

Index

+ +
    +
  1. Overview
  2. +
  3. Compliance
  4. +
  5. Compatibility
  6. +
+ +

Overview

+ +

Jool is an Open Source implementation of IPv4/IPv6 Translation on Linux. Until version 3.2.x, it used to be only a Stateful NAT64; starting from 3.3.0, it also supports SIIT mode.

+ +

Compliance

+ +

As far as we know, this is the compliance status of Jool 3.3:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RFC/draftReminder nameStatus
RFC 6052IP address translationFully compliant.
RFC 6144IPv4/IPv6 Translation FrameworkFully compliant.
RFC 6145SIITThe atomic fragment implementation is generally broken. Otherwise compliant.
RFC 6146Stateful NAT64Mostly compliant.
(Inherits RFC 6145 compliance issues)
We have also been unable to implement Filtering Policies.
RFC 6384FTP over NAT64Not yet compliant.
RFC 6791ICMP quirksIn short, this RFC wants two things: A pool of IPv4 addresses and an ICMP header extension. Jool implements the former but not the latter.
RFC 6877464XLATRather implemented as SIIT-DC; see below.
draft-ietf-v6ops-siit-dcSIIT-DCFully compliant.
draft-ietf-v6ops-siit-dc-2xlatSIIT-DC Edge TranslatorHost-based mode not implemented.
draft-ietf-6man-deprecate-atomfrag-generationAtomic Fragment DeprecationStrictly speaking, the draft wants us to completely trash the atomic fragments concept. We do implement them -poorly- as an alternate and utterly discouraged mode.
draft-anderson-v6ops-siit-eamEAMFully compliant.
+ +

Please let us know if you find additional compliance issues or RFCs/drafts we’ve missed.

+ +

Compatibility

+ +

We’re supposed to support Linux kernels 3.0.0 and up. While most of the development time has been spent experimenting on Ubuntu 12.04 and 14.04 using current kernels, we’ve performed a healthy amount of formal testing on Jool 3.1.5 and 3.2.2 in the following variants:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DistributionKernels
CentOS 73.10.0-123.el7.x86_64
Debian 7.53.2.0-4-amd64
Red Hat Enterprise Linux 73.10.0-123.4.4.el7.x86_64
SuSE Linux Enterprise Desktop 11 SP33.0.101-0.31-default
Ubuntu 12.043.1.10-030110-generic, 3.2.60-030260-generic
Ubuntu 12.103.3.8-030308-generic, 3.4.94-030494-generic, 3.5.7-03050733-generic
Ubuntu 13.043.6.11-030611-generic, 3.7.10-030710-generic, 3.8.13-03081323-generic
Ubuntu 13.103.9.11-030911-generic, 3.10.44-031044-generic, 3.11.10-03111011-generic
Ubuntu 14.043.12.22-031222-generic, 3.13.11-03131103-generic
Ubuntu 14.103.14.8-031408-generic, 3.15.1-031501-generic
+ +

Red Hat and CentOS introduce a compilation warning due to a kernel version mismatch between Red Hat-based kernels and Debian-based kernels. We’re still researching ways to address this warning, but it hasn’t caused any problems during testing.

+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/en/intro-nat64.html b/doc/usr/_site/en/intro-nat64.html new file mode 100644 index 000000000..6bfa20c97 --- /dev/null +++ b/doc/usr/_site/en/intro-nat64.html @@ -0,0 +1,197 @@ + + + + + Introduction to IPv4/IPv6 Translation + + + + + +
+
+ +
+ +
+
+ +

Documentation > Introduction > NAT64

+ +

Introduction to IPv4/IPv6 Translation

+ +

Index

+ +
    +
  1. Introduction
  2. +
  3. IPv4/IPv6 Translation +
      +
    1. SIIT with EAM
    2. +
    3. SIIT (traditional)
    4. +
    5. Stateful NAT64
    6. +
    +
  4. +
+ +

Introduction

+ +

This document provides a general introduction to SIIT and NAT64.

+ +

IPv4/IPv6 Translation

+ +

SIIT (Stateless IP/ICMP Translation) and NAT64 (“NAT six fourâ€, not “NAT sixty-fourâ€) are technologies meant to communicate networking nodes which only speak IPv4 with nodes that only speak IPv6.

+ +

The idea is basically that of an “upgraded†NAT; an “IPv4/IPv6 translator†not only replaces addresses and/or ports within packets, but also layer 3 headers.

+ +
    +
  • SIIT is the simpler form, and allows preconfigured 1-to-1 mappings between IPv4 addresses and IPv6 addresses.
  • +
  • A Stateful NAT64 (or NAT64 for short) allows several IPv6 nodes to dynamically share few IPv4 addresses (useful when you’re a victim of IPv4 address exhaustion).
  • +
+ +

For historic reasons, sometimes we mess up and label SIIT as “Stateless NAT64â€. Because this expression does not seem to appear in any relevant standards, we consider it imprecise, despite the fact it makes some degree of sense. If possible, please try to suppress it.

+ +

An SIIT implementation mangles network headers and sometimes transport checksums. A Stateful NAT64 also mangles transport identifiers.

+ +

That’s all, really. Keep reading for more detail and examples.

+ +

SIIT with EAM

+ +

This is the easiest one to explain. Consider the following setup:

+ +

Fig.1 - EAM sample network

+ +

(T stands for “Translating boxâ€.)

+ +

Assuming everyone’s default gateway is T, how do you communicate A (IPv6) with V (IPv4)?

+ +
    +
  • You tell T, “The IPv4 address of A should be 198.51.100.8, and the IPv6 address of V should be 2001:db8:4::16â€.
  • +
  • You tell A, “V’s address is 2001:db8:4::16â€.
  • +
  • You tell V, “A’s address is 198.51.100.8â€.
  • +
+ +

The first one is accomplished by SIIT. The latter can be done via DNS.

+ +

This will happen:

+ +

Fig.2 - EAM flow

+ +

The translator is “fooling†each node into thinking the other one can speak their language.

+ +

“EAM†stands for “Explicit Address Mappingâ€, and is more versatile than simply binding arbitrary addresses to other arbitrary addresses. See the EAM draft or our summary of it for more information.

+ +

SIIT (traditional)

+ +

The basic form of SIIT is more constrictive. As a consequence, we need to change the sample IPv6 network:

+ +

Fig.3 - Vanilla sample network

+ +

The idea is to simply remove a prefix while translating from IPv6 to IPv4, and append it in the other direction:

+ +

Fig.4 - Vanilla flow

+ +

Of course, this means each node’s IPv4 address has to be encoded inside its IPv6 address, which is a little annoying.

+ +

While this explanation might make it seem like “EAM†SIIT and “traditional†SIIT are different things, this is not the case. Implementations are expected to always try to translate an address based on the EAM table first, and if no mapping is found, fall back to append or remove the prefix. The separation was done here for illustrative purposes. You can find a concrete example of how “traditional†and “EAM†SIIT can be combined to fit a use case in draft-v6ops-siit-dc.

+ +

SIIT is defined by RFC 6145. The address translation hack has more ways to embed the IPv4 address not shown here, and is fully defined by RFC 6052. Whenever RFC 6052 is involved, it’s usually convenient to also have a DNS64 so users don’t need to be aware of the prefix.

+ +

Stateful NAT64

+ +

This mode is more akin to what people understand as “NATâ€. As such, allow me to remind you the big picture of how (stateful) NAT operates:

+ +

Fig.5 - NAT sample network

+ +

The idea is, the left network is called “Private†because it uses addresses unavailable in the global Internet. In order to make up for this, NAT mangles packet addresses so outsiders think any traffic started by the private nodes was actually started by itself:

+ +

Fig.6 - NAT flow

+ +

As a result, for outside purposes, nodes A through E are “sharing†NAT’s global address (or addresses).

+ +

While stateful NAT helps you economize IPv4 address, it comes with a price: NAT has to remember which private node issued the packet to V, because A’s address cannot be found anywhere in V’s response. That’s why it’s called “statefulâ€; it creates address mappings dymanically and remembers them for a while. There are two things to keep ind mind here:

+ +
    +
  • Each mapping requires memory.
  • +
  • V cannot start a packet stream with A, again because NAT must learn the mapping in the private-to-outside direction first (left to right).
  • +
+ +

Stateful NAT64 is pretty much the same. The only difference is that the “Private Network†is actually an IPv6 network:

+ +

Fig.7 - Stateful network

+ +

And therefore,

+ +

Fig.8 - Stateful flow

+ +

Now, that’s where the similarities with NAT end. You don’t normally say the IPv6 network is “Privateâ€, because the whole point is that it should also be connected to the IPv6 Internet:

+ +

Fig.9 - Stateful Internet

+ +

In this way, A through E are IPv6-only nodes, but they have access to both Internets (the IPv6 one via router R, and the IPv4 one via T).

+ +

Stateful NAT64 is defined by RFC 6146 and is most of the time coupled with DNS64.

+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/en/logging.html b/doc/usr/_site/en/logging.html new file mode 100644 index 000000000..536b4b23a --- /dev/null +++ b/doc/usr/_site/en/logging.html @@ -0,0 +1,127 @@ + + + + + Logging + + + + + +
+
+ +
+ +
+
+ +

Logging

+ +

If Jool has something to say, it will do so in the kernel logs (just like any other kernel component). Typical ways to find this include

+ + + +

Thankfully, Linux is generally silent after booting, so Jool’s latest messages should be found at the very bottom.

+ +

Jool uses four levels in the severity spectrum (see dmesg --help):

+ +
    +
  1. err: “Your configuration cannot be applied, userâ€. This only happens during module insertion/removal and as a response of userspace application requests.
  2. +
  3. warn: “Are you sure this configuration is sane? I’m going to keep doing this, but it doesn’t look like it’s going placesâ€. Only happens during packet translations.
  4. +
  5. info: “The kernel module was insertedâ€, “the kernel module was removedâ€. Also --logging-bib and --logging-session’s exploits.
  6. +
  7. debug: “And now I’m doing thisâ€. “I couldn’t translate this packet because X, and I think it’s normalâ€.
  8. +
+ +

Debug messages are normally compiled out of Jool’s binaries because they are lots and can slow things down. If you are testing or troubleshooting however, they can be of help.

+ +

If you want Jool to print debug messages, go back to the kernel module’s compilation step and run make debug instead of just make. Reinstall and remodprobe as you usually do, and you should see a lot of mumbling as a result of network traffic translation, which should give you ideas as to what might be wrong:

+ +
$ cd Jool/mod
+$ make debug
+$ sudo make modules_install
+$ sudo depmod
+$
+$ sudo modprobe -r jool_siit
+$ sudo modprobe jool_siit
+$
+$ dmesg | tail -5
+[ 3465.639622] ===============================================
+[ 3465.639655] Catching IPv4 packet: 192.0.2.16->198.51.100.8
+[ 3465.639724] Translating the Packet.
+[ 3465.639756] Address 192.0.2.16 lacks an EAMT entry and there's no pool6 prefix.
+[ 3465.639806] Returning the packet to the kernel.
+
+ +

These messages quickly add up. If your computer is storing them, make sure you revert the binaries when you’re done so they stop flooding your disk.

+ +

If dmesg is not printing the messages, try tweaking its --console-level. Have a look at man dmesg for details.

+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/en/mod-install.html b/doc/usr/_site/en/mod-install.html new file mode 100644 index 000000000..8cf9f2409 --- /dev/null +++ b/doc/usr/_site/en/mod-install.html @@ -0,0 +1,192 @@ + + + + + Kernel Modules Installation + + + + + +
+
+ +
+ +
+
+ +

Documentation > Installation > Kernel module

+ +

Kernel Modules Installation

+ +

Index

+ +
    +
  1. Introduction
  2. +
  3. Requirements
  4. +
  5. Installation +
      +
    1. DKMS
    2. +
    3. Kbuild
    4. +
    +
  6. +
+ +

Introduction

+ +

Jool is four things:

+ +
    +
  1. Two kernel modules you can hook up to Linux. One of them is the SIIT implementation and the other one is the Stateful NAT64. They are the main components and all you need to get started; this document explains how to install them.
  2. +
  3. Two userspace applications which can be used to configure each module. They have their own installation document.
  4. +
+ +

When you put it that way, there is really nothing unusual about Jool’s installation. But I figure some of our users might have no previous experience meddling with drivers, so this overview will serve as an introduction to at least give them an idea of what each step does.

+ +

Requirements

+ +

First off, the computer that will be translating traffic needs a kernel (again, Linux) whose version is 3.0 to 3.15. Higher versions are probably fine, but we haven’t tested them. We do not recommend using Linux 3.12 because of the reasons outlined here.

+ +

Use the uname -r command to know your kernel version.

+ +
$ /bin/uname -r
+3.5.0-45-generic
+$ # OK, fine.
+ +

If you’re just getting acquainted with IPv4/IPv6 Translation, some people have an easier time picturing the ordeal when the translator has two separate network interfaces (one to interact with IPv6 networks, one for IPv4 networks). This is not a requirement; you can get away with only one interface (by dual stacking on it), and you can also have more than one per protocol. This is possible because figuring out which interface should a packet be dispatched through is routing’s problem, which is already well implemented in the kernel.

+ +

Because the tutorials are first and foremost a tool to get newcomers on the right mindset, most of the deployment discussion will assume two separate interfaces (exemplified below: eth0 and eth1).

+ +
$ /sbin/ip link show
+(...)
+2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
+    link/ether 08:00:27:3d:24:77 brd ff:ff:ff:ff:ff:ff
+3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
+    link/ether 08:00:27:ca:18:c8 brd ff:ff:ff:ff:ff:ff
+ +

Finally, you need your kernel headers. If you’re using apt-get, just run this:

+ +
$ apt-get install linux-headers-$(uname -r)
+ +

Installation

+ +

Each kernel version combined with each different architecture requires different binaries, so providing packages for every combination would be impossibly cumbersome. For this reason, what you’ll download is the source; there is no way around compiling the code yourself.

+ +

On the flip side, kernel modules cannot have dependencies other than your kernel headers and a good compiler, so the procedure is fairly painless.

+ +

To download Jool, you have two options:

+ +
    +
  • Official releases are hosted in the Download page. These will prove less convoluted when you’re installing the userspace application.
  • +
  • There’s the Github repository. This might have slight bugfixes not present in the latest official release, which you can access by sticking to the latest commit of the master branch (in case you’re wondering, we do all the risky development elsewhere).
  • +
+ +

You might be used to a standard three-step procedure to compile and install programs: ./configure && make && make install. Kernel modules do not follow it, but have a special one on their own called Kbuild.

+ +

If your distribution supports the Dynamic Kernel Module Support (DKMS) framework, this can be used in order to compile and build the Jool kernel modules. If however your distribution does not support DKMS, or its use is undesired for some reason, the Jool kernel modules can be built and installed manually by using the Kbuild system directly.

+ +

Regardless of which method you use to install the kernel modules, after a successfull installation you will be able to start Jool using modprobe jool or modprobe jool_siit. The logical next step after that would be to read the Basic SIIT Tutorial.

+ +

DKMS

+ +

The DKMS framework provides a convenient wrapper around the standard kernel Kbuild system. A single DKMS command will perform all the steps necessary in order to use third-party kernel modules such as Jool. It will also ensure that everything is done all over again whenever necessary (such as after a kernel upgrade). DKMS can also be used to create packages for deb/rpm-based distributions containing pre-built Jool kernel modules.

+ +

In order to install the Jool kernel modules using DKMS, you need to run dkms install /path/to/Jool-sourcedir, like so:

+ +
user@node:~# apt-get install dkms
+user@node:~$ unzip Jool-<version>.zip
+user@node:~# dkms install Jool-<version>
+ +

DKMS will now have compiled, installed and indexed the Jool kernel modules; Jool is now ready for use.

+ +

Kbuild

+ +

Kbuild is the Linux kernel’s standard system for compiling and installing kernel modules. Jool comes with native Kbuild support. As far as the compilation goes, there is no configure script. But you also don’t have to edit the Makefile; you jump straight to make and you’re done. The global Makefile can be found in the mod folder:

+ +
user@node:~$ unzip Jool-<version>.zip
+user@node:~$ cd Jool-<version>/mod
+user@node:~/Jool-<version>/mod$ make
+ +

The Jool kernel modules are now compiled for your current kernel. Next, copy them to your system’s module pool by running the modules_install target:

+ +
user@node:~/Jool-<version>/mod# make modules_install
+ +
+

Warning!

+ +

Kernels 3.7 and up want you to sign your kernel modules to make sure you’re loading them in a responsible manner.

+ +

But if your kernel was not configured to require this feature (the kernels of many distros don’t), you won’t have much of an issue here. The output of make modules_install will output “Can’t read private keyâ€; this looks like an error, but is actually a warning, so you can continue the installation peacefully.

+ +

Sorry; if your kernel was compiled to require module signing, you probably know what you’re doing, so I’ll skip the instructions to make that work.

+
+ +

You’ll later activate the modules using the modprobe command. Thing is, the fact that they reside in your pool doesn’t mean they have already been indexed. Use depmod to make modprobe aware of the new modules:

+ +
user@node:~# /sbin/depmod
+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/en/mod-run-464xlat.html b/doc/usr/_site/en/mod-run-464xlat.html new file mode 100644 index 000000000..6759f4774 --- /dev/null +++ b/doc/usr/_site/en/mod-run-464xlat.html @@ -0,0 +1,296 @@ + + + + + 464XLAT + + + + + +
+
+ +
+ +
+
+ +

Documentation > Runs > 464XLAT

+ +

464XLAT

+ +

Index

+ +
    +
  1. Introduction
  2. +
  3. Sample Network
  4. +
  5. Expected Packet Flow
  6. +
  7. Testing
  8. +
  9. Closing words
  10. +
  11. Further reading
  12. +
+ +

Introduction

+ +

NAT64 is not perfect. While you might see a lot of traffic getting translated quirklessly, you might eventually bump into the following rough edge:

+ +

Barring RFC 6384, NAT64 only translates network headers (IPv4, IPv6 and ICMP) and transport headers (UDP and TCP). Sometimes, this is a problem. Some protocols on top of UDP and TCP have a bad habit of including IP addresses (“IP literalsâ€) along their conversations; because NAT64 only translates lower protocols, these literals will slip past the NAT64 unmodified.

+ +

For example, some IPv6-unaware website, which would normally contain this HTML:

+ +
<a href="www.jool.mx/index.html">Link to something.</a>
+
+ +

Could be poorly coded like this:

+ +
<a href="203.0.113.24/index.html">Link to something.</a>
+
+ +

This address lies within the body of an HTML file, not a network or transport header. It is not viable for Jool to support translation of all existing application protocols.

+ +

If you click the latter version of the link from an IPv6-only node via a NAT64, it will of course not work, because the node doesn’t have an IPv4 stack with which to access 203.0.113.24. www.jool.mx works fine because the DNS64 appends the NAT64 prefix once the node asks about it; on the other hand, if all the node has is 203.0.113.24, it can’t really tell it’s talking via a NAT64, much less know which prefix should be appended.

+ +

464XLAT is a technique meant to address this limitation. It functions by appending an SIIT into the mix, that reverses the work made by the Stateful NAT64. The idea can be generalized to also provide Internet to IPv4-only services when all you have is an IPv6 address space, which is SIIT/DC: Dual Translation Mode.

+ +

This document is a dumbed-down summary of both of these techniques, collapsed into a walkthrough that uses Jool.

+ +

Sample Network

+ +

Figure 1 - 464 Needed

+ +

The red box would be your domain. n6 stands for “IPv6 node†and R is “routerâ€. Say your ISP gives you only IPv6 addresses, but it also grants you access to IPv4 via a stateful NAT64 (PLAT; “Provider-side Translatorâ€). n4 is a random IPv4 Internet node.

+ +

Say your user from n6 clicks a link towards 203.0.113.24. n6 does not have an IPv4 stack, so the request has nowhere to go. The situation could be amended by manually appending the NAT64 prefix to the address, but the user doesn’t know that. Of course, a DNS64 would be the ideal and transparent solution, but unfortunately the site provided an address and not a domain name, so n6 is not querying the DNS.

+ +

Alternatively, n6 might want to provide a legacy service (or client) which is unfortunately tied to IPv4. Because n6 only has global IPv6 addresses, it appears it cannot do so.

+ +

In broad terms, the solution is to provide n6 with a “fake†IPv4 stack whose packets will be translated into IPv6 before reaching PLAT. In other words, an SIIT service (in 464XLAT terms called “CLATâ€; “Customer-side Translatorâ€) will be sort of undoing PLAT’s work.

+ +

There are rather several ways to do this. Unfortunately, one of them (making n6 the CLAT) is rather embarrassingly not yet implemented by Jool. One that does work is to make R the CLAT. The network would look like this:

+ +

Figure 2 - 464XLAT'd Network

+ +

I also removed the clouds to simplify routing in the example. The dual translation idea has really nothing to do with routing, so this is unimportant.

+ +

Expected Packet Flow

+ +

This is the normal flow an IPv6-sourced packet would traverse. It’s a typical stateful NAT64 flow and the Dual Translation presented in this configuration will not interfere with it: Notice we’ve chosen 64:ff9b::/96 as PLAT’s NAT64 prefix:

+ +

Figure 3 - Normal Stateful Flow

+ +

The 464XLAT flow we want to achieve follows. n6 will use its IPv4 address to try to query the literal (or whatever IPv4 Internet address):

+ +

Figure 4 - Literal

+ +

R will SIIT the packet into IPv6 so it can traverse the IPv6-only chunk. Address 192.168.0.8 will be translated using the EAMT, and 203.0.113.24 will receive the pool6 prefix treatment to mirror PLAT’s.

+ +

Figure 5 - SIIT'd packet

+ +

PLAT will do its magic and send the packet to the IPv4 Internet:

+ +

Figure 6 - Stateful NAT64'd packet

+ +

And the mangling will be mirrored for the response:

+ +

Figure 7 - Mirror

+ +

Configuration

+ +

n6 doesn’t know it kind of owns another IPv6 address in the 2001:db8:2::/96 network. It never sees this traffic, because R always translates it towards 192.0.2.0/24.

+ +
service network-manager stop
+
+ip link set eth0 up
+ip addr add 2001:db8:1::8/64 dev eth0
+ip addr add 192.168.0.8/24 dev eth0
+
+ip route add default via 2001:db8:1::1
+ip route add default via 192.168.0.1
+
+ +

This is R:

+ +
service network-manager stop
+
+ip link set eth0 up
+ip addr add 192.168.0.1/24 dev eth0
+ip addr add 2001:db8:1::1/64 dev eth0
+
+ip link set eth1 up
+ip addr add 2001:db8:100::1/64 dev eth1
+
+# Traffic headed to the real IPv4 Internet goes via PLAT.
+ip route add 64:ff9b::/96 via 2001:db8:100::2
+
+# Enable SIIT.
+# We're masking the private network using an EAMT entry.
+# Traffic towards the Internet is to be appended PLAT's prefix.
+# Recall that the EAMT has higher precedence than the prefix.
+modprobe jool_siit pool6=64:ff9b::/96
+jool_siit --eamt --add 192.168.0.8/29 2001:db8:2::/125
+
+ +

n6’s packet will have addresses 192.168.0.8 and 203.0.113.24. The former will be translated using the EAMT entry (since it matches 192.168.0.8/29) and the latter will use the pool6 prefix (because it doesn’t match).

+ +

Also note that R is an average SIIT implementation and you shouldn’t think of this installation of Jool as anything other than that.

+ +

For completeness sake, here’s PLAT’s network configuration:

+ +
service network-manager stop
+
+ip link set eth0 up
+ip addr add 2001:db8:100::2/64 dev eth0
+# I'm pretending the ISP gave us these two prefixes to play with.
+ip route add 2001:db8:1::/64 via 2001:db8:100::1
+ip route add 2001:db8:2::/64 via 2001:db8:100::1
+
+ip link set eth1 up
+ip addr add 203.0.113.1/24 dev eth1
+ip addr add 203.0.113.2/24 dev eth1
+
+modprobe jool pool6=64:ff9b::/96 pool4=203.0.113.2
+
+ +

And n4 is thoroughly boring:

+ +
service network-manager stop
+
+ip link set eth0 up
+ip addr add 203.0.113.24/24 dev eth0
+ip route add default via 203.0.113.2
+
+ +

Testing

+ +

Ping n4 via IPv4 from n6:

+ +
$ ping 203.0.113.24 -c 1
+PING 203.0.113.24 (203.0.113.24) 56(84) bytes of data.
+64 bytes from 203.0.113.24: icmp_seq=1 ttl=62 time=4.13 ms
+
+--- 203.0.113.24 ping statistics ---
+1 packets transmitted, 1 received, 0% packet loss, time 0ms
+rtt min/avg/max/mdev = 4.130/4.130/4.130/0.000 ms
+
+ + + +

Ping n4 via IPv6 from n6:

+ +
$ ping6 64:ff9b::203.0.113.24 -c 1
+PING 64:ff9b::203.0.113.24(64:ff9b::cb00:7118) 56 data bytes
+64 bytes from 64:ff9b::cb00:7118: icmp_seq=1 ttl=62 time=14.0 ms
+
+--- 64:ff9b::203.0.113.24 ping statistics ---
+1 packets transmitted, 1 received, 0% packet loss, time 0ms
+rtt min/avg/max/mdev = 14.053/14.053/14.053/0.000 ms
+
+ + + +

Closing words

+ +

Though at this point you can see how you can defend yourself against IP literals and legacy IPv4-only appliances, you might want to be forewarned that at least one application protocol out there is so poorly designed it works differently depending on whether it’s sitting on top of IPv6 or IPv4. Therefore, addressing IP literals in this case is not sufficient to make FTP work via NAT64.

+ +

On the other hand, some network-aware protocols only partially depend on literals, and the NAT64 is not going to get in the way of the features that don’t. FTP’s passive mode falls in this category.

+ +

You can make active FTP work by deploying a fully stateless dual translation environment such as siit-dc-2xlat. It works because both the client and server are both using IPv4 sockets, the IPv4 addresses are unchanged end-to-end, and it’s fully bi-directional, so active and passive FTP on arbitrary ports work fine. In siit-dc-2xlat, the IPv6 network in the middle becomes an invisible “tunnel†through which IPv4 is transported.

+ +

Here’s a list of protocols that are known to use IP literals. You might also want to see RFC 6586.

+ + + +

Further reading

+ + + + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/en/mod-run-alternate.html b/doc/usr/_site/en/mod-run-alternate.html new file mode 100644 index 000000000..abb0b88b0 --- /dev/null +++ b/doc/usr/_site/en/mod-run-alternate.html @@ -0,0 +1,124 @@ + + + + + Alternate Stateful Run + + + + + +
+
+ +
+ +
+
+ +

Doc > Miscellaneous > Single Interface

+ +

Single Interface

+ +

This nugget is here only to tell you that if you want your SIIT or NAT64 to service both protocols on the same interface, you’re still covered. Jool can see packets coming from any interface, and can send packets via any interface. (It ignores loopback, though.)

+ +

Fig.1 - Single interface NAT64

+ +

This is the same setup as in the Stateful NAT64 Run, except from the fact that everyone is now sharing the same cord, and also I removed the redundant nodes because you get the point.

+ +

A and V are configured exactly as in their stateful run counterparts, so I’ll skip their commands. All that’s different is T now having all of its addresses on the same interface:

+ +
user@T:~# service network-manager stop
+user@T:~# 
+user@T:~# /sbin/ip link set eth0 up
+user@T:~# /sbin/ip address add 2001:db8::1/96 dev eth0
+user@T:~# /sbin/ip address add 203.0.113.1/24 dev eth0
+user@T:~# /sbin/ip address add 203.0.113.2/24 dev eth0
+user@T:~# 
+user@T:~# ethtool --offload eth0 tso off
+user@T:~# ethtool --offload eth0 ufo off
+user@T:~# ethtool --offload eth0 gso off
+user@T:~# ethtool --offload eth0 gro off
+user@T:~# ethtool --offload eth0 lro off
+user@T:~# 
+user@T:~# /sbin/modprobe jool pool6=64:ff9b::/96 pool4=203.0.113.2
+
+ +

So basically, A and V share a cord, but they still can’t talk because they don’t speak the same language. That is, unless they ask T to translate their little chat:

+ +
user@A:~$ /bin/ping6 64:ff9b::203.0.113.16
+PING 64:ff9b::203.0.113.16(64:ff9b::cb00:7110) 56 data bytes
+64 bytes from 64:ff9b::cb00:7110: icmp_seq=1 ttl=63 time=10.0 ms
+64 bytes from 64:ff9b::cb00:7110: icmp_seq=2 ttl=63 time=8.16 ms
+64 bytes from 64:ff9b::cb00:7110: icmp_seq=3 ttl=63 time=8.39 ms
+64 bytes from 64:ff9b::cb00:7110: icmp_seq=4 ttl=63 time=5.64 ms
+^C
+--- 64:ff9b::203.0.113.16 ping statistics ---
+4 packets transmitted, 4 received, 0% packet loss, time 3003ms
+rtt min/avg/max/mdev = 5.645/8.057/10.025/1.570 ms
+
+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/en/mod-run-eam.html b/doc/usr/_site/en/mod-run-eam.html new file mode 100644 index 000000000..e7012b850 --- /dev/null +++ b/doc/usr/_site/en/mod-run-eam.html @@ -0,0 +1,210 @@ + + + + + EAM Run + + + + + +
+
+ +
+ +
+
+ +

Documentation > Runs > SIIT + EAM

+ +

EAM Run

+ +

Index

+ +
    +
  1. Introduction
  2. +
  3. Sample Network
  4. +
  5. Jool
  6. +
  7. Testing
  8. +
  9. Stopping Jool
  10. +
  11. Further reading
  12. +
+ +

Introduction

+ +

This document explains how to run Jool in EAM mode (which actually more than a “mode†is simply stock SIIT with records on the EAM table). Follow the link for more details on what to expect. See also the EAMT draft summary for more details on how the EAMT works.

+ +

Stock mode is faster to configure and you’re encouraged to learn it before, particularly because I will not ellaborate here on the steps which both modes have in common. Software-wise, you need a successful installation of both the kernel module and the userspace application for EAM.

+ +

Sample Network

+ +

Figure 1 - Sample Network

+ +

All the remarks in the previous document’s Sample Network section apply here.

+ +

This is nodes A through E:

+ +
user@A:~# service network-manager stop
+user@A:~# /sbin/ip link set eth0 up
+user@A:~# # Replace "::8" depending on which node you're on.
+user@A:~# /sbin/ip addr add 2001:db8:6::8/96 dev eth0
+user@A:~# /sbin/ip route add default via 2001:db8:6::1
+ +

Nodes V through Z have the exact same configuration from the previous document.

+ +
user@V:~# service network-manager stop
+user@V:~# /sbin/ip link set eth0 up
+user@V:~# # Replace ".16" depending on which node you're on.
+user@V:~# /sbin/ip addr add 192.0.2.16/24 dev eth0
+user@V:~# /sbin/ip route add default via 192.0.2.1
+ +

Node T:

+ +
user@T:~# service network-manager stop
+user@T:~# 
+user@T:~# /sbin/ip link set eth0 up
+user@T:~# /sbin/ip addr add 2001:db8:6::1/96 dev eth0
+user@T:~# 
+user@T:~# /sbin/ip link set eth1 up
+user@T:~# /sbin/ip addr add 192.0.2.1/24 dev eth1
+user@T:~# 
+user@T:~# ethtool --offload eth0 tso off
+user@T:~# ethtool --offload eth0 ufo off
+user@T:~# ethtool --offload eth0 gso off
+user@T:~# ethtool --offload eth0 gro off
+user@T:~# ethtool --offload eth0 lro off
+user@T:~# ethtool --offload eth1 tso off
+user@T:~# ethtool --offload eth1 ufo off
+user@T:~# ethtool --offload eth1 gso off
+user@T:~# ethtool --offload eth1 gro off
+user@T:~# ethtool --offload eth1 lro off
+ +

Remember you might want to cross-ping T vs everything before continuing.

+ +

Jool

+ +
user@T:~# /sbin/modprobe jool_siit disabled
+user@T:~# jool_siit --eamt --add 2001:db8:6::/120 198.51.100.0/24
+user@T:~# jool_siit --eamt --add 2001:db8:4::/120 192.0.2.0/24
+user@T:~# jool_siit --enable
+ +

Unlike pool6, it is not practical to insert the entire EAM table in a single command, so we instruct Jool to start disabled. We then insert the EAM table rows, one by one, using the userspace application. When the table is complete, we tell Jool it can start translating traffic (--enable).

+ +

Using disabled and --enable is not actually neccesary; Jool will naturally figure out that it cannot translate traffic until the EAM table and/or pool6 are populated. The reason why Jool was “forced†to remain disabled until the table was complete was so there wouldn’t be a timespan where traffic was being translated inconsistently (ie. with a half-complete table).

+ +

And again, the IPv6 prefix and the EAM table are not exclusive operation modes. Jool will always try to translate an address using EAM, and if that fails, fall back to using the prefix. Add pool6 during the modprobe if you want this.

+ +

Testing

+ +

If something doesn’t work, try the FAQ.

+ +

Try to ping V from A like this:

+ +
user@A:~$ ping6 2001:db8:4::10 # Reminder: hex 10 = dec 16.
+PING 2001:db8:4::10(2001:db8:4::10) 56 data bytes
+64 bytes from 2001:db8:4::10: icmp_seq=1 ttl=63 time=2.95 ms
+64 bytes from 2001:db8:4::10: icmp_seq=2 ttl=63 time=2.79 ms
+64 bytes from 2001:db8:4::10: icmp_seq=3 ttl=63 time=4.13 ms
+64 bytes from 2001:db8:4::10: icmp_seq=4 ttl=63 time=3.60 ms
+^C
+--- 2001:db8:4::10 ping statistics ---
+4 packets transmitted, 4 received, 0% packet loss, time 3003ms
+rtt min/avg/max/mdev = 2.790/3.370/4.131/0.533 ms
+ +

Then ping A from V:

+ +
user@V:~$ ping 198.51.100.8
+PING 198.51.100.8 (198.51.100.8) 56(84) bytes of data.
+64 bytes from 198.51.100.8: icmp_seq=1 ttl=63 time=5.04 ms
+64 bytes from 198.51.100.8: icmp_seq=2 ttl=63 time=2.55 ms
+64 bytes from 198.51.100.8: icmp_seq=3 ttl=63 time=1.93 ms
+64 bytes from 198.51.100.8: icmp_seq=4 ttl=63 time=2.47 ms
+^C
+--- 198.51.100.8 ping statistics ---
+4 packets transmitted, 4 received, 0% packet loss, time 3004ms
+rtt min/avg/max/mdev = 1.930/3.001/5.042/1.204 ms
+ +

How about hooking up a server in Y and access it from D:

+ +

Figure 1 - IPv6 TCP from an IPv4 node

+ +

Then maybe another one in B and request from X:

+ +

Figure 2 - IPv4 TCP from an IPv6 node

+ +

Stopping Jool

+ +

Same as in the previous walkthrough.

+ +

Further reading

+ + + + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/en/mod-run-stateful.html b/doc/usr/_site/en/mod-run-stateful.html new file mode 100644 index 000000000..adef1bbab --- /dev/null +++ b/doc/usr/_site/en/mod-run-stateful.html @@ -0,0 +1,215 @@ + + + + + Stateful NAT64 Run + + + + + +
+
+ +
+ +
+
+ +

Documentation > Runs > Stateful NAT64

+ +

Stateful NAT64 Run

+ +

Index

+ +
    +
  1. Introduction
  2. +
  3. Sample Network
  4. +
  5. Jool
  6. +
  7. Testing
  8. +
  9. Stopping Jool
  10. +
  11. Further reading
  12. +
+ +

Introduction

+ +

This document explains how to run Jool in Stateful NAT64 mode.

+ +

Software-wise, only a successful install of the kernel module is required. The userspace application is not needed in this basic run.

+ +

Sample Network

+ +

Figure 1 - Sample Network

+ +

All the remarks in the first document’s Sample Network section apply here.

+ +

Nodes A through E:

+ +
user@A:~# service network-manager stop
+user@A:~# /sbin/ip link set eth0 up
+user@A:~# # Replace "::8" depending on which node you're on.
+user@A:~# /sbin/ip address add 2001:db8::8/96 dev eth0
+user@A:~# /sbin/ip route add default via 2001:db8::1
+ +

Nodes V through Z:

+ +
user@V:~# service network-manager stop
+user@V:~# /sbin/ip link set eth0 up
+user@V:~# # Replace ".16" depending on which node you're on.
+user@V:~# /sbin/ip address add 203.0.113.16/24 dev eth0
+ +

Notice these nodes do not need a default route. This is a consequence of them being in the same network as the NAT64; 203.0.113.2 will be masking the IPv6 nodes, so V through Z think they’re talking directly with T.

+ +

Node T:

+ +
user@T:~# service network-manager stop
+user@T:~# 
+user@T:~# /sbin/ip link set eth0 up
+user@T:~# /sbin/ip address add 2001:db8::1/96 dev eth0
+user@T:~# 
+user@T:~# /sbin/ip link set eth1 up
+user@T:~# /sbin/ip address add 203.0.113.1/24 dev eth1
+user@T:~# 
+user@T:~# ethtool --offload eth0 tso off
+user@T:~# ethtool --offload eth0 ufo off
+user@T:~# ethtool --offload eth0 gso off
+user@T:~# ethtool --offload eth0 gro off
+user@T:~# ethtool --offload eth0 lro off
+user@T:~# ethtool --offload eth1 tso off
+user@T:~# ethtool --offload eth1 ufo off
+user@T:~# ethtool --offload eth1 gso off
+user@T:~# ethtool --offload eth1 gro off
+user@T:~# ethtool --offload eth1 lro off
+ +
+

Note: In previous versions of Jool, T used to need two or more IPv4 addresses. This is no longer the case.

+
+ +

Remember you might want to cross-ping T vs everything before continuing.

+ +

Jool

+ +

This is the insertion syntax:

+ +
user@T:~# /sbin/modprobe jool \
+	[pool6=<IPv6 prefix>] \
+	[pool4=<IPv4 prefixes>] \
+	[disabled]
+
+ +
    +
  • pool6 has the same meaning as in SIIT Jool.
  • +
  • pool4 is the subset of the node’s addresses which will be used for translation (the prefix length defaults to /32).
  • +
  • disabled has the same meaning as in SIIT Jool.
  • +
+ +

EAM and pool6791 do not make sense in stateful mode, and as such are unavailable.

+ +

The result looks like this:

+ +
user@T:~# /sbin/modprobe jool pool6=64:ff9b::/96 pool4=203.0.113.1
+
+ +

Jool will listen on address 203.0.113.1 and append and remove prefix 64:ff9b::/96.

+ +

Testing

+ +

If something doesn’t work, try the FAQ.

+ +

Test by sending requests from the IPv6 network:

+ +
user@C:~$ ping6 64:ff9b::203.0.113.16
+PING 64:ff9b::192.0.2.16(64:ff9b::c000:210) 56 data bytes
+64 bytes from 64:ff9b::cb00:7110: icmp_seq=1 ttl=63 time=1.13 ms
+64 bytes from 64:ff9b::cb00:7110: icmp_seq=2 ttl=63 time=4.48 ms
+64 bytes from 64:ff9b::cb00:7110: icmp_seq=3 ttl=63 time=15.6 ms
+64 bytes from 64:ff9b::cb00:7110: icmp_seq=4 ttl=63 time=4.89 ms
+^C
+--- 64:ff9b::203.0.113.16 ping statistics ---
+4 packets transmitted, 4 received, 0% packet loss, time 3004ms
+rtt min/avg/max/mdev = 1.136/6.528/15.603/5.438 ms
+ +

Figure 1 - IPv4 TCP from an IPv6 node

+ +

See the further reading below to see how to enable IPv4 nodes to start communication.

+ +

Stopping Jool

+ +

To shut down Jool, revert the modprobe using the -r flag:

+ +
user@T:~# /sbin/modprobe -r jool
+ +

Further Reading

+ +
    +
  1. An IPv4 “outside†node cannot start communication because it “sees†the IPv6 network as an IPv4 private network behind a NAT. To remedy this, Jool enables you to configure “port forwardingâ€. See here if you’re interested.
  2. +
  3. There’s a discussion on the IPv4 pool.
  4. +
  5. The DNS64 document will tell you how to make the prefix-address-hack transparent to users.
  6. +
  7. Please consider the MTU issues before releasing.
  8. +
  9. There’s also an alternate stateful run. Perhaps it can help you see things from a better perspective.
  10. +
+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/en/mod-run-vanilla.html b/doc/usr/_site/en/mod-run-vanilla.html new file mode 100644 index 000000000..8db74f113 --- /dev/null +++ b/doc/usr/_site/en/mod-run-vanilla.html @@ -0,0 +1,250 @@ + + + + + Basic SIIT Run + + + + + +
+
+ +
+ +
+
+ +

Documentation > Runs > SIIT

+ +

Basic SIIT Run

+ +

Index

+ +
    +
  1. Introduction
  2. +
  3. Sample Network
  4. +
  5. Jool
  6. +
  7. Testing
  8. +
  9. Stopping Jool
  10. +
  11. Further reading
  12. +
+ +

Introduction

+ +

This document explains how to run Jool in SIIT mode. Follow the link for more details on what to expect.

+ +

Software-wise, only a successful install of Jool’s kernel module is required. The userspace application is out of the scope of this document on purpose.

+ +

In case you’re wondering, you can follow along these tutorials using virtual machines or alternate interface types just fine (Jool is not married to physical “ethX†interfaces).

+ +

Sample Network

+ +

You don’t need all the nodes shown in the diagram to follow along; you can get away with only A, T and V; the rest are very similar to A and V and are shown for illustrative purposes only.

+ +

Figure 1 - Sample Network

+ +

We will pretend I have address block 198.51.100.8/29 to distribute among my IPv6 nodes.

+ +

Jool requires T to be Linux. The rest can be anything you want, so long as it implements the network protocol it’s connected to. Also, you are free to configure the networks using any manager you want.

+ +

For the sake of simplicity however, the examples below assume every node is Linux and everything is being configured statically using the well-known ip command (and friends). Depending on your distro, your mileage might vary on how to get the network manager out of the way (assuming that’s what you want). Just to clarify, the point of service network-manager stop is to claim control over your interface addresses and routes (otherwise the ip commands might be ineffectual).

+ +

Also to simplify, routing will be reduced to default all unknown traffic towards T. Note that there is nothing martian about anyone’s configuration otherwise.

+ +

This is nodes A through E:

+ +
user@A:~# service network-manager stop
+user@A:~# /sbin/ip link set eth0 up
+user@A:~# # Replace ".8" depending on which node you're on.
+user@A:~# /sbin/ip addr add 2001:db8::198.51.100.8/120 dev eth0
+user@A:~# /sbin/ip route add default via 2001:db8::198.51.100.1
+ +

Nodes V through Z:

+ +
user@V:~# service network-manager stop
+user@V:~# /sbin/ip link set eth0 up
+user@V:~# # Replace ".16" depending on which node you're on.
+user@V:~# /sbin/ip addr add 192.0.2.16/24 dev eth0
+user@V:~# /sbin/ip route add default via 192.0.2.1
+ +

Node T:

+ +
user@T:~# service network-manager stop
+user@T:~# 
+user@T:~# /sbin/ip link set eth0 up
+user@T:~# /sbin/ip addr add 2001:db8::198.51.100.1/120 dev eth0
+user@T:~# 
+user@T:~# /sbin/ip link set eth1 up
+user@T:~# /sbin/ip addr add 192.0.2.1/24 dev eth1
+ +

Because we haven’t turned T into a translator yet, nodes A through E still cannot interact with V through Z, but you might want to make sure T can ping everyone before continuing.

+ +

The only caveat you need to keep in mind before inserting Jool is that you need to get rid of offloads in the translating machine. Do that by means of ethtool:

+ +
user@T:~# ethtool --offload eth0 tso off
+user@T:~# ethtool --offload eth0 ufo off
+user@T:~# ethtool --offload eth0 gso off
+user@T:~# ethtool --offload eth0 gro off
+user@T:~# ethtool --offload eth0 lro off
+user@T:~# ethtool --offload eth1 tso off
+user@T:~# ethtool --offload eth1 ufo off
+user@T:~# ethtool --offload eth1 gso off
+user@T:~# ethtool --offload eth1 gro off
+user@T:~# ethtool --offload eth1 lro off
+ +

(If it complains it cannot change something, keep in mind it can already be off; run sudo ethtool --show-offload [interface] to figure it out.)

+ +

Jool

+ +

This is the insertion syntax:

+ +
user@T:~# /sbin/modprobe jool_siit \
+	[pool6=<IPv6 prefix>] \
+	[blacklist=<IPv4 prefixes>] \
+	[pool6791=<IPv4 prefixes>] \
+	[disabled]
+
+ +

These are the arguments:

+ +
    +
  • pool6 (short for “IPv6 poolâ€) is the prefix the translation mechanism will be appending and removing from the addresses of the packets.
    +This is optional because you might want to use the EAM table instead.
  • +
  • blacklist represents IPv4 addresses Jool will not translate using the pool6 prefix (ie. this does not affect EAMT translation).
    +You can insert up to five comma-separated blacklist prefixes during a modprobe. If you need more, use the userspace application.
  • +
  • pool6791 is a secondary IPv4 pool used for something slightly more cryptic. You might rather want to read its explanation after you’ve nailed the basics from this walkthrough.
    +If this pool is empty, Jool will fall back to use this own node’s natural source address towards the destination node.
    +You can insert up to five comma-separated pool6791 prefixes during a modprobe. If you need more, use the userspace application.
  • +
  • disabled starts Jool inactive. If you’re using the userspace application, you can use it to ensure you’re done configuring before your traffic starts getting translated. The EAM walkthrough exemplifies its use.
    +If not present, Jool starts translating traffic right away.
  • +
+ +

The following suffices for our sample network.

+ +
user@T:~# /sbin/modprobe jool_siit pool6=2001:db8::/96
+
+ +

That means the IPv6 representation of any IPv4 address is going to be 2001:db8::<IPv4 address>. See below for examples.

+ +

Testing

+ +

If something doesn’t work, try the FAQ.

+ +

Try to ping A from V like this:

+ +
user@V:~$ ping 198.51.100.8
+PING 198.51.100.8 (198.51.100.8) 56(84) bytes of data.
+64 bytes from 198.51.100.8: icmp_seq=1 ttl=63 time=7.45 ms
+64 bytes from 198.51.100.8: icmp_seq=2 ttl=63 time=1.64 ms
+64 bytes from 198.51.100.8: icmp_seq=3 ttl=63 time=4.22 ms
+64 bytes from 198.51.100.8: icmp_seq=4 ttl=63 time=2.32 ms
+^C
+--- 198.51.100.8 ping statistics ---
+4 packets transmitted, 4 received, 0% packet loss, time 3006ms
+rtt min/avg/max/mdev = 1.649/3.914/7.450/2.249 ms
+ +

Then ping V from A:

+ +
user@A:~$ ping6 2001:db8::192.0.2.16
+PING 2001:db8::192.0.2.16(2001:db8::c000:210) 56 data bytes
+64 bytes from 2001:db8::c000:210: icmp_seq=1 ttl=63 time=3.57 ms
+64 bytes from 2001:db8::c000:210: icmp_seq=2 ttl=63 time=10.5 ms
+64 bytes from 2001:db8::c000:210: icmp_seq=3 ttl=63 time=1.38 ms
+64 bytes from 2001:db8::c000:210: icmp_seq=4 ttl=63 time=2.63 ms
+^C
+--- 2001:db8::192.0.2.16 ping statistics ---
+4 packets transmitted, 4 received, 0% packet loss, time 3003ms
+rtt min/avg/max/mdev = 1.384/4.529/10.522/3.546 ms
+ +

How about hooking up a server in X and access it from D:

+ +

Figure 1 - IPv6 TCP from an IPv4 node

+ +

Then maybe another one in C and request from W:

+ +

Figure 2 - IPv4 TCP from an IPv6 node

+ +

Stopping Jool

+ +

To shut down Jool, revert the modprobe using the -r flag:

+ +
user@T:~# /sbin/modprobe -r jool_siit
+ +

Further reading

+ +

Here are some logical follow-ups if you want to read more:

+ + + + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/en/mtu.html b/doc/usr/_site/en/mtu.html new file mode 100644 index 000000000..c8017470f --- /dev/null +++ b/doc/usr/_site/en/mtu.html @@ -0,0 +1,133 @@ + + + + + MTU and Fragmentation + + + + + +
+
+ +
+ +
+
+ +

Documentation > Miscellaneous > MTU and Fragmentation

+ +

MTU and Fragmentation

+ +

Problem Statement

+ +

There’s one major difference between IPv4 and IPv6 which an IP Translator alone cannot make up for.

+ +

The IPv4 header “features†a flag called Don’t Fragment (DF). It dictates whether the source allows routers to fragment the packet.

+ +

In IPv6, packets can never be fragmented by routers. It’s as if DF was always on.

+ +

When there’s a translator in the middle, an IPv4 packet which can be fragmented becomes an IPv6 packet that must not be fragmented.

+ +

So what happens if the packet is too big?

+ +

(Actual packet sizes are different due to headers changes, but you get the point.)

+ +

Fig.1 - MTU flow fail

+ +

It’s implementation defined. If n4 is smart, it will try to decrease the lenght of the packet. If it’s not, the packet will never reach n6.

+ +

Proper implementations today actually use Path MTU discovery and therefore never unset the DF flag. Still, stubborn or legacy code is not unheard of.

+ +

By the way: when you want to know a link’s MTU, ask Linux:

+ +
$ ip link
+(...)
+2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
+    link/ether 08:00:27:bf:a6:6e brd ff:ff:ff:ff:ff:ff
+
+ +

Solution

+ +

If you know the smallest MTU across all your IPv6 networks, tell T about it:

+ +

Fig.2 - Proper Network

+ +

T knows it’s translating, so it knows it has to fragment even though it’s sort of an IPv6 router.

+ +

Jool used to have a flag called --minMTU6 to do this. Because deferring fragmentation to the kernel is considered better practice, you now configure it on Linux starting from Jool 3.3.

+ +
ip link set dev eth0 mtu 1300
+
+ +

And voilà:

+ +

Fig.3 - MTU flow succeeds

+ +

If you don’t know the minimum MTU of your IPv6 networks, assign 1280. Every IPv6 node must be able to handle at least 1280 bytes per packet by standard.

+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/en/offloading.html b/doc/usr/_site/en/offloading.html new file mode 100644 index 000000000..e72d1872b --- /dev/null +++ b/doc/usr/_site/en/offloading.html @@ -0,0 +1,169 @@ + + + + + Offloading + + + + + +
+
+ +
+ +
+
+ +

Documentation > Miscellaneous > Offloading

+ +

Offload

+ +

Index

+ +
    +
  1. Theory
  2. +
  3. Practice
  4. +
+ +

Theory

+ +

Offloading is a technique meant to optimize network throughput. Born from the observation that a single large packet is significantly faster to process than several small ones, the idea is to combine several of them from a common stream on reception, and then pretend, to the eyes of the rest of the system, that the new packet was the one received from the cord all along.

+ +

Here’s an example for the visual-oriented. This is how packets are normally processed (no offloading):

+ +

Fig.1 - No offload

+ +

(For the moment, assume the Internet layer holds IPv4.)

+ +

There are two streams here. The yellow one consists of three very small packets:

+ +
    +
  1. 1st packet: bytes 0 through 9.
  2. +
  3. 2nd packet: bytes 10 to 29.
  4. +
  5. 3rd packet: bytes 30 to 39.
  6. +
+ +

And the blue one has somewhat larger packets:

+ +
    +
  1. bytes 0 to 599
  2. +
  3. bytes 600 to 1199
  4. +
  5. bytes 1200 to 1799
  6. +
+ +

There are several ways to implement offloading. Pictured below is a simplified version of what a NIC could perhaps do, rather than the above:

+ +

Fig.2 - Offload done right

+ +

Simply put, several contiguous packets are merged together into an equivalent, larger one. The card could for example do this by merging IP fragments or even TCP segments (even if TCP sits two layers above). It doesn’t matter as long as the change can be seen as completely transparent as far as the transfer of data is concerned.

+ +

And yes, we’re now dealing with heavier pieces of data, but truth be told, most of the Internet and Transport layers’ activity lies in the first few bytes of each packet (i.e. headers). So we mostly get to process n packets for the price of one.

+ +

This is all fine and dandy, but you start running into trouble when the system is supposed to forward the data (rather than just consuming it). Say the hardware has a Maximum Transmission Unit (MTU) of 1500; this is what happens:

+ +

Fig.3 - Offload on a router

+ +

In step 1 the aggregation happens, which makes step 2 very fast, but then because the assembled packet of the blue stream is too big for the outgoing interface (size 1800 > max 1500), the packet gets fragmented in step 3, which is inefficient.

+ +

More importantly, if the emitter performed path MTU discovery, then the optimum MTU computed will be lost in step 1 (because it is not stored in the packet; it is indicated by its size, which step 1 mangles). Because the packet’s Don’t Fragment flag is going to be ON, then the packet will be eventually and irremediably dropped as soon as it reaches a lower MTU. Hence, we just created a black hole.

+ +

(Well, not completely. A number of conditions are required for the NIC to run offloading. These conditions might rarely and randomly not be met, so certain packets will occasionally not be aggregated, and as such will slip past the hole. If your transport protocol retries enough, instead of having a complete denial of service, you get an extremely - EXTREMELY - slow network.)

+ +

When the forwarding machine is an IPv6 router (or, in Jool’s case, an SIIT/NAT64 translating from IPv4 to 6), this is more immediately a problem because IPv6 routers are not supposed to fragment packets (they are expected to just drop the packet and return an ICMP error message). So your packet will be lost in step 3 even if the Don’t Fragment flag of the original packet was not set.

+ +

If you’re running Jool in a guest virtual machine, something important to keep in mind is that you might rather or also have to disable offloads in the VM host’s uplink interface.

+ +

And that’s it. Offloading for leaf nodes is great, offloading for routers is trouble.

+ +

Practice

+ +

So, if you want to run Jool, you want to turn off offloading. This is how we start doing it (your mileage might vary):

+ +
$ sudo apt-get install ethtool
+ +

Then apply this to every relevant interface:

+ +
$ sudo ethtool --offload [your interface here] gro off
+ +

“gro†is “Generic Receive Offloadâ€. Perhaps it’s simply because our kernels don’t support them, but we currently don’t know for sure why we don’t also have to turn off lro (Large receive offload), gso (Generic segmentation offload) and perhaps others (see man ethtool). If you’re not sure, I’d say playing safe would equal getting rid of every variant you see:

+ +
$ sudo ethtool --offload [your interface here] tso off
+$ sudo ethtool --offload [your interface here] ufo off
+$ sudo ethtool --offload [your interface here] gso off
+$ sudo ethtool --offload [your interface here] gro off
+$ sudo ethtool --offload [your interface here] lro off
+ +

(If you can shed more light into the subject, please let us know - jool@nic.mx.)

+ +

Sometimes ethtool claims it cannot change some of the variants, but keep in mind this is usually because it is not supported and hence it wasn’t on in the first place. Have a look at your configuration using

+ +
$ sudo ethtool --show-offload [your interface here]
+ +

Cheers!

+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/en/pool4.html b/doc/usr/_site/en/pool4.html new file mode 100644 index 000000000..04b37d462 --- /dev/null +++ b/doc/usr/_site/en/pool4.html @@ -0,0 +1,123 @@ + + + + + IPv4 Transport Address Pool + + + + + +
+
+ +
+ +
+
+ +

Documentation > Runs > Stateful NAT64 > IPv4 Pool

+ +

IPv4 Transport Address Pool

+ +

If you’re familiar with iptables and masquerade, all you probably need to know is that the following:

+ +
jool --pool4 --add --tcp 192.0.2.1 5000-6000
+
+ +

is spiritually equivalent to

+ +
ip addr add 192.0.2.1 dev (...)
+iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE --to-ports 5000-6000
+
+ +
+ +

Just like a NAT, a Stateful NAT64 allows an indeterminate amount of clients to share a few IPv4 addresses by strategically distributing their traffic accross its own transport address domain.

+ +

We call this “transport address domain†the “IPv4 poolâ€. (“pool4†for short.)

+ +

To illustrate:

+ +

TODO

+ +

In Jool, we write transport addresses in the form <IP address>#<port> (as opposed to <IP address>:<port>). The packet above has source IP address 2001:db8::8, source port (TCP or UDP) 5123, destination address 64:ff9b::192.0.2.24, and destination port 80.

+ +

Assuming pool4 holds transport addresses 203.0.113.1#5000 through 203.0.113.1#6000, one possible translation of the packet is this:

+ +

TODO

+ +

Another one, equally valid, is this:

+ +

TODO

+ +

NAT64s are not overly concerned with retaining source ports. In fact, for security reasons, recommendations exist to drive NAT64s as unpredictable as possible.

+ +

What you need to be aware of is that your NAT64 machine needs to reserve transport addresses for translation purposes. If T tries to open a connection from transport address 192.0.2.1#5000 and at the same time a translation yields source transport address 192.0.2.1#5000, evil things will happen. iptables’s NAT also suffers from this quirk.

+ +

Linux’s ephemeral port range defaults to 32768-61000. Therefore, Jool’s port range for any given address defaults to 61001-65535. You can change the former by tweaking sysctl sys.net.ipv4.ip_local_port_range, and the latter by means of --pool4 --add userspace application commands.

+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/en/rfc6791.html b/doc/usr/_site/en/rfc6791.html new file mode 100644 index 000000000..915818ee1 --- /dev/null +++ b/doc/usr/_site/en/rfc6791.html @@ -0,0 +1,147 @@ + + + + + RFC 6791 + + + + + +
+
+ +
+ +
+
+ +

Documentation > Runs > SIIT > RFC 6791

+ +

RFC 6791

+ +

Suppose n4 is trying to reach n6, but there is a problem (eg. the packet is too big), and R sends n4 an ICMP error. T is translating using prefix 2001:db8::/96.

+ +

Figure 1 - Network

+ +

R’s packet will have the following addresses:

+ + + + + + + + + + + + + + +
SourceDestination
4000::12001:db8::192.0.2.13
+ +

T is in trouble because the source address of the packet lacks the translation prefix, so an IPv4 address cannot be extracted from it.

+ +

Normally, you don’t have many IPv4 addresses, so it’s not reasonable to grant one to every node in your IPv6 side. Due to their generally forwarding-only purpose, routers are good candidates for untranslatable addresses. On the other hand, ICMP errors are important, and a NAT64 should not drop it simply because it comes from a router.

+ +

Stateful NAT64s do not have this problem because they render every IPv6 address translatable (since all IPv6 nodes are sharing the NAT64’s IPv4 addresses). To sort things out, an SIIT module is supposed to keep a pool of reserved addresses. Upon receiving an ICMP error with an untranslatable source, Jool should assign a random one from this pool.

+ +

Please consider the following paragraphs from RFC 6791 while deciding the size and addresses of your RFC 6791 pool:

+ +
The source address used SHOULD NOT cause the ICMP packet to be
+discarded.  It SHOULD NOT be drawn from [RFC1918] or [RFC6598]
+address space, because that address space is likely to be subject to
+unicast Reverse Path Forwarding (uRPF) [RFC3704] filtering.
+
+(...)
+
+Another consideration for source selection is that it should be
+possible for the IPv4 recipients of the ICMP message to be able to
+distinguish between different IPv6 network origination of ICMPv6
+messages (for example, to support a traceroute diagnostic utility
+that provides some limited network-level visibility across the IPv4/
+IPv6 translator).  This consideration implies that an IPv4/IPv6
+translator needs to have a pool of IPv4 addresses for mapping the
+source address of ICMPv6 packets generated from different origins, or
+to include the IPv6 source address information for mapping the source
+address by others means.  Currently, the TRACEROUTE and MTR [MTR] are
+the only consumers of translated ICMPv6 messages that care about the
+ICMPv6 source address.
+
+(...)
+
+If a pool of public IPv4 addresses is configured on the translator,
+it is RECOMMENDED to randomly select the IPv4 source address from the
+pool.  Random selection reduces the probability that two ICMP
+messages elicited by the same TRACEROUTE might specify the same
+source address and, therefore, erroneously present the appearance of
+a routing loop.
+
+ +

The SIIT walkthrough shows how to set the pool during a modprobe. You can also edit it later via the userspace application.

+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/en/static-bindings.html b/doc/usr/_site/en/static-bindings.html new file mode 100644 index 000000000..a973241cf --- /dev/null +++ b/doc/usr/_site/en/static-bindings.html @@ -0,0 +1,157 @@ + + + + + Static Bindings + + + + + +
+
+ +
+ +
+
+ +

Documentation > Runs > Stateful NAT64 > Static Bindings

+ +

Static Bindings

+ +

When a translation from IPv6 to IPv4 happens, very little is left of the headers of the original packet. Because of this, Jool has to remember who tried to speak with whom and on which ports, so when answers arrive, it can figure out which conversation the packet belongs to, and mangle the headers correctly. This is not only a quirk of Stateful NAT64; traditional Stateful NAT lives it as well.

+ +

The database the bindings are stored in is called hte “Binding Information Base†(BIB). Each record in the database contains an IPv4 address A and its port b, and an IPv6 address C and its port d. The record basically says, “If a packet towards address A on port b arrives, translate and forward it to address C on port dâ€.

+ +

Why do you need to know that? A basic Stateful NAT64 installation will give your IPv6 network access to your average IPv4 Internet, but it’s a little or very annoying that IPv4 nodes cannot talk to IPv6 ones without the latter having started the conversations. However, NAT64 does inherit from NAT the ability to configure manual bindings between inner and outer nodes (“Port forwardingâ€). If you want to say, publish a server on your IPv6 network for the IPv4 nodes to see, then you have to hack a manual BIB entry into the database.

+ +

Fig.1 - Network design

+ +

So what we have here is, the IPv6 nodes can see a HTTP server by querying 1::1 on port 80. What we want is to make it available to the outside via the 1.2.3.4 address on port 5678 (We’ll use a different port simply because we can).

+ +

To create a mapping, you have to ask the userspace application something in the lines of this:

+ +
$ jool --bib --add <protocols> <Ipv6 address>#<"IPv6" port> <IPv4 address>#<"IPv4" port>
+
+ +

which in our example will translate into:

+ +
$ jool --bib --add --tcp 1::1#80 1.2.3.4#5678
+
+ +
+

If it throws you an error, run dmesg to know the cause. Most likely you’re using an IPv4 address you didn’t add to the pool. Add the address like this:

+ +
$ jool --pool4 --add 1.2.3.4
+
+ +

Then retry the insertion of the mapping.

+
+ +

And have fun.

+ +

Fig.2 - Test

+ +

Run an operationless version of the --bib command to display your current database:

+ +
$ jool --bib
+TCP:
+[Static] 1.2.3.4#5678 - 1::1#80
+  (Fetched 1 entries.)
+UDP:
+  (empty)
+ICMP:
+  (empty)
+
+ +

If your output shows a more populated table, it’s because Jool has been translating traffic. Static (manual) and dynamic (created by Jool) mappings belong to the same database.

+ +

Note that there are not one, but three different BIB tables. We added the entry only to the TCP BIB because we used the --tcp parameter.

+ +
$ # Add an entry to the UDP BIB
+$ jool --bib --add --udp 1::1#80 1.2.3.4#5678
+$ # Add an entry to the UDP and ICMP BIBs
+$ jool --bib --add --udp --icmp 1::1#80 1.2.3.4#5678
+$ # Show the three tables.
+$ jool --bib --tcp --udp --icmp
+$ # Show the three BIBs, quick version.
+$ jool --bib
+$ # (We didn't include any protocols, so Jool assumed we wanted to show every table.)
+
+ +

“Hold on!â€, I hear you scream. “The ICMP protocol doesn’t use ports!â€. But it does use ICMP identifiers, which are very similar. It doesn’t really make much sense to create manual ICMP mappings, though, since ICMP identifiers are often unpredictable (as opposed to destination ports).

+ +

If you need to remove the binding, replace “add†for “remove†and specify either side of the equation (Mappings are unique on both sides):

+ +
$ jool --bib --remove --tcp 1::1#80
+or
+$ jool --bib --remove --tcp 1.2.3.4#5678
+or
+$ # This won't hurt you (and will make sure you're removing exactly what you want to remove).
+$ jool --bib --remove --tcp 1::1#80 1.2.3.4#5678
+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/en/usr-flags-atomic.html b/doc/usr/_site/en/usr-flags-atomic.html new file mode 100644 index 000000000..5d6f93682 --- /dev/null +++ b/doc/usr/_site/en/usr-flags-atomic.html @@ -0,0 +1,269 @@ + + + + + Atomic Fragments + + + + + +
+
+ +
+ +
+
+ +

Documentation > Userspace Application > Flags > --global > Atomic Fragments

+ +

Atomic Fragments

+ +

Index

+ +
    +
  1. Overview
  2. +
  3. Flags +
      +
    1. --allow-atomic-fragments
    2. +
    3. --setDF
    4. +
    5. --genFH
    6. +
    7. --genID
    8. +
    9. --boostMTU
    10. +
    +
  4. +
+ +

Overview

+ +

“Atomic fragments†are IPv6 packets which are not fragmented but still contain a (redundant) Fragment Header. They are a hack in the NAT64 specification that intends to leverage the difference between the IPv4 minimum MTU (68) and the IPv6 minimum MTU (1280).

+ +

Atomic fragments are known to have security implications and there is official ongoing effort to deprecate them. Even RFC 6145 (ie. SIIT’s core document) warns about issues regarding the hack.

+ +

From Jool’s perspective, there are also technical drawbacks to allowing atomic fragments. The Linux kernel is particularly lacking when it comes to recognizing redundant fragment headers, so if Jool is generating one, Linux might fragment the packet in a funny way:

+ +

Figure 1 - what could possibly go wrong?

+ +

(Jool 3.2 and below used to avoid this by not deferring fragmentation to the kernel, but this introduced other-subtler issues.)

+ +

As a consequence, Jool 3.3’s default configuration disables atomic fragments. You should most likely never change this. The options described later in this document all have to do with atomic fragments and are now considerered deprecated. In fact, we intend to wipe them out as soon as (and if) draft-ietf-6man-deprecate-atomfrag-generation is upgraded to RFC status.

+ +

Let it be known that we fully condone the deprecation of atomic fragments.

+ +

Flags

+ +

--allow-atomic-fragments

+ + + +

This is a short version of all the following flags.

+ +

This:

+ +
$(jool) --allow-atomic-fragments true
+ +

is the same as

+ +
$(jool) --setDF true
+$(jool) --genFH true
+$(jool) --genID false
+$(jool) --boostMTU false
+ +

This is the default behaviour requested by RFC 6145, and the IETF is hopefully going to deprecate it in the future. It is not Jool’s default and we do not recommend it.

+ +

Also this:

+ +
$(jool) --allow-atomic-fragments false
+ +

is the same as

+ +
$(jool) --setDF false
+$(jool) --genFH false
+$(jool) --genID true
+$(jool) --boostMTU true
+ +

This is an alternate mode defined both by RFC 6145 and draft-ietf-6man-deprecate-atomfrag-generation. The latter mandates this behaviour and is Jool 3.3’s default.

+ +

Also:

+ +

The separation of the four flags exists for historic reasons only; our interpretation of the RFC used to be wrong. You should probably never manage them individually. It doesn’t make sense to set --setDF as false but --setFH as true, for example. The relationship between --setDF and --boostMTU is also particularly delicate; see below for details.

+ +

--setDF

+ +
    +
  • Name: DF flag always on
  • +
  • Type: Boolean
  • +
  • Default: OFF
  • +
  • Modes: Both (SIIT and Stateful)
  • +
  • Translation direction: IPv6 to IPv4
  • +
+ +

The logic is best described in pseudocode form:

+ +
	If the incoming packet has a fragment header:
+		the outgoing packet's DF flag will be false.
+	otherwise:
+		if --setDF is true
+			the outgoing packet's DF flag will be true.
+		otherwise:
+			if outgoing packet's length > 1260
+				the outgoing packet's DF flag will be true.
+			otherwise:
+				the outgoing packet's DF flag will be false.
+
+ +

Section 6 of RFC 6145 describes the rationale.

+ +

Also see --boostMTU for an important gotcha.

+ +

--genFH

+ +
    +
  • Name: Generate IPv6 Fragment Header
  • +
  • Type: Boolean
  • +
  • Default: OFF
  • +
  • Modes: Both (SIIT and Stateful)
  • +
  • Translation direction: IPv4 to IPv6
  • +
+ +

If this is ON, Jool will always generate an “IPv6 Fragment Header†if the incoming IPv4 Packet does not set the DF flag.

+ +

If this is OFF, then Jool will not generate the “IPv6 Fragment Header†whether the Flag of the incoming IPv4 Packet is set or not set, unless the incoming packet is a fragment, the “IPv6 Fragment Header†will be generated.

+ +

This is the flag that causes Linux to flip out when it needs to fragment. It’s broken, so activate at your own risk.

+ +

--genID

+ +
    +
  • Name: Generate IPv4 identification
  • +
  • Type: Boolean
  • +
  • Default: ON
  • +
  • Modes: Both (SIIT and Stateful)
  • +
  • Translation direction: IPv6 to IPv4
  • +
+ +

All IPv4 packets contain an Identification field. IPv6 packets only contain an Identification field if they have a Fragment header.

+ +

If the incoming IPv6 packet has a fragment header, the IPv4 header’s Identification field is always copied from the low-order bits of the IPv6 fragment header’s Identification value.

+ +

Otherwise:

+ +
    +
  • If --genID is OFF, the IPv4 header’s Identification fields are set to zero.
  • +
  • If --genID is ON, the IPv4 headers’ Identification fields are set randomly.
  • +
+ +

--boostMTU

+ +
    +
  • Name: Decrease MTU failure rate
  • +
  • Type: Boolean
  • +
  • Default: ON
  • +
  • Modes: Both (SIIT and Stateful)
  • +
  • Translation direction: IPv4 to IPv6 (ICMP errors only)
  • +
+ +

When a packet is too big for a link’s MTU, routers generate Packet too Big ICMP errors on IPv6 and Fragmentation Needed ICMP errors on IPv4. These error types are roughly equivalent, so Jool translates Packet too Bigs into Fragmentation Neededs and vice-versa.

+ +

These ICMP errors are supposed to contain the offending MTU so the emitter can resize and resend its packets accordingly.

+ +

The minimum MTU for IPv6 is 1280. The minimum MTU for IPv4 is 68. Therefore, Jool can find itself wanting to report an illegal MTU while translating a Fragmentation Needed (v4) into a Packet too Big (v6).

+ +
    +
  • If --boostMTU is ON, the minimum IPv6 MTU Jool will ever report is 1280.
  • +
  • If --boostMTU is OFF, Jool will not try to mangle MTUs.
  • +
+ +

In reality, Jool still has to mangle the MTU values to account for the difference between the IPv4 header’s basic length (20) and the IPv6 header’s (40). An IPv6 packet can be 20 bytes larger than the IPv4 MTU because it’s going to lose 20 bytes when its IPv6 header is replaced by an IPv4 header.

+ +

Here’s the full algorithm:

+ +
	IPv6_error.MTU = IPv4_error.MTU + 20
+	if --boostMTU == true AND IPv6_error.MTU < 1280
+		IPv6_error.MTU = 1280
+
+ +

Section 6 of RFC 6145 describes the rationale.

+ +

Notice, if --setDF and --boostMTU are both ON and there’s an IPv4 link with MTU < 1260, you have an endless loop similar to the MTU hassle:

+ +
    +
  1. IPv6 sender transmits an IPv6 packet sized 1280.
  2. +
  3. Jool translates it into an IPv4 packet sized 1260 with DF=1.
  4. +
  5. IPv4 router with outbound interface with MTU < 1260 generates ICMPv6 Frag Needed with MTU=1000 (or whatever).
  6. +
  7. Jool translates it to ICMPv6 Packet Too Big with MTU=1280.
  8. +
  9. Goto 1.
  10. +
+ +

Thanks to Tore Anderson for noticing (and mostly writing) this quirk.

+ + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/en/usr-flags-bib.html b/doc/usr/_site/en/usr-flags-bib.html new file mode 100644 index 000000000..12e39f41a --- /dev/null +++ b/doc/usr/_site/en/usr-flags-bib.html @@ -0,0 +1,223 @@ + + + + + --bib + + + + + +
+
+ +
+ +
+
+ +

Documentation > Userspace Application > Flags > --bib

+ +

--bib

+ +

Index

+ +
    +
  1. Description
  2. +
  3. Syntax
  4. +
  5. Options +
      +
    1. Operations
    2. +
    3. <protocols>
    4. +
    5. --numeric
    6. +
    7. --csv
    8. +
    9. <bib4>, <bib6>
    10. +
    +
  6. +
  7. Examples
  8. +
+ +

Description

+ +

Interacts with Jool’s Binding Information Base (BIB). If you don’t know what that is, please follow the link before continuing.

+ +

Syntax

+ +
jool --bib <protocols> [--display] [--numeric] [--csv]
+jool --bib <protocols> --count
+jool --bib <protocols> --add <bib4> <bib6>
+jool --bib <protocols> --remove (<bib4> | <bib6> | <bib4> <bib6>)
+
+ +

Options

+ +

Operations

+ +
    +
  • --display: The BIB tables are printed in standard output. This is the default operation.
  • +
  • --count: The number of entries per BIB table are printed in standard output.
  • +
  • --add: Combines <bib6> and <bib4> into a BIB entry, and uploads it to Jool’s tables.
  • +
  • --remove: Deletes from the tables the BIB entry described by <bib6> and/or <bib4>.
  • +
+ +

<protocols>

+ +
<protocols> := [--tcp] [--udp] [--icmp]
+
+ +

The command will only operate on the tables mentioned here. If you omit this entirely, Jool will fall back to operate on all three tables.

+ +

--numeric

+ +

By default, the application will attempt to resolve the name of the IPv6 node of each BIB entry. If your nameservers aren’t answering, this will slow the output down.

+ +

Use --numeric to turn this behavior off.

+ +

--csv

+ +

By default, the application will print the tables in a relatively console-friendly format.

+ +

Use --csv to print in CSV format, which is spreadsheet-friendly.

+ +

<bib4>, <bib6>

+ +
<bib4> := <IPv4 address>#(<port> | <ICMP identifier>)
+<bib6> := <IPv6 address>#(<port> | <ICMP identifier>)
+
+ +

A BIB entry is composed of a IPv6 transport address (the IPv6 node’s connection identifiers) and a IPv4 transport address (the connection identifiers Jool is using to mask the IPv6 ones).

+ +

If you’re adding or removing a BIB, you provide both addresses via these parameters.

+ +

Note that the <bib4> component must be a member of Jool’s IPv4 pool, so make sure you have registered it there first.

+ +

Within a BIB table, every IPv4 transport address is unique. Within a BIB table, every IPv6 transport address is also unique. Therefore, If you’re removing a BIB entry, you actually only need to provide one of them. You can still input both to make sure you’re deleting exactly what you want to delete, though.

+ +

Examples

+ +

Assumptions:

+ +
    +
  • 4.4.4.4 belongs to the IPv4 pool.
  • +
  • The name of 6::6 is “potato.mxâ€.
  • +
  • 6::6 already spoke to a IPv4 node recently, so the database will not start empty.
  • +
+ +

Display the entire database:

+ +
$ jool --bib --display
+TCP:
+[Dynamic] 4.4.4.4#1234 - potato.mx#1234
+  (Fetched 1 entries.)
+UDP:
+  (empty)
+ICMP:
+  (empty)
+ +

Publish a couple of TCP services:

+ +
# jool --bib --add --tcp 6::6#6 4.4.4.4#4
+# jool --bib --add --tcp 6::6#66 4.4.4.4#44
+ +

Display the TCP table:

+ +
$ jool --bib --display --tcp
+TCP:
+[Static] 4.4.4.4#4 - potato.mx#6
+[Static] 4.4.4.4#44 - potato.mx#66
+[Dynamic] 4.4.4.4#1234 - potato.mx#1234
+  (Fetched 3 entries.)
+ +

Same, but do not query the DNS:

+ +
$ jool --bib --display --tcp --numeric
+TCP:
+[Static] 4.4.4.4#4 - 6::6#6
+[Static] 4.4.4.4#44 - 6::6#66
+[Dynamic] 4.4.4.4#1234 - 6::6#1234
+  (Fetched 3 entries.)
+ +

Publish a UDP service:

+ +
# jool --bib --add --udp 6::6#6666 4.4.4.4#4444
+ +

Dump the database on a CSV file:

+ +
$ jool --bib --display --numeric --csv > bib.csv
+ +

bib.csv

+ +

Display the number of entries in the TCP and ICMP tables:

+ +
$ jool --bib --count --tcp --icmp
+TCP: 3
+ICMP: 0
+ +

Remove the UDP entry:

+ +
# jool --bib --remove --udp 6::6#6666
+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/en/usr-flags-blacklist.html b/doc/usr/_site/en/usr-flags-blacklist.html new file mode 100644 index 000000000..0216d37a2 --- /dev/null +++ b/doc/usr/_site/en/usr-flags-blacklist.html @@ -0,0 +1,161 @@ + + + + + --blacklist + + + + + +
+
+ +
+ +
+
+ +

Documentation > Userspace Application > Flags > --blacklist

+ +

--blacklist

+ +

Index

+ +
    +
  1. Description
  2. +
  3. Syntax
  4. +
  5. Options
  6. +
  7. Examples
  8. +
+ +

Description

+ +

Interacts with Jool’s blacklisted addresses pool.

+ +

The pool dictates which addresses can be translated using the pool6 prefix. Notice EAM has more priority than the prefix, so you don’t have to add an entry to this pool for every EAM entry you need.

+ +

There are some addresses Jool will refuse to translate, regardless of blacklist. These include

+ +
    +
  • The addresses that belong to Jool’s node (because Jool can only be used in a forwarding fashion, currently).
  • +
  • Software addresses (0.0.0.0/8).
  • +
  • Host addresses (127.0.0.0/8).
  • +
  • Link-local addresses (169.254.0.0/16).
  • +
  • Limited broadcast (255.255.255.255/32).
  • +
+ +

Syntax

+ +
jool_siit --blacklist [--display]
+jool_siit --blacklist --count
+jool_siit --blacklist --add <IPv4 prefix>
+jool_siit --blacklist --remove <IPv4 prefix>
+jool_siit --blacklist --flush
+
+ +

Options

+ +
    +
  • --display: The pool’s addresses/prefixes are printed in standard output. This is the default operation.
  • +
  • --count: The number of addresses (not prefixes) in the pool is printed in standard output.
    +For example, if all you have is a /30 prefix, expect “4†as output.
  • +
  • --add: Uploads <IPv4 prefix> to the pool.
  • +
  • --remove: Deletes from the tables the address <IPv4 prefix>.
  • +
  • --flush: Removes all addresses/prefixes from the pool.
  • +
+ +

Examples

+ +

Display the current addresses:

+ +
$ jool_siit --blacklist --display
+192.0.2.0/28
+198.51.100.0/30
+203.0.113.8/32
+  (Fetched 3 prefixes.)
+
+ +

Display only the address count:

+ +
$ jool_siit --blacklist --count
+21
+
+ +

(That’s /28 + /30 + /32 = 16 + 4 + 1)

+ +

Remove a couple of entries:

+ +
# jool_siit --blacklist --remove 192.0.2.0/28
+# jool_siit --blacklist --remove 198.51.100.0/30
+
+ +

Return one entry:

+ +
# jool_siit --blacklist --add 192.0.2.0/28
+
+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/en/usr-flags-eamt.html b/doc/usr/_site/en/usr-flags-eamt.html new file mode 100644 index 000000000..c990dffe3 --- /dev/null +++ b/doc/usr/_site/en/usr-flags-eamt.html @@ -0,0 +1,214 @@ + + + + + --eamt + + + + + +
+
+ +
+ +
+
+ +

Documentation > Userspace Application > Flags > --eamt

+ +

--eamt

+ +

Index

+ +
    +
  1. Description
  2. +
  3. Syntax
  4. +
  5. Options +
      +
    1. Operations
    2. +
    3. --csv
    4. +
    5. <prefix4>, <prefix6>
    6. +
    +
  6. +
  7. Examples
  8. +
+ +

Description

+ +

Interacts with Jool’s Explicit Address Mapping Table (EAMT). See the introduction for a swift overview, our draft summary for more details, or the EAM draft for the full story.

+ +

Syntax

+ +
jool_siit --eamt [--display] [--csv]
+jool_siit --eamt --count
+jool_siit --eamt --add <prefix4> <prefix6> [--force]
+jool_siit --eamt --remove (<prefix4> | <prefix6> | <prefix4> <prefix6>)
+jool_siit --eamt --flush
+
+ +

Options

+ +

Operations

+ +
    +
  • --display: The EAMT is printed in standard output. This is the default operation.
  • +
  • --count: The number of entries in the EAMT are printed in standard output.
  • +
  • --add: Combines <prefix4> and <prefix6> into an EAM entry, and uploads it to Jool’s table.
  • +
  • --remove: Deletes from the table the EAM entry described by <prefix4> and/or <prefix6>.
  • +
  • --flush: Removes all entries from the table.
  • +
+ +

--csv

+ +

By default, the application will print the tables in a relatively console-friendly format.

+ +

Use --csv to print in CSV format, which is spreadsheet-friendly.

+ +

<prefix4>, <prefix6>

+ +
<prefix4> := <IPv4 address>[/<prefix length>]
+<prefix6> := <IPv6 address>[/<prefix length>]
+
+ +

These are the prefixes each record is made out of. See the general EAMT explanation.

+ +

<prefix length> defaults to /32 on <prefix4> and /128 on <prefix6>. Jool automatically zeroizes any suffix from either address if it exists.

+ +

Every prefix is unique accross the table. Therefore, If you’re removing an EAMT entry, you actually only need to provide one of them. You can still input both to make sure you’re deleting exactly what you want to delete, though.

+ +

--force

+ +

By default, EAMT entries are not allowed to overlap. You can use --force while --adding to override this property. When overlapping EAMT entries exist, Jool picks based on longest match prefix.

+ +

For example:

+ + + + + + + + + + + + + + + + + + +
IPv4 PrefixIPv6 Prefix
192.0.2.0/242001:db8:aaaa::/120
192.0.2.8/292001:db8:bbbb::/125
+ +

Address 192.0.2.9 matches 192.0.2.8/29 better than 192.0.2.0/24, so it will get translated as 2001:db8:bbbb::1, not 2001:db8:aaaa::8.

+ +

Notice this creates assymetry. 2001:db8:aaaa::9 gets translated as 192.0.2.9, which in turn gets translated as 2001:db8:bbbb::1. Depending on your use case, this can break communication.

+ +

Overlapping EAMT entries exist to help EAM coexist with IVI. Other use cases might arise in the future.

+ +

Examples

+ +

Add a handful of mappings:

+ +
# jool_siit --eamt --add 192.0.2.1      2001:db8:aaaa::
+# jool_siit --eamt --add 192.0.2.2/32   2001:db8:bbbb::b/128
+# jool_siit --eamt --add 192.0.2.16/28  2001:db8:cccc::/124
+# jool_siit --eamt --add 192.0.2.128/26 2001:db8:dddd::/64
+# jool_siit --eamt --add 192.0.2.192/31 64:ff9b::/127
+ +

Display the new table:

+ +
$ jool_siit --eamt --display
+64:ff9b::/127 - 192.0.2.192/31
+2001:db8:dddd::/64 - 192.0.2.128/26
+2001:db8:cccc::/124 - 192.0.2.16/28
+2001:db8:bbbb::b/128 - 192.0.2.2/32
+2001:db8:aaaa::/128 - 192.0.2.1/32
+  (Fetched 5 entries.)
+ +

Dump the database on a CSV file:

+ +
$ jool_siit --eamt --display --csv > eamt.csv
+ +

eamt.csv

+ +

Display the number of entries in the table:

+ +
$ jool_siit --eamt --count
+5
+ +

Remove the first entry:

+ +
# jool_siit --eamt --remove 2001:db8:aaaa::
+ +

Empty the table:

+ +
# jool_siit --eamt --flush
+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/en/usr-flags-global.html b/doc/usr/_site/en/usr-flags-global.html new file mode 100644 index 000000000..c1592a631 --- /dev/null +++ b/doc/usr/_site/en/usr-flags-global.html @@ -0,0 +1,613 @@ + + + + + --global + + + + + +
+
+ +
+ +
+
+ +

Documentation > Userspace Application > Flags > --global

+ +

--global

+ +

Index

+ +
    +
  1. Description
  2. +
  3. Syntax
  4. +
  5. Examples
  6. +
  7. Keys +
      +
    1. --enable, --disable
    2. +
    3. --address-dependent-filtering
    4. +
    5. --drop-icmpv6-info
    6. +
    7. --drop-externally-initiated-tcp
    8. +
    9. --udp-timeout
    10. +
    11. --tcp-est-timeout
    12. +
    13. --tcp-trans-timeout
    14. +
    15. --icmp-timeout
    16. +
    17. --fragment-arrival-timeout
    18. +
    19. --maximum-simultaneous-opens
    20. +
    21. --source-icmpv6-errors-better
    22. +
    23. --logging-bib
    24. +
    25. --logging-session
    26. +
    27. --zeroize-traffic-class
    28. +
    29. --override-tos
    30. +
    31. --tos
    32. +
    33. --allow-atomic-fragments +
        +
      1. --setDF
      2. +
      3. --genFH
      4. +
      5. --genID
      6. +
      7. --boostMTU
      8. +
      +
    34. +
    35. --amend-udp-checksum-zero
    36. +
    37. --randomize-rfc6791-addresses
    38. +
    39. --mtu-plateaus
    40. +
    +
  8. +
+ +

Description

+ +

Controls several of Jool’s internal variables.

+ +
    +
  • Issue an empty --global command to display the current values of all of Jool’s options.
  • +
  • Enter a key and a value to edit the key’s variable.
  • +
+ +

--global is the default configuration mode, so you never actually need to input that one flag.

+ +

Syntax

+ +
jool_siit [--global]
+jool_siit [--global] <flag key> <new value>
+jool [--global]
+jool [--global] <flag key> <new value>
+
+ +

Examples

+ +

Display the current configuration, keys and values:

+ +
$ jool_siit --global
+
+ +

Same thing, shorter version:

+ +
$ # BTW: This looks very simple, but it still requires Jool's kernel module to be active.
+$ jool_siit
+
+ +

Pause Jool:

+ +
# jool --global --disable
+
+ +

Turn “address dependent filtering†on:

+ +
$ # true, false, 1, 0, yes, no, on and off all count as valid booleans.
+# jool --address-dependent-filtering true
+
+ +

Update the plateaus list:

+ +
# jool_siit --mtu-plateaus "6000, 5000, 4000, 3000, 2000, 1000"
+
+ +

Keys

+ +

The following flag keys are available:

+ +

--enable, --disable

+ +
    +
  • Type: -
  • +
  • Default: Depends on modprobe arguments
  • +
  • Modes: Both (SIIT and Stateful)
  • +
+ +

Resumes and pauses translation of packets, respectively. This might be useful if you want to change more than one configuration parameter at once and you don’t want packets being translated inconsistently while you run the commands.

+ +

(If you don’t want Jool to stop while you reconfigure, don’t worry about this. Use it only if it feels right.)

+ +

Timeouts will not be paused. In other words, BIB/session entries and stored packets and fragments might die while Jool is idle.

+ +

--address-dependent-filtering

+ +
    +
  • Type: Boolean
  • +
  • Default: OFF
  • +
  • Modes: Stateful only
  • +
  • Deprecated name: --dropAddr
  • +
  • Source: Scattered at RFC 6146. One summary is at the end of section 1.2.3.
  • +
+ +

Long story short:

+ +
    +
  • --address-dependent-filtering ON means Jool should be an (address)-restricted-cone NAT.
  • +
  • --address-dependent-filtering OFF means Jool should be a full-cone NAT.
  • +
+ +

Wiki.

+ +

Long story long:

+ +

Suppose n6 is talking with n4a via the NAT64:

+ +

Fig.1: Legal chat

+ +

The relevant BIB entry is

+ + + + + + + + + + + + + + + + +
IPv6 transport addressIPv4 transport addressProtocol
2001:db8::1#10192.0.2.1#10TCP
+ +

n4b realizes the existence of n6’s service, perhaps because n4a tells him about it:

+ +

Fig.2: n4b finds about n6

+ +

Then n4b tries to chat n6 too:

+ +

Fig.3: suspicious query

+ +

Because the BIB entry exists, J knows that n4b means “2001:db8::1#10†when he says “192.0.2.1#10â€, so the packet can technically be translated. However, because of the session tables, J can also tell that n6 hasn’t been talking to n4b in the past.

+ +

If --address-dependent-filtering is OFF, J will allow n4b’s packet to pass. If --address-dependent-filtering is ON, J will drop n4b’s packet and respond with a “Communication Administratively Prohibited†ICMP error. This effectively wrecks any IPv4-started communication attempts, even if there are BIB entries (static or otherwise).

+ +
    +
  • If you’re using the NAT64 to publish a IPv6-only service to the IPv4 Internet, it makes sense for --address-dependent-filtering to be OFF. This is because clients are expected to find out about the IPv6 service on their own, and the server doesn’t normally start packet streams.
  • +
  • If you’re using the NAT64 to allow IPv6 nodes to browse the IPv4 Internet, it makes sense for --address-dependent-filtering to be ON. This is because clients choose their ports at random; it is suspicious for random outsider nodes to guess these ports.
  • +
+ +

--address-dependent-filtering ON might break NAT traversal methods like STUN (or at least make some operation modes impossible).

+ +

--drop-icmpv6-info

+ +
    +
  • Type: Boolean
  • +
  • Default: OFF
  • +
  • Modes: Stateful only
  • +
  • Deprecated name: --dropInfo
  • +
  • Source: RFC 6146, section 3.5.3
  • +
+ +

If you turn this on, pings (both requests and responses) will be blocked while being translated from ICMPv6 to ICMPv4.

+ +

For some reason, we’re not supposed to block pings from ICMPv4 to ICMPv6, but since you need both a request and a response for a successful echo, the outcome seems to be the same.

+ +

This rule will not affect Error ICMP messages.

+ +

--drop-externally-initiated-tcp

+ + + +

Turn --drop-externally-initiated-tcp ON to wreck any attempts of IPv4 nodes to initiate TCP communication to IPv6 nodes.

+ +

Of course, this will not block IPv4 traffic if some IPv6 node first requested it.

+ +

--udp-timeout

+ +
    +
  • Type: Integer (seconds)
  • +
  • Default: 5 minutes
  • +
  • Modes: Stateful only
  • +
  • Deprecated name: --toUDP
  • +
  • Source: RFC 6146, section 3.5.1
  • +
+ +

When a UDP session has been lying around inactive for this long, its entry will be removed from the database automatically.

+ +

When you change this value, the lifetimes of all already existing UDP sessions are updated.

+ +

--tcp-est-timeout

+ +
    +
  • Type: Integer (seconds)
  • +
  • Default: 2 hours
  • +
  • Modes: Stateful only
  • +
  • Deprecated name: --toTCPest
  • +
  • Source: RFC 6146, section 3.5.2.2
  • +
+ +

When an established TCP connection has remained inactive for this long, its existence will be questioned. Jool will send a probe packet to one of the endpoints and kill the session if a response is not received before the --tcp-trans-timeout timeout.

+ +

When you change this value, the lifetimes of all already existing established TCP sessions are updated.

+ +

--tcp-trans-timeout

+ + + +

When an unhealthy TCP session has been lying around inactive for this long, its entry will be removed from the database automatically. An “unhealthy†session is one in which the TCP handshake has not yet been completed, it is being terminated by the endpoints, or is technically established but has remained inactive for --tcp-est-timeout time.

+ +

When you change this value, the lifetimes of all already existing transitory TCP sessions are updated.

+ +

--icmp-timeout

+ +
    +
  • Type: Integer (seconds)
  • +
  • Default: 1 minute
  • +
  • Modes: Stateful only
  • +
  • Deprecated name: --toICMP
  • +
  • Source: RFC 6146, section 3.5.3
  • +
+ +

When a ICMP session has been lying around inactive for this long, its entry will be removed from the database automatically.

+ +

When you change this value, the lifetimes of all already existing ICMP sessions are updated.

+ +

--fragment-arrival-timeout

+ +
    +
  • Type: Integer (seconds)
  • +
  • Default: 2 seconds
  • +
  • Modes: NAT64 only
  • +
  • Deprecated name: --toFrag
  • +
  • Source: None (the flag addresses a Linux quirk).
  • +
+ +

Stateful Jool requires fragment reassembly.

+ +

In kernels 3.13 and above, --fragment-arrival-timeout does nothing whatsoever.

+ +

In kernels 3.12 and below, the kernel’s IPv6 fragment reassembly module (nf_defrag_ipv6) is a little tricky. It collects the fragments, and instead of reassembling, it fetches them all to the rest of the kernel in ascending order and really quickly. Because Jool has to process all the fragments of a single packet at the same time, it has to wait until nf_defrag_ipv6 has handed them all.

+ +

--fragment-arrival-timeout is the time Jool will wait for nf_defrag_ipv6 to fetch all the fragments of a common packet. It has nothing to do with waiting for fragments to arrive at the node.

+ +

Because nf_defrag_ipv6 already waited for all the fragments to arrive, it should fetch them in nanoseconds. Therefore, --fragment-arrival-timeout’s default value of 2 seconds is probably overly high. On the other hand, unless there is a random module dropping packets in between, all of the fragments should always arrive immediately, hence the timer should actually never run out (even if you’re being attacked).

+ +

SIIT Jool does not need fragment reassembly at all.

+ +

This behavior changed from Jool 3.2, where --toFrag used to actually be the time Jool would wait for fragments to arrive at the node.

+ +

--maximum-simultaneous-opens

+ +
    +
  • Type: Integer
  • +
  • Default: 10
  • +
  • Modes: NAT64 only
  • +
  • Deprecated name: --maxStoredPkts
  • +
  • Source: RFC 6146, section 5.3 (indirectly)
  • +
+ +

When an external (IPv4) node first attempts to open a connection and there’s no BIB entry for it, Jool normally answers with an Address Unreachable (type 3, code 1) ICMP error message, since it cannot know which IPv6 node the packet is heading.

+ +

In the case of TCP, the situation is a little more complicated because the IPv4 node might be attempting a Simultaneous Open of TCP Connections. To really know what’s going on, Jool has to store the packet for 6 seconds.

+ +

--maximum-simultaneous-opens is the maximum amount of packets Jool will store at a time. The default means that you can have up to 10 “simultaneous†simultaneous opens; Jool will fall back to answer the ICMP error message on the eleventh one.

+ +

--source-icmpv6-errors-better

+ +
    +
  • Type: Boolean
  • +
  • Default: False
  • +
  • Modes: NAT64 only
  • +
  • Translation direction: IPv4 to IPv6 (ICMP errors only)
  • +
  • Source: Issue 132
  • +
+ +

For some reason, RFC 6146 wants the source of translated ICMPv6 errors to be the same as their inner packets’ destination address. This looks really weird.

+ +

Fig.4: Source better diagram

+ +

Say the link between R and n4 collapses.

+ +
    +
  1. n6 TCP-packets n4: 2001:db8::1 -> 64:ff9b::203.0.113.13.
  2. +
  3. T translates and forwards: 192.0.2.1 -> 203.0.113.13
  4. +
  5. R answers ICMPv4 error “Host unreachableâ€. The error packet’s addresses are 192.0.2.6 -> 192.0.2.1.
  6. +
  7. T translates into an IPv6 packet whose addresses are 64:ff9b::203.0.113.13 -> 2001:db8::1 (because this is the inverse of the first packet).
  8. +
+ +

This breaks traceroutes. Shouldn’t it have been 64:ff9b::192.0.2.6 -> 2001:db8::1 instead?

+ +
    +
  • --source-icmpv6-errors-better OFF will make Jool obey RFC 6146 (and break traceroutes).
  • +
  • --source-icmpv6-errors-better ON will translate the outer source address directly, simply appending the prefix to the source address of the original (step 3) packet.
  • +
+ +

--logging-bib

+ +
    +
  • Type: Boolean
  • +
  • Default: False
  • +
  • Modes: NAT64 only
  • +
  • Translation direction: Both
  • +
  • Source: RFC 6888, section 4
  • +
+ +

Enables logging of transport address mappings as they are created and destroyed. If you are a Service Provider, your government might require you to do this.

+ +

Analysis of these logs can let you know which IPv4 address and port masked your “internal†(IPv6) nodes at a certain time. Here’s a sample output:

+ +
$ jool --logging-bib true
+$ dmesg
+[  312.493235] 2015/4/8 16:13:2 (GMT) - Mapped 2001:db8::5#19945 to 192.0.2.2#8208 (UDP)
+[  373.724229] 2015/4/8 16:14:3 (GMT) - Mapped 2001:db8::8#46516 to 192.0.2.2#12592 (TCP)
+[  468.675524] 2015/4/8 16:15:38 (GMT) - Forgot 2001:db8::5#19945 to 192.0.2.2#8208 (UDP)
+
+ +

In this example,

+ +
    +
  1. 2001:db8::5 used (its own) port 19945 to speak to someone using the UDP protocol. This someone thought 2001:db8::5’s address was 192.0.2.2, and that it was using port 8208.
  2. +
  3. Roughly a minute later, 2001:db8::8 (on port 46516) started speaking to somebody using TCP. It’s being masked as 192.0.2.2#12592. This connection has not yet ended.
  4. +
  5. Some time later, Jool forgot the UDP mapping (because of inactivity, not because the last packet happened at 16:15:38. “How much inactivity†is controlled by the timeouts - in this case, the UDP one). At this point, 192.0.2.2#8208 is free from 2001:db8::5 and Jool can reassign it.
  6. +
+ +

So, if your government comes and says “I detected somebody named 192.0.2.2#8208 did something illegal at 4:14 pm via UDPâ€, you can report the culprit is 2001:db8::5#19945 and free yourself from the blame.

+ +

There are several important things to notice:

+ +
    +
  • Each mapping’s uniquenesss extends to the protocol. If your logging only says Mapped 2001:db8::5#19945 to 192.0.2.2#8208 (UDP), you can’t assume 2001:db8::5#19945 is 192.0.2.2#8208 on TCP as well.
  • +
  • Your IPv6 nodes share IPv4 addresses! Therefore, mind the ports.
  • +
  • There’s no information on who was 2001:db8::5 talking to. This is a good thing; it means you’re honoring your client’s privacy as much as you can.
  • +
  • The logging uses GMT; you might need to convert this for comfort.
  • +
+ +

This defaults to false because it generates humongous amounts of logs while active (remember you need infrastructure to maintain them). Notice the maps are dumped into the kernel log, so the messages will be mixed along with anything else the kernel has to say (including Jool’s error messages, for example). The log messages will have INFO priority.

+ +

If logging the destination makes sense for you, see --logging-session (below). To comply with REQ-12 of RFC 6888 you want to set --loging-bib as true and --logging-session as false.

+ +

--logging-session

+ +
    +
  • Type: Boolean
  • +
  • Default: False
  • +
  • Modes: NAT64 only
  • +
  • Translation direction: Both
  • +
  • Source: RFC 6888, section 4
  • +
+ +

Enables logging of every session as they are created and destroyed.

+ +

The format is

+ +
<date> <time> (GMT) - <action> session <IPv6 node>|<IPv6 representation of IPv4 node>|<IPv4 representation of IPv6 node>|<IPv4 node>|Protocol
+
+ +

Here’s a sample output:

+ +
$ jool --logging-session true
+$ dmesg
+[ 3238.087902] 2015/4/8 17:1:47 (GMT) - Added session 1::5#47073|64:ff9b::c000:205#80|192.0.2.2#63527|192.0.2.5#80|TCP
+[ 3238.099997] 2015/4/8 17:1:47 (GMT) - Added session 1::5#47074|64:ff9b::c000:205#80|192.0.2.2#42527|192.0.2.5#80|TCP
+[ 3241.624104] 2015/4/8 17:1:51 (GMT) - Added session 1::5#33160|64:ff9b::c000:205#8080|192.0.2.2#15496|192.0.2.5#8080|TCP
+[ 3241.630905] 2015/4/8 17:1:51 (GMT) - Added session 1::5#33161|64:ff9b::c000:205#8080|192.0.2.2#7060|192.0.2.5#8080|TCP
+[ 3478.498559] 2015/4/8 17:5:48 (GMT) - Forgot session 1::5#47073|64:ff9b::c000:205#80|192.0.2.2#63527|192.0.2.5#80|TCP
+[ 3478.499758] 2015/4/8 17:5:48 (GMT) - Forgot session 1::5#47074|64:ff9b::c000:205#80|192.0.2.2#42527|192.0.2.5#80|TCP
+[ 3481.632214] 2015/4/8 17:5:51 (GMT) - Forgot session 1::5#33160|64:ff9b::c000:205#8080|192.0.2.2#15496|192.0.2.5#8080|TCP
+[ 3481.632342] 2015/4/8 17:5:51 (GMT) - Forgot session 1::5#33161|64:ff9b::c000:205#8080|192.0.2.2#7060|192.0.2.5#8080|TCP
+
+ +

This log is remarcably more voluptuous than --logging-bib, not only because each message is longer, but because sessions are generated and destroyed more often than BIB entries (each BIB entry can have multiple sessions). Because of REQ-12 from RFC 6888 section 4, chances are you don’t even want the extra information sessions grant you.

+ +

--zeroize-traffic-class

+ +
    +
  • Type: Boolean
  • +
  • Default: OFF
  • +
  • Modes: Both (SIIT and NAT64)
  • +
  • Translation direction: IPv4 to IPv6
  • +
  • Source: RFC 6145, section 4.1
  • +
  • Deprecated name: --setTC
  • +
+ +

The IPv6 header’s Traffic Class field is very similar to IPv4’s Type of Service (TOS).

+ +

If you leave this OFF, the TOS value will be copied directly to the Traffic Class field. If you turn this ON, Jool will always set Traffic Class as zero instead.

+ +

--override-tos

+ +
    +
  • Type: Boolean
  • +
  • Default: OFF
  • +
  • Modes: Both (SIIT and NAT64)
  • +
  • Translation direction: IPv6 to IPv4
  • +
  • Source: RFC 6145, section 5.1
  • +
  • Deprecated name: --setTOS
  • +
+ +

The IPv6 header’s Traffic Class field is very similar to IPv4’s Type of Service (TOS).

+ +

If you leave this OFF, the Traffic Class value will be copied directly to the TOS field during IPv6-to-IPv4 translations. If you turn this ON, Jool will always set TOS as --tos instead.

+ +

--tos

+ +
    +
  • Type: Integer
  • +
  • Default: 0
  • +
  • Modes: Both (SIIT and NAT64)
  • +
  • Translation direction: IPv6 to IPv4
  • +
  • Source: RFC 6145, section 5.1
  • +
  • Deprecated name: --TOS
  • +
+ +

Value to set the TOS value of the packets’ IPv4 fields during IPv6-to-IPv4 translations. This only applies when --override-tos is ON.

+ +

--allow-atomic-fragments

+ +

Deprecated. See Atomic Fragments.

+ +

--setDF

+ +

Deprecated. See Atomic Fragments.

+ +

--genFH

+ +

Deprecated. See Atomic Fragments.

+ +

--genID

+ +

Deprecated. See Atomic Fragments.

+ +

--boostMTU

+ +

Deprecated. See Atomic Fragments.

+ +

--amend-udp-checksum-zero

+ +
    +
  • Type: Boolean
  • +
  • Default: OFF
  • +
  • Modes: SIIT only
  • +
  • Translation direction: IPv4 to IPv6 (UDP only)
  • +
  • Source: RFC 6145, section 4.5
  • +
+ +

In IPv4, it’s legal for UDP packets to contain zero as checksum. This is because the whole thing about UDP is that it’s unreliable, and therefore sometimes the value of checksum validation does not justify its overhead.

+ +

In IPv6, zero is an invalid checksum value for UDP packets.

+ +
    +
  • If --amend-udp-checksum-zero is ON and a zero-checksum IPv4-UDP packet arrives, Jool will compute its checksum before translating it. Note, this might be computationally expensive.
  • +
  • If --amend-udp-checksum-zero is OFF and a zero-checksum IPv4-UDP packet arrives, Jool will unceremoniously drop the packet and log its addresses (with Log Level KERN_DEBUG).
  • +
+ +

This does not affect fragmented zero-checksum IPv4-UDP packets. SIIT Jool does not reassemble, which means it cannot compute the checskum. In these cases, the packet will be dropped regardless of --amend-udp-checksum-zero.

+ +

Stateful NAT64 Jool always computes zero-checksums from IPv4-UDP packets. Because it reassembles, it will also do so for fragmented packets.

+ +

--randomize-rfc6791-addresses

+ +
    +
  • Type: Boolean
  • +
  • Default: ON
  • +
  • Modes: SIIT only
  • +
  • Translation direction: IPv6 to IPv4
  • +
  • Source: Issue 130
  • +
+ +

If an ICMPv6 error’s source cannot be translated, RFC 6791 wants us to assign as source a random IPv4 address from the RFC 6791 pool.

+ +
    +
  • If --randomize-rfc6791-addresses is ON, Jool will follow RFC 6791’s advice, assigning a random address from the pool.
  • +
  • If --randomize-rfc6791-addresses is OFF, Jool will assign the hop limitth address from the pool.
  • +
+ +

Why? It can be argued that hop limitth is better.

+ +

--mtu-plateaus

+ +
    +
  • Type: List of Integers separated by commas (If you want whitespace, remember to quote).
  • +
  • Default: “65535, 32000, 17914, 8166, 4352, 2002, 1492, 1006, 508, 296, 68â€
  • +
  • Modes: Both (SIIT and NAT64)
  • +
  • Translation direction: IPv4 to IPv6 (ICMP errors only)
  • +
  • Source: RFC 6145, section 4.2
  • +
  • Deprecated name: --plateaus
  • +
+ +

When a packet should not be fragmented and doesn’t fit into a link it’s supposed to traverse, the troubled router is supposed to respond an error message indicating Fragmentation Needed. Ideally, this error message would contain the MTU of the link so the original emitter would be aware of the ideal packet size and avoid fragmentation. However, the original ICMPv4 specification does not require routers to include this data.

+ +

Backwards compatibility awards IPv4 emmiters strategies to fall back when they encounter such a situation, but IPv6 has always been designed with the field present in mind. Therefore, if Jool translates a zero-MTU ICMPv4 message into a zero-MTU ICMPv6 message, chaos might ensue (actual results will depend mainly on the IPv6 client’s implementation).

+ +

To address this problem, when Jool finds itself attempting to translate a zero-MTU message, it will replace the MTU with the greatest plateau which is lower than the original packet’s Total Length field. Admittedly, this might or might not be the correct MTU, but is a very educated guess. See this example for more details. More in-depth information can be found in RFC 1191.

+ +

Note that if --boostMTU is activated, the MTU will still be 1280 even if the relevant plateau is less than 1280.

+ +

You don’t really need to sort the values as you input them.

+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/en/usr-flags-help.html b/doc/usr/_site/en/usr-flags-help.html new file mode 100644 index 000000000..5fed548b7 --- /dev/null +++ b/doc/usr/_site/en/usr-flags-help.html @@ -0,0 +1,113 @@ + + + + + --help + + + + + +
+
+ +
+ +
+
+ +

Documentation > Userspace Application > Flags > --help

+ +

--help

+ +

Index

+ +
    +
  1. Description
  2. +
  3. Syntax
  4. +
  5. Examples
  6. +
+ +

Description

+ +

Prints mostly a summary of the userspace app flags documentation, though you can also use it to review the abbreviated form of the flags, which aren’t there.

+ +

--help is the only mode which does not require the respective kernel module to be active.

+ +

You might also be interested in man jool_siit/man jool, which prints a better summary of the grammar.

+ +

Syntax

+ +
(jool_siit | jool) --help
+
+ +

Examples

+ +
jool_siit --help
+jool --help
+
+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/en/usr-flags-plateaus.html b/doc/usr/_site/en/usr-flags-plateaus.html new file mode 100644 index 000000000..a696fad17 --- /dev/null +++ b/doc/usr/_site/en/usr-flags-plateaus.html @@ -0,0 +1,181 @@ + + + + + --plateaus + + + + + +
+
+ +
+ +
+
+ +

Documentation > Userspace Application > Flags > --global > --plateaus

+ +

MTU Plateaus (Example)

+ +

Introduction

+ +

This article explains the purpose of the --plateaus flag by example.

+ +

This is the sample network:

+ +

Fig.1 - Network

+ +

The maximum bytes per packet (MTU) of links n6-J and J-r4 is 1500.

+ +

Link r4-n4 is an ARPANET network. Therefore, its packets can be up to 8159-96 bits long (~1007 bytes).

+ +

For illustrative purposes, let’s pretend Jool will not mangle the size of the packets it translates. In reality, IPv4 headers are 20 bytes shorter than IPv6 headers, and there are other quirks as well, but they’re irrelevant for the purposes of this example.

+ +

Here it goes:

+ +

Example

+ +

n6 wants to write a 1500-byte IPv6 packet to n4 (Think 100 bytes of headers and 1400 bytes of data payload). J converts it to a 1500-byte IPv4 packet and sends it to r4. r4 cannot forward it because it’s too big for the 1007-byte limit of the r4-n4 network, so it returns a ICMP error to n6.

+ +

Fig.2 - Attempt 1

+ +

Path MTU discovery operates under the assumption that the router who could not forward the packet will report the maximum packet size it can transmit. At this point, the ICMP error would contain the magic number “1007â€, and so n6 would know that he has to slice his packet into according pieces if he’s still interested in the arrival of his message.

+ +

Unfortunately, the original ICMPv4 specification does not mandate the inclusion of the number; it is an afterthought. If r4 is old enough, it will leave the MTU field unset (i. e. zero), and n6 will be baffled at the prospect of having to divide its data into chunks of zero bytes each (ICMPv6 does mandate the MTU field, so IPv6 nodes actually rely on it).

+ +

Being the only one who has a grasp of what the problem is, the task of hacking a solution befalls on the NAT64.

+ +

J will realize that the problem exists by observing that it’s trying to translate a ICMPv4 error with a zero MTU to ICMPv6, where that’s illegal. J doesn’t have a way to know the MTU of the r4-n4 network, so it has to guess. It does know that the rejected packet was 1500 bytes long, so it takes a look at --plateaus, whose default value is based on the following table, and picks the first plateau which would reject a 1500-sized packet:

+ +
   Plateau    MTU    Comments                      Reference
+   ------     ---    --------                      ---------
+	      65535  Official maximum MTU          RFC 791
+	      65535  Hyperchannel                  RFC 1044
+   65535
+   32000             Just in case
+	      17914  16Mb IBM Token Ring
+   17914
+	      8166   IEEE 802.4                    RFC 1042
+   8166
+	      4464   IEEE 802.5 (4Mb max)          RFC 1042
+	      4352   FDDI (Revised)                RFC 1188
+   4352 (1%)
+	      2048   Wideband Network              RFC 907
+	      2002   IEEE 802.5 (4Mb recommended)  RFC 1042
+   2002 (2%)
+	      1536   Exp. Ethernet Nets            RFC 895
+	      1500   Ethernet Networks             RFC 894
+	      1500   Point-to-Point (default)      RFC 1134
+	      1492   IEEE 802.3                    RFC 1042
+   1492 (3%)
+	      1006   SLIP                          RFC 1055
+	      1006   ARPANET                       BBN 1822
+   1006
+	      576    X.25 Networks                 RFC 877
+	      544    DEC IP Portal
+	      512    NETBIOS                       RFC 1088
+	      508    IEEE 802/Source-Rt Bridge     RFC 1042
+	      508    ARCNET                        RFC 1051
+   508 (13%)
+	      296    Point-to-Point (low delay)    RFC 1144
+   296
+   68                Official minimum MTU          RFC 791
+
+ +

So J suspects the r4-n4 network is a IEEE 802.3. It translates the zero-MTU ICMPv4 error into a 1492-MTU ICMPv6 error.

+ +

n6 slices its message and now tries to send one 1492 long packet (100 bytes of headers and 1392 bytes of data payload), and one 108-byte packet (100 header, 8 payload). J translates it, and then again r4 says “no dice†(because a 1492 packet still doesn’t fit in a 1007-MTU network).

+ +

Fig.3 - Attempt 2

+ +

J again realizes it’s trying to translate a zero MTU ICMP error, so it again tries to report the first plateau which would object to the rejected packet. This time, the next plateau of 1492 is 1006, so J guesses r4-n4 is a SLIP or an ARPANET. As you can see, the guess was correct this time.

+ +

Upon receiving the news, n6 now slices its data into a 1006 (100 + 906) packet and a 594 (100 + 494) packet. This time, the translated versions fit and arrive at their destination.

+ +

Fig.4 - Attempt 3

+ +

Wrapping up

+ +

The plateaus strategy is the better alternative out of several Path MTU discovery approaches. Because it is aware of existing MTUs, it converges quickly and leaves little room for under-utilization (see section 5 of RFC 1191).

+ +

On the other hand, that argument tends to fall on its butt on the grounds that the MTU table is long overdue. Just by looking at the example you might have gone like “ARPANET was disbanded a long time ago!â€, and you would be right. Though RFC 1191 says “implementors should use up-to-date references to pick a set of plateausâ€, none seem to come up.

+ +

It’s not that bad, given that some of the protocols in the table are still in use, and having a few redundant plateaus is better than having a few missing ones.

+ +

And it doesn’t mean the plateaus list is hardcoded into Jool, either. If you want to change your plateaus list, run (after installing the userspace application)

+ +
$(jool) --mtu-plateaus <list>
+
+ +

For example:

+ +
jool_siit --mtu-plateaus "80000, 40000, 20000, 10000"
+
+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/en/usr-flags-pool4.html b/doc/usr/_site/en/usr-flags-pool4.html new file mode 100644 index 000000000..b81250507 --- /dev/null +++ b/doc/usr/_site/en/usr-flags-pool4.html @@ -0,0 +1,251 @@ + + + + + --pool4 + + + + + +
+
+ +
+ +
+
+ +

Documentation > Userspace Application > Flags > --pool4

+ +

--pool4

+ +

Index

+ +
    +
  1. Description
  2. +
  3. Syntax
  4. +
  5. Arguments
  6. +
  7. Examples
  8. +
  9. Notes
  10. +
+ +

Description

+ +

Interacts with NAT64 Jool’s IPv4 transport address pool.

+ +

The IPv4 pool is the subset of the node’s transport addresses which should be used to mask connections sourced from IPv6 nodes.

+ +

Syntax

+ +
jool --pool4 [--display] [--csv]
+jool --pool4 --count
+jool --pool4 --add [--mark <mark>] [--tcp] [--udp] [--icmp] <IPv4 prefix> [<port range>] [--force]
+jool --pool4 --remove [--mark <mark>] [--tcp] [--udp] [--icmp] <IPv4 prefix> [<port range>] [--quick]
+jool --pool4 --flush [--quick]
+
+ +

Arguments

+ +

Operations:

+ +
    +
  • --display: The pool’s records are printed in standard output. This is the default operation.
  • +
  • --count: Prints the number of tables, samples and transport addresses in standard output.
  • +
  • --add: Uploads entries to the pool.
  • +
  • --remove: Deletes entries from the pool.
  • +
  • --flush: Removes all entries from the pool.
  • +
+ +

Others:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDefaultDescription
--csv(absent)If present, print the table in CSV format.
--mark0Packets carrying mark n will only be translated using pool4 records with mark n.
--tcp*If present, the record being added or removed represents TCP transport addresses.
--udp*If present, the record being added or removed represents UDP transport addresses.
--icmp*If present, the record being added or removed represents “ICMP transport addresses†(Addresses and ICMP identifiers, not ports).
<IPv4 prefix>-Group of addresses you’re adding or removing to/from the pool. The length defaults to 32, so you typically add and remove addresses instead of prefixes.
<port range>60001-65535Subset layer 4 identifiers (or ICMP ids) from the addresses which should be reserved for translation.
--force(absent)If present, add the elements to the pool even if they’re too many.
--quick(absent)If present, do not cascade removal to BIB entries.
+ +

* --tcp, --udp and --icmp are not mutually exclusive. If neither of them are present, the records are added or removed to/from all three protocols.

+ +

Examples

+ +

Display the current addreses:

+ +
$ jool --pool4 --display 
+  (empty)
+
+ +

Add several entries:

+ +
# jool --pool4 --add 192.0.2.1
+$ jool --pool4 --display
+0	ICMP	192.0.2.1	60001-65535
+0	UDP	192.0.2.1	60001-65535
+0	TCP	192.0.2.1	60001-65535
+  (Fetched 3 entries.)
+# jool --pool4 --add          --tcp 192.0.2.2 7000-7999
+# jool --pool4 --add --mark 1 --tcp 192.0.2.2 8000-8999
+# jool --pool4 --add          --tcp 192.0.2.4/31
+$ jool --pool4 --display
+0	ICMP	192.0.2.1	60001-65535
+0	UDP	192.0.2.1	60001-65535
+0	TCP	192.0.2.1	60001-65535
+0	TCP	192.0.2.2	7000-7999
+0	TCP	192.0.2.4	60001-65535
+0	TCP	192.0.2.5	60001-65535
+1	TCP	192.0.2.2	8000-8999
+  (Fetched 7 entries.)
+
+ +

Remove some entries:

+ +
# jool --pool4 --remove --mark 0 192.0.2.0/24 0-65535
+$ jool --pool4 --display
+1	TCP	192.0.2.2	8000-8999
+  (Fetched 1 entries.)
+
+ +

Clear the table:

+ +
# jool --pool4 --flush
+$ jool --pool4 --display
+  (empty)
+
+ +

Notes

+ +

If something within your NAT64 machine binds itself to one of the ports reserved by pool4, Jool will interfere with its packets. Therefore, it is in your best interests that pool4 doesn’t collide with other port ranges.

+ +

You already know the ports owned by any servers parked in your NAT64, if any. The other one you need to keep in mind is the ephemeral range:

+ +
$ sysctl net.ipv4.ip_local_port_range 
+net.ipv4.ip_local_port_range = 32768	61000
+
+ +

If you want to assign more ports to Jool, you have to substract them from elsewhere. The ephemeral range is a good candidate:

+ +
$ jool --pool4 --display
+0	192.0.2.1	60001-65535
+  (Fetched 1 entries.)
+# sysctl -w net.ipv4.ip_local_port_range="32768 40000"
+# jool --pool4 --add 192.0.2.1 40001-60000
+$ sysctl net.ipv4.ip_local_port_range 
+net.ipv4.ip_local_port_range = 32768	40000
+$ jool --pool4 --display
+0	192.0.2.1	40001-65535
+  (Fetched 1 entries.)
+
+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/en/usr-flags-pool6.html b/doc/usr/_site/en/usr-flags-pool6.html new file mode 100644 index 000000000..94ead80f6 --- /dev/null +++ b/doc/usr/_site/en/usr-flags-pool6.html @@ -0,0 +1,156 @@ + + + + + --pool6 + + + + + +
+
+ +
+ +
+
+ +

Documentation > Userspace Application > Flags > --pool6

+ +

--pool6

+ +

Index

+ +
    +
  1. Description
  2. +
  3. Syntax
  4. +
  5. Options +
      +
    1. Operations
    2. +
    3. --quick
    4. +
    +
  6. +
  7. Examples
  8. +
+ +

Description

+ +

Interacts with Jool’s IPv6 pool. The pool dictates which packets coming from the IPv6 side are processed; if an incoming packet’s destination address has one of the IPv6 prefixes, the packet is translated. Otherwise it is handed to the kernel to either be forwarded in some other way or handed to the upper layers.

+ +

Syntax

+ +

($(jool) can be either jool_siit or jool.)

+ +
$(jool) --pool6 [--display]
+$(jool) --pool6 --count
+$(jool) --pool6 --add <IPv6 prefix>
+$(jool) --pool6 --remove <IPv6 prefix> [--quick]
+$(jool) --pool6 --flush [--quick]
+
+ +

Options

+ +

Operations

+ +
    +
  • --display: The pool’s prefixes are printed in standard output. This is the default operation.
  • +
  • --count: The number of prefixes in the pool is printed in standard output.
  • +
  • --add: Uploads <prefix> to the pool.
  • +
  • --remove: Deletes from the tables the prefix <prefix>.
  • +
  • --flush: Removes all prefixes from the pool.
  • +
+ +

--quick

+ +

See --quick. Only available on Stateful Jool.

+ +

Examples

+ +

Display the current prefixes:

+ +
$ jool --pool6 --display
+64:ff9b::/96
+  (Fetched 1 prefixes.)
+ +

Display only the prefix count:

+ +
$ jool --pool6 --count
+1
+ +

Remove the default prefix:

+ +
$ jool --pool6 --remove 64:ff9b::/96
+ +

Add a sample prefix:

+ +
$ jool --pool6 --add 2001:db8::/64
+ +

Destroy all prefixes. Do not bother cleaning up the garbage:

+ +
$ jool --pool6 --flush --quick
+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/en/usr-flags-pool6791.html b/doc/usr/_site/en/usr-flags-pool6791.html new file mode 100644 index 000000000..8fdf8851a --- /dev/null +++ b/doc/usr/_site/en/usr-flags-pool6791.html @@ -0,0 +1,157 @@ + + + + + --pool6791 + + + + + +
+
+ +
+ +
+
+ +

Documentation > Userspace Application > Flags > --pool6791

+ +

--pool6791

+ +

Index

+ +
    +
  1. Description
  2. +
  3. Syntax
  4. +
  5. Options
  6. +
  7. Examples
  8. +
+ +

Description

+ +

Interacts with Jool’s RFC 6791 pool. The pool defines addresses for untranslatable sources in ICMP errors.

+ +

If this pool is empty, Jool will fall back to use its node’s addresses for these cases.

+ +

Syntax

+ +
jool_siit --pool6791 [--display]
+jool_siit --pool6791 --count
+jool_siit --pool6791 --add <IPv4 prefix>
+jool_siit --pool6791 --remove <IPv4 prefix>
+jool_siit --pool6791 --flush
+
+ +

Options

+ +
    +
  • --display: The pool’s prefixes are printed in standard output. This is the default operation.
  • +
  • --count: The number of addresses (not prefixes) in the pool is printed in standard output.
    +For example, if all you have is a /24 prefix, expect “256†as output.
  • +
  • --add: Uploads <IPv4 prefix> to the pool.
  • +
  • --remove: Deletes prefix <IPv4 prefix> from the pool.
  • +
  • --flush: Removes all prefixes from the pool.
  • +
+ +

Examples

+ +

Display the current prefixes:

+ +
$ jool_siit --pool6791 --display
+192.0.2.0/24
+198.51.100.0/26
+203.0.113.16/28
+  (Fetched 3 prefixes.)
+
+ +

This means the source address of a normally untranslatable ICMP error is going to be any within the following ranges: 192.0.2.0-192.0.2.255, 198.51.100.0-198.51.100.64, or 203.0.113.16-203.0.113.31.

+ +

Display only the prefix count:

+ +
$ jool_siit --pool6791 --count
+336
+
+ +

(That’s /24 + /26 + /28 = 256 + 64 + 16.)

+ +

Remove a prefix:

+ +
$ jool_siit --pool6791 --remove 192.0.2.0/24
+
+ +

Return it:

+ +
$ jool_siit --pool6791 --add 192.0.2.0/24
+
+ +

Destroy all prefixes. Jool will start using its host’s addresses as source.

+ +
$ jool_siit --pool6791 --flush
+
+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/en/usr-flags-quick.html b/doc/usr/_site/en/usr-flags-quick.html new file mode 100644 index 000000000..7cc95e40a --- /dev/null +++ b/doc/usr/_site/en/usr-flags-quick.html @@ -0,0 +1,102 @@ + + + + + --quick + + + + + +
+
+ +
+ +
+
+ +

Documentation > Userspace Application > Flags > --quick

+ +

--quick

+ +

First, a little background information:

+ + + +

If you --remove or --flush an owner, its “slaves†become obsolete because the relevant packets are no longer going to be translated.

+ +
    +
  • If you omit --quick while removing owners, Jool will get rid of the newly orphaned slaves. This saves memory and keeps entry lookup efficient during packet translations.
  • +
  • On the other hand, when you do issue --quick, Jool will only purge the owners. You might want to do this if you want the operation to succeed quickly (maybe you have a HUGE amount of slaves), or more likely you plan to re-add the owner in the future (in which case the still-remaining slaves will become relevant and usable again).
  • +
+ +

Orphaned slaves will remain inactive in the database, and will eventually kill themselves once their normal removal conditions are met (eg. orphaned sessions will die once their timeout expires).

+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/en/usr-flags-session.html b/doc/usr/_site/en/usr-flags-session.html new file mode 100644 index 000000000..3687eb1fb --- /dev/null +++ b/doc/usr/_site/en/usr-flags-session.html @@ -0,0 +1,207 @@ + + + + + --session + + + + + +
+
+ +
+ +
+
+ +

Documentation > Userspace Application > Flags > --session

+ +

--session

+ +

Index

+ +
    +
  1. Description
  2. +
  3. Syntax
  4. +
  5. Options +
      +
    1. Operations
    2. +
    3. <protocols>
    4. +
    5. --numeric
    6. +
    7. --csv
    8. +
    +
  6. +
  7. Examples
  8. +
+ +

Description

+ +

Sessions mostly exist so the NAT64 can decide when BIB entries should die. You can also use them to know exactly who is speaking to your IPv6 nodes.

+ +

Each BIB entry is a mapping, which describes the IPv4 name of one of your IPv6 services. For every BIB entry, there are zero or more session entries, each of which represents an active connection currently using that mapping.

+ +

You can use this command to get information on each of these connections.

+ +

Syntax

+ +
jool --session [--display] [--numeric] [--csv] <protocols>
+jool --session --count <protocols>
+
+ +

Options

+ +

Operations

+ +
    +
  • --display: The session tables are printed in standard output. This is the default operation.
  • +
  • --count: The number of entries per session table are printed in standard output.
  • +
+ +

<protocols>

+ +
<protocols> := [--tcp] [--udp] [--icmp]
+
+ +

The command will only operate on the tables mentioned here. If you omit this entirely, Jool will fall back to operate on all three tables.

+ +

--numeric

+ +

By default, the application will attempt to resolve the names of the remote nodes talking in each session. If your nameservers aren’t answering, this will slow the output down.

+ +

Use --numeric to turn this behavior off.

+ +

--csv

+ +

By default, the application will print the tables in a relatively console-friendly format.

+ +

Use --csv to print in CSV format, which is spreadsheet-friendly.

+ +

Because every record is printed in a single line, CSV is also better for grepping.

+ +

Examples

+ +

Fig.1 - Session sample network

+ +

ipv6client.mx makes two HTTP requests and a ping to example.com.

+ +

Fall back to display all protocols, resolve names, console format:

+ +
$ jool --session
+TCP:
+---------------------------------
+(V4_FIN_V6_FIN_RCV) Expires in 2 minutes, 57 seconds
+Remote: example.com#http	ipv6client.mx#58239
+Local: 192.0.2.1#60477		64:ff9b::5db8:d877#80
+---------------------------------
+(V4_FIN_V6_FIN_RCV) Expires in 3 minutes, 52 seconds
+Remote: example.com#http	ipv6client.mx#58237
+Local: 192.0.2.1#6617		64:ff9b::5db8:d877#80
+---------------------------------
+  (Fetched 2 entries.)
+
+UDP:
+---------------------------------
+  (empty)
+
+ICMP:
+---------------------------------
+Expires in 50 seconds
+Remote: example.com#1402	ipv6client.mx#13371
+Local: 192.0.2.1#1402		64:ff9b::5db8:d877#13371
+---------------------------------
+  (Fetched 1 entries.)
+ +

Filter out UDP and ICMP, do not query the DNS, console format:

+ +
$ jool --session --display --tcp --numeric
+TCP:
+---------------------------------
+(V4_FIN_V6_FIN_RCV) Expires in 2 minutes, 57 seconds
+Remote: 93.184.216.119#80	2001:db8::2#58239
+Local: 192.0.2.1#60477		64:ff9b::5db8:d877#80
+---------------------------------
+(V4_FIN_V6_FIN_RCV) Expires in 3 minutes, 52 seconds
+Remote: 93.184.216.119#80	2001:db8::2#58237
+Local: 192.0.2.1#6617		64:ff9b::5db8:d877#80
+---------------------------------
+  (Fetched 2 entries.)
+ +

Do not resolve names, CSV format:

+ +
$ jool --session --display --numeric --csv > session.csv
+ +

session.csv

+ +

Just display the number of records of every table:

+ +
$ jool --session --count
+TCP: 2
+UDP: 0
+ICMP: 1
+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/en/usr-flags.html b/doc/usr/_site/en/usr-flags.html new file mode 100644 index 000000000..f564cc0b7 --- /dev/null +++ b/doc/usr/_site/en/usr-flags.html @@ -0,0 +1,126 @@ + + + + + Userspace Application Flags + + + + + +
+
+ +
+ +
+
+ +

Documentation > Userspace Application > Flags

+ +

Flags

+ +

Introduction

+ +

This compilation of documents explain the flags and options of Jool’s userspace applications (jool_siit and jool).

+ +

See the compilation and installation instructions if you still don’t have the binaries.

+ +

If a command changes the behavior of Jool, it requires network admin privileges (CAP_NET_ADMIN).

+ +

Index

+ +

Common options:

+ +
    +
  1. --help
  2. +
  3. --global +
      +
    1. Atomic Fragments
    2. +
    3. MTU Plateaus (Example)
    4. +
    +
  4. +
  5. --pool6
  6. +
+ +

jool_siit-only options:

+ +
    +
  1. --eamt
  2. +
  3. --blacklist
  4. +
  5. --pool6791
  6. +
+ +

jool-only options:

+ +
    +
  1. --pool4
  2. +
  3. --bib
  4. +
  5. --session
  6. +
  7. --quick
  8. +
+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/en/usr-install.html b/doc/usr/_site/en/usr-install.html new file mode 100644 index 000000000..05bffdfe2 --- /dev/null +++ b/doc/usr/_site/en/usr-install.html @@ -0,0 +1,130 @@ + + + + + Userspace Applications Installation + + + + + +
+
+ +
+ +
+
+ +

Documentation > Installation > Userspace Application

+ +

Userspace Applications Installation

+ +

Introduction

+ +

Jool is four things:

+ +
    +
  1. Two kernel modules you can hook up to Linux. One of them is the SIIT implementation and the other one is the Stateful NAT64. They have their own installation document.
  2. +
  3. Two userspace applications which can be used to configure each module.
  4. +
+ +

This document explains how to obtain the binaries of the userspace application.

+ +

If you downloaded the official release

+ +
user@node:~/Jool$ cd usr
+user@node:~/Jool/usr$ ./configure # You need libnl-3 to run this; see below.
+user@node:~/Jool/usr$ make
+user@node:~/Jool/usr# make install
+ +

Done; you should now be able to type jool --help or jool_siit --help and get some garbage. Go to Flags for more verbose documentation.

+ +

If you downloaded from the Github repository

+ +

The repository does not keep track of the configuration script, so you have to generate it yourself. You need autoconf 2.68 or superior to do that.

+ +
user@node:~# apt-get install autoconf
+ +

Then just add a call to autogen.sh to the normal installation procedure:

+ +
Jool$ cd usr
+Jool/usr$ ./autogen.sh # You need autoconf 2.68 or superior to run this.
+Jool/usr$ ./configure # You need libnl-3 to run this; see below.
+Jool/usr$ make
+Jool/usr# make install
+ +

Done; you should now be able to type jool --help or jool_siit --help and get some garbage. Go to Flags for more verbose documentation.

+ +

libnl-3

+ +

This is libnl-3’s official website is as of 2014-07-31, in case you want to compile it yourself.

+ +

If your distribution package-manages it though, you might really want to exploit the feature rather than compiling the framework:

+ +
user@node:~# apt-get install libnl-3-dev
+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/es/about.html b/doc/usr/_site/es/about.html new file mode 100644 index 000000000..a27e2f6b2 --- /dev/null +++ b/doc/usr/_site/es/about.html @@ -0,0 +1,92 @@ + + + + + Acerca de ... + + + + + +
+
+ +
+ +
+
+ +

Acerca de …

+ +

JOOL es un Traductor IPv4/IPv6 de código abierto. Jool nació como un Stateful NAT64 pero ha sido ampliado para soportar también SIIT & SIIT EAM.

+ +

Jool es financiado y desarrollado por NIC Mexico en colaboración con el ITESM.

+ +

Contactáctanos por medio de jool@nic.mx. mailbox

+ +

El código y la documentación han sido liberados bajo la licencia GPLv3.

+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/es/bib.html b/doc/usr/_site/es/bib.html new file mode 100644 index 000000000..dd880d787 --- /dev/null +++ b/doc/usr/_site/es/bib.html @@ -0,0 +1,176 @@ + + + + + BIB + + + + + +
+
+ +
+ +
+
+ +

Documentación > Ejemplos de uso > Stateful NAT64 > BIB

+ +

BIB

+ +

Ãndice

+ +
    +
  1. Qué es la BIB?
  2. +
  3. Estructura
  4. +
  5. Tipos
  6. +
  7. Ejemplos
    + a) Registro 01
    + b) Registro 02
    + c) Registro 03
  8. +
  9. Lecturas adicionales
  10. +
+ +

Qué es la BIB?

+ +

El Binding Information Base (BIB) es una colección de tablas en el Stateful NAT64. Aunque este concepto nace con los NATs y está definido en el RFC 2263, 1999.

+ +

La podríamos llamar Base de Datos de Asociaciones o Enlaces porque en ella se guardará por pares la asociación (dirección IPv6, puerto IPv6) con (dirección IPv4, puerto IPv4) si es una paquete de UDP o TCP. A esas duplas se le llaman direcciones de transporte. Cuando es un paquete de ICMP, se guardan los pares (dirección IPv6, identificador IPv6) con (dirección IPv4, identificador IPv4). Para conocer todos los detalles sobre la BIB lee la Sección 3.1, del RFC 6146 .

+ +

Dicho de otra manera, podemos decir que los registros en esta base de datos mapean las direcciones de transporte de la conexión de un nodo IPv6 a la dirección de transporte que Jool está usando para enmascarar éste en IPv4 en los protocolos UDP y TCP. Y mapeará la dupla (IP, identificador) de la conexión de un nodo IPv6 a la dupla (IP, identificador) que Jool está usando para enmascarar éste en IPv4 si es un mensaje de ICMP.

+ +

Estructura

+ +
    +
  • Registro BIB es un registro en la tabla BIB y está compuesto por duplas.
  • +
  • Tabla BIB es una colección de registros que comparten un protocolo. Dado que hay tres protocolos soportados (TCP, UDP y ICMP) por el RFC 6146, como resultado Jool tiene tres tablas BIB.
  • +
  • BIB es la colección de las tres tablas BIB de Jool.
  • +
+ +

Tipos

+ +

Hay dos tipos de registros BIB:

+ +
    +
  • Dinámicos: Jool crea estos al iniciar la comunicación de IPv6 a IPv4, para acceder a lo servicios de IPv4.
  • +
  • Estáticos: Los puedes dar de alta manualmente, para publicar un servicio IPv6 hacia la Red de IPv4, ya sea privada o pública. Esto es análogo al redireccionamiento de puertos en NATs.
  • +
+ +

Ejemplos

+ +

Por ejemplo, si los siguiente mapeos existen en tu NAT64:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
No.RegistroDirección IPv6 de TransporteDirección IPv4 de TransporteProtocol
016::6#664.4.4.4#44TCP
02  TCP
032001:db8::8#40000203.0.113.2#TCP
+ +

Registro 01

+ +

Entonces los nodos IPv4 pueden encontrar el servicio TCP publicado en 6::6 por el puerto 66, enviando una solicitud a 4.4.4.4 por el puerto 44. En otras palabras, Jool engaña a los nodos IPv4 haciendoles pensar que 6::6#66 es 4.4.4.4#44.

+ +

Registro 02

+ +

Registro 03

+ +

Lecturas adicionales

+ +

Si quieres aprender sobre:

+ +
    +
  1. Cómo crear y destruir registros manualmente, ve a mapeo estático o consulta usando la opción BIB.
  2. +
  3. Cómo restringir el uso de los registros dinámicos, ve a --address-dependent-filtering.
  4. +
+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/es/contact.html b/doc/usr/_site/es/contact.html new file mode 100644 index 000000000..0b2213bf6 --- /dev/null +++ b/doc/usr/_site/es/contact.html @@ -0,0 +1,118 @@ + + + + + Contacto + + + + + +
+
+ +
+ +
+
+ +

Contáctanos

+ +

Ponte en contacto con nosotros mediante:

+ +

Lista de Discusión

+ +

– jool-list@nic.mx es una lista de correo general para la discusión pública del proyecto y la difusión de noticias.

+ +

email Sus preguntas, solicitudes y comentarios son bienvenidos. Registrate aquí.

+ +

Actualmente, existe un problema de “exceso†de seguridad que está siendo corregido.

+ +

Lista de Noticias

+ +

– jool-news@nic.mx es una lista de correos para informar solo noticias.

+ +

mailbox_with_mail Es utilizada para notificar sobre las nuevas versiones que están siendo liberadas en este sitio. Suscribete aquí.

+ +

Solo el equipo de desarrollo puede enviar mails en esta lista, así que no tienes que preocuparte de recibir spam.
+Debido a este próposito, esta lista raramente genera más de un e-mail por mes.

+ +

Lista Oficial de Errores

+ +

– Github corner es nuestra lista oficial de errores.

+ +

pencil Este también es un buen lugar para solicitar nuevas características.

+ +

Mail a los Desarrolladores

+ +

– jool@nic.mx es una cuenta de correo que puedes utilizar para dirigirte + solo a nosotros los desarrolladores.

+ +

Aunque te podríamos dar algún consejo a través de este medio, nosotros agradeceremos que uses la cuenta de
+jool-list@nic.mx para este propósito, con el fin de quedar registrado y que pueda ser de beneficio para algún
+otro usuario en el futuro.

+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/es/dns64.html b/doc/usr/_site/es/dns64.html new file mode 100644 index 000000000..50c56c14c --- /dev/null +++ b/doc/usr/_site/es/dns64.html @@ -0,0 +1,213 @@ + + + + + DNS64 + + + + + +
+
+ +
+ +
+
+ +

Documentación > Ejemplos de uso > DNS64

+ +

Tutorial DNS64

+ +

Ãndice

+ +
    +
  1. Introducción
  2. +
  3. Red
  4. +
  5. Configuración +
      +
    1. BIND
    2. +
    3. Todo lo demás
    4. +
    +
  6. +
  7. Resultado
  8. +
+ +

Introducción

+ +

Este documento se enfoca en DNS64, la última llave para tener una instalación de NAT64 completamente coherente.

+ +

Cualquier implementación correcta de DNS64 se supone debería funcionar; BIND será utilizado para efecto de ilustrar. Espero que estes familiarizado con DNS y que tengas una idea por lo menos de como luce la configuración de BIND.

+ +

Red

+ +

Fig.1 - Setup

+ +

Aunque Jool y el DNS64 son ilustrados como nodos separados, no hay nada que te prevenga de unirlos en una sola máquina (a menos de que Jool esté monopolizando todas las direcciones IPv4 de sus nodos, por supuesto).

+ +

Configuración

+ +

BIND

+ +

Primero, voy a dejar en claro lo que queremos lograr.

+ +

example.com es un dominio que esta disponible ambas la Internet IPv4 y la IPv6, y por lo tanto tiene ambos tipos de registros:

+ +
$ dig example.com A
+(...)
+;; ANSWER SECTION:
+example.com.		66029	IN	A	93.184.216.119
+(...)
+
+$ dig example.com AAAA
+(...)
+;; ANSWER SECTION:
+example.com.		86040	IN	AAAA	2606:2800:220:6d:26bf:1447:1097:aa7
+(...)
+ +

nat64-tutorial.mx es un ejemplo de un dominio disponible solo desde IPv4:

+ +
$ dig nat64-tutorial.mx A
+(...)
+;; ANSWER SECTION:
+nat64-tutorial.mx.	66029	IN	A	200.94.182.36
+(...)
+
+$ dig nat64-tutorial.mx AAAA
+(...)
+;; AUTHORITY SECTION:
+nat64-tutorial.mx.	240	IN	SOA	potato.mx. hostmaster.jool.mx. 2013070801 3600 900 604800 1800
+(...)
+ +

No hay necesidad de que un nodo IPv6 accese example.com mediante el NAT64. Por otra parte, nat64-tutorial.mx no puede ser accesado desde IPv6 si uno.

+ +

En otras palabras, queremos que el servicio de DNS64 devuelva 2606:2800:220:6d:26bf:1447:1097:aa7 cuando le sea solicitado el registro AAAA de example.com (que es lo que normalmente hace), y 64:ff9b::200.94.182.36 (ej. el prefijo NAT64 mas la direccion IPv4) cuando le sea solicitado el registro AAAA de nat64-tutorial.mx (el cual es el hack NAT64 completo).

+ +

Primero, ten funcionando un servidor BIND. En Ubuntu, lo único que teines que hacer (assumiendo que todavia no tienes uno) es ejecutar

+ +
user@B:~# apt-get install bind9
+ +

La configuración mas básica es muy minimalista.

+ +

The most basic configuration is very minimalistic. Para activar DNS64, la sección de opciones del archivo named.conf (en mi caso, /etc/bind/named.conf.options) es la única que debe ser actualizada:

+ +
options {
+	(...)
+
+	# Listening on IPv6 is off by default.
+	listen-on-v6 { any; };
+
+	# This is the key. Note that you can write multiple of these if you need
+	# more IPv6 prefixes.
+	# "64:ff9b::/96" has to be the same as Jool's `pool6`.
+	dns64 64:ff9b::/96 {
+		# Options per prefix (if you need them) here.
+		# More info here: https://kb.isc.org/article/AA-01031
+	};
+};
+ +

Y recuerda recargar.

+ +
user@B:~# sudo service bind9 restart
+ +

Eso es todo!

+ +

Todo lo demás

+ +

Las redes mas externas cambiaron, y eso deberia ser reflejado probablemente en las tablas de ruteo de todos:

+ +
user@J:~# /sbin/ip -6 route del 2001:db8:1::/64
+user@J:~# /sbin/ip -6 route add default via 2001:db8:2::1 dev eth0
+ +

(Instrucciones similares deberían ser replicadas en los routers y los nodos)

+ +

Jool o J no necesita estar consciente del DNS64 por que los nombres de dominio son completamente transparentes a NAT64, asi que no necesitas hacer nadamas en J.

+ +

En cuanto a los nodos hoja, cualquier nodo IPv6 que necesita acceder solo a contenido IPv4 debe utilizar el DNS64 como su servidor de nombres por default (a menos de que quieras especificarlo manualmente en tus comandos dig, supongo).

+ +

Resultado

+ +

Desde uno de esos nodos IPv6:

+ +
$ dig example.com AAAA
+(...)
+;; ANSWER SECTION:
+example.com.		86040	IN	AAAA	2606:2800:220:6d:26bf:1447:1097:aa7
+(...)
+
+$ dig nat64-tutorial.mx AAAA
+(...)
+;; AUTHORITY SECTION:
+nat64-tutorial.mx.	86040	IN	AAAA	64:ff9b::c85e:b624
+(...)
+ +

Si monitoreas el trafico, deberias ver paqueter hacia example.com en R, y paquetes hacia nat64-tutorial.mx mediante S:

+ +

Fig.2 - Arrows

+ +

Final Feliz!

+ + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/es/documentation.html b/doc/usr/_site/es/documentation.html new file mode 100644 index 000000000..b8fff8097 --- /dev/null +++ b/doc/usr/_site/es/documentation.html @@ -0,0 +1,128 @@ + + + + + Documentación - Ãndice + + + + + +
+
+ +
+ +
+
+ +

Documentación

+ +

Bienvenido al índice de la documentación de Jool.

+ +

Introducción

+ +
    +
  1. Qué es SIIT/NAT64?
  2. +
  3. Qué es Jool?
  4. +
+ +

Consulta el RFC 6586 para experiencias de desarrollo usando NAT64 Stateful.

+ +

Instalación

+
    +
  1. Servidor Jool
  2. +
  3. Herramienta de Configuración
  4. +
+ +

Ejemplos de uso

+
    +
  1. SIIT
    + a) RFC 6791
  2. +
  3. SIIT + EAM
    + a) EAMT
  4. +
  5. NAT64 Stateful
    + a) Pool IPv4
    + b) BIB
    + c) Mapeos Estáticos
  6. +
  7. DNS64
  8. +
  9. 464XLAT - SIIIT/DC Modo de traducción dual
  10. +
+ +

Herramienta de Configuración

+ +
    +
  1. Banderas
  2. +
+ +

Otros

+
    +
  1. FAQ
  2. +
  3. MTU y Fragmentación
  4. +
  5. El problema con Offloading
  6. +
  7. Interfaz Única
  8. +
+ + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/es/download.html b/doc/usr/_site/es/download.html new file mode 100644 index 000000000..440e0e826 --- /dev/null +++ b/doc/usr/_site/es/download.html @@ -0,0 +1,250 @@ + + + + + Descarga + + + + + +
+
+ +
+ +
+
+ +

Descarga

+ + + +
    +
  • Las versión resaltada en negritas es la última actualización y es la más recomendable a instalar.
  • +
  • Las versiones no resaltadas son versiones estables pero anteriores. Éstas se podrían requerir en caso de que alguna opción, en la más nueva, falle. ¡Los reportes son bienvenidos!
  • +
  • Las versiones tachadas no son recomedables, pues son muy antiguas o tienen errores críticos ya bien identificados.
  • +
+ +

3.3.x

+ +

Jool 3.3 es un SIIT y Stateful NAT64 bastante apegado al estándar.

+ +

La versión 3.3.3 es la más actual, y es considerada la más madura.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DescargaSHA512MD5Git commit
3.3.3SHA512MD5Enlace
3.3.2SHA512MD5Enlace
3.3.1SHA512MD5Enlace
3.3.0SHA512MD5Enlace
+ +

3.2.x

+ +

La serie de versiones 3.2 mejora la 3.1 implementando Apertura simultánea de Conexiones TCP. Además, se incluyó una opción para limpiar sus pools y se realizaron muchos otros ajustes internos.

+ +

3.2.3 es la última actualización de esta serie de versiones.

+ +

La documentación en este sitio pertenece a la serie de versiones 3.3. Se puede descargar una imágen de la documentación de la serie 3.2 aquí (Nota: está en inglés).

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DescargaSHA512MD5Git commit
3.2.3SHA512MD5Enlace
3.2.2SHA512MD5Enlace
3.2.1SHA512MD5Enlace
3.2.0SHA512MD5Enlace
+ +

3.1.x

+ +

La serie de versiones 3.1 esta bastante apegada al estándar stateful NAT64. Sus carácteristicas faltantes son:

+ +
    +
  • Políticas de filtrado.
  • +
  • Apertura simultánea de Conexiones TCP.
  • +
+ +

La última actualización de esta serie de versiones es la 3.1.6.

+ +

La documentación en este sitio pertenece a la serie de versiones 3.3. Se puede descargar una imágen de la documentación de la serie 3.1 aquí (Nota: está en inglés).

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DownloadSHA512MD5Git commit
3.1.6SHA512MD5Enlace
3.1.5SHA512MD5Enlace
3.1.4SHA512MD5Enlace
3.1.3SHA512MD5Enlace
3.1.2SHA512MD5Enlace
3.1.1SHA512MD5Enlace
3.1.0SHA512MD5Enlace
+ + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/es/eamt.html b/doc/usr/_site/es/eamt.html new file mode 100644 index 000000000..d686cab44 --- /dev/null +++ b/doc/usr/_site/es/eamt.html @@ -0,0 +1,198 @@ + + + + + EAMT + + + + + +
+
+ +
+ +
+
+ +

Documentación > Ejemplos de uso > SIIT + EAM > EAMT

+ +

EAMT

+ +

Ãndice

+ +
    +
  1. Definición
  2. +
  3. Ejemplos
    + a) Registro 01
    + b) Registro 02
    + c) Registro 03
  4. +
  5. Resumen y Notas Adicionales
  6. +
+ +

Definición

+ +

La tabla EAMT (Explicit Address Mappings Table) por sus siglas en inglés, es una colección de registros en un servidor SIIT y en ella se guarda la relación de cómo las diferentes direcciones deben de ser traducidas.

+ +

Lo que distingue este tipo de mapeo con los otros mecanismos es, en que la dirección IPv4 no forma parte de la dirección IPv6 a usar.

+ +

Ejemplos

+ +

Aquí se encuentra un ejemplo de una tabla EAMT:

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
No.RegistroPrefijo IPv4Prefijo IPv6
01192.0.2.1/322001:db8:aaaa::5/128
02198.51.100.0/242001:db8:bbbb::/120
03203.0.113.8/292001:db8:cccc::/125
+ +

Un registro EAMT está compuesto en pares, un prefijo IPv4 y un prefijo IPv6. Cuando una dirección esta siendo traducida, su prefijo es literalmente reemplazado de acuerdo a la tabla.

+ +
	NOTA IMPORTANTE: En la implementación de Jool, todos los registros son bidireccionales.
+
+ +

Registro 01

+ +

Este es el caso más sencillo, porque no tiene prefijo. El registro literalmente dice: “La dirección 192.0.2.1 debe de ser siempre traducida como 2001:db8:aaaa::5, y a la inversaâ€.

+ +

Ya sea que la dirección sea origen, destino o esté dentro del paquete interno de un error ICMP, no importa.

+ +

La representación IPv6 de 192.0.2.1 es 2001:db8:aaaa::5, y la representación IPv4 de 2001:db8:aaaa::5 es 192.0.2.1.

+ +

Registro 02

+ +

La segunda entrada es más interesante, porque hay un byte de sufijo. El registro esta diciendo: “El grupo de direcciones 198.51.100.x debera ser tradicido como 2001:db8:bbbb::x, y viceversa. Donde x está en el intervalo de 0-255.â€

+ +

Como en:

+ +
    +
  • 198.51.100.0 <-> 2001:db8:bbbb::0
  • +
  • 198.51.100.1 <-> 2001:db8:bbbb::1
  • +
  • 198.51.100.2 <-> 2001:db8:bbbb::2
  • +
  • …
  • +
  • 198.51.100.254 <-> 2001:db8:bbbb::fe
  • +
  • 198.51.100.255 <-> 2001:db8:bbbb::ff
  • +
+ +

Esta forma puede ayudarte a simplificar la configuración cuando tienes muchas direcciones a traducir; el sufijo siempre es preservado. La ventaja, que es evidente, es que un solo registro EAMT puede describir la traducción de una red entera.

+ +

Por mencionar otro ejemplo, un registro EAMT con /16 será mucho más eficiente que los 65536 registros atómicos equivalentes.

+ +

Registro 03

+ +

El reemplazo de prefijo puede ser hecho a nivel de bits. El tercer registro ejemplifica esto, porque son 3 bits de sufijo. El registro esta diciendo: “El grupo de direcciones 203.0.113.x debera ser tradicido como 2001:db8:cccc::y, y a la inversa. Donde x = [8,15], y = [0,7].â€

+ +

La dirección 203.0.113.8 se convierte en 2001:db8:cccc::, no en 2001:db8:cccc::8. Esto es porque la forma binaria de .8 es 00001000, y la máscara es de 29 por lo que el uno se encuentra en el lado del prefijo.

+ +
    +
  • 203.0.113.8 <-> 2001:db8:cccc::
  • +
  • 203.0.113.9 <-> 2001:db8:cccc::1
  • +
  • 203.0.113.10 <-> 2001:db8:cccc::2
  • +
  • 203.0.113.11 <-> 2001:db8:cccc::3
  • +
  • 203.0.113.12 <-> 2001:db8:cccc::4
  • +
  • 203.0.113.13 <-> 2001:db8:cccc::5
  • +
  • 203.0.113.14 <-> 2001:db8:cccc::6
  • +
  • 203.0.113.15 <-> 2001:db8:cccc::7
  • +
+ +

Resumen y Notas Adicionales:

+ +
    +
  • En el mecanisimo de transición SIIT-EAM se emplea y se mantiene la tabla de direcciones de mapeo explicito.
  • +
  • En dicha tabla existen duplas con prefijos de IPv4 e IPv6 válidos.
  • +
  • El prefijo es remplazado a nivel de bits.
  • +
  • La dirección IPv4 no forma parte de la dirección IPv6 a usar.
  • +
  • Los registros son bidireccionales.
  • +
  • Los registros EAMT no se pueden intersectar.
  • +
  • Los paquetes que empleen dichas direcciones se tratarán como tales, es decir, con ese tipo de traducción.
  • +
  • Si Jool no encuentra una coincidencia en la tabla para una dirección, intenta traducir basado en el prefijo pool6.
  • +
  • Si eso también falla, el paquete es devuelto al kernel. Se asume que el paquete no debe ser traducido.
  • +
+ +

Ve la demostración o el material de referencia para obtener información de cómo crear y destruir registros manualmente.

+ + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/es/faq.html b/doc/usr/_site/es/faq.html new file mode 100644 index 000000000..31136cf85 --- /dev/null +++ b/doc/usr/_site/es/faq.html @@ -0,0 +1,234 @@ + + + + + FAQ/Solución de problemas + + + + + +
+
+ +
+ +
+
+ +

Documentación > Otros > FAQ/Solución de problemas

+ +

FAQ/Solución de problemas

+ +

Esto resume problemas en los cuales hemos visto que los usuarios se meten.

+ +

Instalé el módulo de Jool pero no parece estar haciendo nada.

+ +

Instalar el módulo del Jool sin argumentos suficientes es legal. Asumirá que intentas terminar de configurar utilizando la Aplicación de espacio de usuario, y se mantendra inactivo hasta que lo hayas hecho.

+ +

Utiliza el parámetro --global para saber el estado en el que se encuentra Jool:

+ +
$ jool_siit --global
+  Status: Disabled
+ +
$ jool --global
+  Status: Disabled
+ +

Los requerimientos minimos de configuracion del SIIT de Jool son:

+ + + +

Los requerimientos minimos de configuración de Stateful Jool son:

+ + + +

Si ese no es el problema, intenta habilitar la depuración mientras compilas.

+ +
user@node:~/Jool-<version>/mod$ make debug
+
+ +

Reinstalalo. Jool sera mas descriptivo en dmesg:

+ +
$ dmesg | tail -5
+[ 3465.639622] ===============================================
+[ 3465.639655] Catching IPv4 packet: 192.0.2.16->198.51.100.8
+[ 3465.639724] Translating the Packet.
+[ 3465.639756] Address 192.0.2.16 lacks an EAMT entry and there's no pool6 prefix.
+[ 3465.639806] Returning the packet to the kernel.
+
+ +

Si no esta imprimiendo nada a pesar de que estas habilitando la depuración, quizá es por que tu nivel de lo es muy alto. Ve esto.

+ +

Los mensajes de depuración se vuelven rápidamente gigabytes de log, asi que recuerda revertor esto antes de ponerlo en producción.

+ +

Que hacer con este mensaje de error? Está horriblemente ambigüo.

+ +

Así es, los mensajes de respuesta del modulo del kernel hacia el espacio de usuario son muy primitivos. Podriamos mejorar realmente la comunicación con la Aplicación de espacio de usuario, pero no tenemos control sobre la comunicación de modprobe.

+ +

De cualquier forma, tendras mejor suerte leyendo los logs de Jool. Como con cualquier otro componente del kernel, los mensajes de Jool estan mezclados junto con otros y se pueden ver ejecutando dmesg En general, la mayor parte de los kernels son muy silenciosos una vez que han terminado la fase de arranque, asi que el mensaje mas reciente de Jool deberia encontrarse hasta el final.

+ +
$ sudo modprobe jool_siit pool6=2001:db8::/96 pool4=192.0a.2.0/24
+ERROR: could not insert module jool_siit.ko: Invalid parameters
+$ dmesg | tail -1
+[28495.042365] SIIT Jool ERROR (parse_prefix4): IPv4 address or prefix is malformed:
+192.0a.2.0/24.
+ +
$ sudo jool --bib --add --tcp 2001:db8::1#2000 192.0.2.5#2000
+TCP:
+Invalid input data or parameter (System error -7)
+$ dmesg | tail -1
+[29982.832343] NAT64 Jool ERROR (add_static_route): The IPv4 address and port could not be
+reserved from the pool. Maybe the IPv4 address you provided does not belong to the pool.
+Or maybe they're being used by some other BIB entry?
+ +

Jool es intermitentemente incapaz de traducir tráfico.

+ +

Ejecutaste algo como:

+ +
ip addr flush dev eth1
+ +

?

+ +

Entonces quizá hayas eliminado las direcciones de enlace de la interfáz.

+ +

Las direcciónes de enlace son utilizadas por muchos portocolos IPv6 relevantes. En particular, son utilizadas por el Protocolo de Descubrimiento de Vecinos, lo que significa que si no las tienes, la máquina de traducción tendrá problemas para encontrar a sus vecinos IPv6.

+ +

Observa la salida de ip addr.

+ +
user@T:~$ /sbin/ip address
+1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
+    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
+    inet 127.0.0.1/8 scope host lo
+    inet6 ::1/128 scope host 
+       valid_lft forever preferred_lft forever
+2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
+    link/ether 08:00:27:83:d9:40 brd ff:ff:ff:ff:ff:ff
+    inet6 2001:db8:aaaa::1/64 scope global 
+       valid_lft forever preferred_lft forever
+    inet6 fe80::a00:27ff:fe83:d940/64 scope link 
+       valid_lft forever preferred_lft forever
+3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
+    link/ether 08:00:27:c6:01:48 brd ff:ff:ff:ff:ff:ff
+    inet6 2001:db8:bbbb::1/64 scope global tentative 
+       valid_lft forever preferred_lft forever
+
+ +

La primera interfaz está correctamente configurada; tiene ambas una dirección de “alcance global†(utilizada para un tráfico típico) y una direccion de “alcance de enlaceâ€(utilizada para administración interna). La interfáz eth1 carece de una dirección de enlace, y como resultado tiende a inducir dolores de cabeza.

+ +

La manera más facil de restaurar las “direcciones de “alcance de enlaceâ€, que hemos encontrado, es reiniciar la interfaz:

+ +
ip link set eth1 down
+ip link set eth1 up
+ +

Si, hablo encerio:

+ +
user@T:~$ /sbin/ip address
+1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
+    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
+    inet 127.0.0.1/8 scope host lo
+    inet6 ::1/128 scope host 
+       valid_lft forever preferred_lft forever
+2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
+    link/ether 08:00:27:83:d9:40 brd ff:ff:ff:ff:ff:ff
+    inet6 2001:db8:aaaa::1/64 scope global 
+       valid_lft forever preferred_lft forever
+    inet6 fe80::a00:27ff:fe83:d940/64 scope link 
+       valid_lft forever preferred_lft forever
+3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
+    link/ether 08:00:27:c6:01:48 brd ff:ff:ff:ff:ff:ff
+    inet6 fe80::a00:27ff:fec6:148/64 scope link 
+       valid_lft forever preferred_lft forever
+
+ +

(Toma en cuenta que, necesitas agregar la dirección global de nuevo)

+ +

Tambien, como referencia futura, ten en mente que la manera “correcta†de vaciar una interfaz es

+ +
ip addr flush dev eth1 scope global
+ +

IPv4 no necesita direcciones de enlace.

+ +

El rendimiento es terrible!

+ +

deshabilita los offloads!

+ +

Si estas ejecutando Jool en una máquina virtual huesped, algo importante que debes mantener en mente es que quizá prefieras o tambien tengas que deshabilitar los offloads en el enlace ascendente de la máquina virtual

+ +

No puedo hacer ping a la dirección IPv4 del pool.

+ +

De hecho, esto es normal en Jool 3.2.x y versiones anteriores. La dirección de destino del paquete ping es traducible, asi que Jool se esta robando el paquete. Desafortunadamente, no tiene ningun registro relevante en el BIB (por que el ping no fue iniciado desde IPv6), asi que la traducción falla( y el paquete es desechado).

+ +

Dejando de lado este aspecto extraño, no causa ninguna otra catastrofe; solo haz ping a la dirección del nodo.

+ +

Jool 3.3+ maneja mejor esto asi que el ping deberia de ser exitoso.

+ + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/es/index.html b/doc/usr/_site/es/index.html new file mode 100644 index 000000000..4be4230ae --- /dev/null +++ b/doc/usr/_site/es/index.html @@ -0,0 +1,315 @@ + + + + + Home + + + + + +
+
+ +
+ +
+
+ +

Página Principal

+ +
+ +

Introducción

+ +

Jool es un SIIT y NAT64 para Linux. Desarrollado sobre Ubuntu. Probado en Debian, CentOS, SuSE, RedHat y recientemente en Raspbian.

+ + + +
+ +

Estatus

+ +

Nuestra meta actual es que Jool sea un SIIT y un Stateful NAT64 apegado a los estándares de la IEEE. Nuestro agenda al 2015-04-13 es:

+ +
    +
  1. +

    La Versión 3.4.0 será una refactorización para remover de Jool Stateful NAT64 la necesidad de una segunda dirección IPv4, y optimizar el pool4. (De hecho, son practicamente el mismo bug.)

    +
  2. +
  3. +

    La Versión 4.0.0 implicará una una reprogramación completa . Se está evaluando las alternativas de programarlo como un pseudo device o servicio (daemon) en el userspace. Se estima que esto lo hará más protable y simple de configurar, pero con algo de demérito en su performance.

    +
  4. +
  5. +

    La Versión 4.1.0 añadirá muchas caracteristicas nuevas.

    +
  6. +
+ +

Es posible que existan versiones intermedias dependiendo de los problemas reportados. Sus sugerencias puede persuadirnos para cambiar prioridades. Si tienes alguna recomedación que darnos, presiona aquí.

+ +

Nuestra versión más reciente es la 3.3.3.

+ +
+ +

Noticias

+ +

2015-08-17

+ +

Versión 3.3.3 liberada.

+ +

Error crítico #166 corregido heavy_exclamation_mark

+ +

Además en esta versión:

+ +
    +
  1. Se añadió el soporte para el framework DKMS!
  2. +
  3. Se corrigieron los errores #150 y [#151] (https://github.com/NICMx/NAT64/issues/151) al usar la Herramienta de Configuración de Jool en el despliege de las tablas (bib, sessions y pools) cuando están vacías.
  4. +
+ +

2015-04-14

+ +

Versión 3.3.2 liberada.

+ +

Este es el resumen:

+ + + +

Se dieron de alta dos listas de correo:

+ +
    +
  • jool-news@nic.mx para emitir noticias. Exclusivo para anunciar las nuevas liberaciones. Ház click aquí para empezar a recibirlas.
  • +
  • jool-list@nic.mx para discusión pública (ayuda, propuestas, etc.) y noticias. Haz click aquí para registrarte.
  • +
+ +

jool@nic.mx aún puede ser utilizado para accesar a los desrrolladores.

+ +

small_red_triangle_down También nos gustaria disculparnos por el inconveniente que tuvimos recientemente con el certificado. Aunque están siendo generados, los archivos de la lista de correos no están disponibles todavia, y esto está en la lista de pendientes de nuestros administradores.

+ +

2015-03-11

+ +

Error importante #137 descubierto heavy_exclamation_mark

+ +

Precisamente, ya liberamos Jool 3.3.1 para resolver dicho problema.

+ +

2015-03-09

+ +

Se ha concluido Jool 3.3.0.

+ +

small_red_triangle_down Las polítcas de Filtrado aún no son soportadas en esta versión, pero las traducciones tipo Stateless para IP/ICMP (SIIT) son ahora soportadas.

+ +

Lee la introducción a SIIT/NAT64 para conocer este nuevo paradigma. Aqui encontras un tutorial. Para su mejor comprensión, ve a 464XLAT.

+ +

Se reorganizó la herramienta de configuración de Jool, por favor actualiza tus scripts:

+ + + +

También se liberó la actualización de Jool 3.2.3, para corregir los errores encontrados desde la versión 3.2.2. Uno de los principales errores es sobre la vulnerabilidad de DoS. Actualizar es altamente recomendada.

+ +

2014-10-24

+ +

El error importante #112 fue descubierto, y la versión 3.2.2 queda ya desactualizada.

+ +

2014-10-17

+ +

La documentación provista sobre --plateaus ha sido mejorada. Su definición también.

+ +

small_red_triangle_down Ha llamado nuestra atención que no hemos incluido una explicación acerca de las IP literals, esto quedará dentro de la próxima actualización.

+ +

2014-10-08

+ +

versión 3.2.1 liberada. La serie 3.2 es considerada más madura que la 3.1.

+ +

Los cambios importantes son:

+ +
    +
  1. Jool siempre intentará enmascarar los paquetes usando el primer prefijo de la pool. Esto significa que Jool no era capaz de manejar mas que un solo prefijo.
  2. +
  3. La pérdida de memoria en el kernel ha sido corregida.
  4. +
+ +

Los cambios menos relevantes son:

+ +
    +
  1. log_martians no es incluido como un paso al insertar Jool (aunque no afecta si usted lo mantiene).
  2. +
  3. La actualización del estado de SNMP es regresado. Ver nstat y netstat -s.
  4. +
  5. El checksum es actualizado correctamente en los paquetes de Error de ICMP truncados.
  6. +
+ +

NOTA: Cuando un error de ICMP es demasiado grande, no se fragmenta; se trunca. Esto se debe a que, puesto que es un mensaje de error entonces no es necesario que todo el mensaje llegue.

+ +

2014-09-01

+ +

Nos tomo más tiempo del planeado la realización de las pruebas, pero finalmente la versión 3.2.0 es liberada.

+ +

Note que se cambio el número de versión menor, porque la Herrmienta de Configuración del Jool es ligeramente diferente. Los parámetros de configuración de un sólo valor han sido juntados en la opción de --general y ésta remplaza a --filtering, --translate y --fragmentation. La aplicación tiene además tres nuevas caracteristicas:

+ +
    +
  1. La capacidad de limpiar las pools.
  2. +
  3. Se añadió la opción de --quick.
  4. +
  5. Se añadió la opción de --svg, en BIB y session.
  6. +
+ +

El segundo cambio más importante es el Soportar varias conexiones de TCP simultáneas. La atención a este tipo de eventos es ahora menos complicada.

+ +

Una pequeña confusión saco a luz que el path a la libnl había sido codificada en el script de configuración. Si usted ha tenido problemas para compilar la Herramienta de Configuración de Jool, entonces pruebe esta nueva versión.

+ +

Lo menos relevante incluye un complemento al viejo caso #65, más documentación del código smiley. La documentación para los usuarios se ha actualizado significativamente, para ver los cambios vaya aquí.

+ +

small_red_triangle_down No se completaron los cambios para la nueva implementación del mecanismo de fragmentación. Esto fue uno de los principales motivos para el retrazo de esta versión. Al parecer se requiere conciliar el desfragmentador del kernel y el RFC para poder implementar las políticas de filtrado. Sigue siendo un caso activo.

+ +

También se liberó el 3.1.6, el cual contiene pequeñas correciones al 3.1.5. Esto se hizo en consideración a los usuarios que por alguna razón requerian continuar usando la serie 3.1.x.

+ +

2014-06-26

+ +

Si está familiarizado con los Markdown y los Github’s diffs, puedes encontrar los cambios en la documentación de la versión 3.1.5 aquí, aquí y aquí.

+ +

2014-06-18

+ +

La versión 3.1.5 fue liberada.

+ +

La más importante corrección fue al caso #92. Errores incorrectos de ICMP confunden a los nodos de IPv4, lo cual baja la confibilidad en el tráfico de 4-a-6.

+ +

Aparte de esto, la Herramienta de Configuración de Jool ha sido ajustada para que no se inhiba más cuando las tablas de sesiones y BIB son grandes, y para dar de baja las sesiones cuando las BIBs son borradas.

+ +

Entonces, se tuvieron un par de problemas de performance y optimización. Colateralmente, para alinear la prioridad de debugeo versus el resto del kernel, se puso mayor cuidado de que información será registrada en el Log del Sistema para mantenerlo lo más limpio posible.

+ +

Si te interesa cuidar el performance, lee este artículo y la documentación de --minMTU6. Este parámetro de configuración te ayudará a evitar la fragmentación.

+ +

Si nadie encuentra algún error crítico en esta versión, esta actualización será la última de la serie 3.1.x. Estaremos trabajando para cumplir al 100% el RFC en la próxima actualización.

+ +

2014-04-25

+ +

La versión 3.1.4 ha sido liberada, y corrige:

+ +
    +
  1. Dos problemas de inhibición del equipo caso#90 y caso#84.
  2. +
  3. La Herramienta de Configuración del Jool ahora resuelve nombres.
  4. +
  5. Se añade el soporte para Linux 3.13+.
  6. +
+ +

x No recomendamos el uso de Jool en el kernel 3.12.

+ +

2014-03-26

+ +

La versión 3.1.3 ha sido liberada, y corrige:

+ +
    +
  1. El uso de una incorrecta validación no permite la configuración de Jool en ciertos sistemas.
  2. +
  3. Un error que provoca que Jool no envíe ciertos errores de ICMP.
  4. +
  5. Una pérdida de memoria en un caso de paquetes fragmentados.
  6. +
  7. Se realizó una ligera optimización en el algoritmo de traducción del paquete al replazar algunos spinlocks con RCUs.
  8. +
+ +

2014-03-04

+ +

bell Website ha sido liberado. !Este website!

+ +

y con este viene un nueva actualización 3.1.2, que:

+ +
    +
  1. Estándariza el procedimiento de compilación e instalación en la Herramienta de Configuración de Jool.
  2. +
  3. Hace más explicto el manejo de sufijos de prefijos.
  4. +
  5. No se inhibe cuando el comando modprobe recibe argumentos inválidos .
  6. +
+ +

2014-02-21

+ +

La versión 3.1.1 ha sido liberada.

+ +

Esta contiene dos correcciones:

+ +
    +
  1. Se añadió el solicitar permisos de administrador para efectuar los cambios a parámetros en la Herramienta de Configuración del Jool.
  2. +
  3. Se corrigieron problemas de compatibilidad en los kernels ~3.1 .
  4. +
+ +

2014-01-15

+ +

small_orange_diamond La versión 3.1.0 ha sido liberada. ¡Jool, finalmente, maneja fragmentación!

+ +

Otras correcciones importantes:

+ +
    +
  • Se realizaron optimizaciones relevantes en ambas base de datos: BIB y session. El módulo deberá escalar mucho más elegantemente cuando los clientes se encuentren demandando más tráfico.
  • +
  • Jool ya no requiere de otra dirección IPv4 por separado.
  • +
  • El pánico del kernel cuando se removia el módulo ha sido suprimido.
  • +
  • Y además.
  • +
+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/es/intro-jool.html b/doc/usr/_site/es/intro-jool.html new file mode 100644 index 000000000..78e2dbc23 --- /dev/null +++ b/doc/usr/_site/es/intro-jool.html @@ -0,0 +1,234 @@ + + + + + Introducción a Jool + + + + + +
+
+ +
+ +
+
+ +

Documentación > Introducción > Jool

+ +

Introducción a Jool

+ +

Ãndice

+ +
    +
  1. Descripción
  2. +
  3. Cumplimiento
  4. +
  5. Compatibilidad
  6. +
+ +

Descripción

+ +

Jool es una implementación de varios mecanismos de transición en IPv6. Todos en la categoría de traducción: Stateful NAT64, SIIT y SIIT con EAM. Jool es una aplicación de código abierto (open source) en Linux, desarrollado sobre Ubuntu, y probado en otros Linux (Debian, CentOS, Raspbian, RedHat, SuSE).

+ +

De Jool 1.0 a Jool 3.2.3 -> Stateful NAT64
+De Jool 3.3.0 en delante -> Stateful NAT64, SIIT y SIIT con EAM

+ +

Cumplimiento

+ +

Este es el estatus actual de cumplimiento de Jool 3.3:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RFC/borradorNombre de recordatorioEstatus
RFC 6052Traducción de dirección IPCumple Totalmente.
RFC 6144Marco de traducción IPv4/IPv6Cumple Totalmente.
RFC 6145SIITCumple Totalmente. Esta en desuso el empleo de los fragmentos atómicos. .
RFC 6146Stateful NAT64Por Completar.
(Problemas por la implementación del RFC 6145)
(Políticas de Filtrado).
RFC 6384FTP sobre NAT64Por Completar.
RFC 6791Peculiaridades de ICMPPor Implementar.
(Unificar Pool de direcciones en IPv4)
(Extensión del encabezado de ICMP)
RFC 6877464XLATImplementado como SIIT-DC; vea abajo.
draft-ietf-v6ops-siit-dcSIIT-DCCumple Totalmente.
draft-ietf-v6ops-siit-dc-2xlatSIIT-DC Edge TranslatorModo basado en Host. No Implementado.
draft-ietf-6man-deprecate-atomfrag-generationDeprecación de los Fragmentos AtómicosLos continuamos soportando, pero no recomendamos su uso.
draft-anderson-v6ops-siit-eamEAMCumple totalmente.
+ +

email Por favor, haznos saber si encuentras problemas de cumplimiento adicionales o RFCs/drafts que no hayamos considerado.

+ +

Compatibilidad

+ +

Soportamos los kernels de Linux del 3.0 en adelante para Jool 3.1.x y 3.2.x

+ +

Soportamos los kernels de Linux del 3.2 en adelante para Jool 3.3.x

+ +

El desarrollo se ha hecho usando las distribuciones LTS de Ubuntu 12.04 y 14.04, pero hemos realizado una saludable cantidad de pruebas formales en Jool 3.1.5, 3.1.6, 3.2.0, 3.2.1, 3.2.2 y 3.3.2 en las siguientes variantes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DistribuciónKernels
CentOS 73.10.0-123.el7.x86_64
Debian 7.53.2.0-4-amd64
Red Hat Enterprise Linux 73.10.0-123.4.4.el7.x86_64
SuSE Linux Enterprise Desktop 11 SP33.0.101-0.31-default
Ubuntu 12.043.1.10-030110-generic, 3.2.60-030260-generic
Ubuntu 12.103.3.8-030308-generic, 3.4.94-030494-generic, 3.5.7-03050733-generic
Ubuntu 13.043.6.11-030611-generic, 3.7.10-030710-generic, 3.8.13-03081323-generic
Ubuntu 13.103.9.11-030911-generic, 3.10.44-031044-generic, 3.11.10-03111011-generic
Ubuntu 14.043.12.22-031222-generic, 3.13.11-03131103-generic
Ubuntu 14.103.14.8-031408-generic, 3.15.1-031501-generic
+ +

small_red_triangle_down Red Hat y CentOS muestran un warning debido a un error entre el kernel de base usado en Red Hat y el de Debian. Estamos buscando aún cómo eliminarlo, pero este mensaje no es crítico porque no nos ha ocasionado problemas durante las pruebas.

+ + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/es/intro-nat64.html b/doc/usr/_site/es/intro-nat64.html new file mode 100644 index 000000000..b34fc5b35 --- /dev/null +++ b/doc/usr/_site/es/intro-nat64.html @@ -0,0 +1,241 @@ + + + + + Documentación - Introducción a los Mecanismos de Transición + + + + + +
+
+ +
+ +
+
+ +

Documentación > Introducción > Mecanismos de Transición

+ +

Mecanismos de Transición de IPv6 soportados por Jool

+ +

Ãndice

+ +
    +
  1. Introducción
  2. +
  3. Ejemplos de Traducción
    + a) SIIT con EAM
    + b) SIIT tradicional
    + c) Stateful NAT64
  4. +
+ +

Introducción

+

Este documento proporciona una introducción general a los tres mecanismos de traducción implementados en Jool.

+ +

El algoritmo para SIIT fue definido formalmente a inicios del 2000 por Erik Nordmark de SUN Microsystems en el RFC 2765. Este ha sido actualizado en varias ocasiones: (RFC 6145, 2011), (RFC6791, 2012) e inclusive hasta nuestros días. De éstos, ya están incluidos en Jool el (draft-ietf-v6ops-siit-dc, 2015), el (draft-ietf-v6ops-siit-dc-2xlat, 2015) y el (draft-anderson-v6ops-siit-eam, 2015). Estas tres adiciones a SIIT han sido propuestas y promovidas por Tore Anderson de la compañía Redpill Linpro en Noruega.

+ +

La metodología del Stateful NAT64 fue uno de los resultados del Proyecto Trilogy, organizado por la Unión Europea, con una inversión aprox. de 9 millones de Euros, por un período de 3 años (2008 al 2010) donde participaron 5 Universidades, 4 compañías de telecomunicación y 2 centros de investigación. El estándar para el NAT64 que es el RFC 6146 fue publicado en el 2011 por el mismo coordinador del projecto, el Dr. Marcelo Bagnulo Braun de la Universidad Carlos III y otros dos colaboradores del proyecto.

+ +

bulb Conoce más trabajos elaborados por la IETF acerca de NAT64 en TOOLS IETF y en Datatracker.

+ +

Ejemplos de Traducción

+ +

SIIT (Stateless IP/ICMP Translation) y NAT64 (“NAT seis cuatroâ€, no “NAT sesenta y cuatroâ€) son tecnologías orientadas a comunicar nodos de red que únicamente hablan IPv4 con nodos que solo hablan IPv6. + La idea es básicamente la de un NAT mejorado; es decir que, un “Traductor IPv4/IPv6†no solo reemplaza direcciones y/o puertos en los paquetes, sino también encabezados de capa 3.

+ +
    +
  • +

    SIIT, es la manera sencilla, permitiendo MAPEOS 1-a-1 preconfigurados entre IPv4 e IPv6.
    + Es decir, que en SIIT tú establecerás lo siguiente:
    + a) Para cada uno de tus nodos en IPv6 existirá una dirección alterna en IPv4.
    + b) Para cada uno de tus nodos en IPv4 existirá una dirección alterna en IPv6.

    +
  • +
  • +

    Stateful NAT64, o simplemente NAT64, permite que VARIOS NODOS IPv6 compartan UN RANGO PEQUEÑO de direcciones IPv4.
    + Es decir, que en NAT64 tú establecerás lo siguiente:
    + a) Para cada uno de tus nodos en IPv4 existirá una dirección alterna en IPv6, pero esa nueva dirección estará formada de un prefijo de IPv6 + dir. en IPv4.
    + b) Los nodos en IPv6 será identificados por una o varias IP válidas en T (Jool), aparentando ser una “Red Privada de IPv4†(red local).

    +
  • +
+ +

NAT64 es definitivamente útil cuando se dispone de un número restringido de direcciones de IPv4.

+ +

Por razones históricas, algunas veces etiquetamos a SIIT como “Stateless NAT64â€. Ya que esta expresión no parece estar incluida en ningún estándar relevante, la consideramos imprecisa, a pesar de que tiene cierto grado de sentido. Si es possible, por favor trata de no usarla.

+ +

En una implementación SIIT siempre se modifican los encabezados de red y en algunas veces los checksums. En un Stateful NAT64 también se manipulan los identificadores de transporte.

+ +

SIIT con EAM

+ +

Esta parte es la más fácil de explicar. Considera la siguiente configuración:

+ +

Fig.1 - Red de ejemplo EAM

+ +

(T representa “Translating boxâ€. En español “Caja de traducciónâ€.)

+ +

Asumiendo que la puerta de enlace por default de todos es T, comó comunicarías A (IPv6) con V (IPv4)?

+ +

Para lograr la comunicación entre A y V bastaría con establecer lo siguiente:

+ +
    +
  • Le dices a A, “la dirección de V es 2001:db8:4::16â€.
  • +
  • Le dices a V, “la dirección de A es 198.51.100.8 “.
  • +
  • Le dices a T, “La dirección IPv4 de A debe de ser 198.51.100.8,
    + y la dirección IPv6 de V debe de ser 2001:db8:4::16â€.
  • +
+ +

La primera es resuelta por SIIT, las demás pueden ser realizadas vía DNS.

+ +

Veamos:

+ +

Fig.2 - Flujo EAM

+ +

El traductor esta “engañando†a ambos nodos haciéndoles pensar que el otro puede hablar el mismo lenguaje.

+ +

“EAM†significa por sus siglas en inglés “Explicit Address Mappingâ€, mapeo de direcciones explícitas. Es más versátil que un simple mapeo de direcciones aribtrarias a otras direcciones arbitrarias.

+ +

bulb Revisa nuestro resumen o repasa sus especificaciones en el draft EAM.

+ +

SIIT (tradicional)

+ +

El modo básico es un poco más complejo. Las direcciones no son remplazadas completamente por otras, sino una parte será usada en su dirección asociada con el otro protocolo. Considera la siguiente configuración:

+ +

Fig.3 - Red de ejemplo Vanilla

+ +

Para lograr la comunicación entre A y V bastaría con establecer lo siguiente:

+ +
    +
  • Le dices a A, “la dirección de V es 2001:db8:192.0.2.16â€.
  • +
  • Le dices a V, “la dirección de A es 198.51.100.8 “.
  • +
  • Le dices a T, “La dirección IPv4 de A debe de ser 198.51.100.8,
    + y la dirección IPv6 de V debe de ser 2001:db8:192.0.2.16â€.
  • +
+ +

La idea es, simplemente remover el prefijo durante el mapeo de IPv6 a IPv4, y adjuntarlo en el otro sentido. Como lo puedes apreciar en la siguiente figura:

+ +

Fig.4 - Flujo Vanilla

+ +

Por supuesto, esto significa que la dirección IPv4 de cada nodo en IPv6 tiene que ser codificada dentro de su dirección, lo cual es un poco engorroso.

+ +

Podría parecerte que SIIT con “EAM†y SIIT “tradicional†son cosas diferentes, pero pueden trabajar a la par. En implementaciones de este tipo, primeramente se intentará mapear las direcciones IP consultando la tabla EAM (según SIIT con EAM), y si NO están registradas, se retrocede y se añade o se remueve el prefijo (según SIIT).

+ +

Puedes encontrar un ejemplo concreto de como SIIT “tradicional†y “EAM†pueden ser combinados eficientemente para cumplir un caso de uso en la siguiente propuesta de solución para Centros de Datos: draft-v6ops-siit-dc.

+ +

Dependiendo de la longitud del prefijo, la dirección IPv4 se incorporará en diferentes posiciones dentro de nuestro rango de 128 bits según se establece en el RFC 6052.

+ +

warning Siempre que el RFC 6052 esté involucrado, es muy conveniente dar de alta también un DNS64 para que
+ los usuarios no necesiten estar al tanto del prefijo, y resuelva por nombre.

+ +

Stateful NAT64

+ +

Este modo es el más parecido a lo que la gente entiende como NAT, por sus siglas en inglés de IP Network Address Translator. Recordemos, un NAT opera de la siguiente manera:

+ +

Fig.5 - Red de ejemplo NAT

+ +

Note que, la red de la izquierda es llamada “Privada†por que usa Direcciones no disponibles en la Internet Global. NAT modifica las direcciones de los paquetes para que los nodos externos piensen que el tráfico proveniente de los nodos internos fue en realidad iniciado por el NAT:

+ +

Fig.6 - Flujo NAT

+ +

Es decir que para propósitos externos, los nodos desde A hasta E están “compartiendo†la misma dirección global de NAT (o grupo de direcciones).

+ +

Aunque NAT ayuda a reducir el empleo de direcciones globales en Internet de IPv4, esto tiene un precio: NAT tiene que recordar cual nodo privado emitió el paquete a V, porque la dirección de A fue suprimida dentro de la respuesta de V. Por eso, es que es llamado stateful, porque guarda el estado de las sesiones, pues crea mapeos de direcciones y los recuerda por un tiempo.

+ +

Dos cosas que hay que tomar en cuenta es:

+ +
    +
  • Cada mapeo require memoria.
  • +
  • V no puede iniciar la comunicación con A, porque primeramente el NAT debe aprender el mapeo en el sentido de la Red_Privada-a-Red_Externa (de izquierda a derecha).
  • +
+ +

Si quieres saber más sobre NAT y sus diferentes tipos, consulta los siguientes documentos: RFC 2663, RFC 2766 y RFC 3022.

+ +

Stateful NAT64 es muy similar a un NAT-PT (Protocol Translation). La única diferencia es que la “Red Privada†es de hecho una red IPv6:

+ +

Fig.7 - Red de ejemplo Stateful NAT64

+ +

Para lograr la comunicación entre A y V bastaría con establecer lo siguiente:

+ +
    +
  • Le dices a A, “la dirección de V es 2001:db8:203.0.113.16â€.
  • +
  • Le dices a V, “la dirección de A es 203.0.113.2 (T)â€.
  • +
  • Le dices a T, “La dirección IPv4 de A debe de ser 203.0.113.2 (T),
    + y la dirección IPv6 de V debe de ser 2001:db8:203.0.113.16â€.
  • +
+ +

La idea es, enmascarar A y remover el prefijo a V durante el mapeo de IPv6 a IPv4, y adjuntar el prefijo en V y quitar la máscara a A cuando va de IPV4 a IPv6. Como lo puedes apreciar en la siguiente figura:

+ +

Fig.8 - Flujo Stateful

+ +

NAT64 maneja otros escenarios y es aquí donde termina la similitud con NAT. Debido a que en IPv6 la capacidad de identificación de los nodos es sumamente enorme, se contempla que cada dispositivo cuente con una dirección pública de IPv6. En otras palabras se prevé o planea que TODOS los dispositivos en IPv6 tenga acceso a Internet. Considerando esto, una conectividad posible sería:

+ +

Fig.9 - Internet Stateful NAT64

+ +

De esta manera, los nodos A hasta E son solo de IPv6, pero tienen acceso a ambas Internets. A la IPv6 mediante un ruteador R, y a la IPv4 mediante T.

+ +

Si gustas conocer el resto de los escenarios posibles en Stateful NAT64 y SIIT consulta el RFC 6144, cap. 2.

+ +

warning Para soportar direccionamiento por nombre se requiere habilitar el DNS64.

+ + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/es/logging.html b/doc/usr/_site/es/logging.html new file mode 100644 index 000000000..4b7a2fb79 --- /dev/null +++ b/doc/usr/_site/es/logging.html @@ -0,0 +1,83 @@ + + + + + Logging + + + + + +
+
+ +
+ +
+
+ +

TODO

+ + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/es/mod-install.html b/doc/usr/_site/es/mod-install.html new file mode 100644 index 000000000..906e704b8 --- /dev/null +++ b/doc/usr/_site/es/mod-install.html @@ -0,0 +1,237 @@ + + + + + Instalación del Servidor Jool + + + + + +
+
+ +
+ +
+
+ +

Documentación > Instalación > Servidor Jool

+ +

Instalación del Servidor Jool

+ +

Ãndice

+ +
    +
  1. Introducción
  2. +
  3. Requerimientos
    + a) Kernels Válidos
    + b) Encabezados del Kernel
    + c) Interfaces de Red
    + d) Ethtool
  4. +
  5. Baja, Compila e Instala
    + a) De la Web Oficial
    + b) Del Repositorio GIT
  6. +
  7. Genera Archivo de Dependencias
  8. +
+ +

Introducción

+ +

Jool tiene cuatro componentes, es decir, cuatro ejecutables:

+ +
    +
  1. Dos Módulos de Kernel, uno donde se implementa el Stateful NAT64, nombrado como jool, y el otro donde se implementa SIIT y SIIT-EAM, nombrado como jool-siit.
  2. +
  3. Dos aplicaciones en el Espacio de Usuario, una para Stateful NAT64 y la otra para SIIT y SIIT-EAM, nombrados de igual manera: jool y jool-siit respectivamente.
  4. +
+ +

En este documento nos enfocaremos a los primeros dos módulos del kernel, o sea, a las aplicaciones principales para habilitar uno u otro servicio. Para activar la traducción de paquetes se requiere insertar los módulos en el kernel. Continúe leyendo este documento, si quiere conocer cuáles son los requisitos y su procedmiento.

+ +

La instalación de los Módulos del Kernel es convencional, pero para los usuarios que no tienen experiencia previa en instalar aplicaciones que son extensiones al kernel, les podrá ser de gran utilidad.

+ +

Las aplicaciones en el espacio de usuario son para configuración de Jool, la explicación de cómo instalarlas se encuentra en una página aparte.

+ +

Requerimientos

+ +

Kernels Válidos

+ +

Jool fue desarrollado sobre ambiente linux y lenguaje de programación “Câ€. Para conocer la lista actualizada de kernels soportados y probados en las diferentes distribuciones de Linux haz click aquí. Es factible que no vaya a haber problema alguno, al compilar Jool en versiones más recientes de kernel. ¡Ãnimo, prueba y compartenos tu experiencia!

+ +

NOTA: No recomendamos usar el kernel 3.12 porque el sistema se inhibe cuando se invoca la función icmpv6_send.

+ +

Para verificar la versión de tu kernel, usa el siguiente comando:

+ +
$ /bin/uname -r
+ +

Encabezados del Kernel

+ +

Para que Jool se compile y lige sin problemas es necesario que tu equipo cuente con los encabezados de kernel para la versión en la que te dispones a trabajar. Para ello, ejecuta con permisos de administrador lo siguiente:

+ +
user@node# apt-get install linux-headers-$(uname -r)
+ +

Interfaces de Red

+ +

Jool requiere al menos de una interfaz de red para poder comunicarse con los nodos via IPv6 e IPv4. Esto es posible, al habilitar una sola interfaz de red, con doble pila y varios protocolos, pues el kernel lo permite; sin embargo, por consideración a las personas que están incursionando en este tipo de aplicaciones se usarán dos interfaces de red separadas: una para IPv6 y otra para IPv4. Y de esta manera, poder identificar más facilmente los paquetes al usar las aplicaciones de debugeo como WireShark y otros. Entonces, para validar cuáles y cuántas interfaces de red están disponibles ejecuta lo siguiente:

+ +
$ ip link show
+(...)
+2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
+    link/ether 08:00:27:3d:24:77 brd ff:ff:ff:ff:ff:ff
+3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
+    link/ether 08:00:27:ca:18:c8 brd ff:ff:ff:ff:ff:ff
+ +

Ethtool

+ +

Ethtool es una utilería para configurar las tarjetas Ethernet, con ella se pueden visualizar y modificar sus parámetros. Para instalarla ejecuta con permisos de administrador:

+ +
user@node# apt-get install ethtool
+ +

Baja, Compila e Instala

+ +

Por simplicidad, solo se distribuyen los fuentes. Para descargar Jool, hay dos opciones:

+ +
    +
  • Las versiones oficiales de Jool en nuestro Sitio Web. Éstas se encuentran en la Página de Descarga.
  • +
  • Las versiones en desarrollo en nuestro Repositorio de GitHub. Éstas se encuentran en Proyecto NAT64.
  • +
+ +

Existen algunas pequeñas variantes al bajarlo de un portal u otro, no tan solo de nombre, sino de contenido.

+ +

Quizá estes acostumbrado a un procedimiento estándar de tres pasos para compilar e instalar programas: ./configure && make && make install. Los módulos de kernel no vienen con un script configure, para generar el Makefile, sino ya está hecho, por lo que solo se requiere ejecutar los últimos dos pasos.

+ +

De la Web Oficial

+ +

Si buscas la versión más estable o versiónes anteriores de Jool, entonces descárgalo desde este mismo portal, dirigiendote a la página de Descarga. Sigue estos pasos:

+ +

1) Elige la versión

+ +

2) Elige el formato (zip, sha, md5)

+ +

3) Descarga el archivo comprimido

+ +

4) Descomprime

+ +

small_orange_diamond Asumiendo que lo bajastes en formato ZIP, en la carpeta de Downloads y lo quieres colocar en Desktop, ejecuta los siguientes comandos:

+ +
user@node:$ cd Downloads
+user@node:~/Downloads$ unzip Jool-<version>.zip -d ../Desktop
+ +

5) Compila ambos módulos SIIT y NAT64

+ +
user@node:~$ cd ../Desktop/Jool-<version>/mod
+user@node:~/Desktop/Jool-<version>/mod$ make
+ +

6) Instala

+ +

El proceso de instalación consiste en copiar los binarios generados a tu pool de módulos del sistema. Empleando permisos de administrador ejecuta:

+ +
user@node:~/Jool-<version>/mod# make modules_install
+ +

Del Repositorio GIT

+ +

Si descargas Jool del Repositorio de Github, te sugerimos acceder el último commit de la rama principal, porque las otras ramas son para desarrollo, y están en constante cambio y no hay garantía. Sigue estos pasos:

+ +

1) Elige la rama “masterâ€

+ +

2) Selecciona el icono Download ZIP

+ +

3) Descarga

+ +

4) Descomprime

+ +

small_orange_diamond Asumiendo que se descargó en Downloads y lo quieres colocar en Desktop, ejecuta los siguientes comandos:

+ +
user@node:$ cd Downloads
+user@node:~/Downloads$ unzip NAT64-<version>.zip -d ../Desktop
+ +

5) Compila ambos módulos SIIT y NAT64

+ +
user@node:~$ cd ../Desktop/NAT64-<version>/mod
+user@node:~/Desktop/NAT64-<version>/mod$ make
+ +

6) Instala

+ +

El proceso de instalación consiste en copiar los binarios generados a tu pool de módulos del sistema. Empleando permisos de administrador ejecuta:

+ +
user@node:~/NAT64-<version>/mod# make modules_install
+ +

Genera Archivo de Dependencias

+ +

El hecho de que residan en la pool no significa que ya hayan sido indizados, entonces, para finalizar, también necesitarás indexar los nuevos módulos. Ejecuta aqui también con permisos de administrador el comando:

+ +
user@node:~# depmod
+ +

Mediante el comando depmod se genera el archivo de dependencias Makefile que usará modprobe para cargar los módulos, aprende cómo hacerlo consultando el ejemplo básico de SIIT.

+ +

thumbsup Jool puede ser inicializado ahora.

+ +
+

ADVERTENCIA :

+ +

A partir del kernel 3.7 en Ubuntu puedes autentificar tus módulos, lo cual es una buena práctica. Te recomendamos, firmar tus modulos de kernel para asegurarte de que los estás agregando de manera responsable. +Si tu kernel NO fue configurado para solicitar esta característica no tendrás problema. Los kernels de muchas distribuciones no lo hacen. Solo ten en cuenta que cuando corras el comando make modules_install, se mostrará el siguiente mensaje: “Can’t read private keyâ€; esto puede parecer un error, pero de hecho es una advertencia, así que puedes continuar la instalación. +Si tu kernel fue compilado para solicitar el firmado de módulos, probablemente ya sepas como llevarlo a cabo. Nota: Lo omitiremos aquí.

+
+ + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/es/mod-run-464xlat.html b/doc/usr/_site/es/mod-run-464xlat.html new file mode 100644 index 000000000..c5c2367ab --- /dev/null +++ b/doc/usr/_site/es/mod-run-464xlat.html @@ -0,0 +1,306 @@ + + + + + 464XLAT + + + + + +
+
+ +
+ +
+
+ +

Documentación > Ejemplos de uso > 464XLAT

+ +

TODO - Pendiente hacer revisión

+ +

464XLAT

+ +

Ãndice

+ +
    +
  1. Introducción
  2. +
  3. Red de ejemplo
  4. +
  5. Flujo de paquetes esperado
  6. +
  7. Pruebas
  8. +
  9. Palabras de cierre
  10. +
  11. Lecturas adicionales
  12. +
+ +

Introduction

+ +

NAT64 no es perfecto. Aunque puedas ver mucho trafico ser tradicido sin capricho alguno, quizá puedas llegar eventualmente al siguiente comportamiento inesperado.

+ +

Salvo el RFC 6384, NAT64 solo traduce cabeceras de red (IPv4, IPv6 y ICMP) y cabeceras de transporte (UDP y TCP). Algunas veces, esto es un problema. Algunos protocolos que trabajan encima de UDP y TCP tienen el mal hábito de incluir direcciones IP (“Valores IP literalesâ€) a lo largo de sus conversaciones; ya que NAT64 solo traduce protocolos de mas abajo, estos valores pasaran por el NAT64 sin ser modificados.

+ +

Por ejemplo, algunos sitios que no toman en cuenta IPv6, los cuales normalmente contendrian este HTML:

+ +

Enlace a algo.

+ +

Podrian ser pobremente codificados de esta manera:

+ +

Enlace a algo.

+ +

Esta dirección está dentro del cuerpo de un archivo HTML, no de una cabecera de transporte de red. No es viable para Jool soportar la traduccion de todos los protocolos de aplicación existentes.

+ +

Si le das click a la segunda versión del enlace mostrado en la parte de arriba desde un nodo que solo soporta IPv6 y tratas de utilizar el NAT64, es obvio que no funcionará, por que el nodo no tiene una pila IPv4 con cual accesar a 203.0.113.24. www.jool.mx funciona bien por que el DNS64 adjunta el frefijo NAT64 una vez que el nodo pregunta por el dominio; por otra parte, si todo lo que el nodo tiene es 203.0.113.24, realmente no puede decir que esta hablando mediante un NAT64, mucho menos saber que prefijo deberia ser añadido.

+ +

464XLAT es una técnica orientada a solucionar esta limitante. Funciona agregando un SIIT a la ecuación, que revierte el trabajo hecho por el Stateful NAT64. La idea puede ser generalizada para tambien proveer Internet a servicios que solo soportan IPv4 cuando todo lo que tienes es un espacio de direcciones IPv6, la cual es un Modo de traducción dual SIIT/DC

+ +

Este documento es un resumen simplificado de ambas técnicas, colapsado en una introducción que usa Jool.

+ +

Red de ejemplo

+ +

Figure 1 - 464 Needed

+ +

La caja roja seria tu dominio. n6 respresenta un “nodo IPv6†y R es un “routerâ€. Digamos que tu proveedor de internet solo te proporciona direcciones IPv6, pero tambien te garantiza acceso a IPv4 mediante un stateful NAT64(PLAT; Traductor del lado del proveedor o “Provider-side Translator†por sus siglas en inglés). n4 nodo de Internet IPv4 aleatorio.

+ +

Digamos que tu usuario de n6 hace click a un enlace hacia 203.0.113.24. n6 no tiene una pila IPv4, asi que la solicitud no tiene a donde ir. La situación puede ser enmendada agregando el prefijo NAT64 a la direccion, pero el usuario no lo sabe. Por supuesto, un DNS64 seria la solución ideal y transparente, pero desafortunadamente el sitio proporcionó una dirección y no un nombre de dominio, asi que n6 no le esta enviando ninguna solicitud al DNS.

+ +

Alternativamente, n6 quizá quiera proveer un servicio legado(o cliente) el cual esta desafortunadamente ligado a IPv4. Ya que n6 solo tiene direcciones IPv6 globales, aparentemente no puede hacerlo.

+ +

En terminos amplios, la solución es proporcionar a n6 una pila IPv4 “falsa†cuyos paquetes serán traducidos a IPv6 antes de llegar al PLAT. En +otras palabras, un servicio SIIT (en terminos 464XLAT llamado “CLATâ€; Traductod del lado del cliente o “Customer-side Translator†por sus siglas en inglés) estará, de cierta forma, deshaciendo el trabajo del PLAT.

+ +

Hay muchas maneras de hacer esto. Desafortunadamente, una de ellas (volver n6 el CLAT) todavia no se encuentra implementada en Jool. Una que funcion es hacer que R sea el CLAT. La red luciría como esto:

+ +

Figure 2 - 464XLAT'd Network

+ +

Tambien removi las nubes para simplificar el ruteo en el ejemplo. La idea de la traduccion realmente no tiene nada que ver con el ruteo, asi que esto no es importante.

+ +

Flujo de paquetes esperado

+ +

Este es el flujo normal que un paquete de origen IPv6 atravesaría. Es un flujo sateful NAT64 típico y la traducción dual presentada en esta configuración no interferirá con el: Toma en curnta que hemos elejido 64:ff9b::/96 como prefijo NAT64 del PLAT:

+ +

Figure 3 - Normal Stateful Flow

+ +

El flujo 464XLAT que queremos lograr es el siguiente. n6 utilizará su dirección IPv4 para intentar consultar el valor literal (o cualquier dirección de internet IPv4):

+ +

Figure 4 - Literal

+ +

R

+ +

R will SIIT the packet into IPv6 so it can traverse the IPv6-only chunk. Address 192.168.0.8 will be translated using the EAMT, and 203.0.113.24 will receive the pool6 prefix treatment to mirror PLAT’s.

+ +

Figure 5 - SIIT'd packet

+ +

PLAT hará su magia y mandará el paquete a la internet IPv4:

+ +

Figure 6 - Stateful NAT64'd packet

+ +

Y la modificación será espejeada para la respuesta:

+ +

Figure 7 - Mirror

+ +

Configuración

+ +

n6 no sabe que de alguna forma es dueño de otra dirección IPv6 en la red 2001:db8:2::/96. Nunca ve el trafico, por que R siempre siempre lo traduce hacia 192.0.2.0/24.

+ +
service network-manager stop
+
+ip link set eth0 up
+ip addr add 2001:db8:1::8/64 dev eth0
+ip addr add 192.168.0.8/24 dev eth0
+
+ip route add default via 2001:db8:1::1
+ip route add default via 192.168.0.1
+
+ +

Esto es R:

+ +
service network-manager stop
+
+ip link set eth0 up
+ip addr add 192.168.0.1/24 dev eth0
+ip addr add 2001:db8:1::1/64 dev eth0
+
+ip link set eth1 up
+ip addr add 2001:db8:100::1/64 dev eth1
+
+# Traffic headed to the real IPv4 Internet goes via PLAT.
+ip route add 64:ff9b::/96 via 2001:db8:100::2
+
+# Enable routerness.
+sysctl -w net.ipv6.conf.all.forwarding=1
+sysctl -w net.ipv4.conf.all.forwarding=1
+
+# Enable SIIT.
+# We're masking the private network using an EAMT entry.
+# Traffic towards the Internet is to be appended PLAT's prefix.
+# Recall that the EAMT has higher precedence than the prefix.
+modprobe jool_siit pool6=64:ff9b::/96
+jool_siit --eamt --add 192.168.0.8/29 2001:db8:2::/125
+
+ +

El paquete de n6 tendra la dirección 192.168.0.8 y 203.0.113.24. La primera será traducida utilizando el registro EAMT ( ya que coincide con 192.168.0.8/29) y la segunda utilizará el prefijo pool6 (por que no coincide).

+ +

Tambien toma en cuenta que R es una implementacion aproximada de SIIT y jamas se debe de pensar en esta instalación de Jool como nada mas que eso.

+ +

Para efectos de ilustrar completamente, mostramos la configuracion de red de PLAT:

+ +
service network-manager stop
+
+ip link set eth0 up
+ip addr add 2001:db8:100::2/64 dev eth0
+# I'm pretending the ISP gave us these two prefixes to play with.
+ip route add 2001:db8:1::/64 via 2001:db8:100::1
+ip route add 2001:db8:2::/64 via 2001:db8:100::1
+
+ip link set eth1 up
+ip addr add 203.0.113.1/24 dev eth1
+ip addr add 203.0.113.2/24 dev eth1
+
+modprobe jool pool6=64:ff9b::/96 pool4=203.0.113.2
+
+ +

Y n4 es profundamente aburrido:

+ +
service network-manager stop
+
+ip link set eth0 up
+ip addr add 203.0.113.24/24 dev eth0
+ip route add default via 203.0.113.2
+
+ +

Pruebas

+ +

Haz un ping a n4 mediante IPv4 desde n6:

+ +
$ ping 203.0.113.24 -c 1
+PING 203.0.113.24 (203.0.113.24) 56(84) bytes of data.
+64 bytes from 203.0.113.24: icmp_seq=1 ttl=62 time=4.13 ms
+
+--- 203.0.113.24 ping statistics ---
+1 packets transmitted, 1 received, 0% packet loss, time 0ms
+rtt min/avg/max/mdev = 4.130/4.130/4.130/0.000 ms
+
+ + + +

HAz un ping a n4 mediante IPv6 desde n6:

+ +
$ ping6 64:ff9b::203.0.113.24 -c 1
+PING 64:ff9b::203.0.113.24(64:ff9b::cb00:7118) 56 data bytes
+64 bytes from 64:ff9b::cb00:7118: icmp_seq=1 ttl=62 time=14.0 ms
+
+--- 64:ff9b::203.0.113.24 ping statistics ---
+1 packets transmitted, 1 received, 0% packet loss, time 0ms
+rtt min/avg/max/mdev = 14.053/14.053/14.053/0.000 ms
+
+ + + +

Palabras de cierre

+ +

Aunque en este punto puedes ver como puedes defenderte de los valores IP literales y applicaciones legadas que solo soportan IPv4, quizá quieras ser advertido previamente de que al menos un protocolo de aplicación allá afuera esta tan pobremente diseñado que trabaja diferente dependiendo de si esta trabajando sobre IPv6 o IPv4. Como resultado, []

+ +

Though at this point you can see how you can defend yourself against IP literals and legacy IPv4-only appliances, you might want to be forewarned that at least one application protocol out there is so poorly designed it works differently depending on whether it’s sitting on top of IPv6 or IPv4. Therefore, addressing IP literals in this case is not sufficient to make FTP work via NAT64.

+ +

Por otra parte, algunos protocolos solo dependen parcialmente de valores literales, y el NAT64 no va a entrometerse en el camino de los que no. El modo pasivo de FTP cae en esta categoria.

+ +

On the other hand, some network-aware protocols only partially depend on literals, and the NAT64 is not going to get in the way of the features that don’t. FTP’s passive mode falls in this category.

+ +

You can make active FTP work by deploying a fully stateless dual translation environment such as siit-dc-2xlat. It works because both the client and server are both using IPv4 sockets, the IPv4 addresses are unchanged end-to-end, and it’s fully bi-directional, so active and passive FTP on arbitrary ports work fine. In siit-dc-2xlat, the IPv6 network in the middle becomes an invisible “tunnel†through which IPv4 is transported.

+ +

Here’s a list of protocols that are known to use IP literals. You might also want to see RFC 6586.

+ + + +

Lecturas adicionales

+ + + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/es/mod-run-alternate.html b/doc/usr/_site/es/mod-run-alternate.html new file mode 100644 index 000000000..9ba359858 --- /dev/null +++ b/doc/usr/_site/es/mod-run-alternate.html @@ -0,0 +1,123 @@ + + + + + Ejecución Alterna de Stateful + + + + + +
+
+ +
+ +
+
+ +

Doc > Otros > Interfáz Única

+ +

Interfáz Única

+ +

Esta sección está aquí is here solo para decirte que si quieres que tu SIIT o NAT64 brinden servicio a ambos protocolos en la misma interfáz, aun estás cubierto. Jool puede ver paquetes viniendo desde cualquier interfaz y puede enviar paquetes mediante cualquier interfaz. (aunque ignora, el loopback).

+ +

Fig.1 - Single interface NAT64

+ +

Esta es la misma configuración que en el Ejemplo de uso de Stateful NAT64, excepto por el hecho de que todo mundo ahora esta compartiendo el mismo cable, y tambien removí los nodos reduntantes por que entiendes el punto.

+ +

A y V son configurados exactamente como en sus contrapartes del ejemplo Stateful, asi que voy a brincarme sus comandos. Lo único que es diferente es T ahora teniendo todas sus direcciones en la misma interfáz:

+ +
user@T:~# service network-manager stop
+user@T:~# 
+user@T:~# /sbin/ip link set eth0 up
+user@T:~# /sbin/ip address add 2001:db8::1/96 dev eth0
+user@T:~# /sbin/ip address add 203.0.113.1/24 dev eth0
+user@T:~# /sbin/ip address add 203.0.113.2/24 dev eth0
+user@T:~# 
+user@T:~# ethtool --offload eth0 tso off
+user@T:~# ethtool --offload eth0 ufo off
+user@T:~# ethtool --offload eth0 gso off
+user@T:~# ethtool --offload eth0 gro off
+user@T:~# ethtool --offload eth0 lro off
+user@T:~# 
+user@T:~# /sbin/modprobe jool pool6=64:ff9b::/96 pool4=203.0.113.2
+
+ +

Así que básicamente, A y V comparten el mismo cable, pero de todos no pueden hablar por que no hablan el mismo lenguaje. Esto es, a menos de que le soliciten a T traducir su pequeña conversación:

+ +
user@A:~$ /bin/ping6 64:ff9b::203.0.113.16
+PING 64:ff9b::203.0.113.16(64:ff9b::cb00:7110) 56 data bytes
+64 bytes from 64:ff9b::cb00:7110: icmp_seq=1 ttl=63 time=10.0 ms
+64 bytes from 64:ff9b::cb00:7110: icmp_seq=2 ttl=63 time=8.16 ms
+64 bytes from 64:ff9b::cb00:7110: icmp_seq=3 ttl=63 time=8.39 ms
+64 bytes from 64:ff9b::cb00:7110: icmp_seq=4 ttl=63 time=5.64 ms
+^C
+--- 64:ff9b::203.0.113.16 ping statistics ---
+4 packets transmitted, 4 received, 0% packet loss, time 3003ms
+rtt min/avg/max/mdev = 5.645/8.057/10.025/1.570 ms
+
+ + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/es/mod-run-eam.html b/doc/usr/_site/es/mod-run-eam.html new file mode 100644 index 000000000..bc2bd2dab --- /dev/null +++ b/doc/usr/_site/es/mod-run-eam.html @@ -0,0 +1,249 @@ + + + + + SIIT-EAM - Ejemplo de uso + + + + + +
+
+ +
+ +
+
+ +

Documentación > Ejemplos de uso > SIIT + EAM

+ +

EAM: Ejemplo de Uso

+ +

Ãndice

+ +
    +
  1. Introducción
  2. +
  3. Red de ejemplo
    + a) Configuración de Nodos en IPv6
    + b) Configuración de Nodos en IPv4
    + c) Configuración del Nodo Traductor
  4. +
  5. Jool
  6. +
  7. Pruebas
    + a) Conectividad de IPv6 a IPv4
    + b) Conectividad de IPv4 a IPv6
    + c) Conectividad a un Web Server en IPv4
    + d) Conectividad a un Web Server en IPv6
  8. +
  9. Deteniendo Jool
  10. +
  11. Lecturas adicionales
  12. +
+ +

Introducción

+ +

Este documento explica cómo ejecutar Jool en modo EAM. Si no tienes nociones de este tipo de traducción ingresa a SIIT-EAM .

+ +

Más que un “modo†es simplemente proveer a SIIT con registros en la tabla de Direcciones de Mapeo Explícito. Obtenen más detalles sobre ésta.

+ +

Similar al SIIT Tradicional, solo necesitas una instalación exitosa de ambos: del Servidor Jool y del Configurador para SIIT.

+ +

Red de ejemplo

+ +

Figura 1 - Red de ejemplo

+ +

Aquí también, son válidas y aplican las observaciones mencionadas de la sección Red de Ejemplo para SIIT. Resumiéndolas, tenemos que:

+ +
    +
  • Al menos necesitarás tres nodos: A, V y T.
  • +
  • Usa el bloque de direcciones 198.51.100.8/29 para referenciar a tus nodos de IPv6 sobre IPv4.
  • +
  • Jool requiere Linux, los otros Nodos no necesariamente.
  • +
  • Para este tutorial, consideraremos que: a)todos están en Linux, b)la configuración de red se hará manualmente, c) todo el tráfico será redirigido por defecto hacia T.
  • +
+ +

Configuración de Nodos en IPv6

+ +

Para los nodos de A a E, ejecuta la siguiente secuencia de comandos con permisos de administrador:

+ +
user@A:~# service network-manager stop
+user@A:~# /sbin/ip link set eth0 up
+user@A:~# # Replace "::8" dependiendo en que nodo estés.
+user@A:~# /sbin/ip addr add 2001:db8:6::8/96 dev eth0
+user@A:~# /sbin/ip route add default via 2001:db8:6::1
+ +

Configuración de Nodos en IPv4

+ +

Para los nodos de V a Z, ejecuta la siguiente secuencia de comandos con permisos de administrador:

+ +
user@V:~# service network-manager stop
+user@V:~# /sbin/ip link set eth0 up
+user@V:~# # Replace ".16" dependiendo en que nodo estés.
+user@V:~# /sbin/ip addr add 192.0.2.16/24 dev eth0
+user@V:~# /sbin/ip route add default via 192.0.2.1
+ +

Configuración del Nodo Traductor

+ +

Para el Nodo T, ejecuta la siguiente secuencia de comandos con permisos de administrador:

+ +
user@T:~# service network-manager stop
+user@T:~# 
+user@T:~# /sbin/ip link set eth0 up
+user@T:~# /sbin/ip addr add 2001:db8:6::1/96 dev eth0
+user@T:~# 
+user@T:~# /sbin/ip link set eth1 up
+user@T:~# /sbin/ip addr add 192.0.2.1/24 dev eth1
+user@T:~# 
+user@T:~# ethtool --offload eth0 tso off
+user@T:~# ethtool --offload eth0 ufo off
+user@T:~# ethtool --offload eth0 gso off
+user@T:~# ethtool --offload eth0 gro off
+user@T:~# ethtool --offload eth0 lro off
+user@T:~# ethtool --offload eth1 tso off
+user@T:~# ethtool --offload eth1 ufo off
+user@T:~# ethtool --offload eth1 gso off
+user@T:~# ethtool --offload eth1 gro off
+user@T:~# ethtool --offload eth1 lro off
+ +

Hasta aquí, no hemos convertido a T en un traductor todavía; pero, quizá quieras asegurarte de que T puede comunicarse con todos los nodos antes de continuar.

+ +

Jool

+ +

Recuerda, la sintaxis para insertar Jool SIIT en el kernel es:
+(Requieres permiso de administración)

+ +
user@T:~# modprobe jool_siit [pool6=<IPv6 prefix>] [blacklist=<IPv4 prefixes>] [pool6791=<IPv4 prefixes>] [disabled]
+
+ +

Para configurar nuestra red de ejemplo, ejecuta como administrador:

+ +
user@T:~# /sbin/modprobe jool_siit disabled
+user@T:~# jool_siit --eamt --add 2001:db8:6::/120 198.51.100.0/24
+user@T:~# jool_siit --eamt --add 2001:db8:4::/120 192.0.2.0/24
+user@T:~# jool_siit --enable
+ +

A diferencia de pool6, no es práctico insertar la tabla EAM completa en un solo comando, asi que instruimos a Jool para que inicie deshabilitado. Luego insertamos los registros de la tabla EAM, uno por uno, utilizando la Herramienta de Configuración. Cuando la tabla está completa, le decimos a Jool que puede empezar a traducir trafico mediante la opción de --enable.

+ +

De hecho utilizar disabled y --enable no es necesario; Jool va a deducir naturalmente que no puede traducir tráfico hasta que la tabla EAM y/o pool6 sean llenados. La razón por la cual Jool fue “forzado†a permanecer deshabilitado hasta que la tabla estuviera completa fue para que no hubiera un periodo de tiempo donde el tráfico estuviera siendo traducido inconsistentemente debido a una tabla incompleta.

+ +

Y de nuevo, el prefijo IPv6 y la tabla EAM no son modos de operación exclusivos. Jool siempre va a tratar de traducir una dirección utilizando EAM, y si eso falla, retrocederá a utilizar el prefijo. Si quieres esto, agrega pool6 durante el modprobe.

+ +

Pruebas

+ +

Conectividad de IPv6 a IPv4

+ +

Haz un ping a V desde A:

+ +
user@A:~$ ping6 2001:db8:4::10 # Reminder: hex 10 = dec 16.
+PING 2001:db8:4::10(2001:db8:4::10) 56 data bytes
+64 bytes from 2001:db8:4::10: icmp_seq=1 ttl=63 time=2.95 ms
+64 bytes from 2001:db8:4::10: icmp_seq=2 ttl=63 time=2.79 ms
+64 bytes from 2001:db8:4::10: icmp_seq=3 ttl=63 time=4.13 ms
+64 bytes from 2001:db8:4::10: icmp_seq=4 ttl=63 time=3.60 ms
+^C
+--- 2001:db8:4::10 ping statistics ---
+4 packets transmitted, 4 received, 0% packet loss, time 3003ms
+rtt min/avg/max/mdev = 2.790/3.370/4.131/0.533 ms
+ +

Conectividad de IPv4 a IPv6

+ +

Haz un ping a A desde V de esta forma:

+ +
user@V:~$ ping 198.51.100.8
+PING 198.51.100.8 (198.51.100.8) 56(84) bytes of data.
+64 bytes from 198.51.100.8: icmp_seq=1 ttl=63 time=5.04 ms
+64 bytes from 198.51.100.8: icmp_seq=2 ttl=63 time=2.55 ms
+64 bytes from 198.51.100.8: icmp_seq=3 ttl=63 time=1.93 ms
+64 bytes from 198.51.100.8: icmp_seq=4 ttl=63 time=2.47 ms
+^C
+--- 198.51.100.8 ping statistics ---
+4 packets transmitted, 4 received, 0% packet loss, time 3004ms
+rtt min/avg/max/mdev = 1.930/3.001/5.042/1.204 ms
+ +

Conectividad a un Web Server en IPv4

+ +

Agrega un servidor en Y y accesalo desde D:

+ +

Figura 1 - IPv4 TCP desde un nodo IPv6

+ +

Conectividad a un Web Server en IPv6

+ +

Agrega un servidor en B y haz una solicitud desde X:

+ +

Figura 2 - IPv6 TCP desde un nodo IPv4

+ +

Si algo no funciona, consulta el FAQ.

+ +

Deteniendo Jool

+ +

Para detener Jool, emplea de nuevo el comando modprobe usando el parámetro -r:

+ +
user@T:~# modprobe -r jool_siit
+ +

Lecturas adicionales

+ +
    +
  1. Por favor, lee acerca de problemas con MTUs antes de seleccionar alguno.
  2. +
  3. Si te interesa Stateful NAT64, dirigete al tercer ejemplo.
  4. +
+ + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/es/mod-run-stateful.html b/doc/usr/_site/es/mod-run-stateful.html new file mode 100644 index 000000000..d72f0aff2 --- /dev/null +++ b/doc/usr/_site/es/mod-run-stateful.html @@ -0,0 +1,252 @@ + + + + + Stateful NAT64 - Ejemplo de uso + + + + + +
+
+ +
+ +
+
+ +

Documentación > Ejemplos de uso > Stateful NAT64

+ +

Stateful NAT64: Ejemplo de Uso

+ +

Ãndice

+ +
    +
  1. Introducción
  2. +
  3. Red de ejemplo
    + a) Configuración de Nodos en IPv6
    + b) Configuración de Nodos en IPv4
    + c) Configuración del Nodo Traductor
  4. +
  5. Jool
  6. +
  7. Pruebas
    + a) Conectividad de IPv6 a IPv4
    + b) Conectividad a un Web Server en IPv4
  8. +
  9. Deteniendo Jool
  10. +
  11. Lecturas adicionales
  12. +
+ +

Introducción

+ +

Este documento explica como ejecutar Jool en modo Stateful NAT64. Si no tienes nociones de este tipo de traducción ingresa a Stateful NAT64.

+ +

Similar a los modos anteriores, solo necesitas una instalación exitosa de del Servidor Jool. El Configurador no se necesita en esta ejecución básica.

+ +

Red de ejemplo

+ +

Figura 1 - Red de ejemplo

+ +

Aquí también, son válidas y aplican las observaciones mencionadas de la sección Red de Ejemplo para SIIT exceptuando dos: el del uso de direcciones en el segmento 198.51.100.8/29 y el default gateway. Resumiéndolas, tenemos que:

+ +
    +
  • Al menos necesitarás tres nodos: A, V y T.
  • +
  • Jool requiere Linux, los otros Nodos no necesariamente.
  • +
  • Para este tutorial, consideraremos que: a)todos están en Linux, b)su configuración de red se hará manualmente.
  • +
+ +

Configuración de Nodos en IPv6

+ +

Para los nodos de A a E, ejecuta la siguiente secuencia de comandos con permisos de administrador:

+ +
user@A:~# service network-manager stop
+user@A:~# /sbin/ip link set eth0 up
+user@A:~# # Replace "::8" depending on which node you're on.
+user@A:~# /sbin/ip address add 2001:db8::8/96 dev eth0
+user@A:~# /sbin/ip route add default via 2001:db8::1
+ +

Configuración de Nodos en IPv4

+ +

Para los nodos de V a Z, ejecuta la siguiente secuencia de comandos con permisos de administrador:

+ +
user@V:~# service network-manager stop
+user@V:~# /sbin/ip link set eth0 up
+user@V:~# # Replace ".16" depending on which node you're on.
+user@V:~# /sbin/ip address add 203.0.113.16/24 dev eth0
+ +

Estos nodos no necesitan una ruta por defecto. Esto es consecuencia de que se encuentran en la misma red junto con el NAT64. Como la dirección 203.0.113.2 estará enmascarando los nodos IPv6, asi que desde V hasta Z piensan que están hablando directamente con T.

+ +

Configuración del Nodo Traductor

+ +

Para el Nodo T, ejecuta la siguiente secuencia de comandos con permisos de administrador:

+ +
user@T:~# service network-manager stop
+user@T:~# 
+user@T:~# /sbin/ip link set eth0 up
+user@T:~# /sbin/ip address add 2001:db8::1/96 dev eth0
+user@T:~# 
+user@T:~# /sbin/ip link set eth1 up
+user@T:~# /sbin/ip address add 203.0.113.1/24 dev eth1
+user@T:~# /sbin/ip address add 203.0.113.2/24 dev eth1
+user@T:~# 
+user@T:~# ethtool --offload eth0 tso off
+user@T:~# ethtool --offload eth0 ufo off
+user@T:~# ethtool --offload eth0 gso off
+user@T:~# ethtool --offload eth0 gro off
+user@T:~# ethtool --offload eth0 lro off
+user@T:~# ethtool --offload eth1 tso off
+user@T:~# ethtool --offload eth1 ufo off
+user@T:~# ethtool --offload eth1 gso off
+user@T:~# ethtool --offload eth1 gro off
+user@T:~# ethtool --offload eth1 lro off
+ +

En modo Stateful es especial en el sentido de que el NAT64 necesita por lo menos dos direcciones IPv4 separadas:

+ +
    +
  • Una o más direcciones utilizadas para el trafico local (ej. hacia y desde T). En la configuración de arriba, esta es 203.0.113.1.
  • +
  • Una o más direcciones utilizadas para la traducción NAT64. Linux necesita estar consciente de éstas por que necesita enviarles una respuesta ARP. En nuestro ejemplo es 203.0.113.2.
  • +
+ +

La necesidad de esta separación es una peculiaridad de Jool y estamos investigando como eliminarla.

+ +

Las direcciones de traducción requieren menos prioridad que las del tráfico local para que T no las use por accidente. Una manera de lograr esto, es simplemente añadiendo las direcciones NAT64 después de las direcciones de nodo.

+ +

Recuerda que quizá quieras asegurarte de que T puede comunicarse con todos los nodos antes de continuar.

+ +

Jool

+ +

Esta es la sintaxis para insertar Jool Stateful NAT64 en el kernel:
+(Requieres permiso de administración)

+ +
user@T:~# /sbin/modprobe jool \
+	[pool6=<IPv6 prefix>] \
+	[pool4=<IPv4 prefixes>] \
+	[disabled]
+
+ +
    +
  • +

    pool6 es el prefijo que el mecanismo de traducción estará adjuntando y removiendo de las direcciones de los paquetes.

    +
  • +
  • +

    pool4 es el subconjunto de direcciones de los nodos que seran utilizadas para la traducción (la longitud del prefijo es /32 por defecto).

    +
  • +
  • +

    disabled inicia Jool en modo inactivo.

    +
  • +
+ +

EAM y pool6791 no tienen sentido en modo stateful, y como tal no estan disponibles.

+ +

Para nuestra red de ejemplo:

+ +
user@T:~# /sbin/modprobe jool pool6=64:ff9b::/96 pool4=203.0.113.2
+
+ +

Jool escuchará en la dirección 203.0.113.2 y para los paquetes en IPv4 agrega y remueve el prefijo 64:ff9b::/96.

+ +

Pruebas

+ +

Conectividad de IPv6 a IPv4

+ +

Haz un ping a V desde C:

+ +
user@C:~$ ping6 64:ff9b::203.0.113.16
+PING 64:ff9b::192.0.2.16(64:ff9b::c000:210) 56 data bytes
+64 bytes from 64:ff9b::cb00:7110: icmp_seq=1 ttl=63 time=1.13 ms
+64 bytes from 64:ff9b::cb00:7110: icmp_seq=2 ttl=63 time=4.48 ms
+64 bytes from 64:ff9b::cb00:7110: icmp_seq=3 ttl=63 time=15.6 ms
+64 bytes from 64:ff9b::cb00:7110: icmp_seq=4 ttl=63 time=4.89 ms
+^C
+--- 64:ff9b::203.0.113.16 ping statistics ---
+4 packets transmitted, 4 received, 0% packet loss, time 3004ms
+rtt min/avg/max/mdev = 1.136/6.528/15.603/5.438 ms
+ +

Conectividad a un Web Server en IPv4

+ +

Agrega un servidor en Z y accesalo desde A:

+ +

Figura 1 - IPv4 TCP desde un nodo IPv6

+ +

Para saber cómo permitir que los Nodos IPv4 inicien comunicación consulta la sección de lecturas adicionales.

+ +

Si algo no funciona, consulta el FAQ.

+ +

Deteniendo Jool

+ +

Para detener Jool, emplea de nuevo el comando modprobe usando el parámetro -r:

+ +
user@T:~# /sbin/modprobe -r jool
+ +

Lecturas adicionales

+ +
    +
  1. Un nodo IPv4 externo no puede iniciar la comunicación por que el ve a la red IPv6 como una red privada IPv4 que está atrás de un NAT. Para remediar esto, Jool te permite configurar el “redireccionamiento de puertos†(port forwarding). Ingresa aqui si estás interesado.
  2. +
  3. Aprende más sobre la pool IPv4.
  4. +
  5. El documento de DNS64 te dirá como configurar un DNS64 para hacer transparente el uso de dirección-prefijo a los usuarios.
  6. +
  7. Por favor, lee acerca de problemas con MTUs antes de seleccionar alguno.
  8. +
  9. Hay otra manera de correr el Stateful NAT64. Quizá te ayude a ver las cosas desde una perspectiva más amplia.
  10. +
+ + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/es/mod-run-vanilla.html b/doc/usr/_site/es/mod-run-vanilla.html new file mode 100644 index 000000000..aa097212c --- /dev/null +++ b/doc/usr/_site/es/mod-run-vanilla.html @@ -0,0 +1,279 @@ + + + + + SIIT - Ejemplo básico + + + + + +
+
+ +
+ +
+
+ +

Documentación > Ejemplos de uso > SIIT

+ +

SIIT: Ejemplo de Uso

+ +

Ãndice

+ +
    +
  1. Introducción
  2. +
  3. Red de ejemplo
    + a) Configuración de Nodos en IPv6
    + b) Configuración de Nodos en IPv4
    + c) Configuración del Nodo Traductor
  4. +
  5. Jool
  6. +
  7. Pruebas
    + a) Conectividad de IPv4 a IPv6
    + b) Conectividad de IPv6 a IPv4
    + c) Conectividad a un Web Server en IPv4
    + d) Conectividad a un Web Server en IPv6
  8. +
  9. Deteniendo Jool
  10. +
  11. Lecturas adicionales
  12. +
+ +

Introducción

+ +

Este documento explica cómo ejecutar Jool en modo SIIT. Si no tienes nociones de este tipo de traducción ingresa a SIIT Tradicional.

+ +

En cuanto a software, solo se necesita una instalación exitosa del Servidor Jool. El configurador queda fuera del alcance de esta página.

+ +

Para la implementación de las pruebas, puedes usar alternativamente máquinas virtuales u otro tipo de interfaces, dado que Jool no está ligado al uso exclusivo de interfaces físicas del tipo “ethXâ€.

+ +

Red de ejemplo

+ +

Figura 1 - Red de ejemplo Vanilla

+ +

No es necesario que des de alta todos los nodos que se muestran en el diagrama; puedes lograrlo con solo 3 nodos: A, T y V. El resto son muy similares a A y V y son mostrados para propósitos ilustrativos.

+ +

Considera que tienes un bloque de direcciones 198.51.100.8/29 para distribuirlo entre tus nodos IPv6.

+ +

Jool requiere que T tenga instalado Linux. El resto de los nodos puede tener cualquier otro sistema operativo, siempre y cuando manejen TCP/IP.

+ +

Sin embargo para efectos de simplicidad, los ejemplos aquí mencionados asumen que todos los nodos tienen instalado Linux y que todo esta siendo configurado estáticamente usando el bien-conocido comando ip. Y además, todo el tráfico será redirigido por defecto hacia T.

+ +

Dependiendo de tu distribución de linux, la forma de cómo deshabilitar el administrador de red puede variar. Esto se requiere, para que tomes control sobre las direcciones y rutas de tus interfaces; de otra forma, los comandos ip pudieran no tener efecto.

+ +

Configuración de Nodos en IPv6

+ +

Para los nodos de A a E, ejecuta la siguiente secuencia de comandos con permisos de administrador:

+ +
user@A:~# service network-manager stop
+user@A:~# ip link set eth0 up
+user@A:~# # Replace ".8" depending on which node you're on.
+user@A:~# ip addr add 2001:db8::198.51.100.8/120 dev eth0
+user@A:~# ip route add default via 2001:db8::198.51.100.1
+ +

Configuración de Nodos en IPv4

+ +

Para los nodos de V a Z, ejecuta la siguiente secuencia de comandos con permisos de administrador:

+ +
user@V:~# service network-manager stop
+user@V:~# ip link set eth0 up
+user@V:~# # Replace ".16" depending on which node you're on.
+user@V:~# ip addr add 192.0.2.16/24 dev eth0
+user@V:~# ip route add default via 192.0.2.1
+ +

Configuración del Nodo Traductor

+ +

Para el Nodo T, ejecuta la siguiente secuencia de comandos con permisos de administrador:

+ +
user@T:~# service network-manager stop
+user@T:~# 
+user@T:~# ip link set eth0 up
+user@T:~# ip addr add 2001:db8::198.51.100.1/120 dev eth0
+user@T:~# 
+user@T:~# ip link set eth1 up
+user@T:~# ip addr add 192.0.2.1/24 dev eth1
+ +

Hasta aquí, no hemos convertido a T en un traductor todavía, pues el servicio está dado de baja; por lo cual, los nodos desde A hasta E no pueden interactuar todavía con los nodos V hasta Z. Pero, quizá quieras asegurarte de que T puede comunicarse con todos los nodos antes de continuar.

+ +

La única precaución que debes tener en mente antes de activar Jool (o lidiar con IPv6 en general) son los “offloadsâ€. “Offloading†es una característica de los nodos terminales, y para los que no lo son esto es un problema, por lo cual es importante apagarlos en todos los ruteadores. Lee este documento si quieres conocer más detalles sobre esta problemática.

+ +

Hazlo por medio de ethtool:

+ +
user@T:~# ethtool --offload eth0 tso off
+user@T:~# ethtool --offload eth0 ufo off
+user@T:~# ethtool --offload eth0 gso off
+user@T:~# ethtool --offload eth0 gro off
+user@T:~# ethtool --offload eth0 lro off
+user@T:~# ethtool --offload eth1 tso off
+user@T:~# ethtool --offload eth1 ufo off
+user@T:~# ethtool --offload eth1 gso off
+user@T:~# ethtool --offload eth1 gro off
+user@T:~# ethtool --offload eth1 lro off
+ +
NOTA: Si no puedes cambiar alguno de los parámetros, considera que es posible que ya este apagado.
+	     Ejecuta `sudo ethtool --show-offload [interface]` para averiguarlo.
+
+ +

Jool

+ +

Esta es la sintaxis para insertar Jool SIIT en el kernel:
+(Requieres permiso de administración)

+ +
user@T:~# modprobe jool_siit \
+	[pool6=<IPv6 prefix>] \
+	[blacklist=<IPv4 prefixes>] \
+	[pool6791=<IPv4 prefixes>] \
+	[disabled]
+
+ +

Los parámetros válidos son:

+ +
    +
  • +

    pool6 (abreviación de “Pool de IPv6â€) es el prefijo que el mecanismo de traducción estará adjuntando y removiendo de las direcciones de los paquetes. Este podría ser opcional, porque quizá estas planeando usar EAM.

    +
  • +
  • +

    blacklist representa direcciones IPv4 que Jool no va a traducir usando el prefijo pool6, por lo que esto no afecta en la traducción EAM. Puedes insertar hasta cinco prefijos separados por coma durante un modprobe. Si necesitas más, utiliza la Herramienta de Configuración de Jool.

    +
  • +
  • +

    pool6791 es un pool IPv4 secundario que se utiliza cuando no hay una conexión directa entre uno o varios nodos y el traductor. Si este pool está vacío, Jool enviará la dirección propia de su nodo hacia el nodo destino. Puedes insertar hasta cinco prefijos pool6791 separados por coma durante un modprobe. Si necesitas más, utiliza la Herramienta de Configuración de Jool.

    +
  • +
  • +

    disabled inicia Jool en modo inactivo. Si estás utilizando el configurador, puedes usar esta opción para asegurarte de que has terminado de configurar antes de que tu tráfico empiece a ser traducido. +Si no está presente, Jool empieza a traducir el tráfico de inmediato.

    +
  • +
+ +

Lo siguiente es sufciente para nuestra red de ejemplo.

+ +
user@T:~# modprobe jool_siit pool6=2001:db8::/96
+
+ +

Eso significa que: “La representación IPv6 de cualquier dirección IPv4 va a ser 2001:db8::<IPv4 address>.â€

+ +

Pruebas

+ +

Conectividad de IPv4 a IPv6

+ +

Haz un ping a A desde V de esta forma:

+ +
user@V:~$ ping 198.51.100.8
+PING 198.51.100.8 (198.51.100.8) 56(84) bytes of data.
+64 bytes from 198.51.100.8: icmp_seq=1 ttl=63 time=7.45 ms
+64 bytes from 198.51.100.8: icmp_seq=2 ttl=63 time=1.64 ms
+64 bytes from 198.51.100.8: icmp_seq=3 ttl=63 time=4.22 ms
+64 bytes from 198.51.100.8: icmp_seq=4 ttl=63 time=2.32 ms
+^C
+--- 198.51.100.8 ping statistics ---
+4 packets transmitted, 4 received, 0% packet loss, time 3006ms
+rtt min/avg/max/mdev = 1.649/3.914/7.450/2.249 ms
+ +

Conectividad de IPv6 a IPv4

+ +

Haz un ping a V desde A:

+ +
user@A:~$ ping6 2001:db8::192.0.2.16
+PING 2001:db8::192.0.2.16(2001:db8::c000:210) 56 data bytes
+64 bytes from 2001:db8::c000:210: icmp_seq=1 ttl=63 time=3.57 ms
+64 bytes from 2001:db8::c000:210: icmp_seq=2 ttl=63 time=10.5 ms
+64 bytes from 2001:db8::c000:210: icmp_seq=3 ttl=63 time=1.38 ms
+64 bytes from 2001:db8::c000:210: icmp_seq=4 ttl=63 time=2.63 ms
+^C
+--- 2001:db8::192.0.2.16 ping statistics ---
+4 packets transmitted, 4 received, 0% packet loss, time 3003ms
+rtt min/avg/max/mdev = 1.384/4.529/10.522/3.546 ms
+ +

Conectividad a un Web Server en IPv4

+ +

Agrega un servidor en X y accesalo desde D:

+ +

Figura 1 - IPv4 TCP desde un nodo IPv6

+ +

Conectividad a un Web Server en IPv6

+ +

Agrega un servidor en C y haz una solicitud desde W:

+ +

Figure 2 - IPv6 TCP desde un nodo IPv4

+ +

Si algo no funciona, consulta el FAQ.

+ +

Deteniendo Jool

+ +

Para detener Jool, emplea de nuevo el comando modprobe usando el parámetro -r:

+ +
user@T:~# modprobe -r jool_siit
+ +

Lecturas adicionales

+ +

Si quieres profundizar te recomedamos leer:

+ +
    +
  1. El argumento pool6791 y su uso.
  2. +
  3. Por favor, lee acerca de problemas con MTUs antes de seleccionar alguno.
  4. +
  5. Si te interesa EAM, dirigete al segundo ejemplo.
  6. +
  7. Si te interesa Stateful NAT64, dirigete al tercer ejemplo.
  8. +
  9. El documento de DNS64 te dirá como configurar un DNS64 para hacer transparente el uso de dirección-prefijo a los usuarios.
  10. +
+ + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/es/mtu.html b/doc/usr/_site/es/mtu.html new file mode 100644 index 000000000..822b691a2 --- /dev/null +++ b/doc/usr/_site/es/mtu.html @@ -0,0 +1,139 @@ + + + + + MTU y Fragmentación + + + + + +
+
+ +
+ +
+
+ +

Documentación > Otros > MTU y Fragmentación

+ +

MTU y Fragmentación

+ +

TODO - Pendiente hacer revisión

+ +

Enunciación del problema

+ +

Hay una diferencia principal entre IPv4 e IPv6 la cual un traductor IP no puede compensar.

+ +

La cabecera de un paquete IPv4 con tiene un “parámetro†llamado No Fragmentar o en inglés Don’t fragment(DF). Determina si la fuente le permite a los routers fragmentar el paquete.

+ +

En IPv6, los paquetes nunca pueden ser fragmentados por los routers. Es como si el parámetro No Fragmentar siempre estuviera encendido.

+ +

Cuando hay un traductor en el medio, un paquete IPv4 el cual puede ser fragmentado se convierte en un paquete IPv6 que no debe de ser fragmentado.

+ +

Asi que, que pasa si el paquete es muy grande?

+ +

(Los tamaños actuales de los paquetes son diferentes debido a cambios en los headers, pero entiendes el punto.)

+ +

Fig.1 - flujo MTU fallido

+ +

Esta definido por implementación. Si n4 es inteligente, tratará de decrementar la longitud del paquete. Si no, el paquete nunca llegará a n6.

+ +

Implementaciones apropiadas de hecho utilizan Path MTU discovery y por lo tanto jamas desactivan el parámetro de No Fragmentar.

+ +

It’s implementation defined. If n4 is smart, it will try to decrease the lenght of the packet. If it’s not, the packet will never reach n6.

+ +

Proper implementations today actually use Path MTU discovery and therefore never unset the DF flag. Still, stubborn or legacy code is not unheard of.

+ +

Por cierto: cuando quieras saber el MTU de un link, preguntale a Linux:

+ +
$ ip link
+(...)
+2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
+    link/ether 08:00:27:bf:a6:6e brd ff:ff:ff:ff:ff:ff
+
+ +

Solución

+ +

Si conoces el MTU más pequeño a lo largo de todas tus redes IPv6, dile a T sobre el:

+ +

Fig.2 - Proper Network

+ +

T sabe que está traduciendo, asi que sabe que tiene que fragmentar aunque es una especie de router IPv6.

+ +

Jool solia tener un parámetro llamado --minMTU6 para hacer esto. Ya que confiar la fragmentación al kernel es considerada una mejor práctica, ahora lo configuras en Linux desde la versión de Jool 3.3.

+ +
ip link set dev eth0 mtu 1300
+
+ +

Y voilà:

+ +

Fig.3 - MTU flow succeeds

+ +

Si no sabes el MTU mínimo de tus redes IPv6, asigna 1280. Todo nodo IPv6 debe de ser capáz de manejar por lo menos 1280 bytes por paquete de forma estandarizada.

+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/es/offloading.html b/doc/usr/_site/es/offloading.html new file mode 100644 index 000000000..8793cbec4 --- /dev/null +++ b/doc/usr/_site/es/offloading.html @@ -0,0 +1,172 @@ + + + + + Offloading + + + + + +
+
+ +
+ +
+
+ +

Documentación > Otros > Offloading

+ +

Offload

+ +

Ãndice

+ +
    +
  1. Teoría
  2. +
  3. Práctica
  4. +
+ +

Teoría

+ +

Offloading es una técnica orientada a optimizar el rendimiento de la red. Nació de la observación de que un solo paquete grande es significantemente más rapido de procesar que muchos pequeños, la idea es combinar muchos de ellos

+ +

Offloading is a technique meant to optimize network throughput. Born from the observation that a single large packet is significantly faster to process than several small ones, the idea is to combine several of them from a common stream on reception, and then pretend, to the eyes of the rest of the system, that the new packet was the one received from the cord all along.

+ +

Aquí tenemos un ejemplo visual. Así es como los paquetes son procesados normalmente (sin offloading):

+ +

Fig.1 - No offload

+ +

(Por el momento, asume que la capa de Internet soporta IPv4.)

+ +

Hay dos streams aquí. El amarillo consiste de tres paquetes muy pequeños:

+ +
    +
  1. 1st packet: bytes 0 through 9.
  2. +
  3. 2nd packet: bytes 10 to 29.
  4. +
  5. 3rd packet: bytes 30 to 39.
  6. +
+ +

Y el azul contiene unos paquetes más largos:

+ +
    +
  1. bytes 0 to 599
  2. +
  3. bytes 600 to 1199
  4. +
  5. bytes 1200 to 1799
  6. +
+ +

Hay muchas manetas de implementar offloading. Abajo se encuentra ilustrada una versión simplificada de lo que una NIC(interfáz de red) quizá podria hacer, en lugar de lo de arriba:

+ +

Fig.2 - Offload done right

+ +

Simplemente poner, muchos paquetes continuos

+ +

Puesto simplemente, muchos paquetes continuos son unidos en uno equivalente y mas grande. La tarjeta podria por ejemplo hacer esto uniendo fragmentos IP o incluso segmentos TCP (aunque TCP se encuentre 2 capas arriba). No importa mientras el cambio sea completamente transparente por lo menos en lo que a transferencia de datos se refiere.

+ +

Y si, ahora estamos lidiando con piezas de datos más pesadas, pero a decir verdad, la mayor parte de la acitivdad de las capas de Internet y Transporte recae en los primeros bytes de cada paquete (ej. los encabezados). Asi que mayormente conseguimos procesar n paquetes por el precio de uno.

+ +

Esto esta excelente, pero empiezas a tener problemas en caso de que el sistema tenga que redireccionar los datos (en lugar de comsumirlos). Digamos el hardware tiene una Unidad de Transmisión Máxima (MTU) de 1500; esto es lo que pasa:

+ +

Fig.3 - Offload on a router

+ +

En el paso 1 sucede la agregación, lo que hace le paso 2 muy rápido, pero como el paquete ensamblado del flujo de datos azul es muy grande para la interfaz de salida (tamaño 1800 > max 1500), el paquete se fragmenta en el paso 3, lo cual es ineficiente.

+ +

Mas importante, si el emisor realizó un path MTU discovery, entonces el MTU óptimo computado se perderá en el paso 1 (por que no esta almanecado en el paquete; es indicado por su tamaño, el cual es modificado por el paso1). Por que el parámetro “Don’t Fragment†del paquete estará encendido, entonces el paquete eventualmente e irremediablemente sera desechado tan pronto llegue a un MTU menor. Por lo tanto, hemos creado un hoyo negro.

+ +

(Bueno, no completamente. Un cierto numero de condiciones son requeridas por la Interfaz de red(NIC) para ejecutar el offloading. Puede que en algunas ocasiones raras y aleatorias estas condiciones no se cumplan, asi que ciertos paquetes ocasionalmente no serán agregados, y asi evitan el hoyo. Si tu protocolo de transporte reintenta suficientemente, en lugar de tener una denegación de servicio completa, tienes una red extrema - EXTREMAMENTE - lenta.)

+ +

Cuando la maquina de redireccionamiento es un router IPv6 (o, en el caso de Jool, un SIIT/NAT64 traduciendo de IPv4 a 6), esto es un problema mas inmediato por que los routers IPv6 no estan pensados para fragmentar paquetes (se espera que solo desechen el paquete y devuelvan un mensaje de error ICMP). Así que tu paquete se perdera en el paso 3 incluso si el parámetro “Don’t Fragment†del paquete original no fue indicado.

+ +

Si estas ejecutando Jool en una maquina virtual huesped, algo importante que debes mantener en mente es que quizá prefieras o tambien tengas que deshabilitar los offloads en el enlace de subida del Host de la maquina virtual.

+ +

Y eso es todo. Offloading para nodos finales es gandioso, para los routers es un problema.

+ +

Práctica

+ +

Así que, si quieres ejecutar Jool, debes de desactivar el offloading. Así es como comenzamos a hacerlo (el alcance puede variar):

+ +
$ sudo apt-get install ethtool
+ +

Luego aplica esto a toda interfáz relevante:

+ +
$ sudo ethtool --offload [your interface here] gro off
+ +

“gro†es por sus siglas en inglés “Generic Receive Offloadâ€. Actualmente no sabemos con certeza por que no tenemos que desactivar lro (Large receive offload), gso (Generic segmentation offload) y quizá otros (vea man ethtool). Si no estás seguro, yo diria que debes ir a lo seguro y deshacerte de todas las variantes que veas:

+ +
$ sudo ethtool --offload [your interface here] tso off
+$ sudo ethtool --offload [your interface here] ufo off
+$ sudo ethtool --offload [your interface here] gso off
+$ sudo ethtool --offload [your interface here] gro off
+$ sudo ethtool --offload [your interface here] lro off
+ +

(Si puedes iluminarnos mas en cuanto a este tema, por favor notificanos - jool@nic.mx.)

+ +

Algunas veces ethtool asegura que no puede cambiar algunas de las variantes, pero ten en cuenta que es usualmente por que no esta soportado y por lo tanto no estaba en un principio. Verifica tu configuración utilizando

+ +
$ sudo ethtool --show-offload [your interface here]
+ +

Suerte!

+ + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/es/pool4.html b/doc/usr/_site/es/pool4.html new file mode 100644 index 000000000..40430ed64 --- /dev/null +++ b/doc/usr/_site/es/pool4.html @@ -0,0 +1,181 @@ + + + + + Pool IPv4 Stateful + + + + + +
+
+ +
+ +
+
+ +

Documentación > Ejemplos de uso > NAT64 Stateful > Pool IPv4

+ +

Pool IPv4 Stateful

+ +

Fig.1 - Red del Caso 3

+ +

Aquí hay un paquete teorético que podría viajar desde C hasta E:

+ +
Origen: Dirección 2001:db8:2::10, puerto 1234 (aleatorio)
+Destino: Dirección 64::192.0.2.10, puerto 80 (ej. intentando llegar a un sitio web)
+
+ +

Respecto al campo del puerto de origen: Es bien sabido que un puerto es un valor de dos bytes, lo que significa que se te pueden acabar. Esto no es normalmene un problema, ya que 65536 puertos por nodo es una cantidad bastante razonable.

+ +

El paquete de arriba podria ser traducido por J en algo como esto:

+ +
Origen: 192.0.2.2#1234
+Destino: 192.0.2.10#80
+
+ +

Y Jool va a memorizar que 2001:db8:2::10#1234 tiene relación con 192.0.2.2#1234. E respondera

+ +
Origen: 192.0.2.10#80
+Destino: 192.0.2.2#1234
+
+ +

Y por virtud de su memoria, Jool sabrá que tiene que traducir eso en

+ +
Origen: 64::192.0.2.10#80
+Destino: 2001:db8:2::10#1234
+
+ +

Pero que sucede si D genera el siguiente paquete?

+ +
Origen: 2001:db8:2::11#1234
+Destino: 64::192.0.2.10#80
+
+ +

Jool no puede traducirlo en

+ +
Source: 192.0.2.2#1234
+Destination: 192.0.2.10#80
+
+ +

Por que entonces tendría dos mapeos contradictorios. Cual usara cuando la respuesta de E muestre su cara?

+ +
    +
  1. 2001:db8:2::10#1234 <-> 192.0.2.2#1234
  2. +
  3. 2001:db8:2::11#1234 <-> 192.0.2.2#1234
  4. +
+ +

La solucion enmascarar no solo direcciones, sino puertos también. En lugar de generar el paquete mencionado anteriormente, Jool generara esto:

+ +
Origen: 192.0.2.2#6326
+Destino: 192.0.2.10#80
+
+ +

Y el BIB lucirá como esto:

+ +
    +
  1. 2001:db8:2::10#1234 <-> 192.0.2.2#1234
  2. +
  3. 2001:db8:2::11#1234 <-> 192.0.2.2#6326
  4. +
+ +

A lo que quiero llegar es, todos los nodos IPv6 comparten la misma dirección IPv4(a diferencia de SIIT). Esto es bueno por que no necesitas una dirección IPv4 por nodo IPv6, pero al mismo tiempo necesitas estar consciente de que Jool podria quedarse sin puertos.

+ +

C y D utilizaron un puerto cada uno (y resulto ser el mismo), pero Jool tuvo que utilzar 2 de todas maneras. Cada nodo IPv6 tiene 65536 puertos con los que puede trabajar, pero como todos comparten la misma dirección IPv4, como grupo, pueden utilizar hasta 65536 puertos mediante le traductor. Entre más nodos IPv6 tengas, J se quedará más rápido sin puertos.

+ +

Como encuentras una solución para esto?. Le puedes dar a Jool mas direcciones. Obtendrás 64k de puertos frescos por cada dirección IPv4 que ingreses. Si el lado IPv4 es de hecho proveedor de servicios de internet, recuerda que el será quien proporcionará las direcciones.

+ +

Puedes especificar hasta 5 direcciones durante la inserción del módulo:

+ +
user@J:~# modprobe jool pool4="192.0.2.2, 192.0.2.3, 192.0.2.4, 192.0.2.5, 192.0.2.6"
+
+ +

Si necesitas mas, las puedes agregar utilizando la aplicación de espacio de usuario:

+ +
user@J:~# jool --pool4 --add 192.0.2.7
+user@J:~# jool --pool4 --add 192.0.2.8
+user@J:~# # etc.
+
+ +

Puedes resumir muchas direcciones usaando el formato con prefijo. Lo siguiente ingresa direcciones desde 192.0.2.8 hasta 192.0.2.15:

+ +
user@J:~# modprobe pool4=192.0.2.8/28
+or
+user@J:~# jool --pool4 --add 192.0.2.8/28
+
+ +

Ten en cuenta que la implementacion de pool4 actual de Stateful Jool es lenta cuando se trata de agregar direcciones. Cada dirección tambien solicita mucha RAM (~0.5 MB son considerar los registros BIB, quizá más si la paginación no esta de tu lado).

+ +

Y recuerda que Linux quizá tenga que responder solicitudes ARP para ellas:

+ +
user@J:~# /sbin/ip address add 192.0.2.2/24 dev eth1
+user@J:~# /sbin/ip address add 192.0.2.3/24 dev eth1
+user@J:~# /sbin/ip address add 192.0.2.4/24 dev eth1
+user@J:~# /sbin/ip address add 192.0.2.5/24 dev eth1
+user@J:~# # etc.
+
+ + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/es/rfc6791.html b/doc/usr/_site/es/rfc6791.html new file mode 100644 index 000000000..783940784 --- /dev/null +++ b/doc/usr/_site/es/rfc6791.html @@ -0,0 +1,181 @@ + + + + + RFC 6791 + + + + + +
+
+ +
+ +
+
+ +

Documentación > Ejemplos de uso > SIIT > RFC 6791

+ +

RFC 6791

+ +

Ãndice

+ +
    +
  1. Introducción
  2. +
  3. Definición del Problema
  4. +
  5. Ejemplo
  6. +
  7. Notas Adicionales
  8. +
+ +

Introducción

+ +

Este estandar fue propuesto en Nov 2011 y aprobado como tal un año después. Presentado por Xing Li y Congxiao Bao del Centro CERNET de la Universidad de Tsinghua y Dan Wing de Cisco.

+ +

En este se establece la forma de cómo proveer de direcciones válidas en IPv4 a los HOPs de IPv6 en el caso de que alguno de ellos requiera reportar algún error de ICMP.

+ +

Definición del Problema

+ +

Un traductor Stateless IPv4/IPv6 podría recibir paquetes de IPv6 que contengan direcciones no-traducibles a IPv4 como dirección fuente, provenientes de los enlaces entre redes.

+ +

Se entiende por no-traducibles cuando se cumple estas dos condiciones:
+a) Que no siga la norma establecida en el RFC 6052, cap2.,
+b) Ni que esté dado de alta en la table EAM, ver draft EAM, sección 3.2.

+ +

Si esto sucede, entonces implica que dos condiciones ocurrieron:

+ +
    +
  1. Existe al menos un ruteador entre el Nodo en IPv6 y el Traductor (Jool) antes de llegar al Nodo en IPv4.
  2. +
  3. El paquete es del tipo ICMPv4 Error Message.
  4. +
+ +

En dichas excepciones, los paquetes deben pasar a través de T a la dirección destino de IPv4 para que éste pueda tomar la acción correspondiente.

+ +

Ejemplo

+ +

Suponga que n4 enviá un paquete a n6, pero hay un problema, el mensaje es muy grande, entonces R envíará un paquete de error ICMP a n4. Tome en consideración que T está traduciendo usando el prefijo 2001:db8::/96.

+ +

Figura 1 - Red

+ +

El paquete de R tendrá las siguientes direcciones:

+ + + + + + + + + + + + + + +
OrigenDestino
4000::12001:db8::192.0.2.13
+ +

T está en problemas por que la dirección de origen del paquete no tiene el prefijo de traducción, asi que no puede ser extraia una dirección IPv4 de el.

+ +

Normalmente, no se tienen muchas direcciones IPv4, asi que no es razonable garantizarle una a cada uno de los nodos en el lado IPv6. Debido a su único propósito(casi siempre) de redireccionamiento, los routers son buenos candidatos para direcciones intraducibles. Por otro lado, los errores ICMP son importantes, y un NAT64 no deberia desecharlo simplemente por que viene de un router.

+ +

Notas Adicionales

+ +

Por favor considere los siguientes parrafos del RFC 6791 mientras decide el tamaño y las direcciones de su RFC 6791 pool:

+ +
La dirección de origen utilizada NO DEBE causar que le paquete ICMP
+sea descartado. NO DEBE ser tomada del espacio de direcciones de
+[RFC1918] o de [RFC6598], ya que ese espacio de direcciones es probable
+a estar sujeto al filtrado unicast Reverse Path Forwarding (uRPF) [RFC3704].
+
+(...)
+
+Otra consideración para la seleccion del origen es que debe ser
+posible para los contenedores IPv4 del mensaje ICMP ser capaces de
+distinguir entre la diferentes posibles fuentes de los mensajes ICMPv6
+(por ejemplo, soportar una herramienta de diagnostico de traza de ruta
+que proporcione algo de visibilidad a nivel d red limitada a través del traductor
+IPv4/Pv6). Esta consideración implica que un traductor IPv4/IPv6
+necesita tener un pool de direcciones IPv4 para mapear la direccion de origen 
+de paquetes ICMPv6 generados desde origenes diferentes, o para incluir
+la información de la dirección de origen IPv6 para mapear la dirección de origen 
+por otros medios.  Actualmente, el TRACEROUTE y el MTR [MTR] son los únicos
+consumidores de mensajes ICMPv6 traducidos que se  translated ICMPv6 messages that care about the
+ICMPv6 source address.
+
+(...)
+
+Si un pool de direcciones publicas IPv4 está configurado en el traductor,
+Se RECOMIENDA seleccionar aleatoriamente la dirección de origen IPv4 del
+pool. La selección aleatoria reduce la probabilidad de que dos mensajes ICMP
+sucitados por la misma Traza De Ruta puedan especificar la misma dirección
+de origen y, por consiguiente, erroneamente dar la apariencia de un bucle de ruteo.
+
+ +

Un Stateful NAT64 generalmente no tiene este problema por que render every IPv6 address translatable (ya que todos los nodos IPv6 comparten las direcciones IPv4 del NAT64). Para hacer claras las cosas, un modulo SIIT debe de mantener un pool de direcciónes reservadas. Al recibir un error ICMP con un origen que no se puede traducir, Jool deberia asignar un aleatorio de los que contiene en su pool.

+ +

El Ejemplo de SIIT muestra como configurar el pool durante un modprobe. Tambien lo puedes editar despues mediante la Aplicación de espacio de usuario.

+ + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/es/static-bindings.html b/doc/usr/_site/es/static-bindings.html new file mode 100644 index 000000000..1bd26d036 --- /dev/null +++ b/doc/usr/_site/es/static-bindings.html @@ -0,0 +1,157 @@ + + + + + Mapeos Estáticos + + + + + +
+
+ +
+ +
+
+ +

Documentación > Ejemplos de uso > Stateful NAT64 > Mapeos Estáticos

+ +

Mapeos Estáticos

+ +

Cuando sucede una traducción de IPv6 a IPv4, queda muy poco de los headers del paquete original. Por esto, Jool tiene que recordar quien intentó hablar con quien y en que puertos, para que cuando la respuesta llegue, poder deducir a que conversación pertenece el paquete, y modifique los headers correctamente. Esto no es solo un capricho del Stateful NAT64; le Stateful NAT tradicional tambien lo hace.

+ +

La base de datos en la que estan almacenados los mapeos se llama BIB (Binding Information Base) por sus siglas en inglés. Cada registro en la base de datos contiene una dirección IPv4 A y su puerto b, y una dirección IPv6 C y su puerto d. El registro básicamente dice, “Si un paquete hacia la dirección A en el puerto b llega, traducelo y redireccionalo a la dirección C en el puerto dâ€.

+ +

Por que necesitas saber eso?. Una instalación básica de una Stateful NAT64 le dará a tu red IPv6 acceso a tu Internet IPv4 promedio, pero es un poco o muy molesto que los nodos IPv4 no puedan hablar con los nodos IPv6 sin que los últimos hayan iniciado las conversaciónes. De cualquier manera, NAT64 hereda de NAT la habilidad de configurar mapeos manuales entre nodos internos y externos(“Redireccionameiento de puertosâ€). Si quieres poner como ejemplo, publicar un servidor en tu red IPv6 para que losd nodos IPv4 lo vean, entonces tendras que dar de alata manualmente un registro BIB en la base de datos.

+ +

Fig.1 - Diseño de la red

+ +

Asi que lo que tenemos es, los nodos IPv6 pueden ver a un servidor HTTP mandando una solicitud a 1::1 en el puerto 80. lo que queremos es hacerlo visible al exterior mediante la dirección 1.2.3.4 en el puerto 5678 (Usaremos un puerto diferente simplemente por que podemos).

+ +

Para crear un mapeo, tienes que solicitarle a la aplicación de espacio de usuario algo en estas lineas:

+ +
$ jool --bib --add <protocols> <Ipv6 address>#<"IPv6" port> <IPv4 address>#<"IPv4" port>
+
+ +

el cual en nuestro ejemplo sera traducido a:

+ +
$ jool --bib --add --tcp 1::1#80 1.2.3.4#5678
+
+ +
+

Si te manda un error, ejecuta dmesg para conocer la causa. Muy probablemente estas usando una dirección IPv4 que no agregaste al pool. Agrega la dirección de esta manera:

+ +
$ jool --pool4 --add 1.2.3.4
+
+ +

Luego intenta de nuevo la inserción del mapeo.

+
+ +

Y diviertete.

+ +

Fig.2 - Test

+ +

Ejecuta una versión no operativa del comando --bib para mostrar tu base de datos actual:

+ +
$ jool --bib
+TCP:
+[Static] 1.2.3.4#5678 - 1::1#80
+  (Fetched 1 entries.)
+UDP:
+  (empty)
+ICMP:
+  (empty)
+
+ +

Si la salida muestra una tabla mas poblada, es por que Jool ha estado traduciendo trafico. Mapeos estáticos (manuales) y dinámicos(creados por Jool) pertenecen a la misma base de datos.

+ +

Ten en cuenta que no hay solo una, sino tres tablas BIB diferentes. Agregamos el registro solo al BIB TCP por que utilizamos el parámetro --tcp.

+ +
$ # Add an entry to the UDP BIB
+$ jool --bib --add --udp 1::1#80 1.2.3.4#5678
+$ # Add an entry to the TCP and ICMP BIBs
+$ jool --bib --add --udp --icmp 1::1#80 1.2.3.4#5678
+$ # Show the three tables.
+$ jool --bib --tcp --udp --icmp
+$ # Show the three BIBs, quick version.
+$ jool --bib
+$ # (We didn't include any protocols, so Jool assumed we wanted to show every table.)
+
+ +

“Aguarda!â€, te escucho gritar. “El protocolo ICMP no usa puertos!â€. Pero utiliza identificadores ICMP, los cuales son muy similares. Sin embargo no tiene mucho sentido crear mapeos ICMP manuales, ya que los identificadores ICMP son frecuentemente impredecibles (a diferencia de los puertos de destino).

+ +

Si necesitas remover el mapeo, reemplaza “add†por “remove†y especifica cualquier lado de la ecucación (Los mapeos son únicos en ambos lados):

+ +
$ jool --bib --remove --tcp 1::1#80
+or
+$ jool --bib --remove --tcp 1.2.3.4#5678
+or
+$ # This won't hurt you (and will make sure you're removing exactly what you want to remove).
+$ jool --bib --remove --tcp 1::1#80 1.2.3.4#5678
+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/es/usr-flags-atomic.html b/doc/usr/_site/es/usr-flags-atomic.html new file mode 100644 index 000000000..9d2b430c2 --- /dev/null +++ b/doc/usr/_site/es/usr-flags-atomic.html @@ -0,0 +1,294 @@ + + + + + Fragmentos Atómicos + + + + + +
+
+ +
+ +
+
+ +

Documentation > Herramienta de configuración de Jool > Flags > --global > Fragmentos Atómicos

+ +

Fragmentos Atómicos

+ +

Ãndice

+ +
    +
  1. Introducción
  2. +
  3. Parámetros +
      +
    1. --allow-atomic-fragments
    2. +
    3. --setDF
    4. +
    5. --genFH
    6. +
    7. --genID
    8. +
    9. --boostMTU
    10. +
    +
  4. +
+ +

Introducción

+ +

Los “Fragmenos Atómicos†son por decirlo de otra manera “Fragmentos Aisladosâ€; es decir, son paquetes de IPv6 que poseen un fragment header sin que éste realmente sea un segmento de un paquete mayor. Este tráfico de fragmentos es permitido entre los saltos, hops, para el envío de información entre IPv6 e IPv4. Por lo general, estos paquetes son enviados por hosts que han recibido un mensaje de error del tipo ICMPv6 “Packet too Big†para advertir que el próximo equipo, ya sea ruteador, hub, etc., soporta un MTU inferior al mínimo en IPv6, o sea que, el Next-Hop MTU es menor a 1280 bytes. Hay que recordar, que hasta el día de hoy entre redes Ethernet en IPv6 se suele emplear su valor máximo que es de 1500 bytes, pero en IPv4 el máximo ha variado con el tiempo y depende del medio y del protocolo por el cual se esté comunicando. En IPv6, por regla, el nodo origen es quien tiene la obligación de fragmentar el paquete y no los equipos que enlazan la red, cosa que si es permitido en IPv4. Para más información sobre las cabeceras de fragmento, ver RFC. 2460, sección 4.5, 1998.

+ +

Sin embargo, esta implementación es vulnerable a infiltraciones, y algún hacker puede tomar ventaja de la diferencia entre el MTU mínimo de IPv4, que es de 68 bytes, y el de IPv6, que es de 1280 bytes, para introducir fragmentos y generar problemas. Algunas referencias sobre este tema son:

+ +

2010, RFC. 5927
+2012, Security Implications of Predictable Fragment Identification Values
+2013, RFC. 6946

+ +

La IETF está tratando de normar el desuso de los fragmentos atómicos. Incluso en el RFC 6145, que es el documento principal de SIIT, advierte sobre dichos problemas de seguridad.

+ +

DESDE la perspectiva de Jool, como no se ha oficializado su desuso, estos aún siguen siendo soportados. Pero es destacable mencionar, que hemos registrado problemas técnicos al permitir los fragmentos atómicos. El kernel de Linux es particularmente deficiente cuando se trata de cabeceras de fragmento, asi que si Jool está generando uno, Linux añade otro adicional.

+ +

Figure 1 - que podría salir mal?

+ +

En Jool 3.2 y en versiones anteriores se evade esto al NO delegar la fragmentación al kernel; pero, el hacelo así nos introdujo otros problemas más sutiles.

+ +

Ahora en Jool 3.3, la configuración por omisión es deshabilitar los fragmentos atómicos, lo cual te recomendamos no cambies.

+ +

Estamos totalmente de acuerdo con la iniciativa de su desuso, 2014 y cuando se formalize, en breve, se omitirá en Jool.

+ +

Parámetros

+ +

--allow-atomic-fragments

+ +
    +
  • Nombre: PERMITE LOS FRAGMENTOS ATÓMICOS
  • +
  • Tipo: Booleano
  • +
  • Valor por Omisión: Apagado(0)
  • +
  • Modos: SIIT & Stateful
  • +
  • Sentido de traducción: IPv4 -> IPv6 & IPv6 -> IPv4
  • +
+ +

Esta bandera sumariza la acción de las otras cuatro banderas (setDF, genFH, genID y boostMTU) con el propósito de habilitar o deshabilitar la recepción y traducción de los fragmentos aislados, llamados atómicos.

+ +

Para HABILITARLO, sencillamente ejecute:

+ +
$(jool) --allow-atomic-fragments verdadero
+ +

Y esto es equivalente a:

+ +
$(jool) --setDF verdadero      #NO FRAGMENTES
+$(jool) --genFH verdadero      #GENERA CABECERA DE FRAGMENTO
+$(jool) --genID falso
+$(jool) --boostMTU falso
+ +

Según lo establece el RFC 6145, sección 6 este sería el comportamiento mandatorio, pero está siendo verificado por la IETF, ver Draft Deprecate Atomfrag Generation](https://tools.ietf.org/html/draft-ietf-6man-deprecate-atomfrag-generation-00).

+ +

Para DESHABILITARLO, sencillamente ejecute:

+ +
$(jool) --allow-atomic-fragments falso
+ +

Y esto es equivalente a:

+ +
$(jool) --setDF falso    #FRAGMENTABLE
+$(jool) --genFH falso    #NO INCLUYAS CABECERA DE FRAGMENTO
+$(jool) --genID verdadero
+$(jool) --boostMTU verdadero
+ +

Reafirmando: Jool 3.3 opera de esta última forma; es decir, NO deja pasar los fragmentos atómicos.

+ +

NOTAS:
+(1) La separación de los cuatro parámetros existe por razones históricas en la implementación, mas en el avance del proyecto se ha visto que no tiene sentido manejarlos individualmente y que los otras posibilidades conviene que sean descartadas.
+(2) La relación entre --setDF y --boostMTU es delicada. Consulta abajo para más detalles.

+ +

--setDF

+ +
    +
  • Nombre: NO FRAGMENTES
  • +
  • Tipo: Booleano
  • +
  • Valor por Omisión: Apagado(0)
  • +
  • Modos: SIIT & Stateful
  • +
  • Sentido de traducción: IPv6 -> IPv4
  • +
+ +

Mediante esta bandera se puede establecer si el mensaje es candidato a ser fragmentado o no, en su tránsito de IPv6 a IPv4.

+ +

La lógica descrita en forma de pseudocódigo es:

+ +
SI (el paquete entrante tiene una cabecera de fragmento):      #SI PAQ. ENTRANTE en IPv6 TIENE CABECERA DE FRAGMENTO?
+	El parámetro DF del paquete saliente en será Falso.           #AVISA PAQ. SALIENTE en IPv4 es un FRAGMENTO
+De otra forma:                                                 #SI PAQ. ENTRANTE en IPv6 NO TIENE CABECERA DE FRAGMENTO?
+	SI (--setDF == 1):                                            #SI LA BANDERA "NO FRAGMENTES" ESTÃ ENCENDIDA?
+        El parámetro DF del paquete saliente será Verdadero.         #AVISA PAQ. SALIENTE en IPv4 NO está FRAGMENTADO <> Va Entero
+	De otra forma:                                                #SI LA BANDERA "NO FRAGMENTES" ESTÃ APAGADA? (Es Fragmentable)
+        SI (la longitud del paquete saliente es > 1260):             #SI PAQ. SALIENTE en IPv4 > 1260? (Rebasa el Mínimo MTU en IPv6)          
+			El parámetro DF del paquete saliente será Verdadero.        #AVISA PAQ. SALIENTE en IPv4 NO está FRAGMENTADO <> Es Fragmentable pero NO va Fragmentado
+		De otra forma:                                               #SI PAQ. SALIENTE en IPv4 <= 1260? <> Menor al Mínimo MTU en IPv6
+			El parámetro DF del paquete saliente será Falso.            #AVISA PAQ. SALIENTE en IPv4 es un FRAGMENTO <> Primer Fragmento
+
+ +

NOTAS:
+(1) El valor mínimo de MTU en IPv6 es igual a 1280 bytes, si a este valor le quitamos el tamaño del encabezado en IPv6, que es 40, y le sumamos el de IPv4, que es 20, nos da 1260 bytes.
+(2) Para una mejor comprensión, ver --boostMTU y revisar la Sección 6 del RFC 6145.

+ +

--genFH

+ +
    +
  • Nombre: GENERA CABECERA DE FRAGMENTO IPV6
  • +
  • Tipo: Booleano
  • +
  • Valor por Omisión: Apagado (0)
  • +
  • Modos: SIIT & Stateful
  • +
  • Sentido de traducción: IPv4 -> IPv6
  • +
+ +

En IPv4 no hay diferencia a nivel de encabezados entre un paquete fregmentado y otro que no lo es. Esto se establece mediante el campo de Identification y el valor del Fragment Offset. Los segmentos de un mismo paquete son identificados con un mismo número y en el Fragment Offset se guarda a partir de que número de dato se está trasmitiendo. Pero, en IPv6 si existe diferencia entre el primer segmento y el resto. En IPv6, sólo el 1er paq. incluye la cabecera a nivel 3 (ICMP, UDP, TCP) y en el resto se omite; es decir, ya no se repite como en IPv4.

+ +

A través de esta bandera se puede prever que en la transición de IPv4 a IPv6 se incluya o no una cabecera de fragmento.

+ +

La validación descrita en forma de pseudocódigo es:

+ +
Si (--genFH == 1 && el paquete entrante tiene ** DF inactivo**):   #SI GENERA CABECERA en IPv6 && PAQ. ENTRANTE FRAGMENTABLE?
+	Jool generará una cabecera de fragmento IPv6.                     #AGREGA en PAQ. SALIENTE de IPv6 CABECERA DE FRAGMENTO <> 2o Fragmento en delante
+Si (--genFH == 0):                                                 #SI NO GENERA CABECERA en IPv6?
+	Si (paquete entrante es un fragmento):                            #SI PAQ. ENTRANTE en IPv4 es un FRAGMENTO?
+		Jool generará una cabecera de fragmento IPv6.                    #AGREGA en PAQ. SALIENTE de IPv6 CABECERA DE FRAGMENTO <> 1er Fragmento
+	De otra forma:                                                    #SI PAQ. ENTRANTE en IPv4 NO es un FRAGMENTO
+		Jool NO generará una cabecera de fragmento IPv6.                 #PAQ. SALIENTE de IPv6 NO tiene CABECERA DE FRAGMENTO <> Paq. Completo
+
+ +

NOTAS:
+(1)Cuando --genFH está apagado no importa si el parámetro DF del paquete entrante nos dice que el paquete “no está fragmentado†o si “es fragmentableâ€.
+(2)Este es el parámetro que causa que Linux se comporte erróneamente cuando necesita fragmentar. No funciona bien, así que actívalo bajo tu propio riesgo.

+ +

--genID

+ +
    +
  • Nombre: GENERA IDENTIFICACIÓN IPV4
  • +
  • Tipo: Booleano
  • +
  • Valor por Omisión: Encendido (1)
  • +
  • Modos: SIIT & Stateful
  • +
  • Sentido de traducción: IPv6 -> IPv4
  • +
+ +

Los paquetes IPv6 solo disponen de un campo de identificación si son un fragmento; es decir, si tienen una cabecera de fragmento. Sin embargo, todos los paquetes de IPv4 deben de llevar un campo de identificación. Esta bandera sirve para especificarle a Jool qué hacer cuando vaya a traducir un fragmento de IPv6 a IPv4.

+ +

La lógica descrita en forma de pseudocódigo es:

+ +
SI (el paquete entrante tiene una cabecera de fragmento):      #SI PAQ. ENTRANTE en IPv6 TIENE CABECERA DE FRAGMENTO?
+	Copia los bits de orden más bajo del campo de                 #TRANSFIERE EL NO. IDENTIFICADOR de IPV6 a IPV4 
+	identificación de la cabecera de fragmento en 
+	IPv6 al de IPv4
+De otra forma:                                                 #SI PAQ. ENTRANTE en IPv6 NO TIENE CABECERA DE FRAGMENTO?
+	SI (--genID == 0):                                            #SI LA BANDERA "GENERA IDENTIFICACIÓN IPV4" ESTà APAGADA?
+        Selecciona el el campo de identificación                     #NO. IDENTIFICADOR de IPV4 = 0
+		de la cabecera de fragmento de IPv4 = 0
+	De otra forma:                                                #SI LA BANDERA "GENERA IDENTIFICACIÓN IPV4" ESTà ENCENDIDA?
+        Selecciona el el campo de identificación                     #NO. IDENTIFICADOR de IPV4 = Número Aleatorio <> 1er Fragmento
+		de la cabecera de fragmento de IPv4 = 
+		Número Aleatorio
+
+ +

--boostMTU

+ +
    +
  • Nombre: PROMUEVE MTU IPv6
  • +
  • Tipo: Booleano
  • +
  • Valor por Omisión: Encendido (1)
  • +
  • Modes: SIIT && Stateful
  • +
  • Dirección de traducción: IPv4 -> IPv6 (aplica en: msg. de error de ICMP)
  • +
+ +

Como se mencionó en la introducción, decíamos que cuando un paquete es muy grande para el MTU de un enlace, los routers en IPv4 generan mensajes ICMP de error -Fragmentation Needed- en IPv4 que pudieran ser traducidos como -Packet too Big- en IPv6.

+ +

Estos errores ICMP se supone deben contener el MTU infractor para que el emisor pueda reajustar el tamaño de sus paquetes. Dado que el MTU mínimo para IPv4 es 68 bytes y el de IPv6 es 1280, Jool puede encontrarse queriendo reportar un MTU illegal en IPv6 al traducir un Fragmentation Needed (v4) en un Packet too Big (v6). Con --boostMTU se trata de evitar este tipo de falla.

+ +

Jool requiere hacer un pequeño ajuste al comparar los MTUs, por la diferencia entre la longitud básica del header IPv4(20 bytes) y la del header IPv6(40 bytes). Un paquete en IPv6 puede ser 20 bytes más grande que el MTU de IPv4 por que va a perder 20 bytes cuando su cabecera IPv6 sea reemplazada por una de IPv4.

+ +

La validación descrita en forma de pseudocódigo es:

+ +
IPv6_error.MTU = IPv4_error.MTU + 20
+SI (--boostMTU == 1 && IPv6_error.MTU < 1280):   		#SI LA BANDERA "PROMUEVE MTU" ESTÃ ENCENDIDA && LONGITUD DEL PAQ. ENTRANTE ES MENOR A LA LONG. MÃNIMA PERMITIDA EN IPV6?
+	MTU de IPv6 = 1280                                     #ASIGNA A MTU de IPV6 SU VALOR MÃNIMO
+
+ +

En cualquier otro caso, con --boostMTU deshabilitado y/o IPv6_error.MTU >= 1280 , Jool no alterará este campo.

+ +

Para mayor información vea la sección 6 del RFC 6145. Alli se describen los fundamentos básicos.

+ +

AVISO:

+ +

Si --setDF && --boostMTU están ambos en ENCENDIDO (1) y hay un enlace IPv4 con MTU < 1260, se llega a establecer un bucle infinito similar al MTU hassle:

+ +
    +
  1. El emisor IPv6 transmite un paquete de tamaño 1280.
  2. +
  3. Jool lo traduce en un paquete IPv4 de tamaño 1260 con DF=1
  4. +
  5. Un router IPv4 con interfaz de salida con MTU < 1260 genera ICMPv6 Frag Needed con MTU=1006 (o algún otro).
  6. +
  7. Jool lo traduce a ICMPv6 Packet Too Big con MTU=1280.
  8. +
  9. Ve al punto 1.
  10. +
+ +

Extendemos un agradecimiento a Tore Anderson por darse cuenta de ello y reportar esta peculiaridad.

+ + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/es/usr-flags-bib.html b/doc/usr/_site/es/usr-flags-bib.html new file mode 100644 index 000000000..2c9d34a5b --- /dev/null +++ b/doc/usr/_site/es/usr-flags-bib.html @@ -0,0 +1,224 @@ + + + + + --bib + + + + + +
+
+ +
+ +
+
+ +

Documentación > Herramienta de configuración de Jool > Parámetros > --bib

+ +

--bib

+ +

Ãndice

+ +
    +
  1. Descripción
  2. +
  3. Sintaxis
  4. +
  5. Opciones +
      +
    1. Operaciones
    2. +
    3. <protocols>
    4. +
    5. --numeric
    6. +
    7. --csv
    8. +
    9. <bib4>, <bib6>
    10. +
    +
  6. +
  7. Ejemplos
  8. +
+ +

Descripción

+ +

Interactua con el Binding Information Base (BIB) de Jool. Si no sabes que es, por favor sigue el enlace antes de continuar.

+ +

Sintaxis

+ +
jool --bib <protocols> [--display] [--numeric] [--csv]
+jool --bib <protocols> --count
+jool --bib <protocols> --add <bib4> <bib6>
+jool --bib <protocols> --remove (<bib4> | <bib6> | <bib4> <bib6>)
+
+ +

Opciones

+ +

Operaciones

+ +
    +
  • --display: Lista las tablas BIB. Operación por omisión.
  • +
  • --count: Lista el número de registros BIB.
  • +
  • --add: Combina <bib6> y <bib4> en un registro BIB, y lo añade a las tablas de Jool.
  • +
  • --remove: Borra el registro descrito por <bib6> and/or <bib4> de las tablas BIB.
  • +
+ +

<protocols>

+ +
<protocols> := [--tcp] [--udp] [--icmp]
+
+ +

El comando aplica sobre la(s) tabla(s) específica(s). Si no se indica, entonces afecta a los tres protocolos.

+ +

--numeric

+ +

La aplicación intentará resolver el nombre del nodo IPv6 de cada registro BIB. Si tus nameservers no están respondiendo, esto retardará la salida.

+ +

Utiliza --numeric para desactivar este comportamiento.

+ +

--csv

+ +

La aplicación muestra la información en un formato amigable para la consola.

+ +

Utiliza --csv para imprimir en formato CSV para abrirse como hoja de cálculo.

+ +

<bib4>, <bib6>

+ +
<bib4> := <dirección IPv4>#(<puerto> | <identificador ICMP>)
+<bib6> := <dirección IPv6>#(<puerto> | <identificador ICMP>)
+
+ +

Un registro BIB está compuesto de una dirección de transporte IPv6 (los identificadores de conexión de los nodos IPv6) y una dirección de transporte IPv4 (los identificadores de conexión que Jool está utilizando para enmascarar los de IPv6).

+ +

Si estas agregando o removiendo un BIB, puedes proveer ambas direcciones mediante estos parámetros.

+ +

Toma en cuenta que el componente <bib4> debe ser un miembro del pool IPv4 de Jool, así que asegurate de que lo has registrado ahí primero.

+ +

Dentro de una tabla BIB, toda dirección de transporte IPv4 es única. Dentro de una tabla BIB, toda dirección IPv6 también es única. Por lo tanto, si estas removiendo un registro BIB, sólo necesitas proveer uno de ellos. Aun puedes ingresar ambos para asegurarte de que estas eliminando exactamente lo que deseas.

+ +

Ejemplos

+ +

Premisas:

+ +
    +
  • 4.4.4.4 pertenece al pool IPv4.
  • +
  • El nombre de 6::6 es “potato.mxâ€.
  • +
  • 6::6 ya le habló a un nodo IPv4 recientemente, así que la base de datos no está vacía.
  • +
+ +

Despliega la base de datos entera:

+ +
<br />
+$ jool --bib --display<br />
+TCP:
+[Dynamic] 4.4.4.4#1234 - potato.mx#1234
+  (Fetched 1 entries.)
+UDP:
+  (empty)
+ICMP:
+  (empty)
+ +

Habilita la recepción en un par de servicios TCP:

+ +
# jool --bib --add --tcp 6::6#6 4.4.4.4#4
+# jool --bib --add --tcp 6::6#66 4.4.4.4#44
+ +

Lista la tabla TCP:

+ +
$ jool --bib --display --tcp
+TCP:
+[Static] 4.4.4.4#4 - potato.mx#6
+[Static] 4.4.4.4#44 - potato.mx#66
+[Dynamic] 4.4.4.4#1234 - potato.mx#1234
+  (Fetched 3 entries.)
+ +

Igual, pero no llama al DNS:

+ +
$ jool --bib --display --tcp --numeric
+TCP:
+[Static] 4.4.4.4#4 - 6::6#6
+[Static] 4.4.4.4#44 - 6::6#66
+[Dynamic] 4.4.4.4#1234 - 6::6#1234
+  (Fetched 3 entries.)
+ +

Publica un servicio UDP:

+ +
# jool --bib --add --udp 6::6#6666 4.4.4.4#4444
+ +

Guarda la base de datos en un archivo CSV:

+ +
$ jool --bib --display --numeric --csv > bib.csv
+ +

bib.csv

+ +

Muestra cuantos registros hay en las tablas TCP e ICMP:

+ +
$ jool --bib --count --tcp --icmp
+TCP: 3
+ICMP: 0
+ +

Cancela el registro del servicio UDP:

+ +
# jool --bib --remove --udp 6::6#6666
+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/es/usr-flags-blacklist.html b/doc/usr/_site/es/usr-flags-blacklist.html new file mode 100644 index 000000000..a5ef5c8f6 --- /dev/null +++ b/doc/usr/_site/es/usr-flags-blacklist.html @@ -0,0 +1,160 @@ + + + + + --blacklist + + + + + +
+
+ +
+ +
+
+ +

Documentación > Aplicación de espacio de usuario > Parámetros > --blacklist

+ +

--blacklist

+ +

Ãndice

+ +
    +
  1. Descripción
  2. +
  3. Sintaxis
  4. +
  5. Opciones
  6. +
  7. Ejemplos
  8. +
+ +

Descripción

+ +

Interactua con el pool de direcciones que se encuentran en la lista negra de Jool.

+ +

El pool dicta que direcciones pueden ser traducidas utilizando el prefijo pool6. Toma en cuenta que EAM tiene mas prioridad que el prefijo, asi que no tienes que agregar un registro a este pool para cada registro EAM que necesitas.

+ +

Hay algunas direcciones que Jool se reusará a traducir, independientemente de blacklist. Estas incluyen

+ +
    +
  • Las direcciones que pertenecen al nodo de Jool (por que Jool solo puede utilizarse en modo de redirecionamiento, actualmente).
  • +
  • Direcciones de Software (0.0.0.0/8).
  • +
  • Direcciones de Host (127.0.0.0/8).
  • +
  • Direcciones de enlace local (169.254.0.0/16).
  • +
  • Broadcast limitado (255.255.255.255/32).
  • +
+ +

Sintaxis

+ +
jool_siit --blacklist [--display]
+jool_siit --blacklist --count
+jool_siit --blacklist --add <IPv4 prefix>
+jool_siit --blacklist --remove <IPv4 prefix>
+jool_siit --blacklist --flush
+
+ +

Opciones

+ +
    +
  • --display: Los prefijos de las direcciones del Pool son impresos en la salida estandar. Esta es la operación por default.
  • +
  • --count: El número de direcciones (no prefijos) en el pool es impreso en la salida estandar.
    +Por ejemplo, si todo lo que tienes es un prefijo /30, espera “4†como.
  • +
  • --add: Carga <IPv4 prefix> al pool.
  • +
  • --remove: Borra la dirección <IPv4 prefix> de las tablas.
  • +
  • --flush: Remueve todas las direcciones/prefijos del pool.
  • +
+ +

Ejemplos

+ +

Despliega las direcciones actuales:

+ +
$ jool_siit --blacklist --display
+192.0.2.0/28
+198.51.100.0/30
+203.0.113.8/32
+  (Fetched 3 prefixes.)
+
+ +

Despliega solo el conteo de direcciones:

+ +
$ jool_siit --blacklist --count
+21
+
+ +

(That’s /28 + /30 + /32 = 16 + 4 + 1)

+ +

Remueve un par de entradas:

+ +
# jool_siit --blacklist --remove 192.0.2.0/28
+# jool_siit --blacklist --remove 198.51.100.0/30
+
+ +

Devuelve una entrada:

+ +
# jool_siit --blacklist --add 192.0.2.0/28
+
+ + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/es/usr-flags-eamt.html b/doc/usr/_site/es/usr-flags-eamt.html new file mode 100644 index 000000000..a8fdcea85 --- /dev/null +++ b/doc/usr/_site/es/usr-flags-eamt.html @@ -0,0 +1,183 @@ + + + + + --eamt + + + + + +
+
+ +
+ +
+
+ +

Documentation > Aplicación de espacio de usuario > Parámetros > --eamt

+ +

--eamt

+ +

Ãndice

+ +
    +
  1. Descripción
  2. +
  3. Sintaxis
  4. +
  5. Options +
      +
    1. Operaciones
    2. +
    3. --csv
    4. +
    5. <prefix4>, <prefix6>
    6. +
    +
  6. +
  7. Ejemplos
  8. +
+ +

Descripción

+ +

Interactua con la Tabla de mapeo de direcciones explícitas de Jool (EAMT) por sus siglas en inglés. Ve la introducción para una que tengas visión general rápida, nuestro resumen de drafts para mas detalles, o el draft EAM para la historia completa.

+ +

Sintaxis

+ +
jool_siit --eamt [--display] [--csv]
+jool_siit --eamt --count
+jool_siit --eamt --add <prefix4> <prefix6>
+jool_siit --eamt --remove (<prefix4> | <prefix6> | <prefix4> <prefix6>)
+jool_siit --eamt --flush
+
+ +

Opciones

+ +

Operaciones

+ +
    +
  • --display: La tabla EAMT es impresa en la salida estandar. Esta es la operación por default.
  • +
  • --count: El número de registros en la tabla EAMT es impreso a la salida estandar.
  • +
  • --add: Combina <prefix4> y <prefix6> en un registro EAM, y lo carga a la tabla de Jool.
  • +
  • --remove: Borra de la tabla el registro EAM descrito por <prefix4> y/o <prefix6>.
  • +
  • --flush: Remueve todos los registros de la tabla.
  • +
+ +

--csv

+ +

Por default, la aplicación va a imprimir las tablas en un formato relativamente amigable para la consola.

+ +

Utiliza --csv para imprimir en formato CSV el cual es amigable con una hoja de cálculo.

+ +

<prefix4>, <prefix6>

+ +
<prefix4> := <IPv4 address>[/<prefix length>]
+<prefix6> := <IPv6 address>[/<prefix length>]
+
+ +

Estos son los prefijos de los cuales esta hecho cada registro, Ve la explicación general EAMT

+ +

<prefix length> es por default /32 en <prefix4> y /128 en <prefix6>. Jool pone en cero cualquier sufijo de cualquiera de las direcciones si existe.

+ +

Todo prefijo es único a lo largo de la tabla. Por lo tanto, si estas removiendo un registro EAMT, solo necesitas proveer uno de ellos. Aun asi puedes ingresar ambos para asegurarte de que estas eliminando exactamente lo que quieres.

+ +

Ejemplos

+ +

Agrega un puñado de mapeos:

+ +
# jool_siit --eamt --add 192.0.2.1      2001:db8:aaaa::
+# jool_siit --eamt --add 192.0.2.2/32   2001:db8:bbbb::b/128
+# jool_siit --eamt --add 192.0.2.16/28  2001:db8:cccc::/124
+# jool_siit --eamt --add 192.0.2.128/26 2001:db8:dddd::/64
+# jool_siit --eamt --add 192.0.2.192/31 64:ff9b::/127
+ +

Despliega la nueva tabla:

+ +
$ jool_siit --eamt --display
+64:ff9b::/127 - 192.0.2.192/31
+2001:db8:dddd::/64 - 192.0.2.128/26
+2001:db8:cccc::/124 - 192.0.2.16/28
+2001:db8:bbbb::b/128 - 192.0.2.2/32
+2001:db8:aaaa::/128 - 192.0.2.1/32
+  (Fetched 5 entries.)
+ +

Ingresa la base de datos en un archivo csv:

+ +
$ jool_siit --eamt --display --csv > eamt.csv
+ +

eamt.csv

+ +

Despliega el numero de registros en la tabla:

+ +
$ jool_siit --eamt --count
+5
+ +

Remueve el primer registro:

+ +
# jool_siit --eamt --remove 2001:db8:aaaa::
+ +

Vacia la tabla:

+ +
# jool_siit --eamt --flush
+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/es/usr-flags-global.html b/doc/usr/_site/es/usr-flags-global.html new file mode 100644 index 000000000..0874c95ab --- /dev/null +++ b/doc/usr/_site/es/usr-flags-global.html @@ -0,0 +1,666 @@ + + + + + --global + + + + + +
+
+ +
+ +
+
+ +

Documentación > Herramienta de Configuración de Jool > Parámetros > --global

+ +

--global

+ +

TODO pendiente hacer revisión

+ +

Ãndice

+ +
    +
  1. Descripción
  2. +
  3. Sintaxis
  4. +
  5. Ejemplos
  6. +
  7. Llaves +
      +
    1. + + + + + + + +
      [--enable--disable](#enable—disable)
      +
    2. +
    3. --address-dependent-filtering
    4. +
    5. --drop-icmpv6-info
    6. +
    7. --drop-externally-initiated-tcp
    8. +
    9. --udp-timeout
    10. +
    11. --tcp-est-timeout
    12. +
    13. --tcp-trans-timeout
    14. +
    15. --icmp-timeout
    16. +
    17. --fragment-arrival-timeout
    18. +
    19. --maximum-simultaneous-opens
    20. +
    21. --source-icmpv6-errors-better
    22. +
    23. --logging-bib
    24. +
    25. --logging-session
    26. +
    27. --zeroize-traffic-class
    28. +
    29. --override-tos
    30. +
    31. --tos
    32. +
    33. --allow-atomic-fragments +
        +
      1. --setDF
      2. +
      3. --genFH
      4. +
      5. --genID
      6. +
      7. --boostMTU
      8. +
      +
    34. +
    35. --amend-udp-checksum-zero
    36. +
    37. --randomize-rfc6791-addresses
    38. +
    39. --mtu-plateaus
    40. +
    +
  8. +
+ +

Descripción

+ +

Bajo esta opción se agrupan todas las variables configurables de Jool exceptuando las tablas (Pool4, Pool6, Pool6791, BIB, Session, EAMT y blacklist), porque cada una de éstas son seleccionables directamente.

+ +

--global es el modo por omisión de Jool. Asi que de hecho, no requieres ingresar ese parámetro.

+ +

Sintaxis

+ +
jool_siit [--global]
+jool_siit [--global] <llave> <valor>
+jool [--global]
+jool [--global] <llave> <valor>
+
+ +

Ejemplos

+ +
    +
  • +

    Para Desplegar la Configuración Actual:

    + +

    $ jool_siit –global

    +
  • +
+ +

O simplemente:

+ +
$ jool_siit
+
+ +
    +
  • +

    Para PAUSAR Jool:

    + +

    $ jool –global –disable

    +
  • +
  • +

    Para ENCENDER Filtra Dependiendo del Direccionamiento:

    + +

    $ # Valores válidos: {true, false, 1, 0, yes, no, on, off}
    + $ jool –address-dependent-filtering true

    +
  • +
  • +

    Para ACTUALIZAR la Lista Plateaus:

    + +

    $ jool_siit –mtu-plateaus “6000, 5000, 4000, 3000, 2000, 1000â€

    +
  • +
+ +

Llaves

+ +

--enable|--disable

+ +
    +
  • Nombre: HABILITA & DESHABILITA JOOL
  • +
  • Tipo: No Aplica
  • +
  • Modos: SIIT & Stateful
  • +
  • Valor por Omisión: ** Conforme a la bandera empleada al insertar JOOL **
  • +
+ +

REANUDA Y PAUSA LA TRADUCCIÓN DE PAQUETES, RESPECTIVAMENTE.

+ +

Esto puede ser muy útil si requieres cambiar más de un parámetro de configuración y no deseas que los paquetes sean traducidos inconsistentemente mientras ejecutas los comandos; pero, si prefieres que Jool no se detenga mientras estas reconfigurando, usa disable.

+ +

Mientras Jool está inactivo, los timeouts no serán pausados para que las entradas ya registradas en BIB y session puedan estarse actualizando y al llegar a su término de duración los paquetes y fragmentos almacenados puedan ser desechados.

+ +

--address-dependent-filtering

+ +
    +
  • Nombre: FILTRA DEPENDIENDO DEL DIRECCIONAMIENTO
  • +
  • Tipo: Booleano
  • +
  • Modos: Stateful
  • +
  • Valor por Omisión: APAGADO (0)
  • +
  • Nombre anterior: --dropAddr
  • +
  • Fuente: Ver RFC 6146, sección 1.2.3
  • +
+ +

EN RESUMEN:
+ –address-dependent-filtering OFF significa que Jool debe ser un NAT de cono completo.
+ –address-dependent-filtering ON significa que Jool debe ser un NAT de cono restringido.

+ +

Referencias:
+Wiki.
+Voipex.
+Think Like A Computer.
+voipforo.

+ +

BREVE EXPLICACIÓN:

+ +

Partiendo que n6 está hablando con n4a mediante el NAT64:

+ +

Fig.1: Legal chat

+ +

El registro BIB es

+ + + + + + + + + + + + + + + + +
IPv6 transport addressIPv4 transport addressProtocol
2001:db8::1#10192.0.2.1#10TCP
+ +

n4b se da cuenta del servicio de n6, quizá por que n4a le dice sobre el:

+ +

Fig.2: n4b finds about n6

+ +

Luego n4b trata de conversar con n6 también:

+ +

Fig.3: suspicious query

+ +

Ya que el registro BIB existe, J sabe que n4b significa “2001:db8::1#10†cuando el dice “192.0.2.1#10â€, asi que el paquete puede ser técnicamente traducido. Sin embargo, debido a las tablas de sesión, J tambien puede decir que n6 no ha estado conversando con n4b en el pasado.

+ +

Si --address-dependent-filtering está Deshabilitado, J permitirá al paquete de n4b pasar. Si --address-dependent-filtering está encendido, J desechará el paquete de n4b y responderá con un error ICMP con el mensaje “Communication Administratively Prohibitedâ€. Esto restringe efectivamente cualquier intento de comunicación iniciado desde IPv4, aún si hay registros BIB (estáticos u otros).

+ +
    +
  • +

    Cuando el NAT64 es utilizado para publicar un servicio que solo es soportado bajo IPv6 a la internet IPv4, tiene sentido que --address-dependent-filtering esté deshabilitado. Esto es por que se espera que los clientes se enteren del servicio IPv6 por su cuenta, ya que el servidor normalmente no inicia la conversación, sino responde las consultas.

    +
  • +
  • +

    Cuando el NAT64 es utilizado para permitir a los nodos IPv6 navegar sobre la Internet en IPv4, tiene sentido que --address-dependent-filtering esté encendido. Dado que los Nodos Clientes de IPv6 eligen sus puertos de manera aleatoria, este mecanismo nos sirve para descartar el acceso a nodos aleatorios externos que pretendan adivinar estos puertos.

    +
  • +
+ +

Si --address-dependent-filtering está Encendido, podria impedir metodos de recorrido de NAT como STUN, o por lo menos, hacer imposibles algunos modos de opreación.

+ +

--drop-icmpv6-info

+ +
    +
  • Tipo: Booleano
  • +
  • Modos: Stateful
  • +
  • Valor por Omisión: APAGADO (0)
  • +
  • Sentido de traducción: IPv6 -> IPv4 (sólo ICMP Informational Messages)
  • +
  • Nombre anterior: --dropInfo
  • +
  • Fuente: RFC 6146, section 3.5.3
  • +
+ +

Si activas esta bandera, los mensajes del tipo echo y echo reply generados a través del comando ping serán bloqueados mientras estén siendo traducidos de ICMPv6 a ICMPv4.

+ +

No se supone que debamos bloquear pings de ICMPv4 a ICMPv6, pero como se necesitan ambas, una solicitud y una respuesta, para un eco exitoso, el resultado de salida parece ser el mismo.

+ +

Esta regla no afecta los mensajes de Error ICMP.

+ +

--drop-externally-initiated-tcp

+ +
    +
  • Tipo: Booleano
  • +
  • Modos: Stateful
  • +
  • Valor por Omisión: APAGADO (0)
  • +
  • Nombre anterior: --dropTCP
  • +
  • Fuente: RFC 6146, section 3.5.2.2
  • +
+ +

Enciende --drop-externally-initiated-tcp para demoler cualquier intento de iniciar comunicación TCP con nodos IPv6 por parte de nodos IPv4.

+ +

Por supuesto, esto NO bloqueará el tráfico IPv4 si algun nodo IPv6 lo solicito primero.

+ +

--udp-timeout

+ +
    +
  • Tipo: Entero (segundos)
  • +
  • Modos: Stateful
  • +
  • Valor por Omisión: 300seg = 5 min
  • +
  • Nombre anterior: --toUDP
  • +
  • Fuente: RFC 6146, section 3.5.1
  • +
+ +

Cuando una sesión UDP ha estado inactiva por el periodo de tiempo especificado aqui, su registro será removido de la base de datos automáticamente.

+ +

Cuando cambias este valor, los tiempos de vida de todas las sesiones UDP ya existentes seran actualizados.

+ +

--tcp-est-timeout

+ +
    +
  • Tipo: Entero (segundos)
  • +
  • Modos: Stateful
  • +
  • Valor por Omisión: 7200seg = 2 hr
  • +
  • Nombre anterior: --toTCPest
  • +
  • Fuente: RFC 6146, section 3.5.2.2
  • +
+ +

Cuando una conexión TCP ha permanecido inactiva por el periodo de tiempo especificado aquí, su existencia será cuestionada. Jool enviará un paquete de sondeo a uno de los puntos y eliminará la sesión si una respuesta no es recibida antes de el --tcp-trans-timeout timeout.

+ +

Cuando cambias este valor, los tiempos de vida de sesiones TCP ya establecidas son actualizados.

+ +

--tcp-trans-timeout

+ + + +

Cuando una sesión TCP insalubre ha estado inactiva durante el periodo de tiempo especificado aquí, su registro será removido de la base de datos automáticamnete. Una seisión “insalubre†es una en la que el handshake TCP no ha sido completado, esta siendo terminada por los puntos, o está técnicamente establecida pero ha permanecido inactica por el tiempo indicado en --tcp-est-timeout.

+ +

Cuando cambias este valor, los tiempos de vida de sesiones TCP transitorias existentes son actualizados.

+ +

--icmp-timeout

+ +
    +
  • Tipo: Entero (segundos)
  • +
  • Modos: Stateful
  • +
  • Valor por Omisión: 60seg = 1 min
  • +
  • Nombre anterior: --toICMP
  • +
  • Fuente: RFC 6146, section 3.5.3
  • +
+ +

Cuando una sesión ICMP ha estado inactiva por el periodo de tiempo especificado aquí, su registro será removida de la base de datos automáticamente.

+ +

Cuando cambias este valor, los tiempos de vida de todas las sesiones ICMP son actualizados.

+ +

--fragment-arrival-timeout

+ +
    +
  • Tipo: Entero (segundos)
  • +
  • Modos: Stateful
  • +
  • Valor por Omisión: 2 seg
  • +
  • Nombre anterior: --toFrag
  • +
  • Fuente: Ninguns (el parámetro denota un capricho de Linux).
  • +
+ +

Jool Stateful requiere un reensamble de fragmentos.

+ +

En kernes 3.13 y mas recientes, --fragment-arrival-timeout no hace nada en lo absoluto.

+ +

En kernels 3.12 y mas antiguos, el modulo de reensamble de fragmentos IPv6 (nf_defrag_ipv6) es un poco engañoso. Recolecta los fragmentos y en lugar de reensamblarlos, los manda a todos al resto del kernel en orden ascendente y muy rápido. Ya que Jool tiene que procesar todos los fragmentos de un solo paquete al mismo tiempo, tiene que esperar hasta que nf_defrag_ipv6 los haya entregado todos.

+ +

--fragment-arrival-timeout es el tiempo que Jool esperará para que nf_defrag_ipv6 ingrese todos los fragmentos de un paquete común. No tiene nada que ver con esperar a que los fragmentosd lleguen al nodo.

+ +

Como nf_defrag_ipv6 ya ha esperado a que todos los fragmentos lleguen, deberia entregarlos en nanosegundos. Debido a esto, el valor por omisión de
+--fragment-arrival-timeout de 2 segunos es probablemente alto. Por otra parte, a menos de que haya un módulo desconocido desechando los paquetes en medio, todos los fragmentos deberían llegar inmediatamente, por lo tanto el temporizador nunca deberia de acabarse (incluso si estas siendo atacado).

+ +

Jool SIIT no necesita reensamblado de paquetes para nada.

+ +

Este comportamiento cambio desde Jool 3.2, donde --toFrag solía ser de hecho el tiempo que Jool esperaría para que los fragmentos llegaran al nodo.

+ +

--maximum-simultaneous-opens

+ +
    +
  • Tipo: Integer
  • +
  • Modos: Stateful
  • +
  • Valor por Omisión: 10
  • +
  • Nombre anterior: --maxStoredPkts
  • +
  • Fuente: RFC 6146, section 5.3 (indirectamente)
  • +
+ +

Cuando un nodo (IPv4) externo intenta primero abrir una conexión y no hay ningun registro BIB para el, Jool normalmente contesta con un mensaje de error ICMP - Address Unreachable (type 3, code 1), ya que no puede saber a cual nodo IPv6 se está dirigiendo el paquete.

+ +

En el caso de TCP, la situación es un poco más complicada por que el nodo IPv4 puede estar intentando una Apertura Simultanea de conecciones TCP. Para saber realmente que está pasando, Jool tiene que almacenar el paquete por 6 segundos.

+ +

--maximum-simultaneous-opens es el numero máximo de paquetes que Jool va almacenar al mismo tiempo. El valor por omisión indica que puedes tener hasta 10 aperturas simultáneas, simultaneamente; Jool retrocederá a responder con un error ICMP en la número 11.

+ +

--source-icmpv6-errors-better

+ +
    +
  • Tipo: Booleano
  • +
  • Modos: Stateful
  • +
  • Valor por Omisión: Apagado(0)
  • +
  • Sentido de traducción: IPv4 -> IPv6 (sólo errores ICMP)
  • +
  • Fuente: Issue 132
  • +
+ +

Por alguna razón, el RFC 6146 quiere que el origen de los errores ICMPv6 sea igual que la dirección de destino de sus paquetes internos. Esto luce muy extraño.

+ +

Por ejemplo (TODO volver esto una imagen):

+ +
n6 ----- j ----- R ----- n4
+
+ +
    +
  • n6 es un nodo IPv6; its address is 2001:db8::1.
  • +
  • j es un Stateful NAT64. Su dirección IPv4 es 192.0.2.1.
  • +
  • Res un router IPv4. 192.0.2.6.
  • +
  • n4 es un nodo IPv4. 203.0.113.13.
  • +
+ +

Digamos que el enlace entre R y n4 colapsa.

+ +
    +
  • +

    n6 empaqueta en TCP n4: 2001:db8::1 -> 64:ff9b::203.0.113.13.

    +
  • +
  • +

    j traduce y redirecciona: 192.0.2.1 -> 203.0.113.13

    +
  • +
  • +

    R responde ICMPv4 error “Host unreachableâ€. The packet’s addresses are 192.0.2.6 -> 192.0.2.1. The packet contains a TCP packet whose addresses are 192.0.2.1 -> 203.0.113.13.

    +
  • +
  • +

    j traduce a un paquete IPv6 cuyas direcciones son 64:ff9b::203.0.113.13 -> 2001:db8::1. Su paquete interno lee 2001:db8::1 -> 64:ff9b::203.0.113.13.

    +
  • +
+ +

Esto interrumpe rastreos de ruta. No deberia de haber sido 64:ff9b::192.0.2.6 -> 2001:db8::1?

+ +
    +
  • --source-icmpv6-errors-better Desactivado hara que Jool obedezca el RFC 6146 (y que interrumpa los rastreos de ruta).
  • +
  • --source-icmpv6-errors-better Encendido traducirá la dirección de origen externa directamente, simplemente agregando el prefijo.
  • +
+ +

--logging-bib

+ +
    +
  • Tipo: Booleano
  • +
  • Modos: Stateful
  • +
  • Valor por Omisión: Apagado(0)
  • +
  • Sentido de traducción: IPv4 -> IPv6 & IPv6 -> IPv4
  • +
  • Fuente: RFC 6888, section 4
  • +
+ +

Habilita el registro de la creación y destrucción de mapeos de direcciones. Si eres un proveedor de servicios, tu gobierno quizá te solicite que hagas esto.

+ +

El análisis de estos registros puede permitirte saber cual dirección IPv4 y Puerto enmascaró a alguno de tus nodos IPv6 internos en algun momento. Aquí hay una salida de ejemplo:

+ +
$ jool --logging-bib true
+$ dmesg
+[  312.493235] 2015/4/8 16:13:2 (GMT) - Mapped 2001:db8::5#19945 to 192.0.2.2#8208 (UDP)
+[  373.724229] 2015/4/8 16:14:3 (GMT) - Mapped 2001:db8::8#46516 to 192.0.2.2#12592 (TCP)
+[  468.675524] 2015/4/8 16:15:38 (GMT) - Forgot 2001:db8::5#19945 to 192.0.2.2#8208 (UDP)
+
+ +

En este ejemplo,

+ +
    +
  1. +

    2001:db8::5 utilizó el puerto(propio) 19945 para hablarle a alguien utilizando el protocolo UDP. Este alguien pensó que la dirección de 2001:db8::5 era 192.0.2.2, y que estaba utilizando el puerto 8208.

    +
  2. +
  3. +

    Aproximadamente un minuto despues, 2001:db8::8 (en el puerto 46516) empezó a hablarle a alguien utilizando TCP. fue en enmascarada como 192.0.2.2#12592. Esta conexión no ha terminado todavia.

    +
  4. +
  5. +

    Algunos momentos despues, Jool olvidó el mapeo (debido a inactividad, no por que el último paquete sucedió a las 16:15:38. “Cuanta inactividad†esta controlado por los timeouts - en este cao, el de UDP). En este punto, 192.0.2.2#8208 esta libre de 2001:db8::5 y Jool lo puede reasignar.

    +
  6. +
+ +

Así que, si tu gobierno viene y dice “Detecté que alguien llamado 192.0.2.2#8208 hizo algo ilegal a las 4:14 pm via UDPâ€, puedes reportar que el culpable es 2001:db8::5#19945 y liberarte de la culpa.

+ +

Hay muchas cosas importantes las cuales se tienen que tener en cuenta:

+ +
    +
  • +

    La singularidad de cada paquete se extiende al protocolo. Si tu registro solo dice se tradujo 2001:db8::5#19945 a 192.0.2.2#8208 (UDP), no puedes asumir que 2001:db8::5#19945 es 192.0.2.2#8208 en TCP también.

    +
  • +
  • +

    Si tus nodos IPv6 comparten direcciones IPv4 entonces, los puertos importan.

    +
  • +
  • +

    No hay información de a quien le estaba hablando 2001:db8::5. Esto es bueno; significa que le estas haciendo honor a la privacidad de tu cliente tanto como puedes.

    +
  • +
  • +

    El registro utiliza GMT; quizá necesites convertir esto para efectos de comodidad.

    +
  • +
+ +

Esto es falso por defecto por que genera enormes cantidades de registros mientras está activo (recuerda que necesitas infraestructura para mantenerlos). Toma en cuenta que los mapeos son vertidos en el log del kernel, asi que los mensajes serán mezclados junto con cualquier cosa que el kernel tenga que decir (incluyendo los mensajes de error de Jool, por ejemplo). Los mensajes de registro tendran prioridad INFO.

+ +

Si loggear el destino tiene sentido para ti, ve --logging-session (abajo). Para cubrir con el REQ-12 del RFC 6888 quieres asingar el valor true a --loging-bib y el valor false a --logging-session.

+ +

--logging-session

+ +
    +
  • Tipo: Booleano
  • +
  • Modos: Stateful
  • +
  • Valor por Omisión: Apagado(0)
  • +
  • Sentido de traducción: IPv4 -> IPv6 & IPv6 -> IPv4
  • +
  • Fuente: RFC 6888, sección 4
  • +
+ +

Habilita el registro de todas las sesiones mientras son creadas y destruidas.

+ +

El formato es

+ +
<fecha> <hora> (GMT) - <acción> sesión <nodo IPv6>|<representación IPv6 de un nodo IPv4>|<representación IPv4 de un nodo IPv6>|<nodo IPv4>|Protocolo
+
+ +

Aquí hay una salida de ejemplo:

+ +
$ jool --logging-session true
+$ dmesg
+[ 3238.087902] 2015/4/8 17:1:47 (GMT) - Added session 1::5#47073|64:ff9b::c000:205#80|192.0.2.2#63527|192.0.2.5#80|TCP
+[ 3238.099997] 2015/4/8 17:1:47 (GMT) - Added session 1::5#47074|64:ff9b::c000:205#80|192.0.2.2#42527|192.0.2.5#80|TCP
+[ 3241.624104] 2015/4/8 17:1:51 (GMT) - Added session 1::5#33160|64:ff9b::c000:205#8080|192.0.2.2#15496|192.0.2.5#8080|TCP
+[ 3241.630905] 2015/4/8 17:1:51 (GMT) - Added session 1::5#33161|64:ff9b::c000:205#8080|192.0.2.2#7060|192.0.2.5#8080|TCP
+[ 3478.498559] 2015/4/8 17:5:48 (GMT) - Forgot session 1::5#47073|64:ff9b::c000:205#80|192.0.2.2#63527|192.0.2.5#80|TCP
+[ 3478.499758] 2015/4/8 17:5:48 (GMT) - Forgot session 1::5#47074|64:ff9b::c000:205#80|192.0.2.2#42527|192.0.2.5#80|TCP
+[ 3481.632214] 2015/4/8 17:5:51 (GMT) - Forgot session 1::5#33160|64:ff9b::c000:205#8080|192.0.2.2#15496|192.0.2.5#8080|TCP
+[ 3481.632342] 2015/4/8 17:5:51 (GMT) - Forgot session 1::5#33161|64:ff9b::c000:205#8080|192.0.2.2#7060|192.0.2.5#8080|TCP
+
+ +

Este registro es remarcablemente mas voluptuoso que --logging-bib, no sólo por que cada mensaje es mas largo, si no por que las sesiones son generadas y destruidas más frecuentemente que los registros BIB (cada registro BIB puede tener múltiples sesiones). Debido al REQ-12 del RFC 6888 sección 4, lo mas probable es que ni siquiera quieres la información extra que las sesiones te pueden proporcionar.

+ +

--zeroize-traffic-class

+ +
    +
  • Tipo: Booleano
  • +
  • Modos: SIIT & Stateful
  • +
  • Valor por Omisión: APAGADO (0)
  • +
  • Sentido de traducción: IPv4 -> IPv6
  • +
  • Nombre anterior: --setTC
  • +
  • Fuente: RFC 6145, sección 4.1
  • +
+ +

El campo Clase de Tráfico de la Cabecera IPv6 es muy similar al campo Tipo de servicio (Type of Service TOS) por sus siglas en inglés.

+ +

Si dejas esto desactivado, el valor del campo Tipo de Servicio será copiado directamente al campo Clase de Tráfico. Si lo activas, Jool siempre le asignara el valor cero al campo Clase de Tráfico.

+ +

--override-tos

+ +
    +
  • Tipo: Booleano
  • +
  • Modos: SIIT & Stateful
  • +
  • Valor por Omisión: APAGADO (0)
  • +
  • Sentido de traducción: IPv6-> IPv4
  • +
  • Fuente: RFC 6145, section 5.1
  • +
  • Nombre anterior: --setTOS
  • +
+ +

El campo Clase de Tráfico de la Cabecera IPv6 es muy similar al campo Tipo de servicio (Type of Service TOS) por sus siglas en inglés.

+ +

Si dejas esto desactivado, el valor del campo Clase de Tráfico será copiado directamente al campo Tipo de Servicio durante las traducciones de IPv6-> IPv4. Si lo activas, Jool le asignará al campo Tipo de Servicio el valor indicado en el parámetro --tos.

+ +

--tos

+ +
    +
  • Tipo: Integer
  • +
  • Modos: SIIT & Stateful
  • +
  • Valor por Omisión: Apagado(0)
  • +
  • Sentido de traducción: IPv6-> IPv4
  • +
  • Nombre anterior: --TOS
  • +
  • Fuente: RFC 6145, section 5.1
  • +
+ +

Valor que se va a asignar al campo Tipo de Servicio de los paquetes IPv4 durante la traducción de IPv6-a-IPv4. _Esto solo aplica cuando --override-tos está activo.

+ +

--allow-atomic-fragments

+ +

En desuso. Ve Atomic Fragments.

+ +

--setDF

+ +

En desuso. Ve Atomic Fragments.

+ +

--genFH

+ +

En desuso. Ve Atomic Fragments.

+ +

--genID

+ +

En desuso. Ve Atomic Fragments.

+ +

--boostMTU

+ +

En desuso. Ve Atomic Fragments.

+ +

--amend-udp-checksum-zero

+ +
    +
  • Tipo: Booleano
  • +
  • Modos: SIIT
  • +
  • Valor por Omisión: APAGADO (0)
  • +
  • Sentido de traducción: IPv4-> IPv6 (Solo UDP)
  • +
  • Fuente: RFC 6145, sección 4.5
  • +
+ +

En IPv4, es legal para los paquetes UDP contener zero como checksum. Esto es por que la cuestion completa sobre UDP es que es poco confiable, y por lo tanto algunas veces el valor de validacion del checksum no justifica su costo.

+ +

En IPv6, zero es un valor checksum inválido para paquetes UDP.

+ +
    +
  • +

    Si --amend-udp-checksum-zero está Activo y un paquete UDP IPv4 con valor cero en el campo checksum llega, Jool va a calcular su chechsum antes de traducirlo. Ten en cuenta que, esto quizá sea computacionalmente costo.

    +
  • +
  • +

    Si --amend-udp-checksum-zero está Inactivo y un paquete UDP IPv4 con valor cero en el campo checksum llega, Jool va a desechar el paquete y registrar sus direcciones (with Log Level KERN_DEBUG).

    +
  • +
+ +

Esto no afecta a paquetes fragmentados con valor cero en el campo checksum. SIIT Jool no reensambla, lo que significa que no puede calcular el checksum. En estos casos, el paquete será desechado sin importar --amend-udp-checksum-zero.

+ +

El Stateful NAT64 de Jool siempre procesa los checksums con valor cero de los paquetes UDP IPv4. Debido aa que reensambla, tambien lo hara para paquetes fragmentados.

+ +

--randomize-rfc6791-addresses

+ +
    +
  • Tipo: Booleano
  • +
  • Modos: SIIT
  • +
  • Valor por Omisión: Encendido(1)
  • +
  • Sentido de traducción: IPv6-> IPv4
  • +
  • Fuente: Issue 130
  • +
+ +

Si el origen de un error ICMPv6 no puede ser traducido, el RFC 6791 quiere que asignemos una dirección IPv4 del pool RFC 6791

+ +
    +
  • Si --randomize-rfc6791-addresses está Acitvo, Jool seguirá la sugerencia del RFC 6791, asignando una dirección aleatoria del pool.
  • +
  • Si --randomize-rfc6791-addresses está Inactivo, Jool asignará la dirección mas alta especificada en la llave hop limit del pool.
  • +
+ +

Porque? se podria decir que hop limitth es mejor.

+ +

--mtu-plateaus

+ +
    +
  • Tipo: Lista de Enteros separated by commas (If you want whitespace, remember to quote)
  • +
  • Modos: SIIT & Stateful
  • +
  • Valor por Omisión: 65535, 32000, 17914, 8166, 4352, 2002, 1492, 1006, 508, 296, 68
  • +
  • Sentido de traducción: IPv4-> IPv6 (Solo Errores de ICMP)
  • +
  • Nombre anterior: --plateaus
  • +
  • Fuente: RFC 6145, sección 4.2
  • +
+ +

Cuando un paquete no debe de ser fragmentado y no encaja en un enlace por el que se supone debe pasar, el router del problema se supone debe de responder con un mensaje de error indicando Fragmentation Needed. Idealmente, este mensaje de error contendría el MTY del link para que el emisor original estuviera consciente del tamaño ideal del paquete y evite la fragmentación. Sin embargo, la especificación ICMPv4 no requiere que los routers incluyan esta información.

+ +

La compatibilidad con versiones anteriores le otorga a las estrategias de los emisóres IPv4 la capacidad de retroceder cuando encuentren tal situación, pero IPv6 siempre fue diseñado con el campo en mente. Entonces, so Jool traduce un mensaje ICMPv6 con valor cero en el campo MTU, podria suceder un caos (los resultados dependeran principalmente de la implementación IPv6 del cliente).

+ +

Para solucionar este problema, cuando Jool se encuentra intentando traducir un mensaje con valor cero en el campo MTU, reemplazara el MTU con el plateau mas grande el cual es mas bajo que la longitud total del campo del paquete original. Hay que reconocer, que esto podria o no ser el MTU correcto, pero es una suposición muy educada. Ve este ejemplo para obtener más detalles. Información más profunda puede ser encontrada en el RFC 1191.

+ +

Toma en cuenta que si --boostMTU está activado, el MTU será todavía 1280 incluso si el plateau relevante es menos que 1280.

+ +

No es necesario que ordenes los valores mientras los estas ingresando.

+ + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/es/usr-flags-help.html b/doc/usr/_site/es/usr-flags-help.html new file mode 100644 index 000000000..2bb42ce46 --- /dev/null +++ b/doc/usr/_site/es/usr-flags-help.html @@ -0,0 +1,112 @@ + + + + + --help + + + + + +
+
+ +
+ +
+
+ +

Documentación > Herramienta de configuración de Jool > Parámetros > --help

+ +

--help

+ +

Indice

+ +
    +
  1. Descripción
  2. +
  3. Sintaxis
  4. +
  5. Ejemplos
  6. +
+ +

Descripción

+ +

Imprime un resumen de la documentación de los parámetros elegibles de Jool, y muestra la formas abreviadas.

+ +

--help es la única opción que no necesita que Jool este activo.

+ +

Para mayor información, consulta man jool_siit/man jool.

+ +

Sintaxis

+ +
(jool_siit | jool) --help
+
+ +

Ejemplos

+ +
jool_siit --help
+jool --help
+
+ + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/es/usr-flags-plateaus.html b/doc/usr/_site/es/usr-flags-plateaus.html new file mode 100644 index 000000000..5e2cd3533 --- /dev/null +++ b/doc/usr/_site/es/usr-flags-plateaus.html @@ -0,0 +1,178 @@ + + + + + --plateaus + + + + + +
+
+ +
+ +
+
+ +

Documentation > Aplicación de espacio de usuario > Parámetros > --global > --plateaus

+ +

MTU Plateaus (Ejemplo)

+ +

Introducción

+ +

Este articulo explica el propósito del parametro --plateaus mediante un ejemplo.

+ +

Esta es la red de ejemplo:

+ +

Fig.1 - Red

+ +

El número máximo de bytes por paquete (MTU) de los enlaces n6-J y J-r4 es 1500.

+ +

El enlace r4-n4 es una red ARPANET, Por lo tanto, sus paquetes pueden ser de 96-8159 bits de longitud (~1007 bytes).

+ +

Aunque las cabeceras de IPv4 son 20 bytes más cortas que las de IPv6 y existen otras peculiaridades; para propósitos de facilitar la comprensión, vamos a establecer que Jool no modificará el tamaño de los paquetes que traduce.

+ +

Ejemplo

+ +

n6 quiere enviar un paquete IPv6 de 1500 bytes a n4 (100 bytes de header y 1400 bytes de datos). J lo convierte a un paquete IPv4 de 1500 bytes y lo envía a r4. r4 no puede retransmitirlo a n4 por que es muy grande para su límite establecido de 1007 bytes, asi que devuelve un error de ICMP a n6.

+ +

Fig.2 - Intento 1

+ +

La técnica Path MTU discovery opera bajo la suposición de que el router que no puede entregar el paquete reportará el tamaño máximo de paquete que puede transmitir. En este punto, el error ICMP contendria el número mágico “1007â€, y entonces n6 sabría que tiene que segmentar su paquete en las piezas necesarias si es que sigue interesado en la llegada de su mensaje.

+ +

Desafortunadamente, la especificación del protocolo de ICMPv4 no ordena la inclusión del número; esto es una idea tardía. Si r4 es lo suficientemente antiguo, dejará el campo MTU sin asignar(esto es cero), y n6 sería confundido ante la perspectiva de tener que dividir sus datos en grupos de cero bytes. ICMPv6 ordena la inclusión del campo MTU, así que los nodos dependen en ello.

+ +

La tarea de encontrar una forma de solucionar esto recae en el NAT64 dado que es el único que tiene comprensión sobre cuál es el problema.

+ +

J se dará cuenta de que existe un problema por que observará que está tratando de traducir un error ICMPv4 con MTU cero a ICMPv6, donde eso es illegal. J no tiene una forma de saber el MTU de la red r4-n4, así que tiene que adivinar. Sabe que el paquete rechazado fue de 1500 bytes de longitud, asi que revisa el parámetro --plateaus, cuyo valor por omisión está basado en la siguiente tabla ver RFC. 1191, y escoge el plateau más cercano inferior que rechazaría un paquete con tamaño de 1500:

+ +
   Plateau    MTU    Comments                      Reference
+   ------     ---    --------                      ---------
+	      65535  Official maximum MTU          RFC 791
+	      65535  Hyperchannel                  RFC 1044
+   65535
+   32000             Just in case
+	      17914  16Mb IBM Token Ring
+   17914
+	      8166   IEEE 802.4                    RFC 1042
+   8166
+	      4464   IEEE 802.5 (4Mb max)          RFC 1042
+	      4352   FDDI (Revised)                RFC 1188
+   4352 (1%)
+	      2048   Wideband Network              RFC 907
+	      2002   IEEE 802.5 (4Mb recommended)  RFC 1042
+   2002 (2%)
+	      1536   Exp. Ethernet Nets            RFC 895
+	      1500   Ethernet Networks             RFC 894
+	      1500   Point-to-Point (default)      RFC 1134
+	      1492   IEEE 802.3                    RFC 1042
+   1492 (3%)
+	      1006   SLIP                          RFC 1055
+	      1006   ARPANET                       BBN 1822
+   1006
+	      576    X.25 Networks                 RFC 877
+	      544    DEC IP Portal
+	      512    NETBIOS                       RFC 1088
+	      508    IEEE 802/Source-Rt Bridge     RFC 1042
+	      508    ARCNET                        RFC 1051
+   508 (13%)
+	      296    Point-to-Point (low delay)    RFC 1144
+   296
+   68                Official minimum MTU          RFC 791
+
+ +

Asi que J sospecha que la red r4-n4 es un paquete con formato IEEE 802.3, y por tanto, traduce el error ICMPv4 con MTU de valor cero a un error ICMPv6 con MTU de valor 1492.

+ +

n6 segmenta su mensaje y ahora envia dos paquetes, uno de 1492 de longitud (100 bytes de cabecera y 1392 de datos), y otro de 108 bytes(100 de cabecera, y 8 de datos). J los traduce, y luego otra vez r4 dice “solicitud rechazadaâ€, por que el primer paquete de 1492 bytes sigue sin encajar en una red con un MTU de 1007.

+ +

Fig.3 - Intento 2

+ +

J otra vez se da cuenta de que esta tratando de traducir un error ICMP con MTU 0, asi que otra vez reportar el primer plateau el cual objetaría al paquete rechazado. Esta vez, el siguiente plateau de 1492 is 1006, asi que J supone que r4-n4 es un paquete SLIP o ARPANET. Como puedes ver, esta vez la suposición es correcta.

+ +

Al recibir la noticia, n6 ahora segmenta sus datos en un paquete de tamaño 1006 (100 + 906) y otro de 594 (100 + 494). Esta vez, los paquetes traducidos de IPv6 cumplen con el requerimiento de longitud establecida por r4 y llegan a n4.

+ +

Fig.4 - Intento 3

+ +

Recapitulando

+ +

La estrategia plateaus es la mejor alternativa existente para efecutar un Path MTU Discovery. Por que toma como referencia los MTUs existentes, converge rápido y no permite la fragmentación excesiva del paquete. Para una compresión más profunda sobre el PMTU Discovery vea el RFC 1191.

+ +

Por otra parte, mirando el ejemplo podrías haber pensado “ARPANET se disolvió hace mucho tiempo!â€, y estarías en lo correcto. Aunque el RFC 1191 dice “los implementadores deben usar referencias actualizadas para escoger un conjunto de plateausâ€, nadie ha propuesto algo.

+ +

Consideramos que no es tan negativo usar la lista tal cual, dado que algunos de los protocolos de la tabla todavía siguen en uso. Es más precavido, conservar todos los valores versus a que nos lleguen a faltar.

+ +

Cabe mencionar que la lista plateaus NO está codificada directamente en Jool. Si deseas establecer tu propia lista plateaus, ejecuta (después de instalar la Herramienta de configuración de Jool.

+ +
$(jool) --mtu-plateaus <list>
+
+ +

Por ejemplo:

+ +
jool_siit --mtu-plateaus "80000, 40000, 20000, 10000"
+
+ + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/es/usr-flags-pool4.html b/doc/usr/_site/es/usr-flags-pool4.html new file mode 100644 index 000000000..1d1e0b61f --- /dev/null +++ b/doc/usr/_site/es/usr-flags-pool4.html @@ -0,0 +1,163 @@ + + + + + --pool4 + + + + + +
+
+ +
+ +
+
+ +

Documentación > Herramienta de configuración de Jool > Flags > --pool4

+ +

--pool4

+ +

Ãndice

+ +
    +
  1. Descripción
  2. +
  3. Sintaxis
  4. +
  5. Opciones +
      +
    1. Operaciones
    2. +
    3. --quick
    4. +
    +
  6. +
  7. Ejemplos
  8. +
+ +

Descripción

+ +

Interactua con el Pool IPv4 de Jool.

+ +

El pool IPv4 es el subconjunto de direcciones en IPv4, del nodo, que puede ser utilizado para traducir.

+ +

NOTA: +Debido a fallas en la implementación actual, evite administrar prefijos de longitudes /24 o menores porque esto demandará mucha memoria y alentará su sistema.

+ +

Sintaxis

+ +
jool --pool4 [--display]
+jool --pool4 --count
+jool --pool4 --add <IPv4 prefix>
+jool --pool4 --remove <IPv4 prefix> [--quick]
+jool --pool4 --flush [--quick]
+
+ +

Opciones

+ +

Operaciones

+ +
    +
  • --display: Lista los prefijos dados de alta y activos del pool. Operación por Omisión
  • +
  • --count: Lista la cantidad de prefijos dados de alta y activos del pool.
  • +
  • --add: Añade todas las direcciones de <IPv4 prefix> al pool.
  • +
  • --remove: Borra del pool todas las direcciones de <IPv4 prefix>.
  • +
  • --flush: Remueve todas las direcciones del pool.
  • +
+ +

El valor por omisión de la longitud de <IPv4 prefix> es 32, asi que puedes añadir o remover direcciones en lugar de prefijos.

+ +

--quick

+ +

Ve --quick.

+ +

Ejemplos

+ +

Muestra las direcciones actuales:

+ +
$ jool --pool4 --display
+192.0.2.1/32
+198.51.100.1/32
+203.0.113.8/32
+  (Fetched 3 prefixes.)
+
+ +

Cuántos prefijos están dados de alta:

+ +
$ jool --pool4 --count
+3
+
+ +

Remueve un par de registros:

+ +
# jool --pool4 --remove 192.0.2.1
+# jool --pool4 --remove 198.51.100.1
+
+ +

Añade de nuevo solo uno de ellos:

+ +
# jool --pool4 --add 192.0.2.1
+
+ + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/es/usr-flags-pool6.html b/doc/usr/_site/es/usr-flags-pool6.html new file mode 100644 index 000000000..40844e5e0 --- /dev/null +++ b/doc/usr/_site/es/usr-flags-pool6.html @@ -0,0 +1,156 @@ + + + + + --pool6 + + + + + +
+
+ +
+ +
+
+ +

Documentation > Herramienta de configuración de Jool > Parámetros > --pool6

+ +

--pool6

+ +

Ãndice

+ +
    +
  1. Descripción
  2. +
  3. Sintaxis
  4. +
  5. Opciones +
      +
    1. Operaciones
    2. +
    3. --quick
    4. +
    +
  6. +
  7. Ejemplos
  8. +
+ +

Descripción

+ +

Interactua con el pool IPv6 de Jool. El pool dicta que paquetes viniendo del lado IPv6 son procesados; si la dirección de destino de un paquete entrante tiene uno de los prefijos IPv6, el paquete es traducido por Jool. De otra manera es entregado al kernel para ser redireccionado de alguna manera o ser entregado a las capas superiores.

+ +

Sintaxis

+ +

($(jool) puede ser jool_siit o jool.)

+ +
$(jool) --pool6 [--display]
+$(jool) --pool6 --count
+$(jool) --pool6 --add <IPv6 prefix>
+$(jool) --pool6 --remove <IPv6 prefix> [--quick]
+$(jool) --pool6 --flush [--quick]
+
+ +

Opciones

+ +

Operaciones

+ +
    +
  • --display: Lista los prefijos dados de alta y activos del pool. Operación por Omisión
  • +
  • --count: Lista la cantidad de prefijos dados de alta y activos del pool.
  • +
  • --add: Agrega el <prefix>al pool.
  • +
  • --remove: Borra de la tabla el prefijo <prefix>.
  • +
  • --flush: Remueve todos los prefijos del pool.
  • +
+ +

--quick

+ +

Ver --quick. Solo disponible en jool.

+ +

Ejemplos

+ +

Despliega los prefijos activos:

+ +
$ jool --pool6 --display
+64:ff9b::/96
+  (Fetched 1 prefixes.)
+ +

Muestra el número de prefijos activos:

+ +
$ jool --pool6 --count
+1
+ +

Remueve el prefijo por omisión (64:ff9b::/96):

+ +
$ jool --pool6 --remove 64:ff9b::/96
+ +

Añade un prefijo (2001:db8::/64):

+ +
$ jool --pool6 --add 2001:db8::/64
+ +

Destruye todos los prefijos, y cancela el servicio hacia o desde estas direcciones:

+ +
$ jool --pool6 --flush --quick
+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/es/usr-flags-pool6791.html b/doc/usr/_site/es/usr-flags-pool6791.html new file mode 100644 index 000000000..3310fd305 --- /dev/null +++ b/doc/usr/_site/es/usr-flags-pool6791.html @@ -0,0 +1,156 @@ + + + + + --pool6791 + + + + + +
+
+ +
+ +
+
+ +

Documentación > Aplicación de espacio de usuario > Parámetros > --pool6791

+ +

--pool6791

+ +

Ãndice

+ +
    +
  1. Descripción
  2. +
  3. Sintaxis
  4. +
  5. Opciones
  6. +
  7. Ejemplos
  8. +
+ +

Descripción

+ +

Interactua con el pool RFC 6791 de Jool. El pool define direcciones para origenes en errores ICMP intraducibles.

+ +

Si el pool está vacio, Jool retrocederá a utilizar las direcciones de su nodo para estos casos.

+ +

Sintaxis

+ +
jool_siit --pool6791 [--display]
+jool_siit --pool6791 --count
+jool_siit --pool6791 --add <IPv4 prefix>
+jool_siit --pool6791 --remove <IPv4 prefix>
+jool_siit --pool6791 --flush
+
+ +

Opciones

+ +
    +
  • --display: Los prefijos del pool son impresos en la salida estandar. Esta es la operación por default.
  • +
  • --count: El número de direcciones (no prefijos) en el pool es impreso en la salida estandar.
    +Por ejemplo, si todo lo que tienes es un prefijo /24, espera “256†como salida.
  • +
  • --add: Carga <IPv4 prefix> al pool.
  • +
  • --remove: Borra el prefijo <IPv4 prefix> del pool.
  • +
  • --flush: Remueve todos los prefijos del pool.
  • +
+ +

Ejemplos

+ +

Despliega los prefijos actuales:

+ +
$ jool_siit --pool6791 --display
+192.0.2.0/24
+198.51.100.0/26
+203.0.113.16/28
+  (Fetched 3 prefixes.)
+
+ +

Esto significa que la direccion de origen de un normalmente intraducible error ICMP va a ser cualquiera dentro de los siguientes rangos: 192.0.2.0-192.0.2.255, 198.51.100.0-198.51.100.64, o 203.0.113.16-203.0.113.31.

+ +

Despliega solo el conteo de prefijos:

+ +
$ jool_siit --pool6791 --count
+336
+
+ +

(Eso es /24 + /26 + /28 = 256 + 64 + 16.)

+ +

Remueve un prefijo:

+ +
$ jool_siit --pool6791 --remove 192.0.2.0/24
+
+ +

Devuelvelo:

+ +
$ jool_siit --pool6791 --add 192.0.2.0/24
+
+ +

Destruye todos los prefijos. Jool empezará a utilizar las direcciones de su host como origen.

+ +
$ jool_siit --pool6791 --flush
+
+ + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/es/usr-flags-quick.html b/doc/usr/_site/es/usr-flags-quick.html new file mode 100644 index 000000000..86caaca0a --- /dev/null +++ b/doc/usr/_site/es/usr-flags-quick.html @@ -0,0 +1,107 @@ + + + + + --quick + + + + + +
+
+ +
+ +
+
+ +

Documentación > Herramienta de configuración de Jool > Parámetros > --quick

+ +

--quick

+ +

Terminología:

+ +
Partiendo que
+
+* La [dirección _A_ de IPv4](usr-flags-pool4.html) es dueño de un [registro BIB _B_](usr-flags-bib.html)  si y solo si _A_ es igual a la dirección  de IPv4 de _B_.
+
+* El [prefijo _P_ de IPv6](usr-flags-pool6.html) es dueño de un [registro de sessión _S_](usr-flags-session.html)  si y solo si _P_ corresponde a la dirección IPv6 local de S.
+
+Entonces cuando Jool está activo y configurado tenemos una serie de direcciones _A's_ asociados a BIBs _B's_ && prefijos _P's_ asociados a sesiones _S's_. Los procesos que se establecen mediante las entradas de las BIBs y sesiones vinen a ser "esclavos" de los primeros.
+
+ +

Si utilizas --remove o --flush en un dueño, es decir, en una dirección de IPv4 o Prejifo de IPv6, sus “esclavos†se volverán obsoletos por que los paquetes ya no serán traducidos, y mientras se remueve a los dueños, Jool se deshará de los nuevos esclavos huérfanos.

+ +

El borrar los dueños con sus escalvos, nos permite ahorrar memoria y nos ayuda a mantener eficiente la búsqueda de registros durante la traducción de paquetes.

+ +

MEDIANTE la opción de --quick, Jool solo purgará a los dueños.

+ +

Los esclavos huérfanos permanecerán inactivos en la base de datos, y eventualmente se removerán a si mismos una vez que las condiciones se cumplan. Las sesiones huérfanas morirán una vez que su tiempo de inactivdad permitido expire.

+ +

Esta opción es recomendable si existen muchos esclavos y se requiere limpiar las tablas lo más rápido posible, o si es necesario desconfigurarlo temporalmente, en cuyo caso, al reconfigurar, los esclavos que todavia permanezcan se convertiran en relevantes y usables de nuevo.

+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/es/usr-flags-session.html b/doc/usr/_site/es/usr-flags-session.html new file mode 100644 index 000000000..e7085934e --- /dev/null +++ b/doc/usr/_site/es/usr-flags-session.html @@ -0,0 +1,207 @@ + + + + + --session + + + + + +
+
+ +
+ +
+
+ +

Documentación > Herramienta de configuración de Jool > Parámetros > --session

+ +

--session

+ +

Ãndice

+ +
    +
  1. Descripción
  2. +
  3. Sintaxis
  4. +
  5. Opciones +
      +
    1. Operaciones
    2. +
    3. <protocols>
    4. +
    5. --numeric
    6. +
    7. --csv
    8. +
    +
  6. +
  7. Ejemplos
  8. +
+ +

Descripción

+ +

Mediante el mecanismo de sesiones el NAT64 decide cuando las entradas BIB pierden validez y deben de ser eliminadas. Mediante estas puedes saber exactamente quien le está hablando a tus nodos de IPv6.

+ +

Cada registro BIB es un mapeo, en el cual se guarda la relación entre un servicio en IPv4 y otro en IPv6. Para cada entrada BIB, hay cero o mas registros de sesiones. Estas representan las conexiones activas (BIBs en uso).

+ +

Este comando solo es informativo y con éste puedes obtener información detallada de cada una de tus conexiones.

+ +

Sintaxis

+ +
jool --session [--display] [--numeric] [--csv] <protocols>
+jool --session --count <protocols>
+
+ +

Opciones

+ +

Operaciones

+ +
    +
  • --display: Lista las tablas de sesión. Operación por omisión.
  • +
  • --count: Lista la cantidad de registros por tabla de sesión.
  • +
+ +

<protocols>

+ +
<protocols> := [--tcp] [--udp] [--icmp]
+
+ +

El comando aplica sobre la(s) tabla(s) específica(s). Si no se indica, entonces afecta a los tres protocolos.

+ +

--numeric

+ +

La aplicación intentará resolver los nombres del nodos remotos hablando en cada sesión. Si tus nameservers no estan respondiendo, esto retardará la salida.

+ +

Utiliza --numeric para desactivar este comportamiento.

+ +

--csv

+ +

La aplicación muestra la información en un formato amigable para la consola.

+ +

Utiliza --csv para imprimir en formato CSV para abrirse como hoja de cálculo.

+ +

En el formato CVS cada registro es impreso en una sola linea. Te recomendamos esta opción si requieres usar el comando grep para filtarar la información.

+ +

Ejemplos

+ +

Fig.1 - Red para ejemplo de sesión

+ +

El cliente ipv6client.mx efectua dos solicitudes HTTP y un ping al servidor example.com en IPv4.

+ +

Para desplegar todas las sesiones activas en los tres protocolos, resolviendo nombres y con formato consola, ejecutar el siguiente comando:

+ +
$ jool --session
+TCP:
+---------------------------------
+(V4_FIN_V6_FIN_RCV) Expires in 2 minutes, 57 seconds
+Remote: example.com#http	ipv6client.mx#58239
+Local: 192.0.2.1#60477		64:ff9b::5db8:d877#80
+---------------------------------
+(V4_FIN_V6_FIN_RCV) Expires in 3 minutes, 52 seconds
+Remote: example.com#http	ipv6client.mx#58237
+Local: 192.0.2.1#6617		64:ff9b::5db8:d877#80
+---------------------------------
+  (Fetched 2 entries.)
+
+UDP:
+---------------------------------
+  (empty)
+
+ICMP:
+---------------------------------
+Expires in 50 seconds
+Remote: example.com#1402	ipv6client.mx#13371
+Local: 192.0.2.1#1402		64:ff9b::5db8:d877#13371
+---------------------------------
+  (Fetched 1 entries.)
+ +

Ahora, filtra UDP e ICMP, muéstrame las IP numéricas y formato estándar:

+ +
$ jool --session --display --tcp --numeric
+TCP:
+---------------------------------
+(V4_FIN_V6_FIN_RCV) Expires in 2 minutes, 57 seconds
+Remote: 93.184.216.119#80	2001:db8::2#58239
+Local: 192.0.2.1#60477		64:ff9b::5db8:d877#80
+---------------------------------
+(V4_FIN_V6_FIN_RCV) Expires in 3 minutes, 52 seconds
+Remote: 93.184.216.119#80	2001:db8::2#58237
+Local: 192.0.2.1#6617		64:ff9b::5db8:d877#80
+---------------------------------
+  (Fetched 2 entries.)
+ +

Sin resolver nombres, guarda todo en formato CSV al archivo session.csv:

+ +
$ jool --session --display --numeric --csv > session.csv
+ +

session.csv

+ +

Para concluir, solo muestra el número de registros de todas las tablas:

+ +
$ jool --session --count
+TCP: 2
+UDP: 0
+ICMP: 1
+ + + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/es/usr-flags.html b/doc/usr/_site/es/usr-flags.html new file mode 100644 index 000000000..94010698a --- /dev/null +++ b/doc/usr/_site/es/usr-flags.html @@ -0,0 +1,126 @@ + + + + + Documentación - Parámetros de la Herramienta de Configuración + + + + + +
+
+ +
+ +
+
+ +

Documentación > Parámetros de la Herramienta de Configuración > Parámetros

+ +

Parámetros

+ +

Introducción

+ +

Esta recopilación de documentos explican que parámetros existen para las dos modalidades: SIIT (jool_siit) y NAT64 Stateful (jool).

+ +

NOTAS:

+ +

Si todavía no has generado los ejecutables, ve a instrucciones de compilación e instalación.
+** Las opciones de despliegue no requieren privilegios de administrador de red, ni que la parte server este insertada, pero todos los de configuración SÃ.** Consulta:(CAP_NET_ADMIN).

+ +

Ãndice

+ +

Opciones comunes:

+ +
    +
  1. --help
  2. +
  3. --global +
      +
    1. Atomic Fragments
    2. +
    3. MTU Plateaus (Example)
    4. +
    +
  4. +
  5. --pool6
  6. +
+ +

Opciones exclusivas de jool_siit:

+ +
    +
  1. --eamt
  2. +
  3. --blacklist
  4. +
  5. --pool6791
  6. +
+ +

Opciones exclusivas de jool:

+ +
    +
  1. --pool4
  2. +
  3. --bib
  4. +
  5. --session
  6. +
  7. --quick
  8. +
+ + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/es/usr-install.html b/doc/usr/_site/es/usr-install.html new file mode 100644 index 000000000..b1820de57 --- /dev/null +++ b/doc/usr/_site/es/usr-install.html @@ -0,0 +1,192 @@ + + + + + Instalación de la Herramienta de Configuración de Jool + + + + + +
+
+ +
+ +
+
+ +

Documentación > Instalación > Herramienta de Configuración de Jool

+ +

Instalación del Configurador de Jool

+ +

Ãndice

+ +
    +
  1. Introducción
  2. +
  3. Requerimientos
    + a) Libnl-3
    + b) Autoconf
  4. +
  5. Genera, Compila e Instala
    + a) De la Web Oficial
    + b) Del Repositorio GIT
  6. +
  7. Validación
    + a) Versión
    + b) Ayuda
    + c) Uso
  8. +
+ +

Introducción

+ +

Jool tiene cuatro componentes, es decir, cuatro ejecutables:

+ +
    +
  1. Dos Módulos de Kernel, uno donde se implementa el Stateful NAT64, nombrado como jool, y el otro donde se implementa SIIT y SIIT-EAM, nombrado como jool-siit.
  2. +
  3. Dos aplicaciones en el espacio de usuario, una para Stateful NAT64 y la otra para SIIT y SIIT-EAM, nombrados de igual manera: jool y jool-siit respectivamente.
  4. +
+ +

En este documento abordaremos a las aplicaciones en el espacio de usuario.

+ +

Para ver detalles de los requisitos e instalación de los módulos de kernel accese aquí.

+ +

Requerimientos

+ +

Libnl-3

+ +
+

NOTA: Libnl, libnl-1.x, 2.x no son compatibles. Se necesita Libnl-3 ver. 3.1 o superior.

+
+ +

Jool emplea [NETLINK] (http://www.carisma.slowglass.com/~tgr/libnl/) para comunicar sus procesos de espacio de usuario con los de kernel, y viceversa.

+ +

De preferencia no bajes y compiles en forma manual la libería para evitarte problemas de ubicación y acceso a la misma.

+ +

Si tu distribución reconoce a libnl-3-dev como un producto instalable:

+ +
user@node:~$apt-cache show libnl-3-dev
+ +

Entonces, instala la libería ejecutando el siguiente comando con permisos de administrador:

+ +
user@node:~#apt-get install libnl-3-dev
+ +

Autoconf

+ +
+

NOTA: Se necesita autoconf ver. 2.68 o superior.

+
+ +

Si descargas Jool del Repositorio de Desarrollo de NICMx, te será necesario instalar la aplicación de autoconf para que se pueda generar de manera automática el script de configuración y los makefiles. Para llevarlo a cabo la instalación hazlo con permisos de administrador:

+ +
user@node:~#apt-get install autoconf
+ +

Genera, Compila e Instala

+ +

Asumiendo que previamente ya se instaló el Servidor Jool, solo pasate a la carpeta USR, genera los archivos MAKEFILES, conforme GNU, compila todo e instala.

+ +

De la Web Oficial

+ +
user@node:~/Desktop/Jool-<version>$ cd usr
+user@node:~/Desktop/Jool-<version>$ ./configure
+user@node:~/Desktop/Jool-<version>$ make
+user@node:~/Desktop/Jool-<version>$ #Con acceso de administrador instala
+user@node:~/Jool/usr# make install
+ +

Del Repositorio GIT

+ +
user@node:~/Desktop/NAT64-<version>$ cd usr
+user@node:~/Desktop/NAT64-<version>/usr$ ./autogen.sh
+user@node:~/Desktop/NAT64-<version>/usr$ ./configure
+user@node:~/Desktop/NAT64-<version>/usr$ make
+user@node:~/Desktop/NAT64-<version>/usr$ #Con acceso de administrador instala
+user@node:~/Desktop/NAT64-<version>/usr# make install
+ +

Validación

+ +

Ahora, podemos ejecutar varias acciones como: validar que versión de Jool compilamos y consultar la ayuda en línea.

+ +

Versión

+ +

Para desplegar la versión de Jool ejecuta:

+ +
user@node:~/Jool/usr/$ cd stateful
+user@node:~/Jool/usr/stateful$ ./jool --v
+ +

Ayuda

+ +

Para desplegar la ayuda en linea sobre los parámetros configurables y desplegables de Jool puedes usar las opciones -? o --help, de la siguiente manera:

+ +
user@node:~/Jool/usr/stateful$ ./jool -?
+ +
user@node:~/Jool/usr/stateless$ ./jool_siit --help
+ +

Uso

+ +

Para desplegar en forma resumida cuáles son las combinaciones válidas de los parámetros configurables y desplegables de Jool es con:

+ +
user@node:~/Jool/usr/stateless$ ./jool_siit --usage
+ +

Para TODAS las demás opciones se requiere habilitar previamente el servicio de traducción de paquetes como tal, es decir, haber insertado Jool en el Kernel, ya sea la modalidad stateless o stateful. Para aprender sobre ello, consulte la página de Banderas.

+ + +
+
+
+
+ + en + + | + + es + +
+
 
+
+
+ + + + + + diff --git a/doc/usr/_site/images/atomic-double-frag.png b/doc/usr/_site/images/atomic-double-frag.png new file mode 100644 index 0000000000000000000000000000000000000000..8633b5e643982920b1ee060864279eb77bd74943 GIT binary patch literal 84136 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

+Vv$=q_hK>pVz+%(4FAM@?>R|KdU9aCy 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 P0!fN~{7^3Z$@l*OqsmBo literal 0 HcmV?d00001 diff --git a/doc/usr/_site/images/banner1.gif b/doc/usr/_site/images/banner1.gif new file mode 100644 index 0000000000000000000000000000000000000000..21a6cf3cdbcba62449d083fe499a155a200debd7 GIT binary patch literal 166 zcmZ?wbhEHbWMnX6IKsg2@87?7@813S^XK>P-*4Z({r~^}hYugVef#$D5F6B+s%oD^9YtO3n*K z*Z*I={Qv3W|8HOae|Z1@%jf?up8x;-`~R|q{~3q?Iv_P5yBJuNAA|^`B(QZQt?`(x f5_rVmbkUvjmrVqoSTrw4(3r^3*Wjec!e9*mV?;`n literal 0 HcmV?d00001 diff --git a/doc/usr/_site/images/banner_100px.gif b/doc/usr/_site/images/banner_100px.gif new file mode 100644 index 0000000000000000000000000000000000000000..aa10e987be8706cbe33c0ee97611a8468419302f GIT binary patch literal 314 zcmZ?wbhEHbWMoKTxXQq=fB*jfK=AMXKQQk6&U>b{rktSpD_7<5Un8HU;tDMQ3m0H3+|z+l6m!vF*zKQXX{ADF8ua6wXW*Ln5rC!Pj$dGWPNKg?S^`?=bt zn|^a$*0xn#$Y2*vHRCQ!*~FV6bomI+hDk1;szg0h^z?LFT6J_JC0Vq!B_#N?w0I{n RYfjT-;t>>gVRU4$1^^|<-jo0U literal 0 HcmV?d00001 diff --git a/doc/usr/_site/images/banner_50px.gif b/doc/usr/_site/images/banner_50px.gif new file mode 100644 index 0000000000000000000000000000000000000000..efc4012ecd2db5567b78924e1e05f1f1d9646058 GIT binary patch literal 314 zcmXAkJxIeq7=|xebg(V{AhtLa{Gn~^D2gsZ@NW<|XQ4tT!A+d~0XH37q?5BCT?8iw z2R92M#8FT>-Cc6ITyn`>;+OUtK6rV*=jHvjb~aa54-M2rUnrXtCP@>Ws94ER1|r}d z_n60AMhPXDBuT2lRhlsmgG|#P41FOy&IzTzxCgY-K*u5wzVNxvUFJHjg9#SG_d&Xj z<4_rfVF2Nf>{0@;iPl;v6~}QDMN$s@KnxfThaO{a+lMI-1Y>O5HuUWm&sIg|420H^ znThNtG;;9To*(a)D=#05&+mWx*Sp25*`MQw``$w5d#`OhUY>Saqf~9vC=}N6xDJGfM_C# zrfL5TTq(t+p8N)s#{-C0mcwr+$I{w9hg1tAIAV&msR~zyPAte+@G92pbtbM| zVAJY2nrhK1KSH-AP|Y@II<4wMnzPfOBx`!&j9j}wypHp+=n)Iy zIK*9xgeWt8KesY?Vf+@Io{p2WFl-Yu=3>|hgcU9dGzcr6D z&vPjykFqz}kcnftF^p&oGunZOrqLrQ&@`mb&z#HHPCO93Nr3bLn^(jz=W*ED^7RuAU^-iR%>d`K4_cIXg(VHA6D( zVkSB;quw0YNu$|5y5%G6G{R0}Mm@}A2gweXZfk~-p~1y%$=$il>w(|vg9^qlfq zt;V-s4RGnyQA#a?a&;Vu#4;lkt92S-i_TO6-_g-DDArp%mAAq zag Q)&Kwi07*qoM6N<$f(Ex6CIA2c literal 0 HcmV?d00001 diff --git a/doc/usr/_site/images/body.png b/doc/usr/_site/images/body.png new file mode 100644 index 0000000000000000000000000000000000000000..c4c6ba6c68332540f59d983a6ef6549c002aad32 GIT binary patch literal 3529 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 + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + R + + + + + + n6 + + + + + + + + + + + + n4 + 2001:db8:1::/64192.168.0.0/24 + ::8.8 + ::1.1 + 2001:db8:100::/64 + 203.0.113.0/24 + ::1 + ::2 + .1.2 + .24 + + + + + + + src: 192.168.0.8dst: 203.0.113.24 + PLAT + + diff --git a/doc/usr/_site/images/flow/464-literal-es.svg b/doc/usr/_site/images/flow/464-literal-es.svg new file mode 100644 index 000000000..5360b5026 --- /dev/null +++ b/doc/usr/_site/images/flow/464-literal-es.svg @@ -0,0 +1,440 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + R + + + + + + n6 + + + + + + + + + + + + n4 + 2001:db8:1::/64192.168.0.0/24 + ::8.8 + ::1.1 + 2001:db8:100::/64 + 203.0.113.0/24 + ::1 + ::2 + .1.2 + .24 + + + + + + + fuente: 192.168.0.8dest: 203.0.113.24 + PLAT + + diff --git a/doc/usr/_site/images/flow/464-mirror-en.svg b/doc/usr/_site/images/flow/464-mirror-en.svg new file mode 100644 index 000000000..c7f080881 --- /dev/null +++ b/doc/usr/_site/images/flow/464-mirror-en.svg @@ -0,0 +1,511 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + R + + + + + + n6 + + + + + + + + + + + + n4 + 2001:db8:1::/64192.168.0.0/24 + ::8.8 + ::1.1 + 2001:db8:100::/64 + 203.0.113.0/24 + ::1 + ::2 + .1.2 + .24 + + + + + + + src: 203.0.113.24dst: 192.168.0.8 + + src: 64:ff9b::203.0.113.24dst: 2001:db8:2:: + + src: 203.0.113.24dst: 203.0.113.2 + + + PLAT + + diff --git a/doc/usr/_site/images/flow/464-mirror-es.svg b/doc/usr/_site/images/flow/464-mirror-es.svg new file mode 100644 index 000000000..394006d3d --- /dev/null +++ b/doc/usr/_site/images/flow/464-mirror-es.svg @@ -0,0 +1,522 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + R + + + + + + n6 + + + + + + + + + + + + n4 + 2001:db8:1::/64192.168.0.0/24 + ::8.8 + ::1.1 + 2001:db8:100::/64 + 203.0.113.0/24 + ::1 + ::2 + .1.2 + .24 + + + + + + + fuente: 203.0.113.24dest: 192.168.0.8 + + fuente: 64:ff9b::203.0.113.24dest: 2001:db8:2:: + + fuente: 203.0.113.24dest: 203.0.113.2 + + + PLAT + + + diff --git a/doc/usr/_site/images/flow/464-normal-en.svg b/doc/usr/_site/images/flow/464-normal-en.svg new file mode 100644 index 000000000..abda9db78 --- /dev/null +++ b/doc/usr/_site/images/flow/464-normal-en.svg @@ -0,0 +1,605 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + R + + + + + + n6 + + + + + + + + + + + + n4 + 2001:db8:1::/64192.168.0.0/24 + ::8.8 + ::1.1 + 2001:db8:100::/64 + 203.0.113.0/24 + ::1 + ::2 + .1.2 + .24 + + + + + + + src: 2001:db8:1::8dst: 64:ff9b::203.0.113.24 + src: 2001:db8:1::8dst: 64:ff9b::203.0.113.24 + src: 203.0.113.2dst: 203.0.113.24 + + + + + + + + src: 64:ff9b::203.0.113.24dst: 2001:db8:2::8 + src: 64:ff9b::203.0.113.24dst: 2001:db8:2::8 + + src: 203.0.113.24dst: 203.0.113.2 + + + PLAT + + diff --git a/doc/usr/_site/images/flow/464-normal-es.svg b/doc/usr/_site/images/flow/464-normal-es.svg new file mode 100644 index 000000000..ec6098d15 --- /dev/null +++ b/doc/usr/_site/images/flow/464-normal-es.svg @@ -0,0 +1,605 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + R + + + + + + n6 + + + + + + + + + + + + n4 + 2001:db8:1::/64192.168.0.0/24 + ::8.8 + ::1.1 + 2001:db8:100::/64 + 203.0.113.0/24 + ::1 + ::2 + .1.2 + .24 + + + + + + + fuente: 2001:db8:1::8dest: 64:ff9b::203.0.113.24 + fuente: 2001:db8:1::8dest: 64:ff9b::203.0.113.24 + fuente: 203.0.113.2dest: 203.0.113.24 + + + + + + + + fuente: 64:ff9b::203.0.113.24dst: 2001:db8:2::8 + fuente: 64:ff9b::203.0.113.24dst: 2001:db8:2::8 + + fuente: 203.0.113.24dst: 203.0.113.2 + + + PLAT + + diff --git a/doc/usr/_site/images/flow/464-sful-en.svg b/doc/usr/_site/images/flow/464-sful-en.svg new file mode 100644 index 000000000..c5d515d3e --- /dev/null +++ b/doc/usr/_site/images/flow/464-sful-en.svg @@ -0,0 +1,440 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + R + + + + + + n6 + + + + + + + + + + + + n4 + 2001:db8:1::/64192.168.0.0/24 + ::8.8 + ::1.1 + 2001:db8:100::/64 + 203.0.113.0/24 + ::1 + ::2 + .1.2 + .24 + + + + + + + src: 203.0.113.2dst: 203.0.113.24 + PLAT + + diff --git a/doc/usr/_site/images/flow/464-sful-es.svg b/doc/usr/_site/images/flow/464-sful-es.svg new file mode 100644 index 000000000..6d43d37a5 --- /dev/null +++ b/doc/usr/_site/images/flow/464-sful-es.svg @@ -0,0 +1,440 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + R + + + + + + n6 + + + + + + + + + + + + n4 + 2001:db8:1::/64192.168.0.0/24 + ::8.8 + ::1.1 + 2001:db8:100::/64 + 203.0.113.0/24 + ::1 + ::2 + .1.2 + .24 + + + + + + + fuente: 203.0.113.2dest: 203.0.113.24 + PLAT + + diff --git a/doc/usr/_site/images/flow/464-sless-en.svg b/doc/usr/_site/images/flow/464-sless-en.svg new file mode 100644 index 000000000..b304d3222 --- /dev/null +++ b/doc/usr/_site/images/flow/464-sless-en.svg @@ -0,0 +1,440 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + R + + + + + + n6 + + + + + + + + + + + + n4 + 2001:db8:1::/64192.168.0.0/24 + ::8.8 + ::1.1 + 2001:db8:100::/64 + 203.0.113.0/24 + ::1 + ::2 + .1.2 + .24 + + + + + + + src: 2001:db8:2::dst: 64:ff9b::203.0.113.24 + PLAT + + diff --git a/doc/usr/_site/images/flow/464-sless-es.svg b/doc/usr/_site/images/flow/464-sless-es.svg new file mode 100644 index 000000000..da6ecde40 --- /dev/null +++ b/doc/usr/_site/images/flow/464-sless-es.svg @@ -0,0 +1,440 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + R + + + + + + n6 + + + + + + + + + + + + n4 + 2001:db8:1::/64192.168.0.0/24 + ::8.8 + ::1.1 + 2001:db8:100::/64 + 203.0.113.0/24 + ::1 + ::2 + .1.2 + .24 + + + + + + + fuente: 2001:db8:2::dest: 64:ff9b::203.0.113.24 + PLAT + + diff --git a/doc/usr/_site/images/flow/eam-en.svg b/doc/usr/_site/images/flow/eam-en.svg new file mode 100644 index 000000000..e6b208790 --- /dev/null +++ b/doc/usr/_site/images/flow/eam-en.svg @@ -0,0 +1,415 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + src: 192.0.2.16dst: 198.51.100.8 + Translating... + + src: 2001:db8:4::16dst: 2001:db8:6::8 + src: 198.51.100.8dst: 192.0.2.16 + Translating... + + src: 2001:db8:6::8dst: 2001:db8:4::16 + + + + 192.0.2.16 + 2001:db8:6::8 + + + + + + A + + V + T + + diff --git a/doc/usr/_site/images/flow/eam-es.svg b/doc/usr/_site/images/flow/eam-es.svg new file mode 100644 index 000000000..12262e556 --- /dev/null +++ b/doc/usr/_site/images/flow/eam-es.svg @@ -0,0 +1,426 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + fuente: 192.0.2.16dest: 198.51.100.8 + Traduciendo... + + fuente: 2001:db8:4::16dest: 2001:db8:6::8 + fuente: 198.51.100.8dest: 192.0.2.16 + Traduciendo... + + fuente: 2001:db8:6::8dest: 2001:db8:4::16 + + + + 192.0.2.16 + 2001:db8:6::8 + + + + + + A + + V + T + + + diff --git a/doc/usr/_site/images/flow/mtu-frag-fail-en.svg b/doc/usr/_site/images/flow/mtu-frag-fail-en.svg new file mode 100644 index 000000000..3fb0019cf --- /dev/null +++ b/doc/usr/_site/images/flow/mtu-frag-fail-en.svg @@ -0,0 +1,568 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + n4 + + n6 + + + + + + + src: n4dst: n6can fragmentlength: 1400 + + + + + + + + + + + T + + + + + + + R + mtu = 1500 + mtu = 1500 + mtu = 1300 + + src: n4dst: n6cannot fragmentlength: 1400 + + + src: Rdst: n4error: needs fragmentation + + + + + + + n4 + What are you talking about?I allowed fragmentation! + + + 1 + 2 + 3 + + diff --git a/doc/usr/_site/images/flow/mtu-frag-fail-es.svg b/doc/usr/_site/images/flow/mtu-frag-fail-es.svg new file mode 100644 index 000000000..4310dcbbb --- /dev/null +++ b/doc/usr/_site/images/flow/mtu-frag-fail-es.svg @@ -0,0 +1,568 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + n4 + + n6 + + + + + + + fuente: n4dest: n6puede fragmentarlongitud: 1400 + + + + + + + + + + + T + + + + + + + R + mtu = 1500 + mtu = 1500 + mtu = 1300 + + fuente: n4dest: n6no puede fragmentarlongitud: 1400 + + + src: Rdest: n4error: necesita fragmentación + + + + + + + n4 + ¿Sobre que medio estás?¡Permitiré la fragmentación! + + + 1 + 2 + 3 + + diff --git a/doc/usr/_site/images/flow/mtu-frag-success-en.svg b/doc/usr/_site/images/flow/mtu-frag-success-en.svg new file mode 100644 index 000000000..65e551bf2 --- /dev/null +++ b/doc/usr/_site/images/flow/mtu-frag-success-en.svg @@ -0,0 +1,484 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + n4 + + n6 + + + + + + + src: n4dst: n6can fragmentlength: 1400 + + + + + + + + + + + T + + + + + + + R + mtu = 1500 + mtu = 1300 + mtu = 1300 + + src: n4dst: n6length 1: 1300length 2: 100 + + + + + + + + 1 + 2 + + diff --git a/doc/usr/_site/images/flow/mtu-frag-success-es.svg b/doc/usr/_site/images/flow/mtu-frag-success-es.svg new file mode 100644 index 000000000..f3ae038c0 --- /dev/null +++ b/doc/usr/_site/images/flow/mtu-frag-success-es.svg @@ -0,0 +1,484 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + n4 + + n6 + + + + + + + fuente: n4dest: n6puede fragmentarlongitud: 1400 + + + + + + + + + + + T + + + + + + + R + mtu = 1500 + mtu = 1300 + mtu = 1300 + + fuente: n4dest: n6longitud 1: 1300longitud 2: 100 + + + + + + + + 1 + 2 + + diff --git a/doc/usr/_site/images/flow/nat-en.svg b/doc/usr/_site/images/flow/nat-en.svg new file mode 100644 index 000000000..d641815bb --- /dev/null +++ b/doc/usr/_site/images/flow/nat-en.svg @@ -0,0 +1,435 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + src: 203.0.113.16dst: 203.0.113.2 + Unmasking... + + src: 203.0.113.16dst: 192.168.0.8 + src: 203.0.113.2dst: 203.0.113.16 + Masking... + + src: 192.168.0.8dst: 203.0.113.16 + + + + 203.0.113.16 + 192.168.0.8 + + + + + + A + + V + 203.0.113.2 + NAT + + diff --git a/doc/usr/_site/images/flow/nat-es.svg b/doc/usr/_site/images/flow/nat-es.svg new file mode 100644 index 000000000..c5ee6f582 --- /dev/null +++ b/doc/usr/_site/images/flow/nat-es.svg @@ -0,0 +1,436 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + fuente: 203.0.113.16dest: 203.0.113.2 + Desenmascarando... + + fuente: 203.0.113.16dest: 192.168.0.8 + fuente: 203.0.113.2dest: 203.0.113.16 + Enmascarando... + + fuente: 192.168.0.8dest: 203.0.113.16 + + + + 203.0.113.16 + 192.168.0.8 + + + + + + A + + V + 203.0.113.2 + NAT + + diff --git a/doc/usr/_site/images/flow/pool4-simple1-en.svg b/doc/usr/_site/images/flow/pool4-simple1-en.svg new file mode 100644 index 000000000..f1141adae --- /dev/null +++ b/doc/usr/_site/images/flow/pool4-simple1-en.svg @@ -0,0 +1,353 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + n6 + + + + + + + + + + + + n4 + ::8 + 2001:db8::/64 + 192.0.2.0/24 + ::1 + .1 + .24 + + + + + + + src: 2001:db8::8#5123dst: 64:ff9b::192.0.2.24#80 + T + + diff --git a/doc/usr/_site/images/flow/pool4-simple2-en.svg b/doc/usr/_site/images/flow/pool4-simple2-en.svg new file mode 100644 index 000000000..5b8edf296 --- /dev/null +++ b/doc/usr/_site/images/flow/pool4-simple2-en.svg @@ -0,0 +1,355 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + n6 + + + + + + + + + + + + n4 + ::8 + 2001:db8::/64 + 192.0.2.0/24 + ::1 + .1 + .24 + + + + + + + src: 192.0.2.1#5123dst: 192.0.2.24#80 + T + + diff --git a/doc/usr/_site/images/flow/pool4-simple3-en.svg b/doc/usr/_site/images/flow/pool4-simple3-en.svg new file mode 100644 index 000000000..1813682bf --- /dev/null +++ b/doc/usr/_site/images/flow/pool4-simple3-en.svg @@ -0,0 +1,355 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + n6 + + + + + + + + + + + + n4 + ::8 + 2001:db8::/64 + 192.0.2.0/24 + ::1 + .1 + .24 + + + + + + + src: 192.0.2.1#5789dst: 192.0.2.24#80 + T + + diff --git a/doc/usr/_site/images/flow/stateful-en.svg b/doc/usr/_site/images/flow/stateful-en.svg new file mode 100644 index 000000000..86c673281 --- /dev/null +++ b/doc/usr/_site/images/flow/stateful-en.svg @@ -0,0 +1,434 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + src: 203.0.113.16dst: 203.0.113.2 + Unmasking... + + src: 2001:db8::203.0.113.16dst: 2001:db8::8 + src: 203.0.113.2dst: 203.0.113.16 + Masking... + + src: 2001:db8::8dst: 2001:db8::203.0.113.16 + + + + 203.0.113.16 + 2001:db8::8 + + + + + + A + + V + T + 203.0.113.2 + + diff --git a/doc/usr/_site/images/flow/stateful-es.svg b/doc/usr/_site/images/flow/stateful-es.svg new file mode 100644 index 000000000..10f98beaa --- /dev/null +++ b/doc/usr/_site/images/flow/stateful-es.svg @@ -0,0 +1,463 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + fuente: 203.0.113.16, 50k, tcpdest: 203.0.113.2, 40k, tcp + Añadiendo prefijo en fuente yDesenmascarando en destino + + fuente: 2001:db8::203.0.113.16, 50k, tcpdest: 2001:db8::8, 40k, tcp + fuente: 203.0.113.2, 40k, tcpdest: 203.0.113.16, 50k, tcp + Enmascarando en fuente yRemoviendo prefijo en dest. + + fuente: 2001:db8::8, 40k, tcpdest: 2001:db8::203.0.113.16, 50k, tcp + + + + dir. 203.0.113.16puerto 50000protocolo tcp + dir. 2001:db8::8puerto 40000protocolo tcp + + + + + + A + + V + T + 203.0.113.2 + + diff --git a/doc/usr/_site/images/flow/vanilla-en.svg b/doc/usr/_site/images/flow/vanilla-en.svg new file mode 100644 index 000000000..f1f440d8d --- /dev/null +++ b/doc/usr/_site/images/flow/vanilla-en.svg @@ -0,0 +1,433 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + src: 192.0.2.16dst: 198.51.100.8 + Appendingprefix... + + src: 2001:db8::192.0.2.16dst: 2001:db8::198.51.100.8 + src: 198.51.100.8dst: 192.0.2.16 + Removingprefix... + + src: 2001:db8::198.51.100.8dst: 2001:db8::192.0.2.16 + + + + 192.0.2.16 + 2001:db8::198.51.100.8 + + + + + + A + + V + T + + diff --git a/doc/usr/_site/images/flow/vanilla-es.svg b/doc/usr/_site/images/flow/vanilla-es.svg new file mode 100644 index 000000000..37717a0f8 --- /dev/null +++ b/doc/usr/_site/images/flow/vanilla-es.svg @@ -0,0 +1,433 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + fuente: 192.0.2.16dest: 198.51.100.8 + Añadiendoprefijo... + + fuente: 2001:db8::192.0.2.16dest: 2001:db8::198.51.100.8 + fuente: 198.51.100.8dest: 192.0.2.16 + Removiendoprefijo... + + fuente: 2001:db8::198.51.100.8dest: 2001:db8::192.0.2.16 + + + + 192.0.2.16 + 2001:db8::198.51.100.8 + + + + + + A + + V + T + + diff --git a/doc/usr/_site/images/heavy_exclamation_mark.png b/doc/usr/_site/images/heavy_exclamation_mark.png new file mode 100644 index 0000000000000000000000000000000000000000..d34fab5cc011723a2b8791165db3cfc0272db1de GIT binary patch literal 502 zcmVk(YuNiQ4q%Qf6X~PeVJ=J z-AfM!iy}B83>ugih=HJBx-Vev8<_Y4#)5%hV6yS%=89q85GR2lT_ z4hB~IqxkA8QB~tVBO>^4ctpMP3gHAq0I)v|{`#C`KEpT1H9wy`r~CE`+7Se3Y)SU? z5!HN#cl``2a{>X?6>x?QdH{HrB)Ib%G=KpDge1lnc?(1YnU*XugmyznW4h&}1prbN zEKxeA8%8~RJ_4Wv;HrYA>rfy7mJe|KYz?AvLKAx$puu1=#%1Xmbc-DArv!`!L#72j zN!GxRhJI0GKQM-l$cO%`HE z8WUf>xPI8_H|xb7_1AAm64Se|iI1W-hpJk=*t5?MAKU9ox9#24`}Sjd$5hqK%sjxa zH}CoMVw>f`F&*IW*-P?!w}=OWHe{`VBMrD!+5622L3Mpab>kY@)?N0;DZe*MrVqAA shr@qE9_;S&{liDn@rdb_8PO`_U$aJ(6z3H85&!@I07*qoM6N<$f~RoTH2?qr literal 0 HcmV?d00001 diff --git a/doc/usr/_site/images/jool.png b/doc/usr/_site/images/jool.png new file mode 100644 index 0000000000000000000000000000000000000000..44b76280430f7a189e39786eab1a071d31919760 GIT binary patch literal 30663 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 literal 0 HcmV?d00001 diff --git a/doc/usr/_site/images/mailbox.png b/doc/usr/_site/images/mailbox.png new file mode 100644 index 0000000000000000000000000000000000000000..c81f9627563ee21f1207096d4486a40b6046b299 GIT binary patch literal 1045 zcmV+w1nT>VP)b)XQt#MHImC?>v6F$!#8n zHYSDCsx{V1g<7pqaiO9v6m%g}bgK(-FS>W>)<4393syEA8b?y*Do z7$Yan-NelvAodg1fprF)Qe0(h$4-u2y~dUCNnW&tiPrGTThGv+U%&<7%A-eEyDpS| zVlcCZZ-4uVrw>N_`o@5(YZ14jQdMxy;2MK-25Z50JRvn)S`S16wpxxKeTTtAPeKF+ znR+pzqU7RfuVvQPZ{usNgf`(rMjSY2aboe#;C!LrNVyXF1*w&sD|$=F7l1aPMG;k0 z3rPxTqf#q)Y9)tA9wZuXhOoDYw>W2MijY#F9Y9iWRNA)C4&n$dh$yN`l7fZ|R6JBt z8!2r>N0{>t?}tAq#S(&oapVH7RtCLDzq3INEvf}oK}AVfaiPC?-6|3TsclEF$9Xrx z9jcDdDy2A5sY7^>=y&=M1{5vG2+mpP#CEe{kQ4}QJ3PMkc;|;-?@%?wHlw*g3W!wN zHq&-m2rXrVsw$EdpW;?4G)H1+Q8%nuyc@wDRfvN??2NO~ouV06dU=A->p_mFDkTd= z6-mlON?WZc8c8vXV22flcaH2EL@TjvDNORoYah~)J~zkiqV{`K6^bZDgsO@}L2}x9 z(kenuc?2ugIn+6j!nVXG<9R0s!G*D)e)QpO+wkMxYmlsK<;f|oW(ec zwQjhaL&k-egp!3?G6tx%QYD}c}$pEiIr@p;&75)a;mDmEVh0RRG67_uiS=JF~mY zw$ALXxF+T93T`OLQl`ab5$S^uNfHuKK15FmJw(s-FNAMC=G#)#hD6I|xMl^3fssMR zx~9yo;0wsQtrYsgfpa)~zvu8hU%n@B&UyX@?>)wtwN(Ikf*_#NSZ49P zk0>>6K^OpFt)=(qt89Jyb=ISBXQGs1VPS#!`FU1WmN6!ve{_=S=ACG12&LeiuYO`E z6S%u%&!=HnQa5?p4v{SRJtcDrR4bW-(c#MW9Zfm z$UFjv!xP{M2#_0U{MtXsg>TPuX{o_mhhCtkr>84CH#f)Z>@2lf4Jide2yC%PK}mj} zJ;9N^l{{Ftg|R(af!!!PY4jlG1Y37zP>&xm0k`UIKah=7ilanQ!bYw2+2DE!hysi zQj16=c`C@0oV=5hCpn^%W0bm=ibA149G8jXm@o|K@9$@NdYYM;8ES)%5Je@jHVEq} z;mHz7TDlE+inSK&4AvO5Qp6&=KgZw+)`FiT3BA3&OioU6>Wj}&+TxM`g-7AZGeur% zgG{m3V2#EZi&mPV5&&H*?jQ&PymzE&%IfMW0|NsLjSRE&X9JZfwD%Z1BGZU0MWh{M zns!H)qS6$r)%qJlK!CN5EX&BUjApZmcaFGNB26{va4(e=L&x+WJ8ircIAid};Ecs6 zh5I*Q0IfB7p3`hLSz21cIY)0?rmf(_%f~30ly;$tPuqBF)`Tt2SgcgIK;JJMhT+{} zX*Qc&yLOE@E)#|!N@;YbgDzC@g(@U1ytR01an|B>_W&mqu4KEy-g~4Jq-lzjl18IJ z6h%Z)M3S^wZMBffpgTFv$!^~{kJC9$%dQRDfVEgD5&aq7dkU3Gg^7s?q*RQKZpM3$ z)*2zin(+}gu3m=Z6N;h3SdSE*-BVL+86CkIz(?Rc#unLFdxA=(La@G%*W>i*(|qvm zn`|8}v8i6B*_K?o(&qgSKjzTk!~e1k?um**;Nc+m=DD-%M#{S1CM%`EcO~ zYJFu!Hf~__u@PKpmHHpIh@#+uyzqg$bhAwmk(!WOG9=LjAundHjFz7rb15 UQH0IucmMzZ07*qoM6N<$g1cQM9smFU literal 0 HcmV?d00001 diff --git a/doc/usr/_site/images/network/464-needed.svg b/doc/usr/_site/images/network/464-needed.svg new file mode 100644 index 000000000..713c9ef32 --- /dev/null +++ b/doc/usr/_site/images/network/464-needed.svg @@ -0,0 +1,340 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + IPv4 + + + + + + + + IPv6 + R + + + + + + n6 + + + + + + + + + + + PLAT + + n4 + IPv6 + IPv4 + 203.0.113.24 + + diff --git a/doc/usr/_site/images/network/464-network.svg b/doc/usr/_site/images/network/464-network.svg new file mode 100644 index 000000000..6165d512f --- /dev/null +++ b/doc/usr/_site/images/network/464-network.svg @@ -0,0 +1,391 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + R + + + + + + n6 + + + + + + + + + + + + n4 + 2001:db8:1::/64192.168.0.0/24 + ::8.8 + ::1.1 + 2001:db8:100::/64 + 203.0.113.0/24 + ::1 + ::2 + .1.2 + .24 + PLAT + (CLAT) + + diff --git a/doc/usr/_site/images/network/alternate.svg b/doc/usr/_site/images/network/alternate.svg new file mode 100644 index 000000000..4ec5cd207 --- /dev/null +++ b/doc/usr/_site/images/network/alternate.svg @@ -0,0 +1,406 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + 203.0.113.16 + 2001:db8::1203.0.113.1203.0.113.2 + + A + + V + (eth0) + (eth0) + 2001:db8::8 + (eth0) + + + + + + + + + + + T + + diff --git a/doc/usr/_site/images/network/eam.svg b/doc/usr/_site/images/network/eam.svg new file mode 100644 index 000000000..6ecb07a2e --- /dev/null +++ b/doc/usr/_site/images/network/eam.svg @@ -0,0 +1,587 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ::8 + ::9 + ::a + ::b + ::c + ::1 + .1 + + + + + + + + + + + A + B + C + D + E + V + W + X + Y + Z + .16 + .17 + .18 + .19 + .20 + 2001:db8:6::/96 + 192.0.2.0/24 + T + + diff --git a/doc/usr/_site/images/network/full-en.svg b/doc/usr/_site/images/network/full-en.svg new file mode 100644 index 000000000..03629b0a7 --- /dev/null +++ b/doc/usr/_site/images/network/full-en.svg @@ -0,0 +1,377 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + IPv4 + + + + + + + + IPv6 + T + R + A + B + C + D + + E + <Your (IPv6) network(s)> + <More IPv6 infrastructure> + <IPv4 Internet> + + diff --git a/doc/usr/_site/images/network/full-es.svg b/doc/usr/_site/images/network/full-es.svg new file mode 100644 index 000000000..10b4af666 --- /dev/null +++ b/doc/usr/_site/images/network/full-es.svg @@ -0,0 +1,377 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + IPv4 + + + + + + + + IPv6 + T + R + A + B + C + D + + E + <Tus redes (IPv6)> + <Otra infraestructura en IPv6> + <Internet IPv4> + + diff --git a/doc/usr/_site/images/network/mtu-frag.svg b/doc/usr/_site/images/network/mtu-frag.svg new file mode 100644 index 000000000..72e2c655f --- /dev/null +++ b/doc/usr/_site/images/network/mtu-frag.svg @@ -0,0 +1,346 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + n4 + + n6 + + + + + + + + + + + T + + + + + + + R + mtu = 1500 + mtu = 1300 + mtu = 1300 + + + + diff --git a/doc/usr/_site/images/network/nat-en.svg b/doc/usr/_site/images/network/nat-en.svg new file mode 100644 index 000000000..635da5579 --- /dev/null +++ b/doc/usr/_site/images/network/nat-en.svg @@ -0,0 +1,600 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + .8 + .9 + .10 + .11 + .12 + .1 + .2 + + + + + + + + + + + A + B + C + D + E + V + W + X + Y + Z + .16 + .17 + .18 + .19 + .20 + 192.168.0.0/24 + 203.0.113.0/24 + NAT + (Private Network) + + diff --git a/doc/usr/_site/images/network/nat-es.svg b/doc/usr/_site/images/network/nat-es.svg new file mode 100644 index 000000000..225975af2 --- /dev/null +++ b/doc/usr/_site/images/network/nat-es.svg @@ -0,0 +1,600 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + .8 + .9 + .10 + .11 + .12 + .1 + .2 + + + + + + + + + + + A + B + C + D + E + V + W + X + Y + Z + .16 + .17 + .18 + .19 + .20 + 192.168.0.0/24 + 203.0.113.0/24 + NAT + (Red Privada) + + diff --git a/doc/usr/_site/images/network/rfc6791.svg b/doc/usr/_site/images/network/rfc6791.svg new file mode 100644 index 000000000..f83ad958d --- /dev/null +++ b/doc/usr/_site/images/network/rfc6791.svg @@ -0,0 +1,298 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + T + R + n6 + n4 + 192.0.2.13 + 4000::1 + IPv6 + IPv4 + + diff --git a/doc/usr/_site/images/network/src-icmp6-better.svg b/doc/usr/_site/images/network/src-icmp6-better.svg new file mode 100644 index 000000000..4cde94c2b --- /dev/null +++ b/doc/usr/_site/images/network/src-icmp6-better.svg @@ -0,0 +1,362 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + T + R + n6 + n4 + .13 + IPv6 + IPv4 + 2001:db8::/96 + .1 + 192.0.2.0/24 + 203.0.113.0/24 + .6 + ::1 + + diff --git a/doc/usr/_site/images/network/stateful.svg b/doc/usr/_site/images/network/stateful.svg new file mode 100644 index 000000000..dcd79d86b --- /dev/null +++ b/doc/usr/_site/images/network/stateful.svg @@ -0,0 +1,587 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ::8 + ::9 + ::a + ::b + ::c + ::1 + + + + + + + + + + + A + B + C + D + E + V + W + X + Y + Z + .16 + .17 + .18 + .19 + .20 + 2001:db8::/96 + 203.0.113.0/24 + T + .1 + + diff --git a/doc/usr/_site/images/network/vanilla.svg b/doc/usr/_site/images/network/vanilla.svg new file mode 100644 index 000000000..53c79adc2 --- /dev/null +++ b/doc/usr/_site/images/network/vanilla.svg @@ -0,0 +1,591 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ::8 + ::9 + ::a + ::b + ::c + ::1 + .1 + + + + + + + + + + + A + B + C + D + E + V + W + X + Y + Z + .16 + .17 + .18 + .19 + .20 + 192.0.2.0/24 + T + 2001:db8::c633:6400/120(2001:db8::198.51.100.0/120) + + diff --git a/doc/usr/_site/images/offload-none.svg b/doc/usr/_site/images/offload-none.svg new file mode 100644 index 000000000..315750009 --- /dev/null +++ b/doc/usr/_site/images/offload-none.svg @@ -0,0 +1,912 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + stream: 2offset: 1200length: 600 + + + + stream: 1offset: 0length: 10 + + + + stream: 1offset: 10length: 20 + + + + stream: 1offset: 30length: 10 + + + + + stream: 2offset: 0length: 600 + + + + stream: 2offset: 600length: 600 + + + Network interface layer + Internet layer + Transport layer + Application layer + + + + + + stream: 1offset: 0length: 10 + + + + stream: 1offset: 10length: 20 + + + + stream: 1offset: 30length: 10 + + + + stream: 2offset: 1200length: 600 + + + + stream: 2offset: 0length: 600 + + + + stream: 2offset: 600length: 600 + + + + stream: 1offset: 0length: 10 + + + + stream: 1offset: 10length: 20 + + + + stream: 1offset: 30length: 10 + + + + stream: 2offset: 1200length: 600 + + + + stream: 2offset: 0length: 600 + + + + stream: 2offset: 600length: 600 + + + + stream: 1offset: 0length: 10 + + + + stream: 1offset: 10length: 20 + + + + stream: 1offset: 30length: 10 + + + + stream: 2offset: 1200length: 600 + + + + stream: 2offset: 0length: 600 + + + + stream: 2offset: 600length: 600 + + + diff --git a/doc/usr/_site/images/offload-right.svg b/doc/usr/_site/images/offload-right.svg new file mode 100644 index 000000000..268438da8 --- /dev/null +++ b/doc/usr/_site/images/offload-right.svg @@ -0,0 +1,552 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + stream: 2offset: 1200length: 600 + + + + stream: 1offset: 0length: 10 + + + + stream: 1offset: 10length: 20 + + + + stream: 1offset: 30length: 10 + + + + + stream: 2offset: 0length: 600 + + + + stream: 2offset: 600length: 600 + + Network interface layer + Internet layer + Transport layer + Application layer + + + + + + stream: 1offset: 0length: 40 + + + + stream: 2offset: 0length: 1800 + + + + stream: 1offset: 0length: 40 + + + + stream: 2offset: 0length: 1800 + + + + stream: 1offset: 0length: 40 + + + + stream: 2offset: 0length: 1800 + + + diff --git a/doc/usr/_site/images/offload-router.svg b/doc/usr/_site/images/offload-router.svg new file mode 100644 index 000000000..421c50e09 --- /dev/null +++ b/doc/usr/_site/images/offload-router.svg @@ -0,0 +1,592 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + stream: 2offset: 1200length: 600 + + + + stream: 1offset: 0length: 10 + + + + stream: 1offset: 10length: 20 + + + + stream: 1offset: 30length: 10 + + + + + stream: 2offset: 0length: 600 + + + + stream: 2offset: 600length: 600 + + Network interface layer + Internet layer + + + + stream: 1offset: 0length: 40 + + + + stream: 2offset: 0length: 1800 + + + + + stream: 2offset: 0length: 1800 + + + + stream: 1offset: 0length: 40 + + + + + stream: 1offset: 0length: 40 + + + + stream: 2offset: 0length: 1500 + + + + stream: 2offset: 1500length: 300 + + 1 + 2 + 3 + + diff --git a/doc/usr/_site/images/pencil.png b/doc/usr/_site/images/pencil.png new file mode 100644 index 0000000000000000000000000000000000000000..373c8487c0c8bd9d54c09c79833ae6965ee2f174 GIT binary patch literal 1192 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 DaY?A} literal 0 HcmV?d00001 diff --git a/doc/usr/_site/images/plateaus-attempt1.svg b/doc/usr/_site/images/plateaus-attempt1.svg new file mode 100644 index 000000000..b99656d3a --- /dev/null +++ b/doc/usr/_site/images/plateaus-attempt1.svg @@ -0,0 +1,441 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + J(NAT64) + + IPv4 + IPv6 + + + + + + + r4 + + + + + + + + n6 + n4 + + + + + + + + + + + + + + + + + + diff --git a/doc/usr/_site/images/plateaus-attempt2.svg b/doc/usr/_site/images/plateaus-attempt2.svg new file mode 100644 index 000000000..422116725 --- /dev/null +++ b/doc/usr/_site/images/plateaus-attempt2.svg @@ -0,0 +1,473 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + J(NAT64) + + IPv4 + IPv6 + + + + + + + r4 + + + + + + + + n6 + n4 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/usr/_site/images/plateaus-attempt3.svg b/doc/usr/_site/images/plateaus-attempt3.svg new file mode 100644 index 000000000..8c8f3519e --- /dev/null +++ b/doc/usr/_site/images/plateaus-attempt3.svg @@ -0,0 +1,467 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + J(NAT64) + + IPv4 + IPv6 + + + + + + + r4 + + + + + + + + n6 + n4 + + + + + + + + + + + + + + + + + diff --git a/doc/usr/_site/images/plateaus-network.svg b/doc/usr/_site/images/plateaus-network.svg new file mode 100644 index 000000000..9d57b9965 --- /dev/null +++ b/doc/usr/_site/images/plateaus-network.svg @@ -0,0 +1,329 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + J(NAT64) + + IPv4 + IPv6 + + + + + + + r4 + + + + + + + + n6 + n4 + + diff --git a/doc/usr/_site/images/run-eam-firefox-4to6.png b/doc/usr/_site/images/run-eam-firefox-4to6.png new file mode 100644 index 0000000000000000000000000000000000000000..bf9a5132fbc01402a9e235e67e719b9f716d5f7e GIT binary patch literal 26094 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 literal 0 HcmV?d00001 diff --git a/doc/usr/_site/images/run-stateful-firefox-4to6.png b/doc/usr/_site/images/run-stateful-firefox-4to6.png new file mode 100644 index 0000000000000000000000000000000000000000..6c38204953dc83b86c81876dd3bbb0ba4dc95370 GIT binary patch literal 26248 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 literal 0 HcmV?d00001 diff --git a/doc/usr/_site/images/run-vanilla-firefox-4to6.png b/doc/usr/_site/images/run-vanilla-firefox-4to6.png new file mode 100644 index 0000000000000000000000000000000000000000..4cbed57c06b966cd083cdbc53946bced155ee5e0 GIT binary patch literal 26115 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 literal 0 HcmV?d00001 diff --git a/doc/usr/_site/images/run-vanilla-firefox-6to4.png b/doc/usr/_site/images/run-vanilla-firefox-6to4.png new file mode 100644 index 0000000000000000000000000000000000000000..0529aab32f8e235f633a72c7da573692f6d65fc3 GIT binary patch literal 26136 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 literal 0 HcmV?d00001 diff --git a/doc/usr/_site/images/smiley.png b/doc/usr/_site/images/smiley.png new file mode 100644 index 0000000000000000000000000000000000000000..8f230d8e9f78ce0d0f34d7f24a9a71ce427fc4f5 GIT binary patch literal 1276 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 O4ds{M7o`fOLH`A}pPmQ+ literal 0 HcmV?d00001 diff --git a/doc/usr/_site/images/static-network.svg b/doc/usr/_site/images/static-network.svg new file mode 100644 index 000000000..51d023d11 --- /dev/null +++ b/doc/usr/_site/images/static-network.svg @@ -0,0 +1,895 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + IPv4 + IPv6 + 1.2.3.11.2.3.21.2.3.41.2.3.5 + + + + + + + + + + + + + + + + + + + + + + + + + 1::1 + 1::2 + 1::3 + 1::564:ff9b:: + HTTP + + diff --git a/doc/usr/_site/images/thumbsup.png b/doc/usr/_site/images/thumbsup.png new file mode 100644 index 0000000000000000000000000000000000000000..94f383ab2f11c6198537fb0c74c83d9a688b4918 GIT binary patch literal 1009 zcmVb)!T2BMHt8N@60>zyNB+n zr|m+aA{Zno8u4&pxHj=$(0|e!z0eyBv8WeB41u-?wA*G2yWQP(cl#daypsR8)FxjeHY$@N|=L?;*%3&$fPH z@7~70*1Qp%&5mizx2P=DS-99?xO<;Gp1nP6jYdiV&J&g*T%M5qA29qgUn!76ptB5X z?c2jDico<<6^^t&;COsYP^!Egd@|~j9Cirt$jckhW{NNcDG1|yDVQ=K{|&u4jGoH&o7e46Lgm10T~2Dl^WqI*YgrC zvV?RxMj(jhn&h(){ml)U?G`~b!p~CD<1yK2h@EzMdiOb5nt%gQ6cid(uis?#+Kp2< znT&bx^LKbXMGEi+YV|p4trF#06%pq+tvTA?BM1cTP7@tUnxcwy0)LWlu(QjfJ3rF7 za-ARyU%-PW5AgYr&eivk)?tpOsA>gSFC$Wo%`)QAkgdCa5)(0Z>lTOrsRTkwOp$Z2 z-=lo_3y|`(r z@%Ap(m{*4996|^r;H7}fKp??+ymgo&r&6o2xBZwuzW;%0wM3rgWLbtTGz(O&ZB9%ghAgYtZfJkK%4;El!SIo+*C)H)ra zC_06Waaf-tG6RJsolX!!P+x9?_Xr>e6#{s;afkC)E+K`)T8k|-CzA=i{XU=HeDCZ# z)*_@Bj%c)+cxTB^W(@bbTv-1I6-5Xsh{_ett*x?sf16MRM00b*aYB(Bib7+8h{e^l zvvBj`Rqp=w6O%z7iD&%mIZt+a^o|P}m5@jYu!cNMkYPYlXcjMbXaxaUYsP~^0$Vwg zAHq53<2dI2?;G^Hf1#5Tv~`phR#-ZJfq2+waQy= f&jgcrSHJY%Vkh6}0+YL>00000NkvXXu0mjf7Vptx literal 0 HcmV?d00001 diff --git a/doc/usr/_site/images/tut2.3-network.svg b/doc/usr/_site/images/tut2.3-network.svg new file mode 100644 index 000000000..208fe9db0 --- /dev/null +++ b/doc/usr/_site/images/tut2.3-network.svg @@ -0,0 +1,881 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + J(NAT64) + + + + + + + + IPv4 + IPv6 + + R + S + + + + + + + + + + + + + + + + + + + + 192.0.2.0/24 + 198.51.100.0/24 + 2001:db8:2::/64 + 2001:db8:1::/64 + ::11 + ::10 + ::1 + ::1 + ::11 + ::10 + .11 + .10 + .11 + .10 + .1 + .1 + A + B + C + D + E + F + G + H + (eth0) + (eth0) + (eth0) + (eth0) + (eth0) + (eth0) + (eth0) + (eth0) + (eth0) + (eth1) + (eth0) + (eth1) + pool: 64::/96 + (eth0) + (eth1) + ::2 + .2.3 + + diff --git a/doc/usr/_site/images/tut4-arrows.svg b/doc/usr/_site/images/tut4-arrows.svg new file mode 100644 index 000000000..df020af38 --- /dev/null +++ b/doc/usr/_site/images/tut4-arrows.svg @@ -0,0 +1,623 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + J(Jool) + + + + + + + IPv4 + IPv6 + + R + S + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + C + D + + B(BIND) + + + IPv6 + IPv4 + + + NAT64 + + nat64-tutorial.mx + + + example.com + + DNS64 + + diff --git a/doc/usr/_site/images/tut4-setup.svg b/doc/usr/_site/images/tut4-setup.svg new file mode 100644 index 000000000..a4d51dc10 --- /dev/null +++ b/doc/usr/_site/images/tut4-setup.svg @@ -0,0 +1,563 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + J(Jool) + + + + + + + IPv4 + IPv6 + + R + S + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + C + D + + B(BIND) + + + IPv6 + IPv4 + DNS64 + NAT64 + + diff --git a/doc/usr/_site/images/usr-dropaddr-1.svg b/doc/usr/_site/images/usr-dropaddr-1.svg new file mode 100644 index 000000000..0737929e4 --- /dev/null +++ b/doc/usr/_site/images/usr-dropaddr-1.svg @@ -0,0 +1,864 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + Dear64:ff9b::192.0.2.2#11:blah blah blah. + Dear 192.0.2.1#10:blah blah blah. + + + + + + + + + + + + + + + + + + + + 2001:db8::1 + 192.0.2.1 + + + 192.0.2.2 + 192.0.2.3 + n6 + n4a + n4b + j + + + + + diff --git a/doc/usr/_site/images/usr-dropaddr-2.svg b/doc/usr/_site/images/usr-dropaddr-2.svg new file mode 100644 index 000000000..aac871158 --- /dev/null +++ b/doc/usr/_site/images/usr-dropaddr-2.svg @@ -0,0 +1,836 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + Hey, 192.0.2.3:You can talk to 192.0.2.1on port 10. + + + + + + + + + + + + + + + + + + + + + + + + + + 2001:db8::1 + 192.0.2.1 + + + 192.0.2.2 + 192.0.2.3 + n6 + n4a + n4b + j + + + + + diff --git a/doc/usr/_site/images/usr-dropaddr-3.svg b/doc/usr/_site/images/usr-dropaddr-3.svg new file mode 100644 index 000000000..3e7309fdd --- /dev/null +++ b/doc/usr/_site/images/usr-dropaddr-3.svg @@ -0,0 +1,832 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + 2001:db8::1 + 192.0.2.1 + + + 192.0.2.2 + 192.0.2.3 + n6 + n4a + n4b + j + + + + + + + + + Hello,192.0.2.1#10 + + + + diff --git a/doc/usr/_site/images/usr-session.svg b/doc/usr/_site/images/usr-session.svg new file mode 100644 index 000000000..c3c8c1ff0 --- /dev/null +++ b/doc/usr/_site/images/usr-session.svg @@ -0,0 +1,769 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + IPv6 + IPv4 + + + + + + 2001:db8::2 + 192.0.2.1 + 93.184.216.119 + + (ipv6client.mx) + (example.com) + + + + diff --git a/doc/usr/_site/images/warning.png b/doc/usr/_site/images/warning.png new file mode 100644 index 0000000000000000000000000000000000000000..30ceaaf41019ab488227ad2e69eb8c4d02ebee93 GIT binary patch literal 909 zcmV;819JR{P)dws7T*Nz+K z;WiK!5DBS5DiT6sQDDgymi!s4SinEiMR#2_K?-UJYN$knRH0^52_e-9P{${aJ zm^TZj6o`WyrAHcRbk3Ri<~L_F$FtTtW-x0l>FE&w^|>~_@6WP~*|LDR{|j&rxOX<6 z&1M3OPfsvvhp2u;RR0sBb{LzzxOLOe+!)zXmuvrfm4=uZ-!V4PD!k`;DI&ZXPTP-fPU{IZmizC7$Bvjh&NdX z4=6H=a}MwThb{~s-mXnl77}M({*lsn)anN$$+yV%8s&0%`V|chpHgQFl`4!>Sf#N_ zgEnMZap!KIJ9qnJdg6N#H&UT8MdY>^96p_1gFMgC$p)eM1CcA7F=s=AGsGjw`sNYq zn@1!=2~Phb#~^b>Xnw~e8x%!x{)*!69yPU%C=6EpyG2+HOOeOdU)%s-G4jy4#r>y~ zh_Rzu-Dc4JgxBBt;3Z%@9%GVqeBC1}ruQE;hELy*CThp#+~xqnLL=y5;`@x-@6c#8 zCV+I5mCsL9R}{xTcRCbos4mKn z@Jn7914FyU1`DI98)SvM{sY~xoy1j3%(NtK+>VR7(N%S$(RM_m6H5RYnc$C5W=ycm zV9Gd56BC=r%;U}dcEPVfhQ^-cBsb@s`+4V__r32LYpvKaX>)0e;X|xizHjHDyFq#4 zKK9A;4}t;MC(kKQ+(+(4MbKK6U03T@uW7ZtUxmRDxrwB#wg2gEBB{dQh*sPCwSM)Q z%C0MGt+3YW-IeRgwfAe0pwa}j7CI|;_F$+xo77t9tkMLvNRM(yPw3s1>$29$2T*Ki zPAeaKxRYZlzw+9|B!7=aAd{nn#Q@C% zy)<6@9)LplC-PG%1k~aKr-g>-7)?W=oeuT@0rC^Svo`u8WL7C5Ks0^bv-!g57l5G_ z15PVV(I03YI=N>g`+(cf+-L-wS!Dwuw)BRf27}LOr6oGH4+a%FthDB#lQdr%qukbr z0E@w55KwMwr1?^H*nvQRh9mXVAFjhicw6ow>JQh^aHRgAZPkI^qa?4w5%Q@l<%)P2 z$fvTr3PD{yZdSQu|e`Gi3w57A|=y^JZPVF0d$IvOd zqv!ECt@zpe558Q;@Ooisw`I3j)cl30e*5H0-RT@qrb=b+dnOjwoz4OMdgu$yUx>;r z7WbZIuT=bt}c(evH6_-kwT%f?!ZG3I|=0g~|fcE$29 Xs5VjuKx=gH00000NkvXXu0mjfIWe>X literal 0 HcmV?d00001 diff --git a/doc/usr/_site/index.html b/doc/usr/_site/index.html new file mode 100644 index 000000000..71a9a343e --- /dev/null +++ b/doc/usr/_site/index.html @@ -0,0 +1,11 @@ + + + + + + Redirect + + + Redirecting to en/index.html... + + diff --git a/doc/usr/_site/intro-jool.html b/doc/usr/_site/intro-jool.html new file mode 100644 index 000000000..7cfda817f --- /dev/null +++ b/doc/usr/_site/intro-jool.html @@ -0,0 +1,11 @@ + + + + + + Redirect + + + Redirecting to en/intro-jool.html... + + diff --git a/doc/usr/_site/intro-nat64.html b/doc/usr/_site/intro-nat64.html new file mode 100644 index 000000000..4d245bae5 --- /dev/null +++ b/doc/usr/_site/intro-nat64.html @@ -0,0 +1,11 @@ + + + + + + Redirect + + + Redirecting to en/intro-nat64.html... + + diff --git a/doc/usr/_site/misc-bib.html b/doc/usr/_site/misc-bib.html new file mode 100644 index 000000000..840ba71db --- /dev/null +++ b/doc/usr/_site/misc-bib.html @@ -0,0 +1,11 @@ + + + + + + Redirect + + + Redirecting to en/bib.html... + + diff --git a/doc/usr/_site/misc-eamt.html b/doc/usr/_site/misc-eamt.html new file mode 100644 index 000000000..7d194dbeb --- /dev/null +++ b/doc/usr/_site/misc-eamt.html @@ -0,0 +1,11 @@ + + + + + + Redirect + + + Redirecting to en/eamt.html... + + diff --git a/doc/usr/_site/misc-faq.html b/doc/usr/_site/misc-faq.html new file mode 100644 index 000000000..9394396b6 --- /dev/null +++ b/doc/usr/_site/misc-faq.html @@ -0,0 +1,11 @@ + + + + + + Redirect + + + Redirecting to en/faq.html... + + diff --git a/doc/usr/_site/misc-mtu.html b/doc/usr/_site/misc-mtu.html new file mode 100644 index 000000000..36cac7c5b --- /dev/null +++ b/doc/usr/_site/misc-mtu.html @@ -0,0 +1,11 @@ + + + + + + Redirect + + + Redirecting to en/mtu.html... + + diff --git a/doc/usr/_site/misc-offloading.html b/doc/usr/_site/misc-offloading.html new file mode 100644 index 000000000..254abfb16 --- /dev/null +++ b/doc/usr/_site/misc-offloading.html @@ -0,0 +1,11 @@ + + + + + + Redirect + + + Redirecting to en/offloading.html... + + diff --git a/doc/usr/_site/misc-rfc6791.html b/doc/usr/_site/misc-rfc6791.html new file mode 100644 index 000000000..d3b09bd8c --- /dev/null +++ b/doc/usr/_site/misc-rfc6791.html @@ -0,0 +1,11 @@ + + + + + + Redirect + + + Redirecting to en/rfc6791.html... + + diff --git a/doc/usr/_site/mod-install.html b/doc/usr/_site/mod-install.html new file mode 100644 index 000000000..6f5ac121c --- /dev/null +++ b/doc/usr/_site/mod-install.html @@ -0,0 +1,11 @@ + + + + + + Redirect + + + Redirecting to en/mod-install.html... + + diff --git a/doc/usr/_site/mod-run-464xlat.html b/doc/usr/_site/mod-run-464xlat.html new file mode 100644 index 000000000..880b95de7 --- /dev/null +++ b/doc/usr/_site/mod-run-464xlat.html @@ -0,0 +1,11 @@ + + + + + + Redirect + + + Redirecting to en/mod-run-464xlat.html... + + diff --git a/doc/usr/_site/mod-run-alternate.html b/doc/usr/_site/mod-run-alternate.html new file mode 100644 index 000000000..4c4979bd4 --- /dev/null +++ b/doc/usr/_site/mod-run-alternate.html @@ -0,0 +1,11 @@ + + + + + + Redirect + + + Redirecting to en/mod-run-alternate.html... + + diff --git a/doc/usr/_site/mod-run-eam.html b/doc/usr/_site/mod-run-eam.html new file mode 100644 index 000000000..60b5d8146 --- /dev/null +++ b/doc/usr/_site/mod-run-eam.html @@ -0,0 +1,11 @@ + + + + + + Redirect + + + Redirecting to en/mod-run-eam.html... + + diff --git a/doc/usr/_site/mod-run-stateful.html b/doc/usr/_site/mod-run-stateful.html new file mode 100644 index 000000000..de0e62424 --- /dev/null +++ b/doc/usr/_site/mod-run-stateful.html @@ -0,0 +1,11 @@ + + + + + + Redirect + + + Redirecting to en/mod-run-stateful.html... + + diff --git a/doc/usr/_site/mod-run-vanilla.html b/doc/usr/_site/mod-run-vanilla.html new file mode 100644 index 000000000..3ed473dbe --- /dev/null +++ b/doc/usr/_site/mod-run-vanilla.html @@ -0,0 +1,11 @@ + + + + + + Redirect + + + Redirecting to en/mod-run-vanilla.html... + + diff --git a/doc/usr/_site/obj/464xlat/ipv4-n4.pcapng b/doc/usr/_site/obj/464xlat/ipv4-n4.pcapng new file mode 100644 index 0000000000000000000000000000000000000000..9ae0def24e61f39b95cf44f87145a5d4f8e3d0cf GIT binary patch literal 548 zcmd<$<>ks@U|{gI(UxKa(*L1=nL(VvCo`|KLcv(i&{)qv*T_USJvA@2C^MOXg+Y_S zr8Ku7Ik7;&P|wgn&rCt149Z9=%Fk8EO)M@+Ez$)EX#&jz0gxRa^If3y|NjgOOhA)T zOEL^Nfii4BaUMK&0;R!vLF!sS93YSuU}d-x7a)`bWP>mVgZlnuc|h_~{3#9wR|bX< zzH$ZzJH~Hfrx^;FfLMZq;go;xMh3<++#f?gCWxNm15peDfJh7d@t cS6H7QGnDQ9uv&-($ObwK3|N6|WB{@Q0LIQ}jQ{`u literal 0 HcmV?d00001 diff --git a/doc/usr/_site/obj/464xlat/ipv4-n6.pcapng b/doc/usr/_site/obj/464xlat/ipv4-n6.pcapng new file mode 100644 index 0000000000000000000000000000000000000000..9de815a8a6dfb19d8f891e26c2812d2b1caa8cbf GIT binary patch literal 552 zcmd<$<>ks@U|{gI(UxKa(*L1=nL(VvCo`|KLcv(i&{)qv*ThseJvA@2C^MOXg+Y_S zr8Ku7Ik7;&P|wgn&rCt149Z9=%Fk8EO)M@+Ez$)EX#&jz0gxRa^F5&S|NjgOObi?h zWl8xJd8s7^oIqJNpd1e#dx6qm{UCKMAPx{n3$QXMga!yD0ofqT!JyuJ(}9aY9n5xR zUkT422RL3>s$orx_T}aDNN|Dq;{l#RsAo1O$bIMMTBKB_yS! zWn|^#6%>_}RaDi~H8i!fb#(Rg4GfKpO-#+qA$Fs?!8{e=2AJ(2mvAtE+)#O*fx(WE zO%P;1$Q=v}22^kZE6~-Ta0LNSIDFl@T!@iDhQT?%G!Gd5#R>&Q`DK|YsVNFcl?o}4 i2m^&VNNxW;86jpUn-Qpw1;}QB7{$N}av%}_*#Q8wL1aV# literal 0 HcmV?d00001 diff --git a/doc/usr/_site/obj/464xlat/ipv4-plat.pcapng b/doc/usr/_site/obj/464xlat/ipv4-plat.pcapng new file mode 100644 index 0000000000000000000000000000000000000000..23366847feb7a4f346ae0b640ce07556309fb2f4 GIT binary patch literal 528 zcmca|c+)~A1{MYw`2U}Qp%BP9!~HSD>KY$I1&|HGK)}er#=)R|jM0OEq3v!0NW{U) zUV)K!2Lls`0|hDnXTzAM844vD7+jz0pJreLnFkUVJ;eu>77!E?77-N_mync_mXVc{ zS5Q<^R#8<`*U;3`*3s3|H!w6ZHZe6b2kEQ2&c~1f)CIyor$XFuDgG1#0|$dE149U3 zIRk?o<2Ny&eM}%bIT%j)_im)j&fm9@?1cG!|FS%ooip2j-e=5Y2iXU*mx19D#dhAj bgB0E{e-;*aA%`~uTKJ-ee_mJ literal 0 HcmV?d00001 diff --git a/doc/usr/_site/obj/464xlat/ipv4-r.pcapng b/doc/usr/_site/obj/464xlat/ipv4-r.pcapng new file mode 100644 index 0000000000000000000000000000000000000000..af7bb73cf75bfce9a6957350bdd47f27cd96a09e GIT binary patch literal 528 zcmca|c+)~A1{MYw`2U}Qp%BP9!~HQtqlu3p1;_?rAYf!*<6=+;GdUPs85lyMgd7+g z7$2WKu!4c(G(({T2ZM&0{%HnAkY127(Nlb2)dGS-!Xlz#;u4Zl(lWAg@(PMd$||aA z>Kd9_+B&*=`UZwZ#wMm_<{*8an)w(ifVw~!=q#X}91QBm7(Eym+U_QR#2l>b6&QJU zFff5QP>}L}HjD{!M+1ZFb4uNDq8G^>V7~+1QCQ%G><$Jrd(qw1$lyY;JAU*b#Q`il enr}KVFhJs<@;n2B9V43{$lsuNU|=wyC=LMRa$Wxb literal 0 HcmV?d00001 diff --git a/doc/usr/_site/obj/464xlat/ipv6-n4.pcapng b/doc/usr/_site/obj/464xlat/ipv6-n4.pcapng new file mode 100644 index 0000000000000000000000000000000000000000..43845aa57f99871990d91457bbb1e8633c0adb9b GIT binary patch literal 548 zcmd<$<>ks@U|{gI(UxKa(*L1=nL(VvCo`|KLcv(i&{)qv*T_USJvA@2C^MOXg+Y_S zr8Ku7Ik7;&P|wgn&rCt149Z9=%Fk8EO)M@+Ez$)EX#&jz0gxRa^If3y|NjgOOhA)T zOEL^Nfii4BaUMK&0;R!vLF!sS93YSuU}ac-*ia$~$Od5!2KD{R@_^)}_){DVt_%zz zKY`ZTF>))OW+-F=VhIk0KZ2KS85s3>K8AoyaH!@4Q49itLc$`VV&W2#QqnTAa`Fm_ zO3Es#YU&!ATG~3gdin;2M#d(lX66vP(cR#B1jP+t+aWFixnX8I&>qH2Hjw=wcQ7!p z2vP0^R-mgvVG07EaF}o;OM;O>hQT?%G!Gc|#R>&Q`DK|YsVNFcl?o}4$YKJ95J;_Z bwWl~Ul)dm!mIMos4RjV5umai00AvRMGIC`} literal 0 HcmV?d00001 diff --git a/doc/usr/_site/obj/464xlat/ipv6-n6.pcapng b/doc/usr/_site/obj/464xlat/ipv6-n6.pcapng new file mode 100644 index 0000000000000000000000000000000000000000..03d77992e05ba2e9a1d02e1aee214bb73d051fed GIT binary patch literal 592 zcmd<$<>ks@U|{gI(UxKa(*L1=nL(VvCo`|KLcv(i&{)qv*ThseJvA@2C^MOXg+Y_S zr8Ku7Ik7;&P|wgn&rCt149Z9=%Fk8EO)M@+Ez$)EX#&jz0gxRa^F5&S|NjgOObi?h zWl8xJd8s7^oIqJNpd1e#dx6qm{UCKSKpY^D7GP!IUuq~(24sUU2ZMU^O$ROpbs)R# zZUT^GaIkVvVC3BawjRU>DN6Z28^UB@IL%Nf(ZI0hg@GUgqdw2a5RkY-H78hFKu}0n zL{v;%LQ+avMpjNazfqnsnKL~)r%e|mqf{{Un!8yM)4;W9y3I#>^Wtl0dDGEuI3Mr6? h1;q_WZ3kbvI5U*(lHV`E0%SwNhJk?<$VLVrI{=;dXKnxh literal 0 HcmV?d00001 diff --git a/doc/usr/_site/obj/464xlat/ipv6-plat.pcapng b/doc/usr/_site/obj/464xlat/ipv6-plat.pcapng new file mode 100644 index 0000000000000000000000000000000000000000..321bb53d76f2c22fa1a4f73d165750db3961f02c GIT binary patch literal 528 zcmca|c+)~A1{MYw`2U}Qp%BQ?=lK|-IGvNB0>}noAYf!*<6uxf#^}Mo&~`TgB;sIY zufWK=11JLn91JP{XTvzB844vD81}p{5M*EknFkVgsOAJq3kV7ci-?MeOGrvd%gD;f zD<~={tEj4}YiMd|>*(s~8yFfHo0yuJgY=cn;ABVv>H=Y)Qz7oS6n~0=frG)7fg$8) z4g-T7Bex>ZJ|>Wz91MR1FWXXPXT=gEJ7Ip`zbp@C=gfAXUl=plK=y&`1v*TKQae8` aMG9}2KMM=Iki#22e9^}noAYf!*<6=+;Gu!SafM^FR2L(pn z9Y7fv;9yAkKO4q5%}^-Oz_90qfgl4T$UKm^Lp3K@T0l@pSVUAzTtZSxT1Hk*UO`bw zSw&S%T|-k#TSr$<-@wqw*u>P#9Hg(;7|9(hAa`&us2^kWU|@i|!=4`Qa0)|m2RJ-{ m?kFtqLUsqb|Iyvm$grE@@K8)catACtnr}KFxxks@U|{gI(UxKa(*L1=nL(VvCo`|KLcv(i&{)qv*ThUWJvA@2C^MOXg+Y_S zr8Ku7Ik7;&P|wgn&rCt149Z9=%Fk8EO)M@+Ez$)EX#&jz0gxRa^F5&S|NjgOObi?h zWl8xJd8s7^oIqJNpd1e#dx6q${W#1qBE=k#eMeY9rUL!V&&qJWy4PnBkPpHf4C)UY z`M4O=fpQ!St_-YG%6S+V92kY<4=^yX9y3m1uE6^z^N z9e&Xtd1B{Wr_@ZlqRVDAwVF?pd86kUXMX*?Y-MBBx6d1Tq9)9X@8*<{I$Oh=_`|sQ z@~lhm^6ll?PA|J^^LL}ZwX_!RgK)zqtJgSiOj{~9x8uUXzgZg64)6S8XLGE2WN=%q z@NI5d!b`d7GsV8<>h(%{zv|(?e09m6n2RQzxf;P?TQhUhE-yRIb6D%p#q%eaqs1JL zG~9U6#&emi=#$$;iPG7>ldSBRr)4h@);c0kn>G1tK~Hk)xd3A)`#tFrpDNSrRMp+m zwPqgYzbmUebAIRt->7qs3(7qt<5mhb&Mh@rE2bEzuRVcrX%>so#An|a-gLjyo~IVa zY91f^hU2?e<<$ZXZ9Oil{te2VAB@v1%efMpj@!VB+ zc1l&elgZA_lWx}6C8?s4)`%aKIxaMQU$I#J*PP!x_d+&)?vl2AGP@4^1hm-j9Ycin#f>5b>J%wFeQUH^J(wL;M^R>x?+z=T;y%?D$=4lgUfWrTx-oyb$oTv9mNLnA(QADSzZPtW&4^kzgJ;Q|Ng*LG!=I!biM!H^Srti>= zd$(|>@QVEti?<#=D)gVlT>I{!R-?nK7-VjiovBLL`_FFm`j0Dr%1J6rs+n=3z9&-_@cW=a21})v&wy)rC+~rj1SOCN6U+t^A=f?Ja}uiAedYizhYA znO^fDMOZEI^7qw~que#@4=B2apG|h~7G_#5{B?bdfqibQYpLu5x0r3qz84GrKFIxY z9)r*G*Dku>Y~D65I}*Cy^R~?gzHaH1Thmj0)EC^jlDFZT;)4Lqd6O30k+~kbuVlJq za#rAWg9~pPPA=QaoYr{geu$3O;cM44B9i{hSJD*ZWUT6J-ua2|RP~ROS&~OnI(hvP zUxjuZj<}*wzxsl1q2wk0OCgGynr{RspL-!I+J2Cd=_8vDLre zUod6O+iSnKcr7%%7j(7XWY1%nPbwL+rrq^y%CYVV90;i|6hNi~CwIZ@1dVc3`Wqs9)KL@ToA>bGGCT{kdH_;nP1uujjzaeSAiK(R^CXC@LFp z?eFrsS&*_DRE8S>%WH7m1uVlC*Y*1F0r?;dF1?w6CHb9T#vbnF!vd3OMr zU;rx1k@=uU({@0mVQVv%F+DKumebasgCc4&8bL6dvgHh&wP`VD$*327!bQtRAs)K(9BD`Jj4* zg+V?I7^oTvK!UY{a5#?EH>3TE(SF5fzhbcWDOb<2Gqv_WHW&b0s>Yb8ySGc UjbL`c>a1lH+65}>K>(Xw0MMOg?EnA( literal 0 HcmV?d00001 diff --git a/doc/usr/_site/obj/bib.csv b/doc/usr/_site/obj/bib.csv new file mode 100644 index 000000000..d2f767df9 --- /dev/null +++ b/doc/usr/_site/obj/bib.csv @@ -0,0 +1,5 @@ +Protocol,IPv6 Address,IPv6 L4-ID,IPv4 Address,IPv4 L4-ID,Static? +TCP,6::6,6,4.4.4.4,4,1 +TCP,6::6,66,4.4.4.4,44,1 +TCP,6::6,1234,4.4.4.4,1234,0 +UDP,6::6,6666,4.4.4.4,4444,1 diff --git a/doc/usr/_site/obj/eamt.csv b/doc/usr/_site/obj/eamt.csv new file mode 100644 index 000000000..ebb326345 --- /dev/null +++ b/doc/usr/_site/obj/eamt.csv @@ -0,0 +1,6 @@ +IPv6 Prefix,IPv4 Prefix +64:ff9b::/127,192.0.2.192/31 +2001:db8:dddd::/64,192.0.2.128/26 +2001:db8:cccc::/124,192.0.2.16/28 +2001:db8:bbbb::b/128,192.0.2.2/32 +2001:db8:aaaa::/128,192.0.2.1/32 diff --git a/doc/usr/_site/obj/session.csv b/doc/usr/_site/obj/session.csv new file mode 100644 index 000000000..9f0dbe33a --- /dev/null +++ b/doc/usr/_site/obj/session.csv @@ -0,0 +1,4 @@ +Protocol,IPv6 Remote Address,IPv6 Remote L4-ID,IPv6 Local Address,IPv6 Local L4-ID,IPv4 Local Address,IPv4 Local L4-ID,IPv4 Remote Address,IPv4 Remote L4-ID,Expires in,State +TCP,2001:db8::2,58239,64:ff9b::5db8:d877,80,192.0.2.1,60477,93.184.216.119,80,00:02:57.44,V4_FIN_V6_FIN_RCV +TCP,2001:db8::2,58237,64:ff9b::5db8:d877,80,192.0.2.1,6617,93.184.216.119,80,00:03:52.236,V4_FIN_V6_FIN_RCV +ICMP,2001:db8::2,13371,64:ff9b::5db8:d877,13371,192.0.2.1,1402,93.184.216.119,1402,00:00:50.236, diff --git a/doc/usr/_site/obj/tut2.1-wireshark.wsk b/doc/usr/_site/obj/tut2.1-wireshark.wsk new file mode 100644 index 0000000000000000000000000000000000000000..c7d435cdd309e705634be9bfc509ee43900592ca GIT binary patch literal 1814 zcmca|c+)~A1{MYw`2U}Qp%BP|{fPsmrf#J9{-!cZqjX?82;wh=DQOv5Ie7&| zC1n*=HFXV5Eo~iLJ$(a1BV!X&GjotTHrufFt{=>gfK8T zFxWG0`+Hyo6C=n@4u*xHbB<7EXWL#RJ0X5oxmLU36UKu##ds zAMayfXaIT + + + + + Redirect + + + Redirecting to en/dns64.html... + + diff --git a/doc/usr/_site/op-pool4.html b/doc/usr/_site/op-pool4.html new file mode 100644 index 000000000..dbfa4f0f6 --- /dev/null +++ b/doc/usr/_site/op-pool4.html @@ -0,0 +1,11 @@ + + + + + + Redirect + + + Redirecting to en/pool4.html... + + diff --git a/doc/usr/_site/op-static-bindings.html b/doc/usr/_site/op-static-bindings.html new file mode 100644 index 000000000..67cf7015e --- /dev/null +++ b/doc/usr/_site/op-static-bindings.html @@ -0,0 +1,11 @@ + + + + + + Redirect + + + Redirecting to en/static-bindings.html... + + diff --git a/doc/usr/_site/usr-flags-atomic.html b/doc/usr/_site/usr-flags-atomic.html new file mode 100644 index 000000000..aa12df3be --- /dev/null +++ b/doc/usr/_site/usr-flags-atomic.html @@ -0,0 +1,11 @@ + + + + + + Redirect + + + Redirecting to en/usr-flags-atomic.html... + + diff --git a/doc/usr/_site/usr-flags-bib.html b/doc/usr/_site/usr-flags-bib.html new file mode 100644 index 000000000..6a39e91db --- /dev/null +++ b/doc/usr/_site/usr-flags-bib.html @@ -0,0 +1,11 @@ + + + + + + Redirect + + + Redirecting to en/usr-flags-bib.html... + + diff --git a/doc/usr/_site/usr-flags-blacklist.html b/doc/usr/_site/usr-flags-blacklist.html new file mode 100644 index 000000000..a0650b17c --- /dev/null +++ b/doc/usr/_site/usr-flags-blacklist.html @@ -0,0 +1,11 @@ + + + + + + Redirect + + + Redirecting to en/usr-flags-blacklist.html... + + diff --git a/doc/usr/_site/usr-flags-eamt.html b/doc/usr/_site/usr-flags-eamt.html new file mode 100644 index 000000000..67e71813a --- /dev/null +++ b/doc/usr/_site/usr-flags-eamt.html @@ -0,0 +1,11 @@ + + + + + + Redirect + + + Redirecting to en/usr-flags-eamt.html... + + diff --git a/doc/usr/_site/usr-flags-global.html b/doc/usr/_site/usr-flags-global.html new file mode 100644 index 000000000..4d560d03e --- /dev/null +++ b/doc/usr/_site/usr-flags-global.html @@ -0,0 +1,11 @@ + + + + + + Redirect + + + Redirecting to en/usr-flags-global.html... + + diff --git a/doc/usr/_site/usr-flags-help.html b/doc/usr/_site/usr-flags-help.html new file mode 100644 index 000000000..39248dec6 --- /dev/null +++ b/doc/usr/_site/usr-flags-help.html @@ -0,0 +1,11 @@ + + + + + + Redirect + + + Redirecting to en/usr-flags-help.html... + + diff --git a/doc/usr/_site/usr-flags-plateaus.html b/doc/usr/_site/usr-flags-plateaus.html new file mode 100644 index 000000000..443a6cf21 --- /dev/null +++ b/doc/usr/_site/usr-flags-plateaus.html @@ -0,0 +1,11 @@ + + + + + + Redirect + + + Redirecting to en/usr-flags-plateaus.html... + + diff --git a/doc/usr/_site/usr-flags-pool4.html b/doc/usr/_site/usr-flags-pool4.html new file mode 100644 index 000000000..ac5ac6bf4 --- /dev/null +++ b/doc/usr/_site/usr-flags-pool4.html @@ -0,0 +1,11 @@ + + + + + + Redirect + + + Redirecting to en/usr-flags-pool4.html... + + diff --git a/doc/usr/_site/usr-flags-pool6.html b/doc/usr/_site/usr-flags-pool6.html new file mode 100644 index 000000000..7e9d2df1b --- /dev/null +++ b/doc/usr/_site/usr-flags-pool6.html @@ -0,0 +1,11 @@ + + + + + + Redirect + + + Redirecting to en/usr-flags-pool6.html... + + diff --git a/doc/usr/_site/usr-flags-pool6791.html b/doc/usr/_site/usr-flags-pool6791.html new file mode 100644 index 000000000..1c8eaad69 --- /dev/null +++ b/doc/usr/_site/usr-flags-pool6791.html @@ -0,0 +1,11 @@ + + + + + + Redirect + + + Redirecting to en/usr-flags-pool6791.html... + + diff --git a/doc/usr/_site/usr-flags-quick.html b/doc/usr/_site/usr-flags-quick.html new file mode 100644 index 000000000..a798fd308 --- /dev/null +++ b/doc/usr/_site/usr-flags-quick.html @@ -0,0 +1,11 @@ + + + + + + Redirect + + + Redirecting to en/usr-flags-quick.html... + + diff --git a/doc/usr/_site/usr-flags-session.html b/doc/usr/_site/usr-flags-session.html new file mode 100644 index 000000000..c10299aeb --- /dev/null +++ b/doc/usr/_site/usr-flags-session.html @@ -0,0 +1,11 @@ + + + + + + Redirect + + + Redirecting to en/usr-flags-session.html... + + diff --git a/doc/usr/_site/usr-flags.html b/doc/usr/_site/usr-flags.html new file mode 100644 index 000000000..db420b4b9 --- /dev/null +++ b/doc/usr/_site/usr-flags.html @@ -0,0 +1,11 @@ + + + + + + Redirect + + + Redirecting to en/usr-flags.html... + + diff --git a/doc/usr/_site/usr-install.html b/doc/usr/_site/usr-install.html new file mode 100644 index 000000000..7182886c5 --- /dev/null +++ b/doc/usr/_site/usr-install.html @@ -0,0 +1,11 @@ + + + + + + Redirect + + + Redirecting to en/usr-install.html... + + diff --git a/doc/usr/es/bib.md b/doc/usr/es/bib.md index dd790e498..9564eb1be 100644 --- a/doc/usr/es/bib.md +++ b/doc/usr/es/bib.md @@ -9,26 +9,61 @@ title: BIB # BIB -El _Binding Information Base_ (BIB) es una colección de tablas en un *Stateful NAT64*. Su especificación detallada se encuentra en la [Sección 3.1, del RFC 6146 ](http://tools.ietf.org/html/rfc6146#section-3.1). +## Ãndice -A modo de breve introducción podemos decir que los registros en esta base de datos mapean las direcciones de transporte de la conexión de un nodo IPv6 a la dirección de transporte que Jool está usando para enmascararlo en IPv4. Por ejemplo, si el siguiente mapeo existe en tu NAT64: +1. [Qué es la BIB?](#qu-es-la-bib) +2. [Estructura](#estructura) +3. [Tipos](#tipos) +4. [Ejemplos](#ejemplos)
+ a) [Registro 01](#registro-01)
+ b) [Registro 02](#registro-02)
+ c) [Registro 03](#registro-03) +5. [Lecturas adicionales](#lecturas-adicionales) +## Qué es la BIB? -| Dirección IPv6 de Transporte | Dirección IPv4 de Transporte | Protocol | -|------------------------------|------------------------------|----------| -| 6::6#66 | 4.4.4.4#44 | TCP | +El _Binding Information Base_ (BIB) es una colección de tablas en el *Stateful NAT64*. Aunque este concepto nace con los NATs y está definido en el [RFC 2263, 1999](https://tools.ietf.org/html/rfc2663). +La podríamos llamar Base de Datos de Asociaciones o Enlaces porque en ella se guardará por pares la asociación (dirección IPv6, puerto IPv6) con (dirección IPv4, puerto IPv4) si es una paquete de UDP o TCP. A esas duplas se le llaman [direcciones de transporte](http://tools.ietf.org/html/rfc6146#section-1.2). Cuando es un paquete de ICMP, se guardan los pares (dirección IPv6, identificador IPv6) con (dirección IPv4, identificador IPv4). Para conocer todos los detalles sobre la BIB lee [la Sección 3.1, del RFC 6146 ](http://tools.ietf.org/html/rfc6146#section-3.1). -Entonces los nodos IPv4 pueden encontrar el servicio TCP publicado en 6::6 por el puerto 66, enviando una solicitud a 4.4.4.4 por el puerto 44. En otra palabras, Jool engaña a los nodos IPv4 haciendoles pensar que 6::6#66 es 4.4.4.4#44. +Dicho de otra manera, podemos decir que los registros en esta base de datos mapean las _direcciones de transporte_ de la conexión de un nodo IPv6 a la _dirección de transporte_ que Jool está usando para enmascarar éste en IPv4 en los protocolos UDP y TCP. Y mapeará la dupla (IP, identificador) de la conexión de un nodo IPv6 a la dupla (IP, identificador) que Jool está usando para enmascarar éste en IPv4 si es un mensaje de ICMP. -* LLamamos "registro BIB" a un registro en la tabla BIB (ej. el identificador de una máscara). -* Llamamos "tabla BIB" a una colección de registros que comparten un protocolo. Hay tres protocolos soportados(TCP, UDP y ICMP), como resultado Jool tiene tres tablas BIB. -* Llamamos "BIB" a la colección de las tres tablas BIB de Jool. +## Estructura + +* **Registro BIB** es un registro en la tabla BIB y está compuesto por duplas. +* **Tabla BIB** es una colección de registros que comparten un protocolo. Dado que hay tres protocolos soportados (TCP, UDP y ICMP) por el RFC 6146, como resultado Jool tiene tres tablas BIB. +* **BIB** es la colección de las tres tablas BIB de Jool. + +## Tipos Hay dos tipos de registros BIB: -* Estáticos: Los creas manualmente, para publicar un servicio IPv6 hacia la Internet IPv4. Ésto es análogo al [redireccionamiento de puertos](http://es.wikipedia.org/wiki/Redirecci%C3%B3n_de_puertos) href="http://en.wikipedia.org/wiki/Port_forwarding" en NATs normales. -* Dinámicos: Jool crea estos al vuelo. Esto se tiene que hacer por que las conecciones IPv6 iniciadas también necesitan máscaras IPv4(de otra manera no serían capaces de recibir respuestas). +* Dinámicos: Jool crea estos al iniciar la comunicación de IPv6 a IPv4, para acceder a lo servicios de IPv4. +* Estáticos: Los puedes dar de alta manualmente, para publicar un servicio IPv6 hacia la Red de IPv4, ya sea privada o pública. Esto es análogo al [redireccionamiento de puertos](http://es.wikipedia.org/wiki/Redirecci%C3%B3n_de_puertos) en NATs. + +## Ejemplos + +Por ejemplo, si los siguiente mapeos existen en tu NAT64: + +| No.Registro| Dirección IPv6 de Transporte | Dirección IPv4 de Transporte | Protocol | +|----------- |------------------------------|------------------------------|----------| +| 01 | 6::6#66 | 4.4.4.4#44 | TCP | +| 02 | | | TCP | +| 03 | 2001:db8::8#40000 | 203.0.113.2# | TCP | + + +### Registro 01 + +Entonces los nodos IPv4 pueden encontrar el servicio TCP publicado en 6::6 por el puerto 66, enviando una solicitud a 4.4.4.4 por el puerto 44. En otras palabras, Jool engaña a los nodos IPv4 haciendoles pensar que 6::6#66 es 4.4.4.4#44. + +### Registro 02 + +### Registro 03 + +## Lecturas adicionales + +Si quieres aprender sobre: -Ve la [introducción](static-bindings.html) o el [material de referencia](usr-flags-bib.html) para obtener información de cómo crear y destruir registros manualmente. Ve [`--address-dependent-filtering`](usr-flags-global.html#filtrado-dependiente-de-direccion) si crees que los registros dinámicos son peligrosos. +1. Cómo crear y destruir registros manualmente, ve a [mapeo estático](static-bindings.html) o consulta [usando la opción BIB](usr-flags-bib.html). +2. Cómo restringir el uso de los registros dinámicos, ve a [`--address-dependent-filtering`](usr-flags-global.html#address-dependent-filtering). diff --git a/doc/usr/es/mod-run-eam.md b/doc/usr/es/mod-run-eam.md index af176534d..26b9b35ec 100644 --- a/doc/usr/es/mod-run-eam.md +++ b/doc/usr/es/mod-run-eam.md @@ -111,7 +111,7 @@ user@T:~# jool_siit --eamt --add 2001:db8:4::/120 192.0.2.0/24 user@T:~# jool_siit --enable {% endhighlight %} -A diferencia de `pool6`, no es práctico insertar la tabla EAM completa en un solo comando, asi que instruimos a Jool para que inicie deshabilitado. Luego insertamos los registros de la tabla EAM, uno por uno, utilizando la [Herramienta de Configuración](usr-flags-eamt.html). Cuando la tabla está completa, le decimos a Jool que puede empezar a traducir trafico[`--enable`](usr-flags-global.html#enable---disable). +A diferencia de `pool6`, no es práctico insertar la tabla EAM completa en un solo comando, asi que instruimos a Jool para que inicie deshabilitado. Luego insertamos los registros de la tabla EAM, uno por uno, utilizando la [Herramienta de Configuración](usr-flags-eamt.html). Cuando la tabla está completa, le decimos a Jool que puede empezar a traducir trafico mediante la opción de [`--enable`](usr-flags-global.html#enable---disable). De hecho utilizar `disabled` y `--enable` no es necesario; Jool va a deducir naturalmente que no puede traducir tráfico hasta que la tabla EAM y/o pool6 sean llenados. La razón por la cual Jool fue "forzado" a permanecer deshabilitado hasta que la tabla estuviera completa fue para que no hubiera un periodo de tiempo donde el tráfico estuviera siendo traducido inconsistentemente debido a una tabla incompleta. diff --git a/doc/usr/images/flow/stateful-es.svg b/doc/usr/images/flow/stateful-es.svg index 2d2acc9ef..10f98beaa 100644 --- a/doc/usr/images/flow/stateful-es.svg +++ b/doc/usr/images/flow/stateful-es.svg @@ -14,8 +14,8 @@ height="384" id="svg2" version="1.1" - inkscape:version="0.91 r13725" - sodipodi:docname="stateful.svg"> + inkscape:version="0.48.4 r9939" + sodipodi:docname="stateful-es.svg"> @@ -85,7 +85,7 @@ image/svg+xml - + @@ -164,7 +164,8 @@ style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" cx="9.5" cy="227" - r="2.5" /> + r="2.5" + d="m 12,227 c 0,1.38071 -1.119288,2.5 -2.5,2.5 -1.3807119,0 -2.5,-1.11929 -2.5,-2.5 0,-1.38071 1.1192881,-2.5 2.5,-2.5 1.380712,0 2.5,1.11929 2.5,2.5 z" /> fuente: 203.0.113.16, 50k203.0.113.16, 50k, tcpdest: 203.0.113.2, 50k + id="tspan3049">203.0.113.2, 40k, tcp fuente: 2001:db8::203.0.113.16, 50k203.0.113.16, 50k, tcpdest: 2001:db8::8, 50k + id="tspan3045">2001:db8::8, 40k, tcp fuente: 203.0.113.2, 50k203.0.113.2, 40k, tcpdest: 203.0.113.16, 50k + id="tspan3039">203.0.113.16, 50k, tcp fuente: 2001:db8::8, 50k2001:db8::8, 40k, tcpdest: 2001:db8::203.0.113.16, 50k + id="tspan3051">203.0.113.16, 50k, tcp puerto 50000 + id="tspan3516">puerto 50000protocolo tcp puerto 50000 + id="tspan3514">puerto 40000protocolo tcp Date: Mon, 7 Sep 2015 17:48:50 -0500 Subject: [PATCH 13/15] Fixing the last commit. (Removing compiled documentation.) Also added the compiled documentation to the gitignore, to prevent this from happening again. --- .gitignore | 2 + doc/usr/_site/about.html | 11 - doc/usr/_site/contact.html | 11 - doc/usr/_site/css/print.css | 10 - doc/usr/_site/css/style.css | 401 -------- doc/usr/_site/doc-index.html | 11 - doc/usr/_site/download.html | 11 - doc/usr/_site/en/about.html | 88 -- doc/usr/_site/en/bib.html | 124 --- doc/usr/_site/en/contact.html | 97 -- doc/usr/_site/en/dns64.html | 212 ---- doc/usr/_site/en/documentation.html | 145 --- doc/usr/_site/en/download.html | 246 ----- doc/usr/_site/en/eamt.html | 147 --- doc/usr/_site/en/faq.html | 206 ---- doc/usr/_site/en/index.html | 295 ------ doc/usr/_site/en/intro-jool.html | 228 ----- doc/usr/_site/en/intro-nat64.html | 197 ---- doc/usr/_site/en/logging.html | 127 --- doc/usr/_site/en/mod-install.html | 192 ---- doc/usr/_site/en/mod-run-464xlat.html | 296 ------ doc/usr/_site/en/mod-run-alternate.html | 124 --- doc/usr/_site/en/mod-run-eam.html | 210 ---- doc/usr/_site/en/mod-run-stateful.html | 215 ----- doc/usr/_site/en/mod-run-vanilla.html | 250 ----- doc/usr/_site/en/mtu.html | 133 --- doc/usr/_site/en/offloading.html | 169 ---- doc/usr/_site/en/pool4.html | 123 --- doc/usr/_site/en/rfc6791.html | 147 --- doc/usr/_site/en/static-bindings.html | 157 --- doc/usr/_site/en/usr-flags-atomic.html | 269 ------ doc/usr/_site/en/usr-flags-bib.html | 223 ----- doc/usr/_site/en/usr-flags-blacklist.html | 161 ---- doc/usr/_site/en/usr-flags-eamt.html | 214 ---- doc/usr/_site/en/usr-flags-global.html | 613 ------------ doc/usr/_site/en/usr-flags-help.html | 113 --- doc/usr/_site/en/usr-flags-plateaus.html | 181 ---- doc/usr/_site/en/usr-flags-pool4.html | 251 ----- doc/usr/_site/en/usr-flags-pool6.html | 156 --- doc/usr/_site/en/usr-flags-pool6791.html | 157 --- doc/usr/_site/en/usr-flags-quick.html | 102 -- doc/usr/_site/en/usr-flags-session.html | 207 ---- doc/usr/_site/en/usr-flags.html | 126 --- doc/usr/_site/en/usr-install.html | 130 --- doc/usr/_site/es/about.html | 92 -- doc/usr/_site/es/bib.html | 176 ---- doc/usr/_site/es/contact.html | 118 --- doc/usr/_site/es/dns64.html | 213 ---- doc/usr/_site/es/documentation.html | 128 --- doc/usr/_site/es/download.html | 250 ----- doc/usr/_site/es/eamt.html | 198 ---- doc/usr/_site/es/faq.html | 234 ----- doc/usr/_site/es/index.html | 315 ------ doc/usr/_site/es/intro-jool.html | 234 ----- doc/usr/_site/es/intro-nat64.html | 241 ----- doc/usr/_site/es/logging.html | 83 -- doc/usr/_site/es/mod-install.html | 237 ----- doc/usr/_site/es/mod-run-464xlat.html | 306 ------ doc/usr/_site/es/mod-run-alternate.html | 123 --- doc/usr/_site/es/mod-run-eam.html | 249 ----- doc/usr/_site/es/mod-run-stateful.html | 252 ----- doc/usr/_site/es/mod-run-vanilla.html | 279 ------ doc/usr/_site/es/mtu.html | 139 --- doc/usr/_site/es/offloading.html | 172 ---- doc/usr/_site/es/pool4.html | 181 ---- doc/usr/_site/es/rfc6791.html | 181 ---- doc/usr/_site/es/static-bindings.html | 157 --- doc/usr/_site/es/usr-flags-atomic.html | 294 ------ doc/usr/_site/es/usr-flags-bib.html | 224 ----- doc/usr/_site/es/usr-flags-blacklist.html | 160 --- doc/usr/_site/es/usr-flags-eamt.html | 183 ---- doc/usr/_site/es/usr-flags-global.html | 666 ------------- doc/usr/_site/es/usr-flags-help.html | 112 --- doc/usr/_site/es/usr-flags-plateaus.html | 178 ---- doc/usr/_site/es/usr-flags-pool4.html | 163 ---- doc/usr/_site/es/usr-flags-pool6.html | 156 --- doc/usr/_site/es/usr-flags-pool6791.html | 156 --- doc/usr/_site/es/usr-flags-quick.html | 107 -- doc/usr/_site/es/usr-flags-session.html | 207 ---- doc/usr/_site/es/usr-flags.html | 126 --- doc/usr/_site/es/usr-install.html | 192 ---- doc/usr/_site/images/atomic-double-frag.png | Bin 84136 -> 0 bytes doc/usr/_site/images/banner1.gif | Bin 166 -> 0 bytes doc/usr/_site/images/banner2.gif | Bin 158 -> 0 bytes doc/usr/_site/images/banner_100px.gif | Bin 314 -> 0 bytes doc/usr/_site/images/banner_50px.gif | Bin 314 -> 0 bytes doc/usr/_site/images/bell.png | Bin 1150 -> 0 bytes doc/usr/_site/images/body.png | Bin 3529 -> 0 bytes doc/usr/_site/images/bulb.png | Bin 857 -> 0 bytes doc/usr/_site/images/email.png | Bin 1023 -> 0 bytes doc/usr/_site/images/flow/464-literal-en.svg | 440 --------- doc/usr/_site/images/flow/464-literal-es.svg | 440 --------- doc/usr/_site/images/flow/464-mirror-en.svg | 511 ---------- doc/usr/_site/images/flow/464-mirror-es.svg | 522 ---------- doc/usr/_site/images/flow/464-normal-en.svg | 605 ------------ doc/usr/_site/images/flow/464-normal-es.svg | 605 ------------ doc/usr/_site/images/flow/464-sful-en.svg | 440 --------- doc/usr/_site/images/flow/464-sful-es.svg | 440 --------- doc/usr/_site/images/flow/464-sless-en.svg | 440 --------- doc/usr/_site/images/flow/464-sless-es.svg | 440 --------- doc/usr/_site/images/flow/eam-en.svg | 415 -------- doc/usr/_site/images/flow/eam-es.svg | 426 -------- .../_site/images/flow/mtu-frag-fail-en.svg | 568 ----------- .../_site/images/flow/mtu-frag-fail-es.svg | 568 ----------- .../_site/images/flow/mtu-frag-success-en.svg | 484 ---------- .../_site/images/flow/mtu-frag-success-es.svg | 484 ---------- doc/usr/_site/images/flow/nat-en.svg | 435 --------- doc/usr/_site/images/flow/nat-es.svg | 436 --------- .../_site/images/flow/pool4-simple1-en.svg | 353 ------- .../_site/images/flow/pool4-simple2-en.svg | 355 ------- .../_site/images/flow/pool4-simple3-en.svg | 355 ------- doc/usr/_site/images/flow/stateful-en.svg | 434 --------- doc/usr/_site/images/flow/stateful-es.svg | 463 --------- doc/usr/_site/images/flow/vanilla-en.svg | 433 --------- doc/usr/_site/images/flow/vanilla-es.svg | 433 --------- .../_site/images/heavy_exclamation_mark.png | Bin 502 -> 0 bytes doc/usr/_site/images/jool.png | Bin 30663 -> 0 bytes doc/usr/_site/images/logo-nic.png | Bin 5331 -> 0 bytes doc/usr/_site/images/logo-tec.png | Bin 7715 -> 0 bytes doc/usr/_site/images/mailbox.png | Bin 1045 -> 0 bytes doc/usr/_site/images/mailbox_with_mail.png | Bin 1154 -> 0 bytes doc/usr/_site/images/network/464-needed.svg | 340 ------- doc/usr/_site/images/network/464-network.svg | 391 -------- doc/usr/_site/images/network/alternate.svg | 406 -------- doc/usr/_site/images/network/eam.svg | 587 ----------- doc/usr/_site/images/network/full-en.svg | 377 -------- doc/usr/_site/images/network/full-es.svg | 377 -------- doc/usr/_site/images/network/mtu-frag.svg | 346 ------- doc/usr/_site/images/network/nat-en.svg | 600 ------------ doc/usr/_site/images/network/nat-es.svg | 600 ------------ doc/usr/_site/images/network/rfc6791.svg | 298 ------ .../_site/images/network/src-icmp6-better.svg | 362 ------- doc/usr/_site/images/network/stateful.svg | 587 ----------- doc/usr/_site/images/network/vanilla.svg | 591 ------------ doc/usr/_site/images/offload-none.svg | 912 ------------------ doc/usr/_site/images/offload-right.svg | 552 ----------- doc/usr/_site/images/offload-router.svg | 592 ------------ doc/usr/_site/images/pencil.png | Bin 1192 -> 0 bytes doc/usr/_site/images/planet.png | Bin 1917 -> 0 bytes doc/usr/_site/images/plateaus-attempt1.svg | 441 --------- doc/usr/_site/images/plateaus-attempt2.svg | 473 --------- doc/usr/_site/images/plateaus-attempt3.svg | 467 --------- doc/usr/_site/images/plateaus-network.svg | 329 ------- doc/usr/_site/images/run-eam-firefox-4to6.png | Bin 26094 -> 0 bytes doc/usr/_site/images/run-eam-firefox-6to4.png | Bin 26157 -> 0 bytes .../images/run-stateful-firefox-4to6.png | Bin 26248 -> 0 bytes .../_site/images/run-vanilla-firefox-4to6.png | Bin 26115 -> 0 bytes .../_site/images/run-vanilla-firefox-6to4.png | Bin 26136 -> 0 bytes doc/usr/_site/images/small_orange_diamond.png | Bin 500 -> 0 bytes .../_site/images/small_red_triangle_down.png | Bin 495 -> 0 bytes doc/usr/_site/images/smiley.png | Bin 1276 -> 0 bytes doc/usr/_site/images/sparkles.png | Bin 800 -> 0 bytes doc/usr/_site/images/static-hiya.png | Bin 24912 -> 0 bytes doc/usr/_site/images/static-network.svg | 895 ----------------- doc/usr/_site/images/thumbsup.png | Bin 1009 -> 0 bytes doc/usr/_site/images/tut2.3-network.svg | 881 ----------------- doc/usr/_site/images/tut4-arrows.svg | 623 ------------ doc/usr/_site/images/tut4-setup.svg | 563 ----------- doc/usr/_site/images/usr-dropaddr-1.svg | 864 ----------------- doc/usr/_site/images/usr-dropaddr-2.svg | 836 ---------------- doc/usr/_site/images/usr-dropaddr-3.svg | 832 ---------------- doc/usr/_site/images/usr-session.svg | 769 --------------- doc/usr/_site/images/warning.png | Bin 909 -> 0 bytes doc/usr/_site/images/x.png | Bin 897 -> 0 bytes doc/usr/_site/index.html | 11 - doc/usr/_site/intro-jool.html | 11 - doc/usr/_site/intro-nat64.html | 11 - doc/usr/_site/misc-bib.html | 11 - doc/usr/_site/misc-eamt.html | 11 - doc/usr/_site/misc-faq.html | 11 - doc/usr/_site/misc-mtu.html | 11 - doc/usr/_site/misc-offloading.html | 11 - doc/usr/_site/misc-rfc6791.html | 11 - doc/usr/_site/mod-install.html | 11 - doc/usr/_site/mod-run-464xlat.html | 11 - doc/usr/_site/mod-run-alternate.html | 11 - doc/usr/_site/mod-run-eam.html | 11 - doc/usr/_site/mod-run-stateful.html | 11 - doc/usr/_site/mod-run-vanilla.html | 11 - doc/usr/_site/obj/464xlat/ipv4-n4.pcapng | Bin 548 -> 0 bytes doc/usr/_site/obj/464xlat/ipv4-n6.pcapng | Bin 552 -> 0 bytes doc/usr/_site/obj/464xlat/ipv4-plat.pcapng | Bin 528 -> 0 bytes doc/usr/_site/obj/464xlat/ipv4-r.pcapng | Bin 528 -> 0 bytes doc/usr/_site/obj/464xlat/ipv6-n4.pcapng | Bin 548 -> 0 bytes doc/usr/_site/obj/464xlat/ipv6-n6.pcapng | Bin 592 -> 0 bytes doc/usr/_site/obj/464xlat/ipv6-plat.pcapng | Bin 528 -> 0 bytes doc/usr/_site/obj/464xlat/ipv6-r.pcapng | Bin 568 -> 0 bytes doc/usr/_site/obj/atomic-double-frag.pcapng | Bin 4880 -> 0 bytes doc/usr/_site/obj/bib.csv | 5 - doc/usr/_site/obj/eamt.csv | 6 - doc/usr/_site/obj/session.csv | 4 - doc/usr/_site/obj/tut2.1-wireshark.wsk | Bin 1814 -> 0 bytes doc/usr/_site/op-dns64.html | 11 - doc/usr/_site/op-pool4.html | 11 - doc/usr/_site/op-static-bindings.html | 11 - doc/usr/_site/usr-flags-atomic.html | 11 - doc/usr/_site/usr-flags-bib.html | 11 - doc/usr/_site/usr-flags-blacklist.html | 11 - doc/usr/_site/usr-flags-eamt.html | 11 - doc/usr/_site/usr-flags-global.html | 11 - doc/usr/_site/usr-flags-help.html | 11 - doc/usr/_site/usr-flags-plateaus.html | 11 - doc/usr/_site/usr-flags-pool4.html | 11 - doc/usr/_site/usr-flags-pool6.html | 11 - doc/usr/_site/usr-flags-pool6791.html | 11 - doc/usr/_site/usr-flags-quick.html | 11 - doc/usr/_site/usr-flags-session.html | 11 - doc/usr/_site/usr-flags.html | 11 - doc/usr/_site/usr-install.html | 11 - 209 files changed, 2 insertions(+), 42751 deletions(-) delete mode 100644 doc/usr/_site/about.html delete mode 100644 doc/usr/_site/contact.html delete mode 100644 doc/usr/_site/css/print.css delete mode 100644 doc/usr/_site/css/style.css delete mode 100644 doc/usr/_site/doc-index.html delete mode 100644 doc/usr/_site/download.html delete mode 100644 doc/usr/_site/en/about.html delete mode 100644 doc/usr/_site/en/bib.html delete mode 100644 doc/usr/_site/en/contact.html delete mode 100644 doc/usr/_site/en/dns64.html delete mode 100644 doc/usr/_site/en/documentation.html delete mode 100644 doc/usr/_site/en/download.html delete mode 100644 doc/usr/_site/en/eamt.html delete mode 100644 doc/usr/_site/en/faq.html delete mode 100644 doc/usr/_site/en/index.html delete mode 100644 doc/usr/_site/en/intro-jool.html delete mode 100644 doc/usr/_site/en/intro-nat64.html delete mode 100644 doc/usr/_site/en/logging.html delete mode 100644 doc/usr/_site/en/mod-install.html delete mode 100644 doc/usr/_site/en/mod-run-464xlat.html delete mode 100644 doc/usr/_site/en/mod-run-alternate.html delete mode 100644 doc/usr/_site/en/mod-run-eam.html delete mode 100644 doc/usr/_site/en/mod-run-stateful.html delete mode 100644 doc/usr/_site/en/mod-run-vanilla.html delete mode 100644 doc/usr/_site/en/mtu.html delete mode 100644 doc/usr/_site/en/offloading.html delete mode 100644 doc/usr/_site/en/pool4.html delete mode 100644 doc/usr/_site/en/rfc6791.html delete mode 100644 doc/usr/_site/en/static-bindings.html delete mode 100644 doc/usr/_site/en/usr-flags-atomic.html delete mode 100644 doc/usr/_site/en/usr-flags-bib.html delete mode 100644 doc/usr/_site/en/usr-flags-blacklist.html delete mode 100644 doc/usr/_site/en/usr-flags-eamt.html delete mode 100644 doc/usr/_site/en/usr-flags-global.html delete mode 100644 doc/usr/_site/en/usr-flags-help.html delete mode 100644 doc/usr/_site/en/usr-flags-plateaus.html delete mode 100644 doc/usr/_site/en/usr-flags-pool4.html delete mode 100644 doc/usr/_site/en/usr-flags-pool6.html delete mode 100644 doc/usr/_site/en/usr-flags-pool6791.html delete mode 100644 doc/usr/_site/en/usr-flags-quick.html delete mode 100644 doc/usr/_site/en/usr-flags-session.html delete mode 100644 doc/usr/_site/en/usr-flags.html delete mode 100644 doc/usr/_site/en/usr-install.html delete mode 100644 doc/usr/_site/es/about.html delete mode 100644 doc/usr/_site/es/bib.html delete mode 100644 doc/usr/_site/es/contact.html delete mode 100644 doc/usr/_site/es/dns64.html delete mode 100644 doc/usr/_site/es/documentation.html delete mode 100644 doc/usr/_site/es/download.html delete mode 100644 doc/usr/_site/es/eamt.html delete mode 100644 doc/usr/_site/es/faq.html delete mode 100644 doc/usr/_site/es/index.html delete mode 100644 doc/usr/_site/es/intro-jool.html delete mode 100644 doc/usr/_site/es/intro-nat64.html delete mode 100644 doc/usr/_site/es/logging.html delete mode 100644 doc/usr/_site/es/mod-install.html delete mode 100644 doc/usr/_site/es/mod-run-464xlat.html delete mode 100644 doc/usr/_site/es/mod-run-alternate.html delete mode 100644 doc/usr/_site/es/mod-run-eam.html delete mode 100644 doc/usr/_site/es/mod-run-stateful.html delete mode 100644 doc/usr/_site/es/mod-run-vanilla.html delete mode 100644 doc/usr/_site/es/mtu.html delete mode 100644 doc/usr/_site/es/offloading.html delete mode 100644 doc/usr/_site/es/pool4.html delete mode 100644 doc/usr/_site/es/rfc6791.html delete mode 100644 doc/usr/_site/es/static-bindings.html delete mode 100644 doc/usr/_site/es/usr-flags-atomic.html delete mode 100644 doc/usr/_site/es/usr-flags-bib.html delete mode 100644 doc/usr/_site/es/usr-flags-blacklist.html delete mode 100644 doc/usr/_site/es/usr-flags-eamt.html delete mode 100644 doc/usr/_site/es/usr-flags-global.html delete mode 100644 doc/usr/_site/es/usr-flags-help.html delete mode 100644 doc/usr/_site/es/usr-flags-plateaus.html delete mode 100644 doc/usr/_site/es/usr-flags-pool4.html delete mode 100644 doc/usr/_site/es/usr-flags-pool6.html delete mode 100644 doc/usr/_site/es/usr-flags-pool6791.html delete mode 100644 doc/usr/_site/es/usr-flags-quick.html delete mode 100644 doc/usr/_site/es/usr-flags-session.html delete mode 100644 doc/usr/_site/es/usr-flags.html delete mode 100644 doc/usr/_site/es/usr-install.html delete mode 100644 doc/usr/_site/images/atomic-double-frag.png delete mode 100644 doc/usr/_site/images/banner1.gif delete mode 100644 doc/usr/_site/images/banner2.gif delete mode 100644 doc/usr/_site/images/banner_100px.gif delete mode 100644 doc/usr/_site/images/banner_50px.gif delete mode 100644 doc/usr/_site/images/bell.png delete mode 100644 doc/usr/_site/images/body.png delete mode 100644 doc/usr/_site/images/bulb.png delete mode 100644 doc/usr/_site/images/email.png delete mode 100644 doc/usr/_site/images/flow/464-literal-en.svg delete mode 100644 doc/usr/_site/images/flow/464-literal-es.svg delete mode 100644 doc/usr/_site/images/flow/464-mirror-en.svg delete mode 100644 doc/usr/_site/images/flow/464-mirror-es.svg delete mode 100644 doc/usr/_site/images/flow/464-normal-en.svg delete mode 100644 doc/usr/_site/images/flow/464-normal-es.svg delete mode 100644 doc/usr/_site/images/flow/464-sful-en.svg delete mode 100644 doc/usr/_site/images/flow/464-sful-es.svg delete mode 100644 doc/usr/_site/images/flow/464-sless-en.svg delete mode 100644 doc/usr/_site/images/flow/464-sless-es.svg delete mode 100644 doc/usr/_site/images/flow/eam-en.svg delete mode 100644 doc/usr/_site/images/flow/eam-es.svg delete mode 100644 doc/usr/_site/images/flow/mtu-frag-fail-en.svg delete mode 100644 doc/usr/_site/images/flow/mtu-frag-fail-es.svg delete mode 100644 doc/usr/_site/images/flow/mtu-frag-success-en.svg delete mode 100644 doc/usr/_site/images/flow/mtu-frag-success-es.svg delete mode 100644 doc/usr/_site/images/flow/nat-en.svg delete mode 100644 doc/usr/_site/images/flow/nat-es.svg delete mode 100644 doc/usr/_site/images/flow/pool4-simple1-en.svg delete mode 100644 doc/usr/_site/images/flow/pool4-simple2-en.svg delete mode 100644 doc/usr/_site/images/flow/pool4-simple3-en.svg delete mode 100644 doc/usr/_site/images/flow/stateful-en.svg delete mode 100644 doc/usr/_site/images/flow/stateful-es.svg delete mode 100644 doc/usr/_site/images/flow/vanilla-en.svg delete mode 100644 doc/usr/_site/images/flow/vanilla-es.svg delete mode 100644 doc/usr/_site/images/heavy_exclamation_mark.png delete mode 100644 doc/usr/_site/images/jool.png delete mode 100644 doc/usr/_site/images/logo-nic.png delete mode 100644 doc/usr/_site/images/logo-tec.png delete mode 100644 doc/usr/_site/images/mailbox.png delete mode 100644 doc/usr/_site/images/mailbox_with_mail.png delete mode 100644 doc/usr/_site/images/network/464-needed.svg delete mode 100644 doc/usr/_site/images/network/464-network.svg delete mode 100644 doc/usr/_site/images/network/alternate.svg delete mode 100644 doc/usr/_site/images/network/eam.svg delete mode 100644 doc/usr/_site/images/network/full-en.svg delete mode 100644 doc/usr/_site/images/network/full-es.svg delete mode 100644 doc/usr/_site/images/network/mtu-frag.svg delete mode 100644 doc/usr/_site/images/network/nat-en.svg delete mode 100644 doc/usr/_site/images/network/nat-es.svg delete mode 100644 doc/usr/_site/images/network/rfc6791.svg delete mode 100644 doc/usr/_site/images/network/src-icmp6-better.svg delete mode 100644 doc/usr/_site/images/network/stateful.svg delete mode 100644 doc/usr/_site/images/network/vanilla.svg delete mode 100644 doc/usr/_site/images/offload-none.svg delete mode 100644 doc/usr/_site/images/offload-right.svg delete mode 100644 doc/usr/_site/images/offload-router.svg delete mode 100644 doc/usr/_site/images/pencil.png delete mode 100644 doc/usr/_site/images/planet.png delete mode 100644 doc/usr/_site/images/plateaus-attempt1.svg delete mode 100644 doc/usr/_site/images/plateaus-attempt2.svg delete mode 100644 doc/usr/_site/images/plateaus-attempt3.svg delete mode 100644 doc/usr/_site/images/plateaus-network.svg delete mode 100644 doc/usr/_site/images/run-eam-firefox-4to6.png delete mode 100644 doc/usr/_site/images/run-eam-firefox-6to4.png delete mode 100644 doc/usr/_site/images/run-stateful-firefox-4to6.png delete mode 100644 doc/usr/_site/images/run-vanilla-firefox-4to6.png delete mode 100644 doc/usr/_site/images/run-vanilla-firefox-6to4.png delete mode 100644 doc/usr/_site/images/small_orange_diamond.png delete mode 100644 doc/usr/_site/images/small_red_triangle_down.png delete mode 100644 doc/usr/_site/images/smiley.png delete mode 100644 doc/usr/_site/images/sparkles.png delete mode 100644 doc/usr/_site/images/static-hiya.png delete mode 100644 doc/usr/_site/images/static-network.svg delete mode 100644 doc/usr/_site/images/thumbsup.png delete mode 100644 doc/usr/_site/images/tut2.3-network.svg delete mode 100644 doc/usr/_site/images/tut4-arrows.svg delete mode 100644 doc/usr/_site/images/tut4-setup.svg delete mode 100644 doc/usr/_site/images/usr-dropaddr-1.svg delete mode 100644 doc/usr/_site/images/usr-dropaddr-2.svg delete mode 100644 doc/usr/_site/images/usr-dropaddr-3.svg delete mode 100644 doc/usr/_site/images/usr-session.svg delete mode 100644 doc/usr/_site/images/warning.png delete mode 100644 doc/usr/_site/images/x.png delete mode 100644 doc/usr/_site/index.html delete mode 100644 doc/usr/_site/intro-jool.html delete mode 100644 doc/usr/_site/intro-nat64.html delete mode 100644 doc/usr/_site/misc-bib.html delete mode 100644 doc/usr/_site/misc-eamt.html delete mode 100644 doc/usr/_site/misc-faq.html delete mode 100644 doc/usr/_site/misc-mtu.html delete mode 100644 doc/usr/_site/misc-offloading.html delete mode 100644 doc/usr/_site/misc-rfc6791.html delete mode 100644 doc/usr/_site/mod-install.html delete mode 100644 doc/usr/_site/mod-run-464xlat.html delete mode 100644 doc/usr/_site/mod-run-alternate.html delete mode 100644 doc/usr/_site/mod-run-eam.html delete mode 100644 doc/usr/_site/mod-run-stateful.html delete mode 100644 doc/usr/_site/mod-run-vanilla.html delete mode 100644 doc/usr/_site/obj/464xlat/ipv4-n4.pcapng delete mode 100644 doc/usr/_site/obj/464xlat/ipv4-n6.pcapng delete mode 100644 doc/usr/_site/obj/464xlat/ipv4-plat.pcapng delete mode 100644 doc/usr/_site/obj/464xlat/ipv4-r.pcapng delete mode 100644 doc/usr/_site/obj/464xlat/ipv6-n4.pcapng delete mode 100644 doc/usr/_site/obj/464xlat/ipv6-n6.pcapng delete mode 100644 doc/usr/_site/obj/464xlat/ipv6-plat.pcapng delete mode 100644 doc/usr/_site/obj/464xlat/ipv6-r.pcapng delete mode 100644 doc/usr/_site/obj/atomic-double-frag.pcapng delete mode 100644 doc/usr/_site/obj/bib.csv delete mode 100644 doc/usr/_site/obj/eamt.csv delete mode 100644 doc/usr/_site/obj/session.csv delete mode 100644 doc/usr/_site/obj/tut2.1-wireshark.wsk delete mode 100644 doc/usr/_site/op-dns64.html delete mode 100644 doc/usr/_site/op-pool4.html delete mode 100644 doc/usr/_site/op-static-bindings.html delete mode 100644 doc/usr/_site/usr-flags-atomic.html delete mode 100644 doc/usr/_site/usr-flags-bib.html delete mode 100644 doc/usr/_site/usr-flags-blacklist.html delete mode 100644 doc/usr/_site/usr-flags-eamt.html delete mode 100644 doc/usr/_site/usr-flags-global.html delete mode 100644 doc/usr/_site/usr-flags-help.html delete mode 100644 doc/usr/_site/usr-flags-plateaus.html delete mode 100644 doc/usr/_site/usr-flags-pool4.html delete mode 100644 doc/usr/_site/usr-flags-pool6.html delete mode 100644 doc/usr/_site/usr-flags-pool6791.html delete mode 100644 doc/usr/_site/usr-flags-quick.html delete mode 100644 doc/usr/_site/usr-flags-session.html delete mode 100644 doc/usr/_site/usr-flags.html delete mode 100644 doc/usr/_site/usr-install.html diff --git a/.gitignore b/.gitignore index ac90b94d8..f09197255 100755 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,8 @@ # binaries jool jool_siit +# documentation +_site # Packages # ############ diff --git a/doc/usr/_site/about.html b/doc/usr/_site/about.html deleted file mode 100644 index 5352d51b2..000000000 --- a/doc/usr/_site/about.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - Redirect - - - Redirecting to en/about.html... - - diff --git a/doc/usr/_site/contact.html b/doc/usr/_site/contact.html deleted file mode 100644 index fe4ce167e..000000000 --- a/doc/usr/_site/contact.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - Redirect - - - Redirecting to en/contact.html... - - diff --git a/doc/usr/_site/css/print.css b/doc/usr/_site/css/print.css deleted file mode 100644 index 6853ec27d..000000000 --- a/doc/usr/_site/css/print.css +++ /dev/null @@ -1,10 +0,0 @@ -/* Remove unwanted elements */ -#header, #footer, #sidebar_navigation, #language_selector { - display: none; -} - -.worklogo img { - margin: 0 auto; - display:block; - width: 30%; -} diff --git a/doc/usr/_site/css/style.css b/doc/usr/_site/css/style.css deleted file mode 100644 index c0ed95612..000000000 --- a/doc/usr/_site/css/style.css +++ /dev/null @@ -1,401 +0,0 @@ -/* -Design by Free CSS Templates -http://www.freecsstemplates.org -Released for free under a Creative Commons Attribution 2.5 License -*/ - -* { - margin: 0px; - padding: 0px; -} - -body { - background: url(../images/body.png) repeat-x left top; - font-family: Arial, "Helvetica", sans-serif; - text-align: justify; - font-size: 15px; - color: #595959; -} - -h1, h2 { - font-family: Monaco, "Lucida Console", monospace; - /* font-weight: normal; */ -} - -h1, h2, h3 { - margin-top: 2em; - margin-bottom: 0.5em; -} - - -h1 a, h2 a, h3 a { - text-decoration: none; -} - -h1 a:hover, h2 a:hover, h3 a:hover { - text-decoration: underline; -} - -h1 { - margin-top: 1em; - letter-spacing: -2px; - font-size: 30px; - color: #00619f; -} - -h2 { - letter-spacing: -1px; - font-size: 20px; - color: #2e5c76; -} - -h3 { - /* font-size: 1em; */ -} - -p { - margin-bottom: 1em; - margin-top: 1em; - line-height: 150%; -} - -ul, ol { - line-height: 150%; - margin-left: 3em; -} - -blockquote { - padding: 1em; - border-radius: 3px; - border: 1px solid #ddd; - color: #707070; - font-size: 90%; - margin-left: 3em; - margin-right: 3em; - margin-bottom: 10px; -} - -blockquote strong { - color: #800; -} - -#page a { - text-decoration: none; - color: #00619f; -} - -#page a:hover { - text-decoration: underline; - color: #549DC7; -} - -/* Logo */ - -#logo { - width: 960px; - height: 80px; - margin: 0 auto; - text-align: center; -} - -#logo h1, #logo h2 { - float: left; - margin: 0; - padding-top: 5px; -} - -#logo h1 a { - padding: 0px 0 0 310px; - color: #004085; -} - - -#logo h1 a:hover { - text-decoration: none; - background: none; - -} - -#logo h2 { - padding: 18px 0 40px 7px; - letter-spacing: normal; - font-size: 1.4em; -} - -/* Page */ - -#page { - width: auto; - margin: 0 auto; - margin-top: 60px; -} - -/* Sidebars */ - -.sidebar { - float: left; - width: 200px; - margin-top: 152px; - padding-top: 20px; -} - -.sidebar ul { - margin: 0; - padding: 0; - list-style: none; -} - -.sidebar li { - padding-bottom: 30px; -} - -.sidebar li ul { - padding-bottom: 15px; -} - -.sidebar li li { - padding: 0; -} - -.sidebar h2 { - height: 40px; - margin: 1em 0px 0px 1em; - letter-spacing: normal; - font-size: 1.2em; - font-family: Monaco,"Lucida Console",monospace; - font-weight: normal; -} - -#language_selector { - float: left; - margin-top: 154px; - margin-left: 20px; - background: #F5F5F5; - border-radius: 5px 5px 0px 0px; - padding: 0px 10px 0px 10px; -} - -#language_selector .selected { - font-weight: bold; -} - -/* sidebar_navigation */ - -#sidebar_navigation { - padding-bottom: 15px; -} - -#sidebar_navigation li li { - padding: 5px; - text-align: center; - font-size: 15px; - background: url(../images/banner1.gif) repeat-x -} - - -/* Content */ - -#contentwrapper { - width: 1250px; - margin: 0 auto; -} - -#content { - float: left; - width: 842px; - background: -moz-linear-gradient(top, #ffffff 0%, #ebebeb 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ffffff), color-stop(100%,#ebebeb)); - background: -webkit-linear-gradient(top, #ffffff 0%,#ebebeb 100%); - background: -o-linear-gradient(top, #ffffff 0%,#ebebeb 100%); - background: -ms-linear-gradient(top, #ffffff 0%,#ebebeb 100%); - background: linear-gradient(to bottom, #ffffff 0%,#ebebeb 100%); - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#ebebeb',GradientType=0 ); - border: 2px solid #ebebeb; - -webkit-border-radius: 0px 10px 10px 10px; - border-radius: 10px; - margin: 0 auto; -} - -.workarea { - min-height: 800px; -} - -.content_text { - padding: 0px 25px 40px 25px; -} - -.title { - margin: 0; - padding: 20px 0px; -} - - -.content_text .title1 { - margin: 0; - padding: 5px 65px; - background: url(../images/banner1.gif) repeat-x; -} - -.content_text .entry { - padding: 10px; - border-bottom: 1px solid #CDCDCD; -} - -.post .tags, .post .links { - margin: 0; - line-height: normal; - font-size: smaller; - text-align: center; -} - -.post .tags { - padding-top: 10px; - border-top: 1px dashed #D9EBFF; -} - -.correlate1 { - background-color: #eff; -} -.correlate2 { - background-color: #def; -} - -/* Footer */ - -#footer { - min-width: 1250px; - height: 100px; - padding: 15px 0; - text-align: center; - background: #00619f; -} - - -.legal { - padding-left: 90px; - margin: 0 auto; - float: center; - font-size: 13px; - line-height: normal; - color: #ffffff; -} - - -pre code { - font-size: 13px; - display: block; - overflow: auto; - padding: 6px 10px; - border-radius: 3px; - margin-bottom: 20px; -} - -code { - font-size: 14px; - background-color: #f8f8f8; - border: 1px solid #ddd; - padding-left: 0.3em; - padding-right: 0.3em; -} - -.bash .c { - color: #058; -} - -table { - background-color: #f8f8f8; -} - -td, th { - border: 1px solid #ddd; - padding: 0.5em; - text-align: center; -} - -hr { - margin-top: 2em; - margin-bottom: 2em; -} - -.logo-tec { - position: absolute; - float: left; - display: block; - overflow: auto; - padding-left: 10px; -} - -.logo-nic { - padding-right: 10px; - float: right; - display: block; - overflow: auto; - padding-left: 10px; -} - -.left_sidebar_menu a:hover { - display:block; - width:100%; - height:100%; -} - -.right_sidebar h3 { - padding: 4px 15px 9px 0; -} - -.left_sidebar_menu h3 { - padding: 4px 15px 5px 0; -} - -.left_sidebar_menu_selected { - position: relative; - background: url(../images/banner_100px.gif) repeat-x; - border: none; - width: 200px; - height: 35px; - text-align: center; - line-height: 37px; - color: #00619f; - font-weight: bold; -} - -.left_sidebar_menu_button { - position: relative; - background: url(../images/banner_50px.gif) repeat-x; - border: none; - cursor: pointer; - width: 200px; - height: 35px; -} - -.left_sidebar_menu_button a { - text-align: center; - line-height: 37px; - color: #7a7a7a; - display:block; - width:100%; - height:100%; - text-decoration: none; -} - -.left_sidebar_menu_button a:hover { - color: #000; - text-decoration: none; -} - -.left_sidebar_menu_button:hover { - background: url(../images/banner_100px.gif) repeat-x; -} - -.worklogo { - margin: 0 auto; - display:block; - width:488px; - height:198px; -} - -.worklogo a { - display:block; - width:100%; - height:100%; -} diff --git a/doc/usr/_site/doc-index.html b/doc/usr/_site/doc-index.html deleted file mode 100644 index 703d2ed9e..000000000 --- a/doc/usr/_site/doc-index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - Redirect - - - Redirecting to en/documentation.html... - - diff --git a/doc/usr/_site/download.html b/doc/usr/_site/download.html deleted file mode 100644 index 7d22d056c..000000000 --- a/doc/usr/_site/download.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - Redirect - - - Redirecting to en/download.html... - - diff --git a/doc/usr/_site/en/about.html b/doc/usr/_site/en/about.html deleted file mode 100644 index e1f98c324..000000000 --- a/doc/usr/_site/en/about.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - About - - - - - -
- - - - - - diff --git a/doc/usr/_site/en/bib.html b/doc/usr/_site/en/bib.html deleted file mode 100644 index ac533fb00..000000000 --- a/doc/usr/_site/en/bib.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - BIB - - - - - -
-
- -
- -
-
- -

Documentation > Runs > Stateful NAT64 > BIB

- -

BIB

- -

The Binding Information Base (BIB) is a collection of tables in a stateful NAT64. It is defined in RFC 6146. Hopefully, this document can serve as a friendly overview.

- -

Records in this database map the IPv6 transport addresses of a IPv6 node’s connection to the IPv4 transport address Jool is using to mask it. For example, if the following mapping exists in your NAT64:

- - - - - - - - - - - - - - - - -
IPv6 transport addressIPv4 transport addressProtocol
6::6#664.4.4.4#44TCP
- -

Then IPv4 nodes can find the TCP service published in 6::6 on port 66, by querying 4.4.4.4 on port 44. In other words, Jool fools IPv4 nodes into thinking that 6::6#66 is 4.4.4.4#44.

- -
    -
  • We call “BIB entry†a record in a BIB table (ie. a descriptor of a mask).
  • -
  • We call “BIB table†a collection of records which share a protocol. There are three supported protocols (TCP, UDP and ICMP), therefore Jool has three BIB tables.
  • -
  • We call “BIB†the collection of Jool’s three BIB tables.
  • -
- -

There are two types of BIB entries:

- -
    -
  • Static: You create them manually, to publish a IPv6 service to the IPv4 Internet. This is analogous to port forwarding in normal NATs.
  • -
  • Dynamic: Jool creates these on the fly. This has to be done because IPv6-started connections also need IPv4 masks (otherwise they wouldn’t be able to receive answers).
  • -
- -

See the walkthrough or the reference material for information on how to create and destroy entries manually. See --address-dependent-filtering if you think dynamic entries are dangerous.

- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/en/contact.html b/doc/usr/_site/en/contact.html deleted file mode 100644 index 79eaa4c28..000000000 --- a/doc/usr/_site/en/contact.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - Contact - - - - - -
-
- -
- -
-
- -

Contact

- -
    -
  • jool-list@nic.mx is a mail list intended for general public discussion and news. Questions, requests and comments welcomed.
    -A misplaced security gimmic currently prevents the archives from being public, but they are actually being built and will become available as soon as the TODO reaches one of our admins.
    -You can register to this list here.
  • -
  • jool-news@nic.mx is a mail list intended to inform news to its recipients. At this point, it is only used to signal new releases being published at this site.
    -Anyone can listen, but only the dev team can place mails here, so you don’t have to worry about spam.
    -You can register to this list here.
    -Because of its purpose, this list rarely sees more than one e-mail a month.
  • -
  • jool@nic.mx is a mail alias you can use to reach us developers only.
    -Though we’re willing to provide advice via this medium, we’d be grateful is you used jool-list@nic.mx for this purpose instead so a future archive surfer can benefit from the experience.
  • -
  • Our official bug tracker is the Github corner. This is also a good place to request features.
  • -
- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/en/dns64.html b/doc/usr/_site/en/dns64.html deleted file mode 100644 index bef5152e5..000000000 --- a/doc/usr/_site/en/dns64.html +++ /dev/null @@ -1,212 +0,0 @@ - - - - - DNS64 - - - - - -
-
- -
- -
-
- -

Documentation > Runs > DNS64

- -

DNS64 Tutorial

- -

Index

- -
    -
  1. Introduction
  2. -
  3. Network
  4. -
  5. Configuration -
      -
    1. BIND
    2. -
    3. Everything else
    4. -
    -
  6. -
  7. Outcome
  8. -
- -

Introduction

- -

This document focuses on DNS64, the last key to have a fully-sensical NAT64 installation.

- -

Any correct DNS64 implementation is supposed to work; BIND will be used for illustration here. I expect you to be already familiarized with DNS and have at least an idea of what BIND’s configuration looks like.

- -

Network

- -

Fig.1 - Setup

- -

Though Jool and the DNS64 are portrayed as separate nodes, there’s nothing preventing you from joining them in a single machine (unless Jool is monopolizing all of its node’s IPv4 addresses, of course).

- -

Configuration

- -

BIND

- -

First, I will clarify what we want to achieve.

- -

example.com is a domain that is available from both the IPv4 and the IPv6 internets, and hence it has both kinds of records:

- -
$ dig example.com A
-(...)
-;; ANSWER SECTION:
-example.com.		66029	IN	A	93.184.216.119
-(...)
-
-$ dig example.com AAAA
-(...)
-;; ANSWER SECTION:
-example.com.		86040	IN	AAAA	2606:2800:220:6d:26bf:1447:1097:aa7
-(...)
- -

nat64-tutorial.mx is an example of a domain available only from IPv4:

- -
$ dig nat64-tutorial.mx A
-(...)
-;; ANSWER SECTION:
-nat64-tutorial.mx.	66029	IN	A	200.94.182.36
-(...)
-
-$ dig nat64-tutorial.mx AAAA
-(...)
-;; AUTHORITY SECTION:
-nat64-tutorial.mx.	240	IN	SOA	potato.mx. hostmaster.jool.mx. 2013070801 3600 900 604800 1800
-(...)
- -

There’s no need for an IPv6 node to access example.com via the NAT64. On the other hand, nat64-tutorial.mx cannot be accessed from IPv6 without one.

- -

In other words, we want the DNS64 service to return 2606:2800:220:6d:26bf:1447:1097:aa7 when asked for the AAAA record of example.com (which is what it normally does), and 64:ff9b::200.94.182.36 (i.e. the NAT64 prefix plus the IPv4 address) when asked for the AAAA record of nat64-tutorial.mx (which is the whole NAT64 hack).

- -

First, have a working BIND server. On Ubuntu, the only thing you have to do (assuming you don’t already have one) is run

- -
user@B:~# apt-get install bind9
- -

The most basic configuration is very minimalistic. In order to turn on DNS64, the options section from the named.conf file (in my case, /etc/bind/named.conf.options) is the only one in which statements must be updated:

- -
options {
-	(...)
-
-	# Listening on IPv6 is off by default.
-	listen-on-v6 { any; };
-
-	# This is the key. Note that you can write multiple of these if you need
-	# more IPv6 prefixes.
-	# "64:ff9b::/96" has to be the same as Jool's `pool6`.
-	dns64 64:ff9b::/96 {
-		# Options per prefix (if you need them) here.
-		# More info here: https://kb.isc.org/article/AA-01031
-	};
-};
- -

And remember to reload.

- -
user@B:~# sudo service bind9 restart
- -

That’s it!

- -

Everything else

- -

The outermost networks changed, and that should probably be reflected in everyone’s routing tables:

- -
user@J:~# /sbin/ip -6 route del 2001:db8:1::/64
-user@J:~# /sbin/ip -6 route add default via 2001:db8:2::1 dev eth0
- -

(Similar instructions should be echoed in the routers and the nodes)

- -

Jool or J don’t need to be aware of the DNS64 because domain names are completely transparent to NAT64, so you don’t need to do anything else in J.

- -

As for the leaf nodes, any IPv6 node which needs to access IPv4-only content should use the DNS64 as its default name server (unless you want to specify it manually in your dig commands, I guess).

- -

Outcome

- -

From one of those IPv6 nodes:

- -
$ dig example.com AAAA
-(...)
-;; ANSWER SECTION:
-example.com.		86040	IN	AAAA	2606:2800:220:6d:26bf:1447:1097:aa7
-(...)
-
-$ dig nat64-tutorial.mx AAAA
-(...)
-;; AUTHORITY SECTION:
-nat64-tutorial.mx.	86040	IN	AAAA	64:ff9b::c85e:b624
-(...)
- -

If you sniff the traffic, you should see packets towards example.com on R, and packets towards nat64-tutorial.mx via S:

- -

Fig.2 - Arrows

- -

Happy ending!

- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/en/documentation.html b/doc/usr/_site/en/documentation.html deleted file mode 100644 index a02f65f9a..000000000 --- a/doc/usr/_site/en/documentation.html +++ /dev/null @@ -1,145 +0,0 @@ - - - - - Documentation Index - - - - - -
-
- -
- -
-
- -

Documentation

- -

Welcome to Jool’s documentation index.

- -

Introduction

- -
    -
  1. What is SIIT/NAT64?
  2. -
  3. What is Jool?
  4. -
- -

See RFC 6586 for deployment experiences using Stateful NAT64.

- -

Installation

- -
    -
  1. Kernel module
  2. -
  3. Userspace application
  4. -
- -

Runs

- -
    -
  1. SIIT -
      -
    1. RFC 6791
    2. -
    -
  2. -
  3. SIIT + EAM -
      -
    1. The EAMT
    2. -
    -
  4. -
  5. Stateful NAT64 -
      -
    1. The IPv4 Transport Address Pool
    2. -
    3. BIB - -
    4. -
    -
  6. -
  7. DNS64
  8. -
  9. 464XLAT - SIIT/DC Dual Translation Mode
  10. -
- -

Userspace Application

- -
    -
  1. Flags
  2. -
- -

Miscellaneous

- -
    -
  1. FAQ
  2. -
  3. Logging
  4. -
  5. MTU and Fragmentation
  6. -
  7. The problem with Offloading
  8. -
  9. Single Interface
  10. -
- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/en/download.html b/doc/usr/_site/en/download.html deleted file mode 100644 index cc879b5ed..000000000 --- a/doc/usr/_site/en/download.html +++ /dev/null @@ -1,246 +0,0 @@ - - - - - Download - - - - - -
-
- -
- -
-
- -

Download

- - - -
    -
  • Bold marks the most recommended version(s).
  • -
  • Normal font signals recommended fallback versions in case the previous option fails you (bug reports welcomed).
  • -
  • Striked versions are not recommended (either because they’re too old or have known critical bugs).
  • -
- -

3.3.x

- -

Jool 3.3 is a fairly compliant SIIT and Stateful NAT64.

- -

3.3.2 is the latest version. It is also considered the most mature version of Jool.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
DownloadSHA512MD5Git commit
3.3.2SHA512MD5Link
3.3.1SHA512MD5Link
3.3.0SHA512MD5Link
- -

3.2.x

- -

The 3.2 series improves 3.1 by implementing Simultaneous Open. It also has provides an option to flush its pools and has several internal tweaks.

- -

3.2.3 is the latest version.

- -

The documentation on this site pertains the 3.3 series. You can download a snapshot of the 3.2 documentation here.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
DownloadSHA512MD5Git commit
3.2.3SHA512MD5Link
3.2.2SHA512MD5Link
3.2.1SHA512MD5Link
3.2.0SHA512MD5Link
- -

3.1.x

- -

The 3.1 series is a fairly standard-compliant stateful NAT64. Its missing features are

- -
    -
  • Filtering policies.
  • -
  • Simultaneous Open of TCP Connections.
  • -
- -

The latest version is 3.1.6.

- -

The documentation on this site pertains the 3.3 series. You can download a snapshot of the 3.1 documentation here.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
DownloadSHA512MD5Git commit
3.1.6SHA512MD5Link
3.1.5SHA512MD5Link
3.1.4SHA512MD5Link
3.1.3SHA512MD5Link
3.1.2SHA512MD5Link
3.1.1SHA512MD5Link
3.1.0SHA512MD5Link
- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/en/eamt.html b/doc/usr/_site/en/eamt.html deleted file mode 100644 index 3fa5083db..000000000 --- a/doc/usr/_site/en/eamt.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - EAMT - - - - - -
-
- -
- -
-
- -

Documentation > Runs > SIIT + EAM > EAMT

- -

EAMT

- -

The Explicit Address Mappings Table (EAMT) is a collection of records in an SIIT device which describe how different addresses should be translated. As of 2015-08-28, its latest revision is draft-anderson-v6ops-siit-eam.

- -

Here’s an example of an EAMT:

- - - - - - - - - - - - - - - - - - - - - - -
IPv4 PrefixIPv6 Prefix
192.0.2.1/322001:db8:aaaa::5/128
198.51.100.0/242001:db8:bbbb::/120
203.0.113.8/292001:db8:cccc::/125
- -

An EAMT entry is composed of an IPv4 prefix and an IPv6 prefix. When an address is being translated, its prefix is literally replaced according to the table. In Jool’s implementation, all records are bidirectional.

- -

The first record shown is the simplest case. Because there is no suffix, the record literally says “Address 192.0.2.1 should always be translated as 2001:db8:aaaa::5, and vice versaâ€. Whether the address is source, destination, or lies within the inner packet of an ICMP error, doesn’t matter. The IPv6 representation of 192.0.2.1 is 2001:db8:aaaa::5, and the IPv4 representation of 2001:db8:aaaa::5 is 192.0.2.1. Period.

- -

The second entry is more interesting. Because there is a full byte of suffix, the record is saying “198.51.100.x should be translated as 2001:db8:bbbb::x, and vice versa. x is any number between 0-255.â€

- -

As in:

- -
    -
  • 198.51.100.0 <-> 2001:db8:bbbb::0
  • -
  • 198.51.100.1 <-> 2001:db8:bbbb::1
  • -
  • 198.51.100.2 <-> 2001:db8:bbbb::2
  • -
  • …
  • -
  • 198.51.100.254 <-> 2001:db8:bbbb::fe
  • -
  • 198.51.100.255 <-> 2001:db8:bbbb::ff
  • -
- -

This form can help you simplify configuration when you have lots of addresses to map; the suffix is always preserved, so the point is a single EAMT entry can describe the translation of an entire network.

- -

(Also, a single EAMT entry describing a /16 is way more efficient than the equivalent 65536 atomic records.)

- -

The prefix replacement is done at bit level. The third entry exemplifies this: Address 203.0.113.8 becomes 2001:db8:cccc::, not 2001:db8:cccc::8. This is because .8’s binary form is 00001000, and the one is at the prefix side. These are some other mappings generated by the entry:

- -
    -
  • 203.0.113.9 <-> 2001:db8:cccc::1
  • -
  • 203.0.113.10 <-> 2001:db8:cccc::2
  • -
  • 203.0.113.12 <-> 2001:db8:cccc::4
  • -
  • 203.0.113.15 <-> 2001:db8:cccc::7
  • -
- -

If Jool doesn’t find a match in the table for an address, it tries to translate based on the pool6 prefix. If that also fails, the packet is returned to the kernel (ie. it is assumed it wasn’t meant to be translated).

- -

See the walkthrough or the reference material for information on how to create and destroy entries manually.

- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/en/faq.html b/doc/usr/_site/en/faq.html deleted file mode 100644 index 09931328a..000000000 --- a/doc/usr/_site/en/faq.html +++ /dev/null @@ -1,206 +0,0 @@ - - - - - FAQ - - - - - -
-
- -
- -
-
- -

Documentation > Miscellaneous > FAQ

- -

Troubleshooting/FAQ

- -

This sums up problems we’ve seen users run into.

- -

I modprobed Jool but it doesn’t seem to be doing anything.

- -

Modprobing Jool without enough arguments is legal. It will assume you intend to finish configuring using the userspace app, and sit idle until you’ve done so.

- -

Use the userspace app’s --global flag to figure out Jool’s status:

- -
$ jool_siit --global
-  Status: Disabled
- -
$ jool --global
-  Status: Disabled
- -

SIIT Jool’s minimum configuration requirements are

- - - -

Stateful Jool’s minimum configuration requirements are

- - - -

If that doesn’t seem to be the problem, try the logs.

- -

What do I do with this error message? It’s horribly ambiguous.

- -

This happens if your text terminal is not listening to kernel messages of error severity.

- -

The jist of it is, if a problem with the incoming configuration is detected in kernelspace, Jool doesn’t send the friendly version of the error message to the userspace application because it’s lazy. Instead, it writes it in the kernel logs. The userspace application is then stuck with a generic Unix error code, and that’s what it reports to the user.

- -

Run dmesg or one of its variats to query the kernel logs, as shown in the issue report.

- -

Jool is intermitently unable to translate traffic.

- -

Did you run something in the lines of

- -
ip addr flush dev eth1
- -

?

- -

Then you might have deleted the interface’s Link address.

- -

Link addresses are used by several relevant IPv6 protocols. In particular, they are used by the Neighbor Discovery Protocol, which means if you don’t have them, the translating machine will have trouble finding its IPv6 neighbors.

- -

Check the output of ip addr.

- -
user@T:~$ /sbin/ip address
-1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
-    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
-    inet 127.0.0.1/8 scope host lo
-    inet6 ::1/128 scope host 
-       valid_lft forever preferred_lft forever
-2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
-    link/ether 08:00:27:83:d9:40 brd ff:ff:ff:ff:ff:ff
-    inet6 2001:db8:aaaa::1/64 scope global 
-       valid_lft forever preferred_lft forever
-    inet6 fe80::a00:27ff:fe83:d940/64 scope link 
-       valid_lft forever preferred_lft forever
-3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
-    link/ether 08:00:27:c6:01:48 brd ff:ff:ff:ff:ff:ff
-    inet6 2001:db8:bbbb::1/64 scope global tentative 
-       valid_lft forever preferred_lft forever
-
- -

Interface eth0 is correctly configured; it has both a “scope global†address (used for typical traffic) and a “scope link†address (used for internal management). Interface eth1 lacks a link address, and is therefore a headache inducer.

- -

The easiest way to restore scope link addresses, we have found, is to just reset the interface:

- -
ip link set eth1 down
-ip link set eth1 up
- -

Yes, I’m serious:

- -
user@T:~$ /sbin/ip address
-1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
-    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
-    inet 127.0.0.1/8 scope host lo
-    inet6 ::1/128 scope host 
-       valid_lft forever preferred_lft forever
-2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
-    link/ether 08:00:27:83:d9:40 brd ff:ff:ff:ff:ff:ff
-    inet6 2001:db8:aaaa::1/64 scope global 
-       valid_lft forever preferred_lft forever
-    inet6 fe80::a00:27ff:fe83:d940/64 scope link 
-       valid_lft forever preferred_lft forever
-3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
-    link/ether 08:00:27:c6:01:48 brd ff:ff:ff:ff:ff:ff
-    inet6 fe80::a00:27ff:fec6:148/64 scope link 
-       valid_lft forever preferred_lft forever
-
- -

(Note, you need to add the global address again)

- -

Also, for future reference, keep in mind that the “correct†way to flush an interface is

- -
ip addr flush dev eth1 scope global
- -

IPv4 doesn’t need link addresses that much.

- -

The throughput is terrible!

- -

Turn offloads off!

- -

If you’re running Jool in a guest virtual machine, something important to keep in mind is that you might rather or also have to disable offloads in the VM host’s uplink interface.

- -

I can’t ping the IPv4 pool address.

- -

Actually, this is normal in Jool 3.2.x and below. The destination address of the ping packet is translatable, so Jool is stealing the packet. Unfortunately, it doesn’t have a relevant BIB entry (because the ping wasn’t started from IPv6), so the translation is a failure (and the packet is dropped).

- -

It looking weird aside, it doesn’t cause any other catastrophes; just ping the node address.

- -

Jool 3.3+ handles this better and the ping should succeed.

- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/en/index.html b/doc/usr/_site/en/index.html deleted file mode 100644 index 55bdf0400..000000000 --- a/doc/usr/_site/en/index.html +++ /dev/null @@ -1,295 +0,0 @@ - - - - - Home - - - - - -
-
- -
- -
-
- -

Home

- -
- -

Introduction

- -

Jool is an Open Source SIIT and NAT64 for Linux.

- - - -
- -

Status

- -

As far as we know, Jool is a fairly compliant SIIT and Stateful NAT64. This is the roadmap as of 2015-08-19:

- -
    -
  1. Milestone 4.0.0 will be a framework switch. Jool might become a device driver or a userspace daemon. This will free Jool from most of its compliance problems and might make it more intuitive to configure.
  2. -
  3. Milestone 4.1.0 will add several new features.
  4. -
- -

New bug reports might interpolate other milestones in-between. Feedback from users can persuade us to change priorities. See Contact for options on this.

- -

Our latest release is version 3.4.0.

- -
- -

News

- -

2015-04-14

- -

Version 3.3.2 released.

- -

This is the summary:

- - - -

Also, unrelated to the code, we now have two mailing lists:

- -
    -
  • jool-news@nic.mx is intended to spread news. Since we currently don’t have other major events, the plan is to only use it to announce new releases coming out. Click here to start listening.
  • -
  • jool-list@nic.mx can be used for public discussion (help, proposals, whatever). I will also drop the news here so people doesn’t have to subscribe to both at a time. Click here to register.
  • -
- -

jool@nic.mx can still be used to reach us developers only.

- -

We’d also like to apologize for the certificate hiccup we had recently. Though they are being generated, the mailing list archives are also not available yet, and this is in our admins’ TODO list.

- -

2015-03-11

- -

Important bug discovered!

- -

We just released Jool 3.3.1.

- -

2015-03-09

- -

Jool 3.3.0 is finished.

- -

Filtering couldn’t make it into the milestone, but Stateless IP/ICMP Translation (SIIT) is now supported.

- -

See the updated SIIT/NAT64 introduction for an improved picture of the SIIT paradigm. Here’s the tutorial. Also keep an eye on 464XLAT.

- -

We also refactored the userspace app somewhat; please review your scripts:

- - - -

We also released Jool 3.2.3, which is bugfixes since 3.2.2. One of the bugs is a DoS vulnerability, so upgrading to at least 3.2.3 is highly recommended.

- -

2014-10-24

- -

An important bug was discovered, and version 3.2.2 is out.

- -

2014-10-17

- -

The documentation of --plateaus proved to be lacking, so there’s now a full article dedicated to it. The original definition also received improvements.

- -

It has come to our attention that we are also lacking an explanation of IP literals, so there should be another codeless update like this in the near future.

- -

2014-10-08

- -

Version 3.2.1 released. The 3.2 series is now considered more mature than 3.1.

- -

The important changes are

- -
    -
  1. Jool used to always attempt to mask packets using the first prefix of the pool. This meant that Jool was unable to handle more than one prefix.
  2. -
  3. The memory leak in the core has been purged.
  4. -
- -

The less noticeable ones are

- -
    -
  1. log_martians is no longer a step in modprobing Jool (though it doesn’t bite if you keep it).
  2. -
  3. The SNMP stat updates returned. See nstat and netstat -s.
  4. -
  5. Corner-case packets now get checksums updated correctly.
  6. -
- -

2014-09-01

- -

It took it a really long time to overcome testing, but version 3.2.0 is finally released.

- -

We changed the minor version number this time, because the userspace application has a slightly different interface; the single-value configuration parameters have been joined: --general replaced --filtering, --translate and --fragmentation. The application also has three new features:

- -
    -
  1. The ability to flush the pools.
  2. -
  3. The addition of --quick.
  4. -
  5. The addition of --svg, in BIB and session.
  6. -
- -

The second main novelty is the finally correct implementation of Simultaneous Open of TCP Connections. The translation pipeline should now be completely quirkless.

- -

A little confusion also revealed that the path to libnl used to be hardcoded in the configuration script. If you used to have trouble compiling the userspace application, you might want to try again using the new version.

- -

The more unnoticeable stuff includes a complement to the old issue #65 and a healthier code-to-comment ratio :). The user documentation, on the other hand, received a significant refactor, so looking at the diff might not be overly productive this time.

- -

One thing we did not complete was the fragmentation refactor. This is in fact the reason why this milestone dragged. We appear to really need to reconcile the kernel’s defragmenter and the RFC in order to implement filtering policies however, so it’s still considered an active issue.

- -

We also released 3.1.6, which is small fixes from 3.1.5, in case somebody has a reason to continue using the 3.1.x series.

- -

2014-06-26

- -

By the way:

- -

If you can read Markdown and Github’s diffs, you can find the documentation changes for version 3.1.5 here, here and here.

- -

2014-06-18

- -

Version 3.1.5 released.

- -

Our most important fix is issue #92. Incorrect ICMP errors used to confuse IPv4 nodes, which lowered the reliability of 4-to-6 traffic.

- -

Aside from that, the userspace application has been tightened. It doesn’t crash silly anymore when it has to output large BIB or session tables, and works a lot harder to keep the database free from trashy leftover records.

- -

Then we have a couple of performance optimizations. In particular (and more or less as a side effect), by aligning log priorities to those from the rest of the kernel, more care has been taken to keep the log cleaner.

- -

If you care about performance, you might want to read the as-of-now-missing documentation of --minMTU6, a configuration parameter that helps you avoid fragmentation.

- -

If people doesn’t find critical bugs in this version, this appears to be the end of the 3.1.x series. We’ll go back to aim for 100% RFC compliance in the next update.

- -

2014-04-25

- -

Version 3.1.4 released. Fixes:

- -
    -
  1. Two kernel crashes.
  2. -
  3. The userspace application now resolves names.
  4. -
  5. Added support for Linux 3.13+.
  6. -
- -

Also, we no longer recommend usage of Jool in kernel 3.12.

- -

2014-03-26

- -

Version 3.1.3 released. Fixes:

- -
    -
  1. An incorrect implementation used to ban configuration on certain systems.
  2. -
  3. A bug used to prevent Jool from sending certain ICMP errors.
  4. -
  5. A memory leak.
  6. -
  7. Slightly optimized the packet translation algorithm by replacing some spinlocks with RCUs.
  8. -
- -

2014-03-04

- -

Website released. This website!

- -

And with it comes a new release. 3.1.2 fixes:

- -
    -
  1. 21-centuried the userspace-app’s installation procedure.
  2. -
  3. Jool is now more explicit regarding the suffix of prefixes.
  4. -
  5. Jool no longer wrecks itself when modprobed with invalid arguments.
  6. -
- -

2014-02-21

- -

Version 3.1.1 released.

- -

It contains two bugfixes:

- -
    -
  1. Added permission checking to the admin-related userspace requests.
  2. -
  3. Fixed compatibility issues with ~3.1 kernels.
  4. -
- -

2014-01-15

- -

Version 3.1.0 released. Jool finally handles fragments!

- -

Other important fixes:

- -
    -
  • Major optimizations on both the BIB and session databases. The module should scale a lot more gracefully as clients demand more traffic.
  • -
  • Jool no longer requires a separate IPv4 address.
  • -
  • Kernel panic during removal of the module fixed.
  • -
  • And More stuff.
  • -
- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/en/intro-jool.html b/doc/usr/_site/en/intro-jool.html deleted file mode 100644 index 5e8d29dd9..000000000 --- a/doc/usr/_site/en/intro-jool.html +++ /dev/null @@ -1,228 +0,0 @@ - - - - - Introduction to Jool - - - - - -
-
- -
- -
-
- -

Documentation > Introduction > Jool

- -

Introduction to Jool

- -

Index

- -
    -
  1. Overview
  2. -
  3. Compliance
  4. -
  5. Compatibility
  6. -
- -

Overview

- -

Jool is an Open Source implementation of IPv4/IPv6 Translation on Linux. Until version 3.2.x, it used to be only a Stateful NAT64; starting from 3.3.0, it also supports SIIT mode.

- -

Compliance

- -

As far as we know, this is the compliance status of Jool 3.3:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
RFC/draftReminder nameStatus
RFC 6052IP address translationFully compliant.
RFC 6144IPv4/IPv6 Translation FrameworkFully compliant.
RFC 6145SIITThe atomic fragment implementation is generally broken. Otherwise compliant.
RFC 6146Stateful NAT64Mostly compliant.
(Inherits RFC 6145 compliance issues)
We have also been unable to implement Filtering Policies.
RFC 6384FTP over NAT64Not yet compliant.
RFC 6791ICMP quirksIn short, this RFC wants two things: A pool of IPv4 addresses and an ICMP header extension. Jool implements the former but not the latter.
RFC 6877464XLATRather implemented as SIIT-DC; see below.
draft-ietf-v6ops-siit-dcSIIT-DCFully compliant.
draft-ietf-v6ops-siit-dc-2xlatSIIT-DC Edge TranslatorHost-based mode not implemented.
draft-ietf-6man-deprecate-atomfrag-generationAtomic Fragment DeprecationStrictly speaking, the draft wants us to completely trash the atomic fragments concept. We do implement them -poorly- as an alternate and utterly discouraged mode.
draft-anderson-v6ops-siit-eamEAMFully compliant.
- -

Please let us know if you find additional compliance issues or RFCs/drafts we’ve missed.

- -

Compatibility

- -

We’re supposed to support Linux kernels 3.0.0 and up. While most of the development time has been spent experimenting on Ubuntu 12.04 and 14.04 using current kernels, we’ve performed a healthy amount of formal testing on Jool 3.1.5 and 3.2.2 in the following variants:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
DistributionKernels
CentOS 73.10.0-123.el7.x86_64
Debian 7.53.2.0-4-amd64
Red Hat Enterprise Linux 73.10.0-123.4.4.el7.x86_64
SuSE Linux Enterprise Desktop 11 SP33.0.101-0.31-default
Ubuntu 12.043.1.10-030110-generic, 3.2.60-030260-generic
Ubuntu 12.103.3.8-030308-generic, 3.4.94-030494-generic, 3.5.7-03050733-generic
Ubuntu 13.043.6.11-030611-generic, 3.7.10-030710-generic, 3.8.13-03081323-generic
Ubuntu 13.103.9.11-030911-generic, 3.10.44-031044-generic, 3.11.10-03111011-generic
Ubuntu 14.043.12.22-031222-generic, 3.13.11-03131103-generic
Ubuntu 14.103.14.8-031408-generic, 3.15.1-031501-generic
- -

Red Hat and CentOS introduce a compilation warning due to a kernel version mismatch between Red Hat-based kernels and Debian-based kernels. We’re still researching ways to address this warning, but it hasn’t caused any problems during testing.

- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/en/intro-nat64.html b/doc/usr/_site/en/intro-nat64.html deleted file mode 100644 index 6bfa20c97..000000000 --- a/doc/usr/_site/en/intro-nat64.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - Introduction to IPv4/IPv6 Translation - - - - - -
-
- -
- -
-
- -

Documentation > Introduction > NAT64

- -

Introduction to IPv4/IPv6 Translation

- -

Index

- -
    -
  1. Introduction
  2. -
  3. IPv4/IPv6 Translation -
      -
    1. SIIT with EAM
    2. -
    3. SIIT (traditional)
    4. -
    5. Stateful NAT64
    6. -
    -
  4. -
- -

Introduction

- -

This document provides a general introduction to SIIT and NAT64.

- -

IPv4/IPv6 Translation

- -

SIIT (Stateless IP/ICMP Translation) and NAT64 (“NAT six fourâ€, not “NAT sixty-fourâ€) are technologies meant to communicate networking nodes which only speak IPv4 with nodes that only speak IPv6.

- -

The idea is basically that of an “upgraded†NAT; an “IPv4/IPv6 translator†not only replaces addresses and/or ports within packets, but also layer 3 headers.

- -
    -
  • SIIT is the simpler form, and allows preconfigured 1-to-1 mappings between IPv4 addresses and IPv6 addresses.
  • -
  • A Stateful NAT64 (or NAT64 for short) allows several IPv6 nodes to dynamically share few IPv4 addresses (useful when you’re a victim of IPv4 address exhaustion).
  • -
- -

For historic reasons, sometimes we mess up and label SIIT as “Stateless NAT64â€. Because this expression does not seem to appear in any relevant standards, we consider it imprecise, despite the fact it makes some degree of sense. If possible, please try to suppress it.

- -

An SIIT implementation mangles network headers and sometimes transport checksums. A Stateful NAT64 also mangles transport identifiers.

- -

That’s all, really. Keep reading for more detail and examples.

- -

SIIT with EAM

- -

This is the easiest one to explain. Consider the following setup:

- -

Fig.1 - EAM sample network

- -

(T stands for “Translating boxâ€.)

- -

Assuming everyone’s default gateway is T, how do you communicate A (IPv6) with V (IPv4)?

- -
    -
  • You tell T, “The IPv4 address of A should be 198.51.100.8, and the IPv6 address of V should be 2001:db8:4::16â€.
  • -
  • You tell A, “V’s address is 2001:db8:4::16â€.
  • -
  • You tell V, “A’s address is 198.51.100.8â€.
  • -
- -

The first one is accomplished by SIIT. The latter can be done via DNS.

- -

This will happen:

- -

Fig.2 - EAM flow

- -

The translator is “fooling†each node into thinking the other one can speak their language.

- -

“EAM†stands for “Explicit Address Mappingâ€, and is more versatile than simply binding arbitrary addresses to other arbitrary addresses. See the EAM draft or our summary of it for more information.

- -

SIIT (traditional)

- -

The basic form of SIIT is more constrictive. As a consequence, we need to change the sample IPv6 network:

- -

Fig.3 - Vanilla sample network

- -

The idea is to simply remove a prefix while translating from IPv6 to IPv4, and append it in the other direction:

- -

Fig.4 - Vanilla flow

- -

Of course, this means each node’s IPv4 address has to be encoded inside its IPv6 address, which is a little annoying.

- -

While this explanation might make it seem like “EAM†SIIT and “traditional†SIIT are different things, this is not the case. Implementations are expected to always try to translate an address based on the EAM table first, and if no mapping is found, fall back to append or remove the prefix. The separation was done here for illustrative purposes. You can find a concrete example of how “traditional†and “EAM†SIIT can be combined to fit a use case in draft-v6ops-siit-dc.

- -

SIIT is defined by RFC 6145. The address translation hack has more ways to embed the IPv4 address not shown here, and is fully defined by RFC 6052. Whenever RFC 6052 is involved, it’s usually convenient to also have a DNS64 so users don’t need to be aware of the prefix.

- -

Stateful NAT64

- -

This mode is more akin to what people understand as “NATâ€. As such, allow me to remind you the big picture of how (stateful) NAT operates:

- -

Fig.5 - NAT sample network

- -

The idea is, the left network is called “Private†because it uses addresses unavailable in the global Internet. In order to make up for this, NAT mangles packet addresses so outsiders think any traffic started by the private nodes was actually started by itself:

- -

Fig.6 - NAT flow

- -

As a result, for outside purposes, nodes A through E are “sharing†NAT’s global address (or addresses).

- -

While stateful NAT helps you economize IPv4 address, it comes with a price: NAT has to remember which private node issued the packet to V, because A’s address cannot be found anywhere in V’s response. That’s why it’s called “statefulâ€; it creates address mappings dymanically and remembers them for a while. There are two things to keep ind mind here:

- -
    -
  • Each mapping requires memory.
  • -
  • V cannot start a packet stream with A, again because NAT must learn the mapping in the private-to-outside direction first (left to right).
  • -
- -

Stateful NAT64 is pretty much the same. The only difference is that the “Private Network†is actually an IPv6 network:

- -

Fig.7 - Stateful network

- -

And therefore,

- -

Fig.8 - Stateful flow

- -

Now, that’s where the similarities with NAT end. You don’t normally say the IPv6 network is “Privateâ€, because the whole point is that it should also be connected to the IPv6 Internet:

- -

Fig.9 - Stateful Internet

- -

In this way, A through E are IPv6-only nodes, but they have access to both Internets (the IPv6 one via router R, and the IPv4 one via T).

- -

Stateful NAT64 is defined by RFC 6146 and is most of the time coupled with DNS64.

- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/en/logging.html b/doc/usr/_site/en/logging.html deleted file mode 100644 index 536b4b23a..000000000 --- a/doc/usr/_site/en/logging.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - Logging - - - - - -
-
- -
- -
-
- -

Logging

- -

If Jool has something to say, it will do so in the kernel logs (just like any other kernel component). Typical ways to find this include

- - - -

Thankfully, Linux is generally silent after booting, so Jool’s latest messages should be found at the very bottom.

- -

Jool uses four levels in the severity spectrum (see dmesg --help):

- -
    -
  1. err: “Your configuration cannot be applied, userâ€. This only happens during module insertion/removal and as a response of userspace application requests.
  2. -
  3. warn: “Are you sure this configuration is sane? I’m going to keep doing this, but it doesn’t look like it’s going placesâ€. Only happens during packet translations.
  4. -
  5. info: “The kernel module was insertedâ€, “the kernel module was removedâ€. Also --logging-bib and --logging-session’s exploits.
  6. -
  7. debug: “And now I’m doing thisâ€. “I couldn’t translate this packet because X, and I think it’s normalâ€.
  8. -
- -

Debug messages are normally compiled out of Jool’s binaries because they are lots and can slow things down. If you are testing or troubleshooting however, they can be of help.

- -

If you want Jool to print debug messages, go back to the kernel module’s compilation step and run make debug instead of just make. Reinstall and remodprobe as you usually do, and you should see a lot of mumbling as a result of network traffic translation, which should give you ideas as to what might be wrong:

- -
$ cd Jool/mod
-$ make debug
-$ sudo make modules_install
-$ sudo depmod
-$
-$ sudo modprobe -r jool_siit
-$ sudo modprobe jool_siit
-$
-$ dmesg | tail -5
-[ 3465.639622] ===============================================
-[ 3465.639655] Catching IPv4 packet: 192.0.2.16->198.51.100.8
-[ 3465.639724] Translating the Packet.
-[ 3465.639756] Address 192.0.2.16 lacks an EAMT entry and there's no pool6 prefix.
-[ 3465.639806] Returning the packet to the kernel.
-
- -

These messages quickly add up. If your computer is storing them, make sure you revert the binaries when you’re done so they stop flooding your disk.

- -

If dmesg is not printing the messages, try tweaking its --console-level. Have a look at man dmesg for details.

- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/en/mod-install.html b/doc/usr/_site/en/mod-install.html deleted file mode 100644 index 8cf9f2409..000000000 --- a/doc/usr/_site/en/mod-install.html +++ /dev/null @@ -1,192 +0,0 @@ - - - - - Kernel Modules Installation - - - - - -
-
- -
- -
-
- -

Documentation > Installation > Kernel module

- -

Kernel Modules Installation

- -

Index

- -
    -
  1. Introduction
  2. -
  3. Requirements
  4. -
  5. Installation -
      -
    1. DKMS
    2. -
    3. Kbuild
    4. -
    -
  6. -
- -

Introduction

- -

Jool is four things:

- -
    -
  1. Two kernel modules you can hook up to Linux. One of them is the SIIT implementation and the other one is the Stateful NAT64. They are the main components and all you need to get started; this document explains how to install them.
  2. -
  3. Two userspace applications which can be used to configure each module. They have their own installation document.
  4. -
- -

When you put it that way, there is really nothing unusual about Jool’s installation. But I figure some of our users might have no previous experience meddling with drivers, so this overview will serve as an introduction to at least give them an idea of what each step does.

- -

Requirements

- -

First off, the computer that will be translating traffic needs a kernel (again, Linux) whose version is 3.0 to 3.15. Higher versions are probably fine, but we haven’t tested them. We do not recommend using Linux 3.12 because of the reasons outlined here.

- -

Use the uname -r command to know your kernel version.

- -
$ /bin/uname -r
-3.5.0-45-generic
-$ # OK, fine.
- -

If you’re just getting acquainted with IPv4/IPv6 Translation, some people have an easier time picturing the ordeal when the translator has two separate network interfaces (one to interact with IPv6 networks, one for IPv4 networks). This is not a requirement; you can get away with only one interface (by dual stacking on it), and you can also have more than one per protocol. This is possible because figuring out which interface should a packet be dispatched through is routing’s problem, which is already well implemented in the kernel.

- -

Because the tutorials are first and foremost a tool to get newcomers on the right mindset, most of the deployment discussion will assume two separate interfaces (exemplified below: eth0 and eth1).

- -
$ /sbin/ip link show
-(...)
-2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
-    link/ether 08:00:27:3d:24:77 brd ff:ff:ff:ff:ff:ff
-3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
-    link/ether 08:00:27:ca:18:c8 brd ff:ff:ff:ff:ff:ff
- -

Finally, you need your kernel headers. If you’re using apt-get, just run this:

- -
$ apt-get install linux-headers-$(uname -r)
- -

Installation

- -

Each kernel version combined with each different architecture requires different binaries, so providing packages for every combination would be impossibly cumbersome. For this reason, what you’ll download is the source; there is no way around compiling the code yourself.

- -

On the flip side, kernel modules cannot have dependencies other than your kernel headers and a good compiler, so the procedure is fairly painless.

- -

To download Jool, you have two options:

- -
    -
  • Official releases are hosted in the Download page. These will prove less convoluted when you’re installing the userspace application.
  • -
  • There’s the Github repository. This might have slight bugfixes not present in the latest official release, which you can access by sticking to the latest commit of the master branch (in case you’re wondering, we do all the risky development elsewhere).
  • -
- -

You might be used to a standard three-step procedure to compile and install programs: ./configure && make && make install. Kernel modules do not follow it, but have a special one on their own called Kbuild.

- -

If your distribution supports the Dynamic Kernel Module Support (DKMS) framework, this can be used in order to compile and build the Jool kernel modules. If however your distribution does not support DKMS, or its use is undesired for some reason, the Jool kernel modules can be built and installed manually by using the Kbuild system directly.

- -

Regardless of which method you use to install the kernel modules, after a successfull installation you will be able to start Jool using modprobe jool or modprobe jool_siit. The logical next step after that would be to read the Basic SIIT Tutorial.

- -

DKMS

- -

The DKMS framework provides a convenient wrapper around the standard kernel Kbuild system. A single DKMS command will perform all the steps necessary in order to use third-party kernel modules such as Jool. It will also ensure that everything is done all over again whenever necessary (such as after a kernel upgrade). DKMS can also be used to create packages for deb/rpm-based distributions containing pre-built Jool kernel modules.

- -

In order to install the Jool kernel modules using DKMS, you need to run dkms install /path/to/Jool-sourcedir, like so:

- -
user@node:~# apt-get install dkms
-user@node:~$ unzip Jool-<version>.zip
-user@node:~# dkms install Jool-<version>
- -

DKMS will now have compiled, installed and indexed the Jool kernel modules; Jool is now ready for use.

- -

Kbuild

- -

Kbuild is the Linux kernel’s standard system for compiling and installing kernel modules. Jool comes with native Kbuild support. As far as the compilation goes, there is no configure script. But you also don’t have to edit the Makefile; you jump straight to make and you’re done. The global Makefile can be found in the mod folder:

- -
user@node:~$ unzip Jool-<version>.zip
-user@node:~$ cd Jool-<version>/mod
-user@node:~/Jool-<version>/mod$ make
- -

The Jool kernel modules are now compiled for your current kernel. Next, copy them to your system’s module pool by running the modules_install target:

- -
user@node:~/Jool-<version>/mod# make modules_install
- -
-

Warning!

- -

Kernels 3.7 and up want you to sign your kernel modules to make sure you’re loading them in a responsible manner.

- -

But if your kernel was not configured to require this feature (the kernels of many distros don’t), you won’t have much of an issue here. The output of make modules_install will output “Can’t read private keyâ€; this looks like an error, but is actually a warning, so you can continue the installation peacefully.

- -

Sorry; if your kernel was compiled to require module signing, you probably know what you’re doing, so I’ll skip the instructions to make that work.

-
- -

You’ll later activate the modules using the modprobe command. Thing is, the fact that they reside in your pool doesn’t mean they have already been indexed. Use depmod to make modprobe aware of the new modules:

- -
user@node:~# /sbin/depmod
- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/en/mod-run-464xlat.html b/doc/usr/_site/en/mod-run-464xlat.html deleted file mode 100644 index 6759f4774..000000000 --- a/doc/usr/_site/en/mod-run-464xlat.html +++ /dev/null @@ -1,296 +0,0 @@ - - - - - 464XLAT - - - - - -
-
- -
- -
-
- -

Documentation > Runs > 464XLAT

- -

464XLAT

- -

Index

- -
    -
  1. Introduction
  2. -
  3. Sample Network
  4. -
  5. Expected Packet Flow
  6. -
  7. Testing
  8. -
  9. Closing words
  10. -
  11. Further reading
  12. -
- -

Introduction

- -

NAT64 is not perfect. While you might see a lot of traffic getting translated quirklessly, you might eventually bump into the following rough edge:

- -

Barring RFC 6384, NAT64 only translates network headers (IPv4, IPv6 and ICMP) and transport headers (UDP and TCP). Sometimes, this is a problem. Some protocols on top of UDP and TCP have a bad habit of including IP addresses (“IP literalsâ€) along their conversations; because NAT64 only translates lower protocols, these literals will slip past the NAT64 unmodified.

- -

For example, some IPv6-unaware website, which would normally contain this HTML:

- -
<a href="www.jool.mx/index.html">Link to something.</a>
-
- -

Could be poorly coded like this:

- -
<a href="203.0.113.24/index.html">Link to something.</a>
-
- -

This address lies within the body of an HTML file, not a network or transport header. It is not viable for Jool to support translation of all existing application protocols.

- -

If you click the latter version of the link from an IPv6-only node via a NAT64, it will of course not work, because the node doesn’t have an IPv4 stack with which to access 203.0.113.24. www.jool.mx works fine because the DNS64 appends the NAT64 prefix once the node asks about it; on the other hand, if all the node has is 203.0.113.24, it can’t really tell it’s talking via a NAT64, much less know which prefix should be appended.

- -

464XLAT is a technique meant to address this limitation. It functions by appending an SIIT into the mix, that reverses the work made by the Stateful NAT64. The idea can be generalized to also provide Internet to IPv4-only services when all you have is an IPv6 address space, which is SIIT/DC: Dual Translation Mode.

- -

This document is a dumbed-down summary of both of these techniques, collapsed into a walkthrough that uses Jool.

- -

Sample Network

- -

Figure 1 - 464 Needed

- -

The red box would be your domain. n6 stands for “IPv6 node†and R is “routerâ€. Say your ISP gives you only IPv6 addresses, but it also grants you access to IPv4 via a stateful NAT64 (PLAT; “Provider-side Translatorâ€). n4 is a random IPv4 Internet node.

- -

Say your user from n6 clicks a link towards 203.0.113.24. n6 does not have an IPv4 stack, so the request has nowhere to go. The situation could be amended by manually appending the NAT64 prefix to the address, but the user doesn’t know that. Of course, a DNS64 would be the ideal and transparent solution, but unfortunately the site provided an address and not a domain name, so n6 is not querying the DNS.

- -

Alternatively, n6 might want to provide a legacy service (or client) which is unfortunately tied to IPv4. Because n6 only has global IPv6 addresses, it appears it cannot do so.

- -

In broad terms, the solution is to provide n6 with a “fake†IPv4 stack whose packets will be translated into IPv6 before reaching PLAT. In other words, an SIIT service (in 464XLAT terms called “CLATâ€; “Customer-side Translatorâ€) will be sort of undoing PLAT’s work.

- -

There are rather several ways to do this. Unfortunately, one of them (making n6 the CLAT) is rather embarrassingly not yet implemented by Jool. One that does work is to make R the CLAT. The network would look like this:

- -

Figure 2 - 464XLAT'd Network

- -

I also removed the clouds to simplify routing in the example. The dual translation idea has really nothing to do with routing, so this is unimportant.

- -

Expected Packet Flow

- -

This is the normal flow an IPv6-sourced packet would traverse. It’s a typical stateful NAT64 flow and the Dual Translation presented in this configuration will not interfere with it: Notice we’ve chosen 64:ff9b::/96 as PLAT’s NAT64 prefix:

- -

Figure 3 - Normal Stateful Flow

- -

The 464XLAT flow we want to achieve follows. n6 will use its IPv4 address to try to query the literal (or whatever IPv4 Internet address):

- -

Figure 4 - Literal

- -

R will SIIT the packet into IPv6 so it can traverse the IPv6-only chunk. Address 192.168.0.8 will be translated using the EAMT, and 203.0.113.24 will receive the pool6 prefix treatment to mirror PLAT’s.

- -

Figure 5 - SIIT'd packet

- -

PLAT will do its magic and send the packet to the IPv4 Internet:

- -

Figure 6 - Stateful NAT64'd packet

- -

And the mangling will be mirrored for the response:

- -

Figure 7 - Mirror

- -

Configuration

- -

n6 doesn’t know it kind of owns another IPv6 address in the 2001:db8:2::/96 network. It never sees this traffic, because R always translates it towards 192.0.2.0/24.

- -
service network-manager stop
-
-ip link set eth0 up
-ip addr add 2001:db8:1::8/64 dev eth0
-ip addr add 192.168.0.8/24 dev eth0
-
-ip route add default via 2001:db8:1::1
-ip route add default via 192.168.0.1
-
- -

This is R:

- -
service network-manager stop
-
-ip link set eth0 up
-ip addr add 192.168.0.1/24 dev eth0
-ip addr add 2001:db8:1::1/64 dev eth0
-
-ip link set eth1 up
-ip addr add 2001:db8:100::1/64 dev eth1
-
-# Traffic headed to the real IPv4 Internet goes via PLAT.
-ip route add 64:ff9b::/96 via 2001:db8:100::2
-
-# Enable SIIT.
-# We're masking the private network using an EAMT entry.
-# Traffic towards the Internet is to be appended PLAT's prefix.
-# Recall that the EAMT has higher precedence than the prefix.
-modprobe jool_siit pool6=64:ff9b::/96
-jool_siit --eamt --add 192.168.0.8/29 2001:db8:2::/125
-
- -

n6’s packet will have addresses 192.168.0.8 and 203.0.113.24. The former will be translated using the EAMT entry (since it matches 192.168.0.8/29) and the latter will use the pool6 prefix (because it doesn’t match).

- -

Also note that R is an average SIIT implementation and you shouldn’t think of this installation of Jool as anything other than that.

- -

For completeness sake, here’s PLAT’s network configuration:

- -
service network-manager stop
-
-ip link set eth0 up
-ip addr add 2001:db8:100::2/64 dev eth0
-# I'm pretending the ISP gave us these two prefixes to play with.
-ip route add 2001:db8:1::/64 via 2001:db8:100::1
-ip route add 2001:db8:2::/64 via 2001:db8:100::1
-
-ip link set eth1 up
-ip addr add 203.0.113.1/24 dev eth1
-ip addr add 203.0.113.2/24 dev eth1
-
-modprobe jool pool6=64:ff9b::/96 pool4=203.0.113.2
-
- -

And n4 is thoroughly boring:

- -
service network-manager stop
-
-ip link set eth0 up
-ip addr add 203.0.113.24/24 dev eth0
-ip route add default via 203.0.113.2
-
- -

Testing

- -

Ping n4 via IPv4 from n6:

- -
$ ping 203.0.113.24 -c 1
-PING 203.0.113.24 (203.0.113.24) 56(84) bytes of data.
-64 bytes from 203.0.113.24: icmp_seq=1 ttl=62 time=4.13 ms
-
---- 203.0.113.24 ping statistics ---
-1 packets transmitted, 1 received, 0% packet loss, time 0ms
-rtt min/avg/max/mdev = 4.130/4.130/4.130/0.000 ms
-
- - - -

Ping n4 via IPv6 from n6:

- -
$ ping6 64:ff9b::203.0.113.24 -c 1
-PING 64:ff9b::203.0.113.24(64:ff9b::cb00:7118) 56 data bytes
-64 bytes from 64:ff9b::cb00:7118: icmp_seq=1 ttl=62 time=14.0 ms
-
---- 64:ff9b::203.0.113.24 ping statistics ---
-1 packets transmitted, 1 received, 0% packet loss, time 0ms
-rtt min/avg/max/mdev = 14.053/14.053/14.053/0.000 ms
-
- - - -

Closing words

- -

Though at this point you can see how you can defend yourself against IP literals and legacy IPv4-only appliances, you might want to be forewarned that at least one application protocol out there is so poorly designed it works differently depending on whether it’s sitting on top of IPv6 or IPv4. Therefore, addressing IP literals in this case is not sufficient to make FTP work via NAT64.

- -

On the other hand, some network-aware protocols only partially depend on literals, and the NAT64 is not going to get in the way of the features that don’t. FTP’s passive mode falls in this category.

- -

You can make active FTP work by deploying a fully stateless dual translation environment such as siit-dc-2xlat. It works because both the client and server are both using IPv4 sockets, the IPv4 addresses are unchanged end-to-end, and it’s fully bi-directional, so active and passive FTP on arbitrary ports work fine. In siit-dc-2xlat, the IPv6 network in the middle becomes an invisible “tunnel†through which IPv4 is transported.

- -

Here’s a list of protocols that are known to use IP literals. You might also want to see RFC 6586.

- - - -

Further reading

- - - - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/en/mod-run-alternate.html b/doc/usr/_site/en/mod-run-alternate.html deleted file mode 100644 index abb0b88b0..000000000 --- a/doc/usr/_site/en/mod-run-alternate.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - Alternate Stateful Run - - - - - -
-
- -
- -
-
- -

Doc > Miscellaneous > Single Interface

- -

Single Interface

- -

This nugget is here only to tell you that if you want your SIIT or NAT64 to service both protocols on the same interface, you’re still covered. Jool can see packets coming from any interface, and can send packets via any interface. (It ignores loopback, though.)

- -

Fig.1 - Single interface NAT64

- -

This is the same setup as in the Stateful NAT64 Run, except from the fact that everyone is now sharing the same cord, and also I removed the redundant nodes because you get the point.

- -

A and V are configured exactly as in their stateful run counterparts, so I’ll skip their commands. All that’s different is T now having all of its addresses on the same interface:

- -
user@T:~# service network-manager stop
-user@T:~# 
-user@T:~# /sbin/ip link set eth0 up
-user@T:~# /sbin/ip address add 2001:db8::1/96 dev eth0
-user@T:~# /sbin/ip address add 203.0.113.1/24 dev eth0
-user@T:~# /sbin/ip address add 203.0.113.2/24 dev eth0
-user@T:~# 
-user@T:~# ethtool --offload eth0 tso off
-user@T:~# ethtool --offload eth0 ufo off
-user@T:~# ethtool --offload eth0 gso off
-user@T:~# ethtool --offload eth0 gro off
-user@T:~# ethtool --offload eth0 lro off
-user@T:~# 
-user@T:~# /sbin/modprobe jool pool6=64:ff9b::/96 pool4=203.0.113.2
-
- -

So basically, A and V share a cord, but they still can’t talk because they don’t speak the same language. That is, unless they ask T to translate their little chat:

- -
user@A:~$ /bin/ping6 64:ff9b::203.0.113.16
-PING 64:ff9b::203.0.113.16(64:ff9b::cb00:7110) 56 data bytes
-64 bytes from 64:ff9b::cb00:7110: icmp_seq=1 ttl=63 time=10.0 ms
-64 bytes from 64:ff9b::cb00:7110: icmp_seq=2 ttl=63 time=8.16 ms
-64 bytes from 64:ff9b::cb00:7110: icmp_seq=3 ttl=63 time=8.39 ms
-64 bytes from 64:ff9b::cb00:7110: icmp_seq=4 ttl=63 time=5.64 ms
-^C
---- 64:ff9b::203.0.113.16 ping statistics ---
-4 packets transmitted, 4 received, 0% packet loss, time 3003ms
-rtt min/avg/max/mdev = 5.645/8.057/10.025/1.570 ms
-
- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/en/mod-run-eam.html b/doc/usr/_site/en/mod-run-eam.html deleted file mode 100644 index e7012b850..000000000 --- a/doc/usr/_site/en/mod-run-eam.html +++ /dev/null @@ -1,210 +0,0 @@ - - - - - EAM Run - - - - - -
-
- -
- -
-
- -

Documentation > Runs > SIIT + EAM

- -

EAM Run

- -

Index

- -
    -
  1. Introduction
  2. -
  3. Sample Network
  4. -
  5. Jool
  6. -
  7. Testing
  8. -
  9. Stopping Jool
  10. -
  11. Further reading
  12. -
- -

Introduction

- -

This document explains how to run Jool in EAM mode (which actually more than a “mode†is simply stock SIIT with records on the EAM table). Follow the link for more details on what to expect. See also the EAMT draft summary for more details on how the EAMT works.

- -

Stock mode is faster to configure and you’re encouraged to learn it before, particularly because I will not ellaborate here on the steps which both modes have in common. Software-wise, you need a successful installation of both the kernel module and the userspace application for EAM.

- -

Sample Network

- -

Figure 1 - Sample Network

- -

All the remarks in the previous document’s Sample Network section apply here.

- -

This is nodes A through E:

- -
user@A:~# service network-manager stop
-user@A:~# /sbin/ip link set eth0 up
-user@A:~# # Replace "::8" depending on which node you're on.
-user@A:~# /sbin/ip addr add 2001:db8:6::8/96 dev eth0
-user@A:~# /sbin/ip route add default via 2001:db8:6::1
- -

Nodes V through Z have the exact same configuration from the previous document.

- -
user@V:~# service network-manager stop
-user@V:~# /sbin/ip link set eth0 up
-user@V:~# # Replace ".16" depending on which node you're on.
-user@V:~# /sbin/ip addr add 192.0.2.16/24 dev eth0
-user@V:~# /sbin/ip route add default via 192.0.2.1
- -

Node T:

- -
user@T:~# service network-manager stop
-user@T:~# 
-user@T:~# /sbin/ip link set eth0 up
-user@T:~# /sbin/ip addr add 2001:db8:6::1/96 dev eth0
-user@T:~# 
-user@T:~# /sbin/ip link set eth1 up
-user@T:~# /sbin/ip addr add 192.0.2.1/24 dev eth1
-user@T:~# 
-user@T:~# ethtool --offload eth0 tso off
-user@T:~# ethtool --offload eth0 ufo off
-user@T:~# ethtool --offload eth0 gso off
-user@T:~# ethtool --offload eth0 gro off
-user@T:~# ethtool --offload eth0 lro off
-user@T:~# ethtool --offload eth1 tso off
-user@T:~# ethtool --offload eth1 ufo off
-user@T:~# ethtool --offload eth1 gso off
-user@T:~# ethtool --offload eth1 gro off
-user@T:~# ethtool --offload eth1 lro off
- -

Remember you might want to cross-ping T vs everything before continuing.

- -

Jool

- -
user@T:~# /sbin/modprobe jool_siit disabled
-user@T:~# jool_siit --eamt --add 2001:db8:6::/120 198.51.100.0/24
-user@T:~# jool_siit --eamt --add 2001:db8:4::/120 192.0.2.0/24
-user@T:~# jool_siit --enable
- -

Unlike pool6, it is not practical to insert the entire EAM table in a single command, so we instruct Jool to start disabled. We then insert the EAM table rows, one by one, using the userspace application. When the table is complete, we tell Jool it can start translating traffic (--enable).

- -

Using disabled and --enable is not actually neccesary; Jool will naturally figure out that it cannot translate traffic until the EAM table and/or pool6 are populated. The reason why Jool was “forced†to remain disabled until the table was complete was so there wouldn’t be a timespan where traffic was being translated inconsistently (ie. with a half-complete table).

- -

And again, the IPv6 prefix and the EAM table are not exclusive operation modes. Jool will always try to translate an address using EAM, and if that fails, fall back to using the prefix. Add pool6 during the modprobe if you want this.

- -

Testing

- -

If something doesn’t work, try the FAQ.

- -

Try to ping V from A like this:

- -
user@A:~$ ping6 2001:db8:4::10 # Reminder: hex 10 = dec 16.
-PING 2001:db8:4::10(2001:db8:4::10) 56 data bytes
-64 bytes from 2001:db8:4::10: icmp_seq=1 ttl=63 time=2.95 ms
-64 bytes from 2001:db8:4::10: icmp_seq=2 ttl=63 time=2.79 ms
-64 bytes from 2001:db8:4::10: icmp_seq=3 ttl=63 time=4.13 ms
-64 bytes from 2001:db8:4::10: icmp_seq=4 ttl=63 time=3.60 ms
-^C
---- 2001:db8:4::10 ping statistics ---
-4 packets transmitted, 4 received, 0% packet loss, time 3003ms
-rtt min/avg/max/mdev = 2.790/3.370/4.131/0.533 ms
- -

Then ping A from V:

- -
user@V:~$ ping 198.51.100.8
-PING 198.51.100.8 (198.51.100.8) 56(84) bytes of data.
-64 bytes from 198.51.100.8: icmp_seq=1 ttl=63 time=5.04 ms
-64 bytes from 198.51.100.8: icmp_seq=2 ttl=63 time=2.55 ms
-64 bytes from 198.51.100.8: icmp_seq=3 ttl=63 time=1.93 ms
-64 bytes from 198.51.100.8: icmp_seq=4 ttl=63 time=2.47 ms
-^C
---- 198.51.100.8 ping statistics ---
-4 packets transmitted, 4 received, 0% packet loss, time 3004ms
-rtt min/avg/max/mdev = 1.930/3.001/5.042/1.204 ms
- -

How about hooking up a server in Y and access it from D:

- -

Figure 1 - IPv6 TCP from an IPv4 node

- -

Then maybe another one in B and request from X:

- -

Figure 2 - IPv4 TCP from an IPv6 node

- -

Stopping Jool

- -

Same as in the previous walkthrough.

- -

Further reading

- - - - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/en/mod-run-stateful.html b/doc/usr/_site/en/mod-run-stateful.html deleted file mode 100644 index adef1bbab..000000000 --- a/doc/usr/_site/en/mod-run-stateful.html +++ /dev/null @@ -1,215 +0,0 @@ - - - - - Stateful NAT64 Run - - - - - -
-
- -
- -
-
- -

Documentation > Runs > Stateful NAT64

- -

Stateful NAT64 Run

- -

Index

- -
    -
  1. Introduction
  2. -
  3. Sample Network
  4. -
  5. Jool
  6. -
  7. Testing
  8. -
  9. Stopping Jool
  10. -
  11. Further reading
  12. -
- -

Introduction

- -

This document explains how to run Jool in Stateful NAT64 mode.

- -

Software-wise, only a successful install of the kernel module is required. The userspace application is not needed in this basic run.

- -

Sample Network

- -

Figure 1 - Sample Network

- -

All the remarks in the first document’s Sample Network section apply here.

- -

Nodes A through E:

- -
user@A:~# service network-manager stop
-user@A:~# /sbin/ip link set eth0 up
-user@A:~# # Replace "::8" depending on which node you're on.
-user@A:~# /sbin/ip address add 2001:db8::8/96 dev eth0
-user@A:~# /sbin/ip route add default via 2001:db8::1
- -

Nodes V through Z:

- -
user@V:~# service network-manager stop
-user@V:~# /sbin/ip link set eth0 up
-user@V:~# # Replace ".16" depending on which node you're on.
-user@V:~# /sbin/ip address add 203.0.113.16/24 dev eth0
- -

Notice these nodes do not need a default route. This is a consequence of them being in the same network as the NAT64; 203.0.113.2 will be masking the IPv6 nodes, so V through Z think they’re talking directly with T.

- -

Node T:

- -
user@T:~# service network-manager stop
-user@T:~# 
-user@T:~# /sbin/ip link set eth0 up
-user@T:~# /sbin/ip address add 2001:db8::1/96 dev eth0
-user@T:~# 
-user@T:~# /sbin/ip link set eth1 up
-user@T:~# /sbin/ip address add 203.0.113.1/24 dev eth1
-user@T:~# 
-user@T:~# ethtool --offload eth0 tso off
-user@T:~# ethtool --offload eth0 ufo off
-user@T:~# ethtool --offload eth0 gso off
-user@T:~# ethtool --offload eth0 gro off
-user@T:~# ethtool --offload eth0 lro off
-user@T:~# ethtool --offload eth1 tso off
-user@T:~# ethtool --offload eth1 ufo off
-user@T:~# ethtool --offload eth1 gso off
-user@T:~# ethtool --offload eth1 gro off
-user@T:~# ethtool --offload eth1 lro off
- -
-

Note: In previous versions of Jool, T used to need two or more IPv4 addresses. This is no longer the case.

-
- -

Remember you might want to cross-ping T vs everything before continuing.

- -

Jool

- -

This is the insertion syntax:

- -
user@T:~# /sbin/modprobe jool \
-	[pool6=<IPv6 prefix>] \
-	[pool4=<IPv4 prefixes>] \
-	[disabled]
-
- -
    -
  • pool6 has the same meaning as in SIIT Jool.
  • -
  • pool4 is the subset of the node’s addresses which will be used for translation (the prefix length defaults to /32).
  • -
  • disabled has the same meaning as in SIIT Jool.
  • -
- -

EAM and pool6791 do not make sense in stateful mode, and as such are unavailable.

- -

The result looks like this:

- -
user@T:~# /sbin/modprobe jool pool6=64:ff9b::/96 pool4=203.0.113.1
-
- -

Jool will listen on address 203.0.113.1 and append and remove prefix 64:ff9b::/96.

- -

Testing

- -

If something doesn’t work, try the FAQ.

- -

Test by sending requests from the IPv6 network:

- -
user@C:~$ ping6 64:ff9b::203.0.113.16
-PING 64:ff9b::192.0.2.16(64:ff9b::c000:210) 56 data bytes
-64 bytes from 64:ff9b::cb00:7110: icmp_seq=1 ttl=63 time=1.13 ms
-64 bytes from 64:ff9b::cb00:7110: icmp_seq=2 ttl=63 time=4.48 ms
-64 bytes from 64:ff9b::cb00:7110: icmp_seq=3 ttl=63 time=15.6 ms
-64 bytes from 64:ff9b::cb00:7110: icmp_seq=4 ttl=63 time=4.89 ms
-^C
---- 64:ff9b::203.0.113.16 ping statistics ---
-4 packets transmitted, 4 received, 0% packet loss, time 3004ms
-rtt min/avg/max/mdev = 1.136/6.528/15.603/5.438 ms
- -

Figure 1 - IPv4 TCP from an IPv6 node

- -

See the further reading below to see how to enable IPv4 nodes to start communication.

- -

Stopping Jool

- -

To shut down Jool, revert the modprobe using the -r flag:

- -
user@T:~# /sbin/modprobe -r jool
- -

Further Reading

- -
    -
  1. An IPv4 “outside†node cannot start communication because it “sees†the IPv6 network as an IPv4 private network behind a NAT. To remedy this, Jool enables you to configure “port forwardingâ€. See here if you’re interested.
  2. -
  3. There’s a discussion on the IPv4 pool.
  4. -
  5. The DNS64 document will tell you how to make the prefix-address-hack transparent to users.
  6. -
  7. Please consider the MTU issues before releasing.
  8. -
  9. There’s also an alternate stateful run. Perhaps it can help you see things from a better perspective.
  10. -
- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/en/mod-run-vanilla.html b/doc/usr/_site/en/mod-run-vanilla.html deleted file mode 100644 index 8db74f113..000000000 --- a/doc/usr/_site/en/mod-run-vanilla.html +++ /dev/null @@ -1,250 +0,0 @@ - - - - - Basic SIIT Run - - - - - -
-
- -
- -
-
- -

Documentation > Runs > SIIT

- -

Basic SIIT Run

- -

Index

- -
    -
  1. Introduction
  2. -
  3. Sample Network
  4. -
  5. Jool
  6. -
  7. Testing
  8. -
  9. Stopping Jool
  10. -
  11. Further reading
  12. -
- -

Introduction

- -

This document explains how to run Jool in SIIT mode. Follow the link for more details on what to expect.

- -

Software-wise, only a successful install of Jool’s kernel module is required. The userspace application is out of the scope of this document on purpose.

- -

In case you’re wondering, you can follow along these tutorials using virtual machines or alternate interface types just fine (Jool is not married to physical “ethX†interfaces).

- -

Sample Network

- -

You don’t need all the nodes shown in the diagram to follow along; you can get away with only A, T and V; the rest are very similar to A and V and are shown for illustrative purposes only.

- -

Figure 1 - Sample Network

- -

We will pretend I have address block 198.51.100.8/29 to distribute among my IPv6 nodes.

- -

Jool requires T to be Linux. The rest can be anything you want, so long as it implements the network protocol it’s connected to. Also, you are free to configure the networks using any manager you want.

- -

For the sake of simplicity however, the examples below assume every node is Linux and everything is being configured statically using the well-known ip command (and friends). Depending on your distro, your mileage might vary on how to get the network manager out of the way (assuming that’s what you want). Just to clarify, the point of service network-manager stop is to claim control over your interface addresses and routes (otherwise the ip commands might be ineffectual).

- -

Also to simplify, routing will be reduced to default all unknown traffic towards T. Note that there is nothing martian about anyone’s configuration otherwise.

- -

This is nodes A through E:

- -
user@A:~# service network-manager stop
-user@A:~# /sbin/ip link set eth0 up
-user@A:~# # Replace ".8" depending on which node you're on.
-user@A:~# /sbin/ip addr add 2001:db8::198.51.100.8/120 dev eth0
-user@A:~# /sbin/ip route add default via 2001:db8::198.51.100.1
- -

Nodes V through Z:

- -
user@V:~# service network-manager stop
-user@V:~# /sbin/ip link set eth0 up
-user@V:~# # Replace ".16" depending on which node you're on.
-user@V:~# /sbin/ip addr add 192.0.2.16/24 dev eth0
-user@V:~# /sbin/ip route add default via 192.0.2.1
- -

Node T:

- -
user@T:~# service network-manager stop
-user@T:~# 
-user@T:~# /sbin/ip link set eth0 up
-user@T:~# /sbin/ip addr add 2001:db8::198.51.100.1/120 dev eth0
-user@T:~# 
-user@T:~# /sbin/ip link set eth1 up
-user@T:~# /sbin/ip addr add 192.0.2.1/24 dev eth1
- -

Because we haven’t turned T into a translator yet, nodes A through E still cannot interact with V through Z, but you might want to make sure T can ping everyone before continuing.

- -

The only caveat you need to keep in mind before inserting Jool is that you need to get rid of offloads in the translating machine. Do that by means of ethtool:

- -
user@T:~# ethtool --offload eth0 tso off
-user@T:~# ethtool --offload eth0 ufo off
-user@T:~# ethtool --offload eth0 gso off
-user@T:~# ethtool --offload eth0 gro off
-user@T:~# ethtool --offload eth0 lro off
-user@T:~# ethtool --offload eth1 tso off
-user@T:~# ethtool --offload eth1 ufo off
-user@T:~# ethtool --offload eth1 gso off
-user@T:~# ethtool --offload eth1 gro off
-user@T:~# ethtool --offload eth1 lro off
- -

(If it complains it cannot change something, keep in mind it can already be off; run sudo ethtool --show-offload [interface] to figure it out.)

- -

Jool

- -

This is the insertion syntax:

- -
user@T:~# /sbin/modprobe jool_siit \
-	[pool6=<IPv6 prefix>] \
-	[blacklist=<IPv4 prefixes>] \
-	[pool6791=<IPv4 prefixes>] \
-	[disabled]
-
- -

These are the arguments:

- -
    -
  • pool6 (short for “IPv6 poolâ€) is the prefix the translation mechanism will be appending and removing from the addresses of the packets.
    -This is optional because you might want to use the EAM table instead.
  • -
  • blacklist represents IPv4 addresses Jool will not translate using the pool6 prefix (ie. this does not affect EAMT translation).
    -You can insert up to five comma-separated blacklist prefixes during a modprobe. If you need more, use the userspace application.
  • -
  • pool6791 is a secondary IPv4 pool used for something slightly more cryptic. You might rather want to read its explanation after you’ve nailed the basics from this walkthrough.
    -If this pool is empty, Jool will fall back to use this own node’s natural source address towards the destination node.
    -You can insert up to five comma-separated pool6791 prefixes during a modprobe. If you need more, use the userspace application.
  • -
  • disabled starts Jool inactive. If you’re using the userspace application, you can use it to ensure you’re done configuring before your traffic starts getting translated. The EAM walkthrough exemplifies its use.
    -If not present, Jool starts translating traffic right away.
  • -
- -

The following suffices for our sample network.

- -
user@T:~# /sbin/modprobe jool_siit pool6=2001:db8::/96
-
- -

That means the IPv6 representation of any IPv4 address is going to be 2001:db8::<IPv4 address>. See below for examples.

- -

Testing

- -

If something doesn’t work, try the FAQ.

- -

Try to ping A from V like this:

- -
user@V:~$ ping 198.51.100.8
-PING 198.51.100.8 (198.51.100.8) 56(84) bytes of data.
-64 bytes from 198.51.100.8: icmp_seq=1 ttl=63 time=7.45 ms
-64 bytes from 198.51.100.8: icmp_seq=2 ttl=63 time=1.64 ms
-64 bytes from 198.51.100.8: icmp_seq=3 ttl=63 time=4.22 ms
-64 bytes from 198.51.100.8: icmp_seq=4 ttl=63 time=2.32 ms
-^C
---- 198.51.100.8 ping statistics ---
-4 packets transmitted, 4 received, 0% packet loss, time 3006ms
-rtt min/avg/max/mdev = 1.649/3.914/7.450/2.249 ms
- -

Then ping V from A:

- -
user@A:~$ ping6 2001:db8::192.0.2.16
-PING 2001:db8::192.0.2.16(2001:db8::c000:210) 56 data bytes
-64 bytes from 2001:db8::c000:210: icmp_seq=1 ttl=63 time=3.57 ms
-64 bytes from 2001:db8::c000:210: icmp_seq=2 ttl=63 time=10.5 ms
-64 bytes from 2001:db8::c000:210: icmp_seq=3 ttl=63 time=1.38 ms
-64 bytes from 2001:db8::c000:210: icmp_seq=4 ttl=63 time=2.63 ms
-^C
---- 2001:db8::192.0.2.16 ping statistics ---
-4 packets transmitted, 4 received, 0% packet loss, time 3003ms
-rtt min/avg/max/mdev = 1.384/4.529/10.522/3.546 ms
- -

How about hooking up a server in X and access it from D:

- -

Figure 1 - IPv6 TCP from an IPv4 node

- -

Then maybe another one in C and request from W:

- -

Figure 2 - IPv4 TCP from an IPv6 node

- -

Stopping Jool

- -

To shut down Jool, revert the modprobe using the -r flag:

- -
user@T:~# /sbin/modprobe -r jool_siit
- -

Further reading

- -

Here are some logical follow-ups if you want to read more:

- - - - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/en/mtu.html b/doc/usr/_site/en/mtu.html deleted file mode 100644 index c8017470f..000000000 --- a/doc/usr/_site/en/mtu.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - MTU and Fragmentation - - - - - -
-
- -
- -
-
- -

Documentation > Miscellaneous > MTU and Fragmentation

- -

MTU and Fragmentation

- -

Problem Statement

- -

There’s one major difference between IPv4 and IPv6 which an IP Translator alone cannot make up for.

- -

The IPv4 header “features†a flag called Don’t Fragment (DF). It dictates whether the source allows routers to fragment the packet.

- -

In IPv6, packets can never be fragmented by routers. It’s as if DF was always on.

- -

When there’s a translator in the middle, an IPv4 packet which can be fragmented becomes an IPv6 packet that must not be fragmented.

- -

So what happens if the packet is too big?

- -

(Actual packet sizes are different due to headers changes, but you get the point.)

- -

Fig.1 - MTU flow fail

- -

It’s implementation defined. If n4 is smart, it will try to decrease the lenght of the packet. If it’s not, the packet will never reach n6.

- -

Proper implementations today actually use Path MTU discovery and therefore never unset the DF flag. Still, stubborn or legacy code is not unheard of.

- -

By the way: when you want to know a link’s MTU, ask Linux:

- -
$ ip link
-(...)
-2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
-    link/ether 08:00:27:bf:a6:6e brd ff:ff:ff:ff:ff:ff
-
- -

Solution

- -

If you know the smallest MTU across all your IPv6 networks, tell T about it:

- -

Fig.2 - Proper Network

- -

T knows it’s translating, so it knows it has to fragment even though it’s sort of an IPv6 router.

- -

Jool used to have a flag called --minMTU6 to do this. Because deferring fragmentation to the kernel is considered better practice, you now configure it on Linux starting from Jool 3.3.

- -
ip link set dev eth0 mtu 1300
-
- -

And voilà:

- -

Fig.3 - MTU flow succeeds

- -

If you don’t know the minimum MTU of your IPv6 networks, assign 1280. Every IPv6 node must be able to handle at least 1280 bytes per packet by standard.

- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/en/offloading.html b/doc/usr/_site/en/offloading.html deleted file mode 100644 index e72d1872b..000000000 --- a/doc/usr/_site/en/offloading.html +++ /dev/null @@ -1,169 +0,0 @@ - - - - - Offloading - - - - - -
-
- -
- -
-
- -

Documentation > Miscellaneous > Offloading

- -

Offload

- -

Index

- -
    -
  1. Theory
  2. -
  3. Practice
  4. -
- -

Theory

- -

Offloading is a technique meant to optimize network throughput. Born from the observation that a single large packet is significantly faster to process than several small ones, the idea is to combine several of them from a common stream on reception, and then pretend, to the eyes of the rest of the system, that the new packet was the one received from the cord all along.

- -

Here’s an example for the visual-oriented. This is how packets are normally processed (no offloading):

- -

Fig.1 - No offload

- -

(For the moment, assume the Internet layer holds IPv4.)

- -

There are two streams here. The yellow one consists of three very small packets:

- -
    -
  1. 1st packet: bytes 0 through 9.
  2. -
  3. 2nd packet: bytes 10 to 29.
  4. -
  5. 3rd packet: bytes 30 to 39.
  6. -
- -

And the blue one has somewhat larger packets:

- -
    -
  1. bytes 0 to 599
  2. -
  3. bytes 600 to 1199
  4. -
  5. bytes 1200 to 1799
  6. -
- -

There are several ways to implement offloading. Pictured below is a simplified version of what a NIC could perhaps do, rather than the above:

- -

Fig.2 - Offload done right

- -

Simply put, several contiguous packets are merged together into an equivalent, larger one. The card could for example do this by merging IP fragments or even TCP segments (even if TCP sits two layers above). It doesn’t matter as long as the change can be seen as completely transparent as far as the transfer of data is concerned.

- -

And yes, we’re now dealing with heavier pieces of data, but truth be told, most of the Internet and Transport layers’ activity lies in the first few bytes of each packet (i.e. headers). So we mostly get to process n packets for the price of one.

- -

This is all fine and dandy, but you start running into trouble when the system is supposed to forward the data (rather than just consuming it). Say the hardware has a Maximum Transmission Unit (MTU) of 1500; this is what happens:

- -

Fig.3 - Offload on a router

- -

In step 1 the aggregation happens, which makes step 2 very fast, but then because the assembled packet of the blue stream is too big for the outgoing interface (size 1800 > max 1500), the packet gets fragmented in step 3, which is inefficient.

- -

More importantly, if the emitter performed path MTU discovery, then the optimum MTU computed will be lost in step 1 (because it is not stored in the packet; it is indicated by its size, which step 1 mangles). Because the packet’s Don’t Fragment flag is going to be ON, then the packet will be eventually and irremediably dropped as soon as it reaches a lower MTU. Hence, we just created a black hole.

- -

(Well, not completely. A number of conditions are required for the NIC to run offloading. These conditions might rarely and randomly not be met, so certain packets will occasionally not be aggregated, and as such will slip past the hole. If your transport protocol retries enough, instead of having a complete denial of service, you get an extremely - EXTREMELY - slow network.)

- -

When the forwarding machine is an IPv6 router (or, in Jool’s case, an SIIT/NAT64 translating from IPv4 to 6), this is more immediately a problem because IPv6 routers are not supposed to fragment packets (they are expected to just drop the packet and return an ICMP error message). So your packet will be lost in step 3 even if the Don’t Fragment flag of the original packet was not set.

- -

If you’re running Jool in a guest virtual machine, something important to keep in mind is that you might rather or also have to disable offloads in the VM host’s uplink interface.

- -

And that’s it. Offloading for leaf nodes is great, offloading for routers is trouble.

- -

Practice

- -

So, if you want to run Jool, you want to turn off offloading. This is how we start doing it (your mileage might vary):

- -
$ sudo apt-get install ethtool
- -

Then apply this to every relevant interface:

- -
$ sudo ethtool --offload [your interface here] gro off
- -

“gro†is “Generic Receive Offloadâ€. Perhaps it’s simply because our kernels don’t support them, but we currently don’t know for sure why we don’t also have to turn off lro (Large receive offload), gso (Generic segmentation offload) and perhaps others (see man ethtool). If you’re not sure, I’d say playing safe would equal getting rid of every variant you see:

- -
$ sudo ethtool --offload [your interface here] tso off
-$ sudo ethtool --offload [your interface here] ufo off
-$ sudo ethtool --offload [your interface here] gso off
-$ sudo ethtool --offload [your interface here] gro off
-$ sudo ethtool --offload [your interface here] lro off
- -

(If you can shed more light into the subject, please let us know - jool@nic.mx.)

- -

Sometimes ethtool claims it cannot change some of the variants, but keep in mind this is usually because it is not supported and hence it wasn’t on in the first place. Have a look at your configuration using

- -
$ sudo ethtool --show-offload [your interface here]
- -

Cheers!

- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/en/pool4.html b/doc/usr/_site/en/pool4.html deleted file mode 100644 index 04b37d462..000000000 --- a/doc/usr/_site/en/pool4.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - IPv4 Transport Address Pool - - - - - -
-
- -
- -
-
- -

Documentation > Runs > Stateful NAT64 > IPv4 Pool

- -

IPv4 Transport Address Pool

- -

If you’re familiar with iptables and masquerade, all you probably need to know is that the following:

- -
jool --pool4 --add --tcp 192.0.2.1 5000-6000
-
- -

is spiritually equivalent to

- -
ip addr add 192.0.2.1 dev (...)
-iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE --to-ports 5000-6000
-
- -
- -

Just like a NAT, a Stateful NAT64 allows an indeterminate amount of clients to share a few IPv4 addresses by strategically distributing their traffic accross its own transport address domain.

- -

We call this “transport address domain†the “IPv4 poolâ€. (“pool4†for short.)

- -

To illustrate:

- -

TODO

- -

In Jool, we write transport addresses in the form <IP address>#<port> (as opposed to <IP address>:<port>). The packet above has source IP address 2001:db8::8, source port (TCP or UDP) 5123, destination address 64:ff9b::192.0.2.24, and destination port 80.

- -

Assuming pool4 holds transport addresses 203.0.113.1#5000 through 203.0.113.1#6000, one possible translation of the packet is this:

- -

TODO

- -

Another one, equally valid, is this:

- -

TODO

- -

NAT64s are not overly concerned with retaining source ports. In fact, for security reasons, recommendations exist to drive NAT64s as unpredictable as possible.

- -

What you need to be aware of is that your NAT64 machine needs to reserve transport addresses for translation purposes. If T tries to open a connection from transport address 192.0.2.1#5000 and at the same time a translation yields source transport address 192.0.2.1#5000, evil things will happen. iptables’s NAT also suffers from this quirk.

- -

Linux’s ephemeral port range defaults to 32768-61000. Therefore, Jool’s port range for any given address defaults to 61001-65535. You can change the former by tweaking sysctl sys.net.ipv4.ip_local_port_range, and the latter by means of --pool4 --add userspace application commands.

- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/en/rfc6791.html b/doc/usr/_site/en/rfc6791.html deleted file mode 100644 index 915818ee1..000000000 --- a/doc/usr/_site/en/rfc6791.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - RFC 6791 - - - - - -
-
- -
- -
-
- -

Documentation > Runs > SIIT > RFC 6791

- -

RFC 6791

- -

Suppose n4 is trying to reach n6, but there is a problem (eg. the packet is too big), and R sends n4 an ICMP error. T is translating using prefix 2001:db8::/96.

- -

Figure 1 - Network

- -

R’s packet will have the following addresses:

- - - - - - - - - - - - - - -
SourceDestination
4000::12001:db8::192.0.2.13
- -

T is in trouble because the source address of the packet lacks the translation prefix, so an IPv4 address cannot be extracted from it.

- -

Normally, you don’t have many IPv4 addresses, so it’s not reasonable to grant one to every node in your IPv6 side. Due to their generally forwarding-only purpose, routers are good candidates for untranslatable addresses. On the other hand, ICMP errors are important, and a NAT64 should not drop it simply because it comes from a router.

- -

Stateful NAT64s do not have this problem because they render every IPv6 address translatable (since all IPv6 nodes are sharing the NAT64’s IPv4 addresses). To sort things out, an SIIT module is supposed to keep a pool of reserved addresses. Upon receiving an ICMP error with an untranslatable source, Jool should assign a random one from this pool.

- -

Please consider the following paragraphs from RFC 6791 while deciding the size and addresses of your RFC 6791 pool:

- -
The source address used SHOULD NOT cause the ICMP packet to be
-discarded.  It SHOULD NOT be drawn from [RFC1918] or [RFC6598]
-address space, because that address space is likely to be subject to
-unicast Reverse Path Forwarding (uRPF) [RFC3704] filtering.
-
-(...)
-
-Another consideration for source selection is that it should be
-possible for the IPv4 recipients of the ICMP message to be able to
-distinguish between different IPv6 network origination of ICMPv6
-messages (for example, to support a traceroute diagnostic utility
-that provides some limited network-level visibility across the IPv4/
-IPv6 translator).  This consideration implies that an IPv4/IPv6
-translator needs to have a pool of IPv4 addresses for mapping the
-source address of ICMPv6 packets generated from different origins, or
-to include the IPv6 source address information for mapping the source
-address by others means.  Currently, the TRACEROUTE and MTR [MTR] are
-the only consumers of translated ICMPv6 messages that care about the
-ICMPv6 source address.
-
-(...)
-
-If a pool of public IPv4 addresses is configured on the translator,
-it is RECOMMENDED to randomly select the IPv4 source address from the
-pool.  Random selection reduces the probability that two ICMP
-messages elicited by the same TRACEROUTE might specify the same
-source address and, therefore, erroneously present the appearance of
-a routing loop.
-
- -

The SIIT walkthrough shows how to set the pool during a modprobe. You can also edit it later via the userspace application.

- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/en/static-bindings.html b/doc/usr/_site/en/static-bindings.html deleted file mode 100644 index a973241cf..000000000 --- a/doc/usr/_site/en/static-bindings.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - Static Bindings - - - - - -
-
- -
- -
-
- -

Documentation > Runs > Stateful NAT64 > Static Bindings

- -

Static Bindings

- -

When a translation from IPv6 to IPv4 happens, very little is left of the headers of the original packet. Because of this, Jool has to remember who tried to speak with whom and on which ports, so when answers arrive, it can figure out which conversation the packet belongs to, and mangle the headers correctly. This is not only a quirk of Stateful NAT64; traditional Stateful NAT lives it as well.

- -

The database the bindings are stored in is called hte “Binding Information Base†(BIB). Each record in the database contains an IPv4 address A and its port b, and an IPv6 address C and its port d. The record basically says, “If a packet towards address A on port b arrives, translate and forward it to address C on port dâ€.

- -

Why do you need to know that? A basic Stateful NAT64 installation will give your IPv6 network access to your average IPv4 Internet, but it’s a little or very annoying that IPv4 nodes cannot talk to IPv6 ones without the latter having started the conversations. However, NAT64 does inherit from NAT the ability to configure manual bindings between inner and outer nodes (“Port forwardingâ€). If you want to say, publish a server on your IPv6 network for the IPv4 nodes to see, then you have to hack a manual BIB entry into the database.

- -

Fig.1 - Network design

- -

So what we have here is, the IPv6 nodes can see a HTTP server by querying 1::1 on port 80. What we want is to make it available to the outside via the 1.2.3.4 address on port 5678 (We’ll use a different port simply because we can).

- -

To create a mapping, you have to ask the userspace application something in the lines of this:

- -
$ jool --bib --add <protocols> <Ipv6 address>#<"IPv6" port> <IPv4 address>#<"IPv4" port>
-
- -

which in our example will translate into:

- -
$ jool --bib --add --tcp 1::1#80 1.2.3.4#5678
-
- -
-

If it throws you an error, run dmesg to know the cause. Most likely you’re using an IPv4 address you didn’t add to the pool. Add the address like this:

- -
$ jool --pool4 --add 1.2.3.4
-
- -

Then retry the insertion of the mapping.

-
- -

And have fun.

- -

Fig.2 - Test

- -

Run an operationless version of the --bib command to display your current database:

- -
$ jool --bib
-TCP:
-[Static] 1.2.3.4#5678 - 1::1#80
-  (Fetched 1 entries.)
-UDP:
-  (empty)
-ICMP:
-  (empty)
-
- -

If your output shows a more populated table, it’s because Jool has been translating traffic. Static (manual) and dynamic (created by Jool) mappings belong to the same database.

- -

Note that there are not one, but three different BIB tables. We added the entry only to the TCP BIB because we used the --tcp parameter.

- -
$ # Add an entry to the UDP BIB
-$ jool --bib --add --udp 1::1#80 1.2.3.4#5678
-$ # Add an entry to the UDP and ICMP BIBs
-$ jool --bib --add --udp --icmp 1::1#80 1.2.3.4#5678
-$ # Show the three tables.
-$ jool --bib --tcp --udp --icmp
-$ # Show the three BIBs, quick version.
-$ jool --bib
-$ # (We didn't include any protocols, so Jool assumed we wanted to show every table.)
-
- -

“Hold on!â€, I hear you scream. “The ICMP protocol doesn’t use ports!â€. But it does use ICMP identifiers, which are very similar. It doesn’t really make much sense to create manual ICMP mappings, though, since ICMP identifiers are often unpredictable (as opposed to destination ports).

- -

If you need to remove the binding, replace “add†for “remove†and specify either side of the equation (Mappings are unique on both sides):

- -
$ jool --bib --remove --tcp 1::1#80
-or
-$ jool --bib --remove --tcp 1.2.3.4#5678
-or
-$ # This won't hurt you (and will make sure you're removing exactly what you want to remove).
-$ jool --bib --remove --tcp 1::1#80 1.2.3.4#5678
- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/en/usr-flags-atomic.html b/doc/usr/_site/en/usr-flags-atomic.html deleted file mode 100644 index 5d6f93682..000000000 --- a/doc/usr/_site/en/usr-flags-atomic.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - Atomic Fragments - - - - - -
-
- -
- -
-
- -

Documentation > Userspace Application > Flags > --global > Atomic Fragments

- -

Atomic Fragments

- -

Index

- -
    -
  1. Overview
  2. -
  3. Flags -
      -
    1. --allow-atomic-fragments
    2. -
    3. --setDF
    4. -
    5. --genFH
    6. -
    7. --genID
    8. -
    9. --boostMTU
    10. -
    -
  4. -
- -

Overview

- -

“Atomic fragments†are IPv6 packets which are not fragmented but still contain a (redundant) Fragment Header. They are a hack in the NAT64 specification that intends to leverage the difference between the IPv4 minimum MTU (68) and the IPv6 minimum MTU (1280).

- -

Atomic fragments are known to have security implications and there is official ongoing effort to deprecate them. Even RFC 6145 (ie. SIIT’s core document) warns about issues regarding the hack.

- -

From Jool’s perspective, there are also technical drawbacks to allowing atomic fragments. The Linux kernel is particularly lacking when it comes to recognizing redundant fragment headers, so if Jool is generating one, Linux might fragment the packet in a funny way:

- -

Figure 1 - what could possibly go wrong?

- -

(Jool 3.2 and below used to avoid this by not deferring fragmentation to the kernel, but this introduced other-subtler issues.)

- -

As a consequence, Jool 3.3’s default configuration disables atomic fragments. You should most likely never change this. The options described later in this document all have to do with atomic fragments and are now considerered deprecated. In fact, we intend to wipe them out as soon as (and if) draft-ietf-6man-deprecate-atomfrag-generation is upgraded to RFC status.

- -

Let it be known that we fully condone the deprecation of atomic fragments.

- -

Flags

- -

--allow-atomic-fragments

- - - -

This is a short version of all the following flags.

- -

This:

- -
$(jool) --allow-atomic-fragments true
- -

is the same as

- -
$(jool) --setDF true
-$(jool) --genFH true
-$(jool) --genID false
-$(jool) --boostMTU false
- -

This is the default behaviour requested by RFC 6145, and the IETF is hopefully going to deprecate it in the future. It is not Jool’s default and we do not recommend it.

- -

Also this:

- -
$(jool) --allow-atomic-fragments false
- -

is the same as

- -
$(jool) --setDF false
-$(jool) --genFH false
-$(jool) --genID true
-$(jool) --boostMTU true
- -

This is an alternate mode defined both by RFC 6145 and draft-ietf-6man-deprecate-atomfrag-generation. The latter mandates this behaviour and is Jool 3.3’s default.

- -

Also:

- -

The separation of the four flags exists for historic reasons only; our interpretation of the RFC used to be wrong. You should probably never manage them individually. It doesn’t make sense to set --setDF as false but --setFH as true, for example. The relationship between --setDF and --boostMTU is also particularly delicate; see below for details.

- -

--setDF

- -
    -
  • Name: DF flag always on
  • -
  • Type: Boolean
  • -
  • Default: OFF
  • -
  • Modes: Both (SIIT and Stateful)
  • -
  • Translation direction: IPv6 to IPv4
  • -
- -

The logic is best described in pseudocode form:

- -
	If the incoming packet has a fragment header:
-		the outgoing packet's DF flag will be false.
-	otherwise:
-		if --setDF is true
-			the outgoing packet's DF flag will be true.
-		otherwise:
-			if outgoing packet's length > 1260
-				the outgoing packet's DF flag will be true.
-			otherwise:
-				the outgoing packet's DF flag will be false.
-
- -

Section 6 of RFC 6145 describes the rationale.

- -

Also see --boostMTU for an important gotcha.

- -

--genFH

- -
    -
  • Name: Generate IPv6 Fragment Header
  • -
  • Type: Boolean
  • -
  • Default: OFF
  • -
  • Modes: Both (SIIT and Stateful)
  • -
  • Translation direction: IPv4 to IPv6
  • -
- -

If this is ON, Jool will always generate an “IPv6 Fragment Header†if the incoming IPv4 Packet does not set the DF flag.

- -

If this is OFF, then Jool will not generate the “IPv6 Fragment Header†whether the Flag of the incoming IPv4 Packet is set or not set, unless the incoming packet is a fragment, the “IPv6 Fragment Header†will be generated.

- -

This is the flag that causes Linux to flip out when it needs to fragment. It’s broken, so activate at your own risk.

- -

--genID

- -
    -
  • Name: Generate IPv4 identification
  • -
  • Type: Boolean
  • -
  • Default: ON
  • -
  • Modes: Both (SIIT and Stateful)
  • -
  • Translation direction: IPv6 to IPv4
  • -
- -

All IPv4 packets contain an Identification field. IPv6 packets only contain an Identification field if they have a Fragment header.

- -

If the incoming IPv6 packet has a fragment header, the IPv4 header’s Identification field is always copied from the low-order bits of the IPv6 fragment header’s Identification value.

- -

Otherwise:

- -
    -
  • If --genID is OFF, the IPv4 header’s Identification fields are set to zero.
  • -
  • If --genID is ON, the IPv4 headers’ Identification fields are set randomly.
  • -
- -

--boostMTU

- -
    -
  • Name: Decrease MTU failure rate
  • -
  • Type: Boolean
  • -
  • Default: ON
  • -
  • Modes: Both (SIIT and Stateful)
  • -
  • Translation direction: IPv4 to IPv6 (ICMP errors only)
  • -
- -

When a packet is too big for a link’s MTU, routers generate Packet too Big ICMP errors on IPv6 and Fragmentation Needed ICMP errors on IPv4. These error types are roughly equivalent, so Jool translates Packet too Bigs into Fragmentation Neededs and vice-versa.

- -

These ICMP errors are supposed to contain the offending MTU so the emitter can resize and resend its packets accordingly.

- -

The minimum MTU for IPv6 is 1280. The minimum MTU for IPv4 is 68. Therefore, Jool can find itself wanting to report an illegal MTU while translating a Fragmentation Needed (v4) into a Packet too Big (v6).

- -
    -
  • If --boostMTU is ON, the minimum IPv6 MTU Jool will ever report is 1280.
  • -
  • If --boostMTU is OFF, Jool will not try to mangle MTUs.
  • -
- -

In reality, Jool still has to mangle the MTU values to account for the difference between the IPv4 header’s basic length (20) and the IPv6 header’s (40). An IPv6 packet can be 20 bytes larger than the IPv4 MTU because it’s going to lose 20 bytes when its IPv6 header is replaced by an IPv4 header.

- -

Here’s the full algorithm:

- -
	IPv6_error.MTU = IPv4_error.MTU + 20
-	if --boostMTU == true AND IPv6_error.MTU < 1280
-		IPv6_error.MTU = 1280
-
- -

Section 6 of RFC 6145 describes the rationale.

- -

Notice, if --setDF and --boostMTU are both ON and there’s an IPv4 link with MTU < 1260, you have an endless loop similar to the MTU hassle:

- -
    -
  1. IPv6 sender transmits an IPv6 packet sized 1280.
  2. -
  3. Jool translates it into an IPv4 packet sized 1260 with DF=1.
  4. -
  5. IPv4 router with outbound interface with MTU < 1260 generates ICMPv6 Frag Needed with MTU=1000 (or whatever).
  6. -
  7. Jool translates it to ICMPv6 Packet Too Big with MTU=1280.
  8. -
  9. Goto 1.
  10. -
- -

Thanks to Tore Anderson for noticing (and mostly writing) this quirk.

- - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/en/usr-flags-bib.html b/doc/usr/_site/en/usr-flags-bib.html deleted file mode 100644 index 12e39f41a..000000000 --- a/doc/usr/_site/en/usr-flags-bib.html +++ /dev/null @@ -1,223 +0,0 @@ - - - - - --bib - - - - - -
-
- -
- -
-
- -

Documentation > Userspace Application > Flags > --bib

- -

--bib

- -

Index

- -
    -
  1. Description
  2. -
  3. Syntax
  4. -
  5. Options -
      -
    1. Operations
    2. -
    3. <protocols>
    4. -
    5. --numeric
    6. -
    7. --csv
    8. -
    9. <bib4>, <bib6>
    10. -
    -
  6. -
  7. Examples
  8. -
- -

Description

- -

Interacts with Jool’s Binding Information Base (BIB). If you don’t know what that is, please follow the link before continuing.

- -

Syntax

- -
jool --bib <protocols> [--display] [--numeric] [--csv]
-jool --bib <protocols> --count
-jool --bib <protocols> --add <bib4> <bib6>
-jool --bib <protocols> --remove (<bib4> | <bib6> | <bib4> <bib6>)
-
- -

Options

- -

Operations

- -
    -
  • --display: The BIB tables are printed in standard output. This is the default operation.
  • -
  • --count: The number of entries per BIB table are printed in standard output.
  • -
  • --add: Combines <bib6> and <bib4> into a BIB entry, and uploads it to Jool’s tables.
  • -
  • --remove: Deletes from the tables the BIB entry described by <bib6> and/or <bib4>.
  • -
- -

<protocols>

- -
<protocols> := [--tcp] [--udp] [--icmp]
-
- -

The command will only operate on the tables mentioned here. If you omit this entirely, Jool will fall back to operate on all three tables.

- -

--numeric

- -

By default, the application will attempt to resolve the name of the IPv6 node of each BIB entry. If your nameservers aren’t answering, this will slow the output down.

- -

Use --numeric to turn this behavior off.

- -

--csv

- -

By default, the application will print the tables in a relatively console-friendly format.

- -

Use --csv to print in CSV format, which is spreadsheet-friendly.

- -

<bib4>, <bib6>

- -
<bib4> := <IPv4 address>#(<port> | <ICMP identifier>)
-<bib6> := <IPv6 address>#(<port> | <ICMP identifier>)
-
- -

A BIB entry is composed of a IPv6 transport address (the IPv6 node’s connection identifiers) and a IPv4 transport address (the connection identifiers Jool is using to mask the IPv6 ones).

- -

If you’re adding or removing a BIB, you provide both addresses via these parameters.

- -

Note that the <bib4> component must be a member of Jool’s IPv4 pool, so make sure you have registered it there first.

- -

Within a BIB table, every IPv4 transport address is unique. Within a BIB table, every IPv6 transport address is also unique. Therefore, If you’re removing a BIB entry, you actually only need to provide one of them. You can still input both to make sure you’re deleting exactly what you want to delete, though.

- -

Examples

- -

Assumptions:

- -
    -
  • 4.4.4.4 belongs to the IPv4 pool.
  • -
  • The name of 6::6 is “potato.mxâ€.
  • -
  • 6::6 already spoke to a IPv4 node recently, so the database will not start empty.
  • -
- -

Display the entire database:

- -
$ jool --bib --display
-TCP:
-[Dynamic] 4.4.4.4#1234 - potato.mx#1234
-  (Fetched 1 entries.)
-UDP:
-  (empty)
-ICMP:
-  (empty)
- -

Publish a couple of TCP services:

- -
# jool --bib --add --tcp 6::6#6 4.4.4.4#4
-# jool --bib --add --tcp 6::6#66 4.4.4.4#44
- -

Display the TCP table:

- -
$ jool --bib --display --tcp
-TCP:
-[Static] 4.4.4.4#4 - potato.mx#6
-[Static] 4.4.4.4#44 - potato.mx#66
-[Dynamic] 4.4.4.4#1234 - potato.mx#1234
-  (Fetched 3 entries.)
- -

Same, but do not query the DNS:

- -
$ jool --bib --display --tcp --numeric
-TCP:
-[Static] 4.4.4.4#4 - 6::6#6
-[Static] 4.4.4.4#44 - 6::6#66
-[Dynamic] 4.4.4.4#1234 - 6::6#1234
-  (Fetched 3 entries.)
- -

Publish a UDP service:

- -
# jool --bib --add --udp 6::6#6666 4.4.4.4#4444
- -

Dump the database on a CSV file:

- -
$ jool --bib --display --numeric --csv > bib.csv
- -

bib.csv

- -

Display the number of entries in the TCP and ICMP tables:

- -
$ jool --bib --count --tcp --icmp
-TCP: 3
-ICMP: 0
- -

Remove the UDP entry:

- -
# jool --bib --remove --udp 6::6#6666
- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/en/usr-flags-blacklist.html b/doc/usr/_site/en/usr-flags-blacklist.html deleted file mode 100644 index 0216d37a2..000000000 --- a/doc/usr/_site/en/usr-flags-blacklist.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - - --blacklist - - - - - -
-
- -
- -
-
- -

Documentation > Userspace Application > Flags > --blacklist

- -

--blacklist

- -

Index

- -
    -
  1. Description
  2. -
  3. Syntax
  4. -
  5. Options
  6. -
  7. Examples
  8. -
- -

Description

- -

Interacts with Jool’s blacklisted addresses pool.

- -

The pool dictates which addresses can be translated using the pool6 prefix. Notice EAM has more priority than the prefix, so you don’t have to add an entry to this pool for every EAM entry you need.

- -

There are some addresses Jool will refuse to translate, regardless of blacklist. These include

- -
    -
  • The addresses that belong to Jool’s node (because Jool can only be used in a forwarding fashion, currently).
  • -
  • Software addresses (0.0.0.0/8).
  • -
  • Host addresses (127.0.0.0/8).
  • -
  • Link-local addresses (169.254.0.0/16).
  • -
  • Limited broadcast (255.255.255.255/32).
  • -
- -

Syntax

- -
jool_siit --blacklist [--display]
-jool_siit --blacklist --count
-jool_siit --blacklist --add <IPv4 prefix>
-jool_siit --blacklist --remove <IPv4 prefix>
-jool_siit --blacklist --flush
-
- -

Options

- -
    -
  • --display: The pool’s addresses/prefixes are printed in standard output. This is the default operation.
  • -
  • --count: The number of addresses (not prefixes) in the pool is printed in standard output.
    -For example, if all you have is a /30 prefix, expect “4†as output.
  • -
  • --add: Uploads <IPv4 prefix> to the pool.
  • -
  • --remove: Deletes from the tables the address <IPv4 prefix>.
  • -
  • --flush: Removes all addresses/prefixes from the pool.
  • -
- -

Examples

- -

Display the current addresses:

- -
$ jool_siit --blacklist --display
-192.0.2.0/28
-198.51.100.0/30
-203.0.113.8/32
-  (Fetched 3 prefixes.)
-
- -

Display only the address count:

- -
$ jool_siit --blacklist --count
-21
-
- -

(That’s /28 + /30 + /32 = 16 + 4 + 1)

- -

Remove a couple of entries:

- -
# jool_siit --blacklist --remove 192.0.2.0/28
-# jool_siit --blacklist --remove 198.51.100.0/30
-
- -

Return one entry:

- -
# jool_siit --blacklist --add 192.0.2.0/28
-
- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/en/usr-flags-eamt.html b/doc/usr/_site/en/usr-flags-eamt.html deleted file mode 100644 index c990dffe3..000000000 --- a/doc/usr/_site/en/usr-flags-eamt.html +++ /dev/null @@ -1,214 +0,0 @@ - - - - - --eamt - - - - - -
-
- -
- -
-
- -

Documentation > Userspace Application > Flags > --eamt

- -

--eamt

- -

Index

- -
    -
  1. Description
  2. -
  3. Syntax
  4. -
  5. Options -
      -
    1. Operations
    2. -
    3. --csv
    4. -
    5. <prefix4>, <prefix6>
    6. -
    -
  6. -
  7. Examples
  8. -
- -

Description

- -

Interacts with Jool’s Explicit Address Mapping Table (EAMT). See the introduction for a swift overview, our draft summary for more details, or the EAM draft for the full story.

- -

Syntax

- -
jool_siit --eamt [--display] [--csv]
-jool_siit --eamt --count
-jool_siit --eamt --add <prefix4> <prefix6> [--force]
-jool_siit --eamt --remove (<prefix4> | <prefix6> | <prefix4> <prefix6>)
-jool_siit --eamt --flush
-
- -

Options

- -

Operations

- -
    -
  • --display: The EAMT is printed in standard output. This is the default operation.
  • -
  • --count: The number of entries in the EAMT are printed in standard output.
  • -
  • --add: Combines <prefix4> and <prefix6> into an EAM entry, and uploads it to Jool’s table.
  • -
  • --remove: Deletes from the table the EAM entry described by <prefix4> and/or <prefix6>.
  • -
  • --flush: Removes all entries from the table.
  • -
- -

--csv

- -

By default, the application will print the tables in a relatively console-friendly format.

- -

Use --csv to print in CSV format, which is spreadsheet-friendly.

- -

<prefix4>, <prefix6>

- -
<prefix4> := <IPv4 address>[/<prefix length>]
-<prefix6> := <IPv6 address>[/<prefix length>]
-
- -

These are the prefixes each record is made out of. See the general EAMT explanation.

- -

<prefix length> defaults to /32 on <prefix4> and /128 on <prefix6>. Jool automatically zeroizes any suffix from either address if it exists.

- -

Every prefix is unique accross the table. Therefore, If you’re removing an EAMT entry, you actually only need to provide one of them. You can still input both to make sure you’re deleting exactly what you want to delete, though.

- -

--force

- -

By default, EAMT entries are not allowed to overlap. You can use --force while --adding to override this property. When overlapping EAMT entries exist, Jool picks based on longest match prefix.

- -

For example:

- - - - - - - - - - - - - - - - - - -
IPv4 PrefixIPv6 Prefix
192.0.2.0/242001:db8:aaaa::/120
192.0.2.8/292001:db8:bbbb::/125
- -

Address 192.0.2.9 matches 192.0.2.8/29 better than 192.0.2.0/24, so it will get translated as 2001:db8:bbbb::1, not 2001:db8:aaaa::8.

- -

Notice this creates assymetry. 2001:db8:aaaa::9 gets translated as 192.0.2.9, which in turn gets translated as 2001:db8:bbbb::1. Depending on your use case, this can break communication.

- -

Overlapping EAMT entries exist to help EAM coexist with IVI. Other use cases might arise in the future.

- -

Examples

- -

Add a handful of mappings:

- -
# jool_siit --eamt --add 192.0.2.1      2001:db8:aaaa::
-# jool_siit --eamt --add 192.0.2.2/32   2001:db8:bbbb::b/128
-# jool_siit --eamt --add 192.0.2.16/28  2001:db8:cccc::/124
-# jool_siit --eamt --add 192.0.2.128/26 2001:db8:dddd::/64
-# jool_siit --eamt --add 192.0.2.192/31 64:ff9b::/127
- -

Display the new table:

- -
$ jool_siit --eamt --display
-64:ff9b::/127 - 192.0.2.192/31
-2001:db8:dddd::/64 - 192.0.2.128/26
-2001:db8:cccc::/124 - 192.0.2.16/28
-2001:db8:bbbb::b/128 - 192.0.2.2/32
-2001:db8:aaaa::/128 - 192.0.2.1/32
-  (Fetched 5 entries.)
- -

Dump the database on a CSV file:

- -
$ jool_siit --eamt --display --csv > eamt.csv
- -

eamt.csv

- -

Display the number of entries in the table:

- -
$ jool_siit --eamt --count
-5
- -

Remove the first entry:

- -
# jool_siit --eamt --remove 2001:db8:aaaa::
- -

Empty the table:

- -
# jool_siit --eamt --flush
- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/en/usr-flags-global.html b/doc/usr/_site/en/usr-flags-global.html deleted file mode 100644 index c1592a631..000000000 --- a/doc/usr/_site/en/usr-flags-global.html +++ /dev/null @@ -1,613 +0,0 @@ - - - - - --global - - - - - -
-
- -
- -
-
- -

Documentation > Userspace Application > Flags > --global

- -

--global

- -

Index

- -
    -
  1. Description
  2. -
  3. Syntax
  4. -
  5. Examples
  6. -
  7. Keys -
      -
    1. --enable, --disable
    2. -
    3. --address-dependent-filtering
    4. -
    5. --drop-icmpv6-info
    6. -
    7. --drop-externally-initiated-tcp
    8. -
    9. --udp-timeout
    10. -
    11. --tcp-est-timeout
    12. -
    13. --tcp-trans-timeout
    14. -
    15. --icmp-timeout
    16. -
    17. --fragment-arrival-timeout
    18. -
    19. --maximum-simultaneous-opens
    20. -
    21. --source-icmpv6-errors-better
    22. -
    23. --logging-bib
    24. -
    25. --logging-session
    26. -
    27. --zeroize-traffic-class
    28. -
    29. --override-tos
    30. -
    31. --tos
    32. -
    33. --allow-atomic-fragments -
        -
      1. --setDF
      2. -
      3. --genFH
      4. -
      5. --genID
      6. -
      7. --boostMTU
      8. -
      -
    34. -
    35. --amend-udp-checksum-zero
    36. -
    37. --randomize-rfc6791-addresses
    38. -
    39. --mtu-plateaus
    40. -
    -
  8. -
- -

Description

- -

Controls several of Jool’s internal variables.

- -
    -
  • Issue an empty --global command to display the current values of all of Jool’s options.
  • -
  • Enter a key and a value to edit the key’s variable.
  • -
- -

--global is the default configuration mode, so you never actually need to input that one flag.

- -

Syntax

- -
jool_siit [--global]
-jool_siit [--global] <flag key> <new value>
-jool [--global]
-jool [--global] <flag key> <new value>
-
- -

Examples

- -

Display the current configuration, keys and values:

- -
$ jool_siit --global
-
- -

Same thing, shorter version:

- -
$ # BTW: This looks very simple, but it still requires Jool's kernel module to be active.
-$ jool_siit
-
- -

Pause Jool:

- -
# jool --global --disable
-
- -

Turn “address dependent filtering†on:

- -
$ # true, false, 1, 0, yes, no, on and off all count as valid booleans.
-# jool --address-dependent-filtering true
-
- -

Update the plateaus list:

- -
# jool_siit --mtu-plateaus "6000, 5000, 4000, 3000, 2000, 1000"
-
- -

Keys

- -

The following flag keys are available:

- -

--enable, --disable

- -
    -
  • Type: -
  • -
  • Default: Depends on modprobe arguments
  • -
  • Modes: Both (SIIT and Stateful)
  • -
- -

Resumes and pauses translation of packets, respectively. This might be useful if you want to change more than one configuration parameter at once and you don’t want packets being translated inconsistently while you run the commands.

- -

(If you don’t want Jool to stop while you reconfigure, don’t worry about this. Use it only if it feels right.)

- -

Timeouts will not be paused. In other words, BIB/session entries and stored packets and fragments might die while Jool is idle.

- -

--address-dependent-filtering

- -
    -
  • Type: Boolean
  • -
  • Default: OFF
  • -
  • Modes: Stateful only
  • -
  • Deprecated name: --dropAddr
  • -
  • Source: Scattered at RFC 6146. One summary is at the end of section 1.2.3.
  • -
- -

Long story short:

- -
    -
  • --address-dependent-filtering ON means Jool should be an (address)-restricted-cone NAT.
  • -
  • --address-dependent-filtering OFF means Jool should be a full-cone NAT.
  • -
- -

Wiki.

- -

Long story long:

- -

Suppose n6 is talking with n4a via the NAT64:

- -

Fig.1: Legal chat

- -

The relevant BIB entry is

- - - - - - - - - - - - - - - - -
IPv6 transport addressIPv4 transport addressProtocol
2001:db8::1#10192.0.2.1#10TCP
- -

n4b realizes the existence of n6’s service, perhaps because n4a tells him about it:

- -

Fig.2: n4b finds about n6

- -

Then n4b tries to chat n6 too:

- -

Fig.3: suspicious query

- -

Because the BIB entry exists, J knows that n4b means “2001:db8::1#10†when he says “192.0.2.1#10â€, so the packet can technically be translated. However, because of the session tables, J can also tell that n6 hasn’t been talking to n4b in the past.

- -

If --address-dependent-filtering is OFF, J will allow n4b’s packet to pass. If --address-dependent-filtering is ON, J will drop n4b’s packet and respond with a “Communication Administratively Prohibited†ICMP error. This effectively wrecks any IPv4-started communication attempts, even if there are BIB entries (static or otherwise).

- -
    -
  • If you’re using the NAT64 to publish a IPv6-only service to the IPv4 Internet, it makes sense for --address-dependent-filtering to be OFF. This is because clients are expected to find out about the IPv6 service on their own, and the server doesn’t normally start packet streams.
  • -
  • If you’re using the NAT64 to allow IPv6 nodes to browse the IPv4 Internet, it makes sense for --address-dependent-filtering to be ON. This is because clients choose their ports at random; it is suspicious for random outsider nodes to guess these ports.
  • -
- -

--address-dependent-filtering ON might break NAT traversal methods like STUN (or at least make some operation modes impossible).

- -

--drop-icmpv6-info

- -
    -
  • Type: Boolean
  • -
  • Default: OFF
  • -
  • Modes: Stateful only
  • -
  • Deprecated name: --dropInfo
  • -
  • Source: RFC 6146, section 3.5.3
  • -
- -

If you turn this on, pings (both requests and responses) will be blocked while being translated from ICMPv6 to ICMPv4.

- -

For some reason, we’re not supposed to block pings from ICMPv4 to ICMPv6, but since you need both a request and a response for a successful echo, the outcome seems to be the same.

- -

This rule will not affect Error ICMP messages.

- -

--drop-externally-initiated-tcp

- - - -

Turn --drop-externally-initiated-tcp ON to wreck any attempts of IPv4 nodes to initiate TCP communication to IPv6 nodes.

- -

Of course, this will not block IPv4 traffic if some IPv6 node first requested it.

- -

--udp-timeout

- -
    -
  • Type: Integer (seconds)
  • -
  • Default: 5 minutes
  • -
  • Modes: Stateful only
  • -
  • Deprecated name: --toUDP
  • -
  • Source: RFC 6146, section 3.5.1
  • -
- -

When a UDP session has been lying around inactive for this long, its entry will be removed from the database automatically.

- -

When you change this value, the lifetimes of all already existing UDP sessions are updated.

- -

--tcp-est-timeout

- -
    -
  • Type: Integer (seconds)
  • -
  • Default: 2 hours
  • -
  • Modes: Stateful only
  • -
  • Deprecated name: --toTCPest
  • -
  • Source: RFC 6146, section 3.5.2.2
  • -
- -

When an established TCP connection has remained inactive for this long, its existence will be questioned. Jool will send a probe packet to one of the endpoints and kill the session if a response is not received before the --tcp-trans-timeout timeout.

- -

When you change this value, the lifetimes of all already existing established TCP sessions are updated.

- -

--tcp-trans-timeout

- - - -

When an unhealthy TCP session has been lying around inactive for this long, its entry will be removed from the database automatically. An “unhealthy†session is one in which the TCP handshake has not yet been completed, it is being terminated by the endpoints, or is technically established but has remained inactive for --tcp-est-timeout time.

- -

When you change this value, the lifetimes of all already existing transitory TCP sessions are updated.

- -

--icmp-timeout

- -
    -
  • Type: Integer (seconds)
  • -
  • Default: 1 minute
  • -
  • Modes: Stateful only
  • -
  • Deprecated name: --toICMP
  • -
  • Source: RFC 6146, section 3.5.3
  • -
- -

When a ICMP session has been lying around inactive for this long, its entry will be removed from the database automatically.

- -

When you change this value, the lifetimes of all already existing ICMP sessions are updated.

- -

--fragment-arrival-timeout

- -
    -
  • Type: Integer (seconds)
  • -
  • Default: 2 seconds
  • -
  • Modes: NAT64 only
  • -
  • Deprecated name: --toFrag
  • -
  • Source: None (the flag addresses a Linux quirk).
  • -
- -

Stateful Jool requires fragment reassembly.

- -

In kernels 3.13 and above, --fragment-arrival-timeout does nothing whatsoever.

- -

In kernels 3.12 and below, the kernel’s IPv6 fragment reassembly module (nf_defrag_ipv6) is a little tricky. It collects the fragments, and instead of reassembling, it fetches them all to the rest of the kernel in ascending order and really quickly. Because Jool has to process all the fragments of a single packet at the same time, it has to wait until nf_defrag_ipv6 has handed them all.

- -

--fragment-arrival-timeout is the time Jool will wait for nf_defrag_ipv6 to fetch all the fragments of a common packet. It has nothing to do with waiting for fragments to arrive at the node.

- -

Because nf_defrag_ipv6 already waited for all the fragments to arrive, it should fetch them in nanoseconds. Therefore, --fragment-arrival-timeout’s default value of 2 seconds is probably overly high. On the other hand, unless there is a random module dropping packets in between, all of the fragments should always arrive immediately, hence the timer should actually never run out (even if you’re being attacked).

- -

SIIT Jool does not need fragment reassembly at all.

- -

This behavior changed from Jool 3.2, where --toFrag used to actually be the time Jool would wait for fragments to arrive at the node.

- -

--maximum-simultaneous-opens

- -
    -
  • Type: Integer
  • -
  • Default: 10
  • -
  • Modes: NAT64 only
  • -
  • Deprecated name: --maxStoredPkts
  • -
  • Source: RFC 6146, section 5.3 (indirectly)
  • -
- -

When an external (IPv4) node first attempts to open a connection and there’s no BIB entry for it, Jool normally answers with an Address Unreachable (type 3, code 1) ICMP error message, since it cannot know which IPv6 node the packet is heading.

- -

In the case of TCP, the situation is a little more complicated because the IPv4 node might be attempting a Simultaneous Open of TCP Connections. To really know what’s going on, Jool has to store the packet for 6 seconds.

- -

--maximum-simultaneous-opens is the maximum amount of packets Jool will store at a time. The default means that you can have up to 10 “simultaneous†simultaneous opens; Jool will fall back to answer the ICMP error message on the eleventh one.

- -

--source-icmpv6-errors-better

- -
    -
  • Type: Boolean
  • -
  • Default: False
  • -
  • Modes: NAT64 only
  • -
  • Translation direction: IPv4 to IPv6 (ICMP errors only)
  • -
  • Source: Issue 132
  • -
- -

For some reason, RFC 6146 wants the source of translated ICMPv6 errors to be the same as their inner packets’ destination address. This looks really weird.

- -

Fig.4: Source better diagram

- -

Say the link between R and n4 collapses.

- -
    -
  1. n6 TCP-packets n4: 2001:db8::1 -> 64:ff9b::203.0.113.13.
  2. -
  3. T translates and forwards: 192.0.2.1 -> 203.0.113.13
  4. -
  5. R answers ICMPv4 error “Host unreachableâ€. The error packet’s addresses are 192.0.2.6 -> 192.0.2.1.
  6. -
  7. T translates into an IPv6 packet whose addresses are 64:ff9b::203.0.113.13 -> 2001:db8::1 (because this is the inverse of the first packet).
  8. -
- -

This breaks traceroutes. Shouldn’t it have been 64:ff9b::192.0.2.6 -> 2001:db8::1 instead?

- -
    -
  • --source-icmpv6-errors-better OFF will make Jool obey RFC 6146 (and break traceroutes).
  • -
  • --source-icmpv6-errors-better ON will translate the outer source address directly, simply appending the prefix to the source address of the original (step 3) packet.
  • -
- -

--logging-bib

- -
    -
  • Type: Boolean
  • -
  • Default: False
  • -
  • Modes: NAT64 only
  • -
  • Translation direction: Both
  • -
  • Source: RFC 6888, section 4
  • -
- -

Enables logging of transport address mappings as they are created and destroyed. If you are a Service Provider, your government might require you to do this.

- -

Analysis of these logs can let you know which IPv4 address and port masked your “internal†(IPv6) nodes at a certain time. Here’s a sample output:

- -
$ jool --logging-bib true
-$ dmesg
-[  312.493235] 2015/4/8 16:13:2 (GMT) - Mapped 2001:db8::5#19945 to 192.0.2.2#8208 (UDP)
-[  373.724229] 2015/4/8 16:14:3 (GMT) - Mapped 2001:db8::8#46516 to 192.0.2.2#12592 (TCP)
-[  468.675524] 2015/4/8 16:15:38 (GMT) - Forgot 2001:db8::5#19945 to 192.0.2.2#8208 (UDP)
-
- -

In this example,

- -
    -
  1. 2001:db8::5 used (its own) port 19945 to speak to someone using the UDP protocol. This someone thought 2001:db8::5’s address was 192.0.2.2, and that it was using port 8208.
  2. -
  3. Roughly a minute later, 2001:db8::8 (on port 46516) started speaking to somebody using TCP. It’s being masked as 192.0.2.2#12592. This connection has not yet ended.
  4. -
  5. Some time later, Jool forgot the UDP mapping (because of inactivity, not because the last packet happened at 16:15:38. “How much inactivity†is controlled by the timeouts - in this case, the UDP one). At this point, 192.0.2.2#8208 is free from 2001:db8::5 and Jool can reassign it.
  6. -
- -

So, if your government comes and says “I detected somebody named 192.0.2.2#8208 did something illegal at 4:14 pm via UDPâ€, you can report the culprit is 2001:db8::5#19945 and free yourself from the blame.

- -

There are several important things to notice:

- -
    -
  • Each mapping’s uniquenesss extends to the protocol. If your logging only says Mapped 2001:db8::5#19945 to 192.0.2.2#8208 (UDP), you can’t assume 2001:db8::5#19945 is 192.0.2.2#8208 on TCP as well.
  • -
  • Your IPv6 nodes share IPv4 addresses! Therefore, mind the ports.
  • -
  • There’s no information on who was 2001:db8::5 talking to. This is a good thing; it means you’re honoring your client’s privacy as much as you can.
  • -
  • The logging uses GMT; you might need to convert this for comfort.
  • -
- -

This defaults to false because it generates humongous amounts of logs while active (remember you need infrastructure to maintain them). Notice the maps are dumped into the kernel log, so the messages will be mixed along with anything else the kernel has to say (including Jool’s error messages, for example). The log messages will have INFO priority.

- -

If logging the destination makes sense for you, see --logging-session (below). To comply with REQ-12 of RFC 6888 you want to set --loging-bib as true and --logging-session as false.

- -

--logging-session

- -
    -
  • Type: Boolean
  • -
  • Default: False
  • -
  • Modes: NAT64 only
  • -
  • Translation direction: Both
  • -
  • Source: RFC 6888, section 4
  • -
- -

Enables logging of every session as they are created and destroyed.

- -

The format is

- -
<date> <time> (GMT) - <action> session <IPv6 node>|<IPv6 representation of IPv4 node>|<IPv4 representation of IPv6 node>|<IPv4 node>|Protocol
-
- -

Here’s a sample output:

- -
$ jool --logging-session true
-$ dmesg
-[ 3238.087902] 2015/4/8 17:1:47 (GMT) - Added session 1::5#47073|64:ff9b::c000:205#80|192.0.2.2#63527|192.0.2.5#80|TCP
-[ 3238.099997] 2015/4/8 17:1:47 (GMT) - Added session 1::5#47074|64:ff9b::c000:205#80|192.0.2.2#42527|192.0.2.5#80|TCP
-[ 3241.624104] 2015/4/8 17:1:51 (GMT) - Added session 1::5#33160|64:ff9b::c000:205#8080|192.0.2.2#15496|192.0.2.5#8080|TCP
-[ 3241.630905] 2015/4/8 17:1:51 (GMT) - Added session 1::5#33161|64:ff9b::c000:205#8080|192.0.2.2#7060|192.0.2.5#8080|TCP
-[ 3478.498559] 2015/4/8 17:5:48 (GMT) - Forgot session 1::5#47073|64:ff9b::c000:205#80|192.0.2.2#63527|192.0.2.5#80|TCP
-[ 3478.499758] 2015/4/8 17:5:48 (GMT) - Forgot session 1::5#47074|64:ff9b::c000:205#80|192.0.2.2#42527|192.0.2.5#80|TCP
-[ 3481.632214] 2015/4/8 17:5:51 (GMT) - Forgot session 1::5#33160|64:ff9b::c000:205#8080|192.0.2.2#15496|192.0.2.5#8080|TCP
-[ 3481.632342] 2015/4/8 17:5:51 (GMT) - Forgot session 1::5#33161|64:ff9b::c000:205#8080|192.0.2.2#7060|192.0.2.5#8080|TCP
-
- -

This log is remarcably more voluptuous than --logging-bib, not only because each message is longer, but because sessions are generated and destroyed more often than BIB entries (each BIB entry can have multiple sessions). Because of REQ-12 from RFC 6888 section 4, chances are you don’t even want the extra information sessions grant you.

- -

--zeroize-traffic-class

- -
    -
  • Type: Boolean
  • -
  • Default: OFF
  • -
  • Modes: Both (SIIT and NAT64)
  • -
  • Translation direction: IPv4 to IPv6
  • -
  • Source: RFC 6145, section 4.1
  • -
  • Deprecated name: --setTC
  • -
- -

The IPv6 header’s Traffic Class field is very similar to IPv4’s Type of Service (TOS).

- -

If you leave this OFF, the TOS value will be copied directly to the Traffic Class field. If you turn this ON, Jool will always set Traffic Class as zero instead.

- -

--override-tos

- -
    -
  • Type: Boolean
  • -
  • Default: OFF
  • -
  • Modes: Both (SIIT and NAT64)
  • -
  • Translation direction: IPv6 to IPv4
  • -
  • Source: RFC 6145, section 5.1
  • -
  • Deprecated name: --setTOS
  • -
- -

The IPv6 header’s Traffic Class field is very similar to IPv4’s Type of Service (TOS).

- -

If you leave this OFF, the Traffic Class value will be copied directly to the TOS field during IPv6-to-IPv4 translations. If you turn this ON, Jool will always set TOS as --tos instead.

- -

--tos

- -
    -
  • Type: Integer
  • -
  • Default: 0
  • -
  • Modes: Both (SIIT and NAT64)
  • -
  • Translation direction: IPv6 to IPv4
  • -
  • Source: RFC 6145, section 5.1
  • -
  • Deprecated name: --TOS
  • -
- -

Value to set the TOS value of the packets’ IPv4 fields during IPv6-to-IPv4 translations. This only applies when --override-tos is ON.

- -

--allow-atomic-fragments

- -

Deprecated. See Atomic Fragments.

- -

--setDF

- -

Deprecated. See Atomic Fragments.

- -

--genFH

- -

Deprecated. See Atomic Fragments.

- -

--genID

- -

Deprecated. See Atomic Fragments.

- -

--boostMTU

- -

Deprecated. See Atomic Fragments.

- -

--amend-udp-checksum-zero

- -
    -
  • Type: Boolean
  • -
  • Default: OFF
  • -
  • Modes: SIIT only
  • -
  • Translation direction: IPv4 to IPv6 (UDP only)
  • -
  • Source: RFC 6145, section 4.5
  • -
- -

In IPv4, it’s legal for UDP packets to contain zero as checksum. This is because the whole thing about UDP is that it’s unreliable, and therefore sometimes the value of checksum validation does not justify its overhead.

- -

In IPv6, zero is an invalid checksum value for UDP packets.

- -
    -
  • If --amend-udp-checksum-zero is ON and a zero-checksum IPv4-UDP packet arrives, Jool will compute its checksum before translating it. Note, this might be computationally expensive.
  • -
  • If --amend-udp-checksum-zero is OFF and a zero-checksum IPv4-UDP packet arrives, Jool will unceremoniously drop the packet and log its addresses (with Log Level KERN_DEBUG).
  • -
- -

This does not affect fragmented zero-checksum IPv4-UDP packets. SIIT Jool does not reassemble, which means it cannot compute the checskum. In these cases, the packet will be dropped regardless of --amend-udp-checksum-zero.

- -

Stateful NAT64 Jool always computes zero-checksums from IPv4-UDP packets. Because it reassembles, it will also do so for fragmented packets.

- -

--randomize-rfc6791-addresses

- -
    -
  • Type: Boolean
  • -
  • Default: ON
  • -
  • Modes: SIIT only
  • -
  • Translation direction: IPv6 to IPv4
  • -
  • Source: Issue 130
  • -
- -

If an ICMPv6 error’s source cannot be translated, RFC 6791 wants us to assign as source a random IPv4 address from the RFC 6791 pool.

- -
    -
  • If --randomize-rfc6791-addresses is ON, Jool will follow RFC 6791’s advice, assigning a random address from the pool.
  • -
  • If --randomize-rfc6791-addresses is OFF, Jool will assign the hop limitth address from the pool.
  • -
- -

Why? It can be argued that hop limitth is better.

- -

--mtu-plateaus

- -
    -
  • Type: List of Integers separated by commas (If you want whitespace, remember to quote).
  • -
  • Default: “65535, 32000, 17914, 8166, 4352, 2002, 1492, 1006, 508, 296, 68â€
  • -
  • Modes: Both (SIIT and NAT64)
  • -
  • Translation direction: IPv4 to IPv6 (ICMP errors only)
  • -
  • Source: RFC 6145, section 4.2
  • -
  • Deprecated name: --plateaus
  • -
- -

When a packet should not be fragmented and doesn’t fit into a link it’s supposed to traverse, the troubled router is supposed to respond an error message indicating Fragmentation Needed. Ideally, this error message would contain the MTU of the link so the original emitter would be aware of the ideal packet size and avoid fragmentation. However, the original ICMPv4 specification does not require routers to include this data.

- -

Backwards compatibility awards IPv4 emmiters strategies to fall back when they encounter such a situation, but IPv6 has always been designed with the field present in mind. Therefore, if Jool translates a zero-MTU ICMPv4 message into a zero-MTU ICMPv6 message, chaos might ensue (actual results will depend mainly on the IPv6 client’s implementation).

- -

To address this problem, when Jool finds itself attempting to translate a zero-MTU message, it will replace the MTU with the greatest plateau which is lower than the original packet’s Total Length field. Admittedly, this might or might not be the correct MTU, but is a very educated guess. See this example for more details. More in-depth information can be found in RFC 1191.

- -

Note that if --boostMTU is activated, the MTU will still be 1280 even if the relevant plateau is less than 1280.

- -

You don’t really need to sort the values as you input them.

- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/en/usr-flags-help.html b/doc/usr/_site/en/usr-flags-help.html deleted file mode 100644 index 5fed548b7..000000000 --- a/doc/usr/_site/en/usr-flags-help.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - --help - - - - - -
-
- -
- -
-
- -

Documentation > Userspace Application > Flags > --help

- -

--help

- -

Index

- -
    -
  1. Description
  2. -
  3. Syntax
  4. -
  5. Examples
  6. -
- -

Description

- -

Prints mostly a summary of the userspace app flags documentation, though you can also use it to review the abbreviated form of the flags, which aren’t there.

- -

--help is the only mode which does not require the respective kernel module to be active.

- -

You might also be interested in man jool_siit/man jool, which prints a better summary of the grammar.

- -

Syntax

- -
(jool_siit | jool) --help
-
- -

Examples

- -
jool_siit --help
-jool --help
-
- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/en/usr-flags-plateaus.html b/doc/usr/_site/en/usr-flags-plateaus.html deleted file mode 100644 index a696fad17..000000000 --- a/doc/usr/_site/en/usr-flags-plateaus.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - --plateaus - - - - - -
-
- -
- -
-
- -

Documentation > Userspace Application > Flags > --global > --plateaus

- -

MTU Plateaus (Example)

- -

Introduction

- -

This article explains the purpose of the --plateaus flag by example.

- -

This is the sample network:

- -

Fig.1 - Network

- -

The maximum bytes per packet (MTU) of links n6-J and J-r4 is 1500.

- -

Link r4-n4 is an ARPANET network. Therefore, its packets can be up to 8159-96 bits long (~1007 bytes).

- -

For illustrative purposes, let’s pretend Jool will not mangle the size of the packets it translates. In reality, IPv4 headers are 20 bytes shorter than IPv6 headers, and there are other quirks as well, but they’re irrelevant for the purposes of this example.

- -

Here it goes:

- -

Example

- -

n6 wants to write a 1500-byte IPv6 packet to n4 (Think 100 bytes of headers and 1400 bytes of data payload). J converts it to a 1500-byte IPv4 packet and sends it to r4. r4 cannot forward it because it’s too big for the 1007-byte limit of the r4-n4 network, so it returns a ICMP error to n6.

- -

Fig.2 - Attempt 1

- -

Path MTU discovery operates under the assumption that the router who could not forward the packet will report the maximum packet size it can transmit. At this point, the ICMP error would contain the magic number “1007â€, and so n6 would know that he has to slice his packet into according pieces if he’s still interested in the arrival of his message.

- -

Unfortunately, the original ICMPv4 specification does not mandate the inclusion of the number; it is an afterthought. If r4 is old enough, it will leave the MTU field unset (i. e. zero), and n6 will be baffled at the prospect of having to divide its data into chunks of zero bytes each (ICMPv6 does mandate the MTU field, so IPv6 nodes actually rely on it).

- -

Being the only one who has a grasp of what the problem is, the task of hacking a solution befalls on the NAT64.

- -

J will realize that the problem exists by observing that it’s trying to translate a ICMPv4 error with a zero MTU to ICMPv6, where that’s illegal. J doesn’t have a way to know the MTU of the r4-n4 network, so it has to guess. It does know that the rejected packet was 1500 bytes long, so it takes a look at --plateaus, whose default value is based on the following table, and picks the first plateau which would reject a 1500-sized packet:

- -
   Plateau    MTU    Comments                      Reference
-   ------     ---    --------                      ---------
-	      65535  Official maximum MTU          RFC 791
-	      65535  Hyperchannel                  RFC 1044
-   65535
-   32000             Just in case
-	      17914  16Mb IBM Token Ring
-   17914
-	      8166   IEEE 802.4                    RFC 1042
-   8166
-	      4464   IEEE 802.5 (4Mb max)          RFC 1042
-	      4352   FDDI (Revised)                RFC 1188
-   4352 (1%)
-	      2048   Wideband Network              RFC 907
-	      2002   IEEE 802.5 (4Mb recommended)  RFC 1042
-   2002 (2%)
-	      1536   Exp. Ethernet Nets            RFC 895
-	      1500   Ethernet Networks             RFC 894
-	      1500   Point-to-Point (default)      RFC 1134
-	      1492   IEEE 802.3                    RFC 1042
-   1492 (3%)
-	      1006   SLIP                          RFC 1055
-	      1006   ARPANET                       BBN 1822
-   1006
-	      576    X.25 Networks                 RFC 877
-	      544    DEC IP Portal
-	      512    NETBIOS                       RFC 1088
-	      508    IEEE 802/Source-Rt Bridge     RFC 1042
-	      508    ARCNET                        RFC 1051
-   508 (13%)
-	      296    Point-to-Point (low delay)    RFC 1144
-   296
-   68                Official minimum MTU          RFC 791
-
- -

So J suspects the r4-n4 network is a IEEE 802.3. It translates the zero-MTU ICMPv4 error into a 1492-MTU ICMPv6 error.

- -

n6 slices its message and now tries to send one 1492 long packet (100 bytes of headers and 1392 bytes of data payload), and one 108-byte packet (100 header, 8 payload). J translates it, and then again r4 says “no dice†(because a 1492 packet still doesn’t fit in a 1007-MTU network).

- -

Fig.3 - Attempt 2

- -

J again realizes it’s trying to translate a zero MTU ICMP error, so it again tries to report the first plateau which would object to the rejected packet. This time, the next plateau of 1492 is 1006, so J guesses r4-n4 is a SLIP or an ARPANET. As you can see, the guess was correct this time.

- -

Upon receiving the news, n6 now slices its data into a 1006 (100 + 906) packet and a 594 (100 + 494) packet. This time, the translated versions fit and arrive at their destination.

- -

Fig.4 - Attempt 3

- -

Wrapping up

- -

The plateaus strategy is the better alternative out of several Path MTU discovery approaches. Because it is aware of existing MTUs, it converges quickly and leaves little room for under-utilization (see section 5 of RFC 1191).

- -

On the other hand, that argument tends to fall on its butt on the grounds that the MTU table is long overdue. Just by looking at the example you might have gone like “ARPANET was disbanded a long time ago!â€, and you would be right. Though RFC 1191 says “implementors should use up-to-date references to pick a set of plateausâ€, none seem to come up.

- -

It’s not that bad, given that some of the protocols in the table are still in use, and having a few redundant plateaus is better than having a few missing ones.

- -

And it doesn’t mean the plateaus list is hardcoded into Jool, either. If you want to change your plateaus list, run (after installing the userspace application)

- -
$(jool) --mtu-plateaus <list>
-
- -

For example:

- -
jool_siit --mtu-plateaus "80000, 40000, 20000, 10000"
-
- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/en/usr-flags-pool4.html b/doc/usr/_site/en/usr-flags-pool4.html deleted file mode 100644 index b81250507..000000000 --- a/doc/usr/_site/en/usr-flags-pool4.html +++ /dev/null @@ -1,251 +0,0 @@ - - - - - --pool4 - - - - - -
-
- -
- -
-
- -

Documentation > Userspace Application > Flags > --pool4

- -

--pool4

- -

Index

- -
    -
  1. Description
  2. -
  3. Syntax
  4. -
  5. Arguments
  6. -
  7. Examples
  8. -
  9. Notes
  10. -
- -

Description

- -

Interacts with NAT64 Jool’s IPv4 transport address pool.

- -

The IPv4 pool is the subset of the node’s transport addresses which should be used to mask connections sourced from IPv6 nodes.

- -

Syntax

- -
jool --pool4 [--display] [--csv]
-jool --pool4 --count
-jool --pool4 --add [--mark <mark>] [--tcp] [--udp] [--icmp] <IPv4 prefix> [<port range>] [--force]
-jool --pool4 --remove [--mark <mark>] [--tcp] [--udp] [--icmp] <IPv4 prefix> [<port range>] [--quick]
-jool --pool4 --flush [--quick]
-
- -

Arguments

- -

Operations:

- -
    -
  • --display: The pool’s records are printed in standard output. This is the default operation.
  • -
  • --count: Prints the number of tables, samples and transport addresses in standard output.
  • -
  • --add: Uploads entries to the pool.
  • -
  • --remove: Deletes entries from the pool.
  • -
  • --flush: Removes all entries from the pool.
  • -
- -

Others:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDefaultDescription
--csv(absent)If present, print the table in CSV format.
--mark0Packets carrying mark n will only be translated using pool4 records with mark n.
--tcp*If present, the record being added or removed represents TCP transport addresses.
--udp*If present, the record being added or removed represents UDP transport addresses.
--icmp*If present, the record being added or removed represents “ICMP transport addresses†(Addresses and ICMP identifiers, not ports).
<IPv4 prefix>-Group of addresses you’re adding or removing to/from the pool. The length defaults to 32, so you typically add and remove addresses instead of prefixes.
<port range>60001-65535Subset layer 4 identifiers (or ICMP ids) from the addresses which should be reserved for translation.
--force(absent)If present, add the elements to the pool even if they’re too many.
--quick(absent)If present, do not cascade removal to BIB entries.
- -

* --tcp, --udp and --icmp are not mutually exclusive. If neither of them are present, the records are added or removed to/from all three protocols.

- -

Examples

- -

Display the current addreses:

- -
$ jool --pool4 --display 
-  (empty)
-
- -

Add several entries:

- -
# jool --pool4 --add 192.0.2.1
-$ jool --pool4 --display
-0	ICMP	192.0.2.1	60001-65535
-0	UDP	192.0.2.1	60001-65535
-0	TCP	192.0.2.1	60001-65535
-  (Fetched 3 entries.)
-# jool --pool4 --add          --tcp 192.0.2.2 7000-7999
-# jool --pool4 --add --mark 1 --tcp 192.0.2.2 8000-8999
-# jool --pool4 --add          --tcp 192.0.2.4/31
-$ jool --pool4 --display
-0	ICMP	192.0.2.1	60001-65535
-0	UDP	192.0.2.1	60001-65535
-0	TCP	192.0.2.1	60001-65535
-0	TCP	192.0.2.2	7000-7999
-0	TCP	192.0.2.4	60001-65535
-0	TCP	192.0.2.5	60001-65535
-1	TCP	192.0.2.2	8000-8999
-  (Fetched 7 entries.)
-
- -

Remove some entries:

- -
# jool --pool4 --remove --mark 0 192.0.2.0/24 0-65535
-$ jool --pool4 --display
-1	TCP	192.0.2.2	8000-8999
-  (Fetched 1 entries.)
-
- -

Clear the table:

- -
# jool --pool4 --flush
-$ jool --pool4 --display
-  (empty)
-
- -

Notes

- -

If something within your NAT64 machine binds itself to one of the ports reserved by pool4, Jool will interfere with its packets. Therefore, it is in your best interests that pool4 doesn’t collide with other port ranges.

- -

You already know the ports owned by any servers parked in your NAT64, if any. The other one you need to keep in mind is the ephemeral range:

- -
$ sysctl net.ipv4.ip_local_port_range 
-net.ipv4.ip_local_port_range = 32768	61000
-
- -

If you want to assign more ports to Jool, you have to substract them from elsewhere. The ephemeral range is a good candidate:

- -
$ jool --pool4 --display
-0	192.0.2.1	60001-65535
-  (Fetched 1 entries.)
-# sysctl -w net.ipv4.ip_local_port_range="32768 40000"
-# jool --pool4 --add 192.0.2.1 40001-60000
-$ sysctl net.ipv4.ip_local_port_range 
-net.ipv4.ip_local_port_range = 32768	40000
-$ jool --pool4 --display
-0	192.0.2.1	40001-65535
-  (Fetched 1 entries.)
-
- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/en/usr-flags-pool6.html b/doc/usr/_site/en/usr-flags-pool6.html deleted file mode 100644 index 94ead80f6..000000000 --- a/doc/usr/_site/en/usr-flags-pool6.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - - --pool6 - - - - - -
-
- -
- -
-
- -

Documentation > Userspace Application > Flags > --pool6

- -

--pool6

- -

Index

- -
    -
  1. Description
  2. -
  3. Syntax
  4. -
  5. Options -
      -
    1. Operations
    2. -
    3. --quick
    4. -
    -
  6. -
  7. Examples
  8. -
- -

Description

- -

Interacts with Jool’s IPv6 pool. The pool dictates which packets coming from the IPv6 side are processed; if an incoming packet’s destination address has one of the IPv6 prefixes, the packet is translated. Otherwise it is handed to the kernel to either be forwarded in some other way or handed to the upper layers.

- -

Syntax

- -

($(jool) can be either jool_siit or jool.)

- -
$(jool) --pool6 [--display]
-$(jool) --pool6 --count
-$(jool) --pool6 --add <IPv6 prefix>
-$(jool) --pool6 --remove <IPv6 prefix> [--quick]
-$(jool) --pool6 --flush [--quick]
-
- -

Options

- -

Operations

- -
    -
  • --display: The pool’s prefixes are printed in standard output. This is the default operation.
  • -
  • --count: The number of prefixes in the pool is printed in standard output.
  • -
  • --add: Uploads <prefix> to the pool.
  • -
  • --remove: Deletes from the tables the prefix <prefix>.
  • -
  • --flush: Removes all prefixes from the pool.
  • -
- -

--quick

- -

See --quick. Only available on Stateful Jool.

- -

Examples

- -

Display the current prefixes:

- -
$ jool --pool6 --display
-64:ff9b::/96
-  (Fetched 1 prefixes.)
- -

Display only the prefix count:

- -
$ jool --pool6 --count
-1
- -

Remove the default prefix:

- -
$ jool --pool6 --remove 64:ff9b::/96
- -

Add a sample prefix:

- -
$ jool --pool6 --add 2001:db8::/64
- -

Destroy all prefixes. Do not bother cleaning up the garbage:

- -
$ jool --pool6 --flush --quick
- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/en/usr-flags-pool6791.html b/doc/usr/_site/en/usr-flags-pool6791.html deleted file mode 100644 index 8fdf8851a..000000000 --- a/doc/usr/_site/en/usr-flags-pool6791.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - --pool6791 - - - - - -
-
- -
- -
-
- -

Documentation > Userspace Application > Flags > --pool6791

- -

--pool6791

- -

Index

- -
    -
  1. Description
  2. -
  3. Syntax
  4. -
  5. Options
  6. -
  7. Examples
  8. -
- -

Description

- -

Interacts with Jool’s RFC 6791 pool. The pool defines addresses for untranslatable sources in ICMP errors.

- -

If this pool is empty, Jool will fall back to use its node’s addresses for these cases.

- -

Syntax

- -
jool_siit --pool6791 [--display]
-jool_siit --pool6791 --count
-jool_siit --pool6791 --add <IPv4 prefix>
-jool_siit --pool6791 --remove <IPv4 prefix>
-jool_siit --pool6791 --flush
-
- -

Options

- -
    -
  • --display: The pool’s prefixes are printed in standard output. This is the default operation.
  • -
  • --count: The number of addresses (not prefixes) in the pool is printed in standard output.
    -For example, if all you have is a /24 prefix, expect “256†as output.
  • -
  • --add: Uploads <IPv4 prefix> to the pool.
  • -
  • --remove: Deletes prefix <IPv4 prefix> from the pool.
  • -
  • --flush: Removes all prefixes from the pool.
  • -
- -

Examples

- -

Display the current prefixes:

- -
$ jool_siit --pool6791 --display
-192.0.2.0/24
-198.51.100.0/26
-203.0.113.16/28
-  (Fetched 3 prefixes.)
-
- -

This means the source address of a normally untranslatable ICMP error is going to be any within the following ranges: 192.0.2.0-192.0.2.255, 198.51.100.0-198.51.100.64, or 203.0.113.16-203.0.113.31.

- -

Display only the prefix count:

- -
$ jool_siit --pool6791 --count
-336
-
- -

(That’s /24 + /26 + /28 = 256 + 64 + 16.)

- -

Remove a prefix:

- -
$ jool_siit --pool6791 --remove 192.0.2.0/24
-
- -

Return it:

- -
$ jool_siit --pool6791 --add 192.0.2.0/24
-
- -

Destroy all prefixes. Jool will start using its host’s addresses as source.

- -
$ jool_siit --pool6791 --flush
-
- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/en/usr-flags-quick.html b/doc/usr/_site/en/usr-flags-quick.html deleted file mode 100644 index 7cc95e40a..000000000 --- a/doc/usr/_site/en/usr-flags-quick.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - --quick - - - - - -
-
- -
- -
-
- -

Documentation > Userspace Application > Flags > --quick

- -

--quick

- -

First, a little background information:

- - - -

If you --remove or --flush an owner, its “slaves†become obsolete because the relevant packets are no longer going to be translated.

- -
    -
  • If you omit --quick while removing owners, Jool will get rid of the newly orphaned slaves. This saves memory and keeps entry lookup efficient during packet translations.
  • -
  • On the other hand, when you do issue --quick, Jool will only purge the owners. You might want to do this if you want the operation to succeed quickly (maybe you have a HUGE amount of slaves), or more likely you plan to re-add the owner in the future (in which case the still-remaining slaves will become relevant and usable again).
  • -
- -

Orphaned slaves will remain inactive in the database, and will eventually kill themselves once their normal removal conditions are met (eg. orphaned sessions will die once their timeout expires).

- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/en/usr-flags-session.html b/doc/usr/_site/en/usr-flags-session.html deleted file mode 100644 index 3687eb1fb..000000000 --- a/doc/usr/_site/en/usr-flags-session.html +++ /dev/null @@ -1,207 +0,0 @@ - - - - - --session - - - - - -
-
- -
- -
-
- -

Documentation > Userspace Application > Flags > --session

- -

--session

- -

Index

- -
    -
  1. Description
  2. -
  3. Syntax
  4. -
  5. Options -
      -
    1. Operations
    2. -
    3. <protocols>
    4. -
    5. --numeric
    6. -
    7. --csv
    8. -
    -
  6. -
  7. Examples
  8. -
- -

Description

- -

Sessions mostly exist so the NAT64 can decide when BIB entries should die. You can also use them to know exactly who is speaking to your IPv6 nodes.

- -

Each BIB entry is a mapping, which describes the IPv4 name of one of your IPv6 services. For every BIB entry, there are zero or more session entries, each of which represents an active connection currently using that mapping.

- -

You can use this command to get information on each of these connections.

- -

Syntax

- -
jool --session [--display] [--numeric] [--csv] <protocols>
-jool --session --count <protocols>
-
- -

Options

- -

Operations

- -
    -
  • --display: The session tables are printed in standard output. This is the default operation.
  • -
  • --count: The number of entries per session table are printed in standard output.
  • -
- -

<protocols>

- -
<protocols> := [--tcp] [--udp] [--icmp]
-
- -

The command will only operate on the tables mentioned here. If you omit this entirely, Jool will fall back to operate on all three tables.

- -

--numeric

- -

By default, the application will attempt to resolve the names of the remote nodes talking in each session. If your nameservers aren’t answering, this will slow the output down.

- -

Use --numeric to turn this behavior off.

- -

--csv

- -

By default, the application will print the tables in a relatively console-friendly format.

- -

Use --csv to print in CSV format, which is spreadsheet-friendly.

- -

Because every record is printed in a single line, CSV is also better for grepping.

- -

Examples

- -

Fig.1 - Session sample network

- -

ipv6client.mx makes two HTTP requests and a ping to example.com.

- -

Fall back to display all protocols, resolve names, console format:

- -
$ jool --session
-TCP:
----------------------------------
-(V4_FIN_V6_FIN_RCV) Expires in 2 minutes, 57 seconds
-Remote: example.com#http	ipv6client.mx#58239
-Local: 192.0.2.1#60477		64:ff9b::5db8:d877#80
----------------------------------
-(V4_FIN_V6_FIN_RCV) Expires in 3 minutes, 52 seconds
-Remote: example.com#http	ipv6client.mx#58237
-Local: 192.0.2.1#6617		64:ff9b::5db8:d877#80
----------------------------------
-  (Fetched 2 entries.)
-
-UDP:
----------------------------------
-  (empty)
-
-ICMP:
----------------------------------
-Expires in 50 seconds
-Remote: example.com#1402	ipv6client.mx#13371
-Local: 192.0.2.1#1402		64:ff9b::5db8:d877#13371
----------------------------------
-  (Fetched 1 entries.)
- -

Filter out UDP and ICMP, do not query the DNS, console format:

- -
$ jool --session --display --tcp --numeric
-TCP:
----------------------------------
-(V4_FIN_V6_FIN_RCV) Expires in 2 minutes, 57 seconds
-Remote: 93.184.216.119#80	2001:db8::2#58239
-Local: 192.0.2.1#60477		64:ff9b::5db8:d877#80
----------------------------------
-(V4_FIN_V6_FIN_RCV) Expires in 3 minutes, 52 seconds
-Remote: 93.184.216.119#80	2001:db8::2#58237
-Local: 192.0.2.1#6617		64:ff9b::5db8:d877#80
----------------------------------
-  (Fetched 2 entries.)
- -

Do not resolve names, CSV format:

- -
$ jool --session --display --numeric --csv > session.csv
- -

session.csv

- -

Just display the number of records of every table:

- -
$ jool --session --count
-TCP: 2
-UDP: 0
-ICMP: 1
- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/en/usr-flags.html b/doc/usr/_site/en/usr-flags.html deleted file mode 100644 index f564cc0b7..000000000 --- a/doc/usr/_site/en/usr-flags.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - Userspace Application Flags - - - - - -
-
- -
- -
-
- -

Documentation > Userspace Application > Flags

- -

Flags

- -

Introduction

- -

This compilation of documents explain the flags and options of Jool’s userspace applications (jool_siit and jool).

- -

See the compilation and installation instructions if you still don’t have the binaries.

- -

If a command changes the behavior of Jool, it requires network admin privileges (CAP_NET_ADMIN).

- -

Index

- -

Common options:

- -
    -
  1. --help
  2. -
  3. --global -
      -
    1. Atomic Fragments
    2. -
    3. MTU Plateaus (Example)
    4. -
    -
  4. -
  5. --pool6
  6. -
- -

jool_siit-only options:

- -
    -
  1. --eamt
  2. -
  3. --blacklist
  4. -
  5. --pool6791
  6. -
- -

jool-only options:

- -
    -
  1. --pool4
  2. -
  3. --bib
  4. -
  5. --session
  6. -
  7. --quick
  8. -
- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/en/usr-install.html b/doc/usr/_site/en/usr-install.html deleted file mode 100644 index 05bffdfe2..000000000 --- a/doc/usr/_site/en/usr-install.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - Userspace Applications Installation - - - - - -
-
- -
- -
-
- -

Documentation > Installation > Userspace Application

- -

Userspace Applications Installation

- -

Introduction

- -

Jool is four things:

- -
    -
  1. Two kernel modules you can hook up to Linux. One of them is the SIIT implementation and the other one is the Stateful NAT64. They have their own installation document.
  2. -
  3. Two userspace applications which can be used to configure each module.
  4. -
- -

This document explains how to obtain the binaries of the userspace application.

- -

If you downloaded the official release

- -
user@node:~/Jool$ cd usr
-user@node:~/Jool/usr$ ./configure # You need libnl-3 to run this; see below.
-user@node:~/Jool/usr$ make
-user@node:~/Jool/usr# make install
- -

Done; you should now be able to type jool --help or jool_siit --help and get some garbage. Go to Flags for more verbose documentation.

- -

If you downloaded from the Github repository

- -

The repository does not keep track of the configuration script, so you have to generate it yourself. You need autoconf 2.68 or superior to do that.

- -
user@node:~# apt-get install autoconf
- -

Then just add a call to autogen.sh to the normal installation procedure:

- -
Jool$ cd usr
-Jool/usr$ ./autogen.sh # You need autoconf 2.68 or superior to run this.
-Jool/usr$ ./configure # You need libnl-3 to run this; see below.
-Jool/usr$ make
-Jool/usr# make install
- -

Done; you should now be able to type jool --help or jool_siit --help and get some garbage. Go to Flags for more verbose documentation.

- -

libnl-3

- -

This is libnl-3’s official website is as of 2014-07-31, in case you want to compile it yourself.

- -

If your distribution package-manages it though, you might really want to exploit the feature rather than compiling the framework:

- -
user@node:~# apt-get install libnl-3-dev
- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/es/about.html b/doc/usr/_site/es/about.html deleted file mode 100644 index a27e2f6b2..000000000 --- a/doc/usr/_site/es/about.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - Acerca de ... - - - - - -
-
- -
- -
-
- -

Acerca de …

- -

JOOL es un Traductor IPv4/IPv6 de código abierto. Jool nació como un Stateful NAT64 pero ha sido ampliado para soportar también SIIT & SIIT EAM.

- -

Jool es financiado y desarrollado por NIC Mexico en colaboración con el ITESM.

- -

Contactáctanos por medio de jool@nic.mx. mailbox

- -

El código y la documentación han sido liberados bajo la licencia GPLv3.

- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/es/bib.html b/doc/usr/_site/es/bib.html deleted file mode 100644 index dd880d787..000000000 --- a/doc/usr/_site/es/bib.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - BIB - - - - - -
-
- -
- -
-
- -

Documentación > Ejemplos de uso > Stateful NAT64 > BIB

- -

BIB

- -

Ãndice

- -
    -
  1. Qué es la BIB?
  2. -
  3. Estructura
  4. -
  5. Tipos
  6. -
  7. Ejemplos
    - a) Registro 01
    - b) Registro 02
    - c) Registro 03
  8. -
  9. Lecturas adicionales
  10. -
- -

Qué es la BIB?

- -

El Binding Information Base (BIB) es una colección de tablas en el Stateful NAT64. Aunque este concepto nace con los NATs y está definido en el RFC 2263, 1999.

- -

La podríamos llamar Base de Datos de Asociaciones o Enlaces porque en ella se guardará por pares la asociación (dirección IPv6, puerto IPv6) con (dirección IPv4, puerto IPv4) si es una paquete de UDP o TCP. A esas duplas se le llaman direcciones de transporte. Cuando es un paquete de ICMP, se guardan los pares (dirección IPv6, identificador IPv6) con (dirección IPv4, identificador IPv4). Para conocer todos los detalles sobre la BIB lee la Sección 3.1, del RFC 6146 .

- -

Dicho de otra manera, podemos decir que los registros en esta base de datos mapean las direcciones de transporte de la conexión de un nodo IPv6 a la dirección de transporte que Jool está usando para enmascarar éste en IPv4 en los protocolos UDP y TCP. Y mapeará la dupla (IP, identificador) de la conexión de un nodo IPv6 a la dupla (IP, identificador) que Jool está usando para enmascarar éste en IPv4 si es un mensaje de ICMP.

- -

Estructura

- -
    -
  • Registro BIB es un registro en la tabla BIB y está compuesto por duplas.
  • -
  • Tabla BIB es una colección de registros que comparten un protocolo. Dado que hay tres protocolos soportados (TCP, UDP y ICMP) por el RFC 6146, como resultado Jool tiene tres tablas BIB.
  • -
  • BIB es la colección de las tres tablas BIB de Jool.
  • -
- -

Tipos

- -

Hay dos tipos de registros BIB:

- -
    -
  • Dinámicos: Jool crea estos al iniciar la comunicación de IPv6 a IPv4, para acceder a lo servicios de IPv4.
  • -
  • Estáticos: Los puedes dar de alta manualmente, para publicar un servicio IPv6 hacia la Red de IPv4, ya sea privada o pública. Esto es análogo al redireccionamiento de puertos en NATs.
  • -
- -

Ejemplos

- -

Por ejemplo, si los siguiente mapeos existen en tu NAT64:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
No.RegistroDirección IPv6 de TransporteDirección IPv4 de TransporteProtocol
016::6#664.4.4.4#44TCP
02  TCP
032001:db8::8#40000203.0.113.2#TCP
- -

Registro 01

- -

Entonces los nodos IPv4 pueden encontrar el servicio TCP publicado en 6::6 por el puerto 66, enviando una solicitud a 4.4.4.4 por el puerto 44. En otras palabras, Jool engaña a los nodos IPv4 haciendoles pensar que 6::6#66 es 4.4.4.4#44.

- -

Registro 02

- -

Registro 03

- -

Lecturas adicionales

- -

Si quieres aprender sobre:

- -
    -
  1. Cómo crear y destruir registros manualmente, ve a mapeo estático o consulta usando la opción BIB.
  2. -
  3. Cómo restringir el uso de los registros dinámicos, ve a --address-dependent-filtering.
  4. -
- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/es/contact.html b/doc/usr/_site/es/contact.html deleted file mode 100644 index 0b2213bf6..000000000 --- a/doc/usr/_site/es/contact.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - Contacto - - - - - -
-
- -
- -
-
- -

Contáctanos

- -

Ponte en contacto con nosotros mediante:

- -

Lista de Discusión

- -

– jool-list@nic.mx es una lista de correo general para la discusión pública del proyecto y la difusión de noticias.

- -

email Sus preguntas, solicitudes y comentarios son bienvenidos. Registrate aquí.

- -

Actualmente, existe un problema de “exceso†de seguridad que está siendo corregido.

- -

Lista de Noticias

- -

– jool-news@nic.mx es una lista de correos para informar solo noticias.

- -

mailbox_with_mail Es utilizada para notificar sobre las nuevas versiones que están siendo liberadas en este sitio. Suscribete aquí.

- -

Solo el equipo de desarrollo puede enviar mails en esta lista, así que no tienes que preocuparte de recibir spam.
-Debido a este próposito, esta lista raramente genera más de un e-mail por mes.

- -

Lista Oficial de Errores

- -

– Github corner es nuestra lista oficial de errores.

- -

pencil Este también es un buen lugar para solicitar nuevas características.

- -

Mail a los Desarrolladores

- -

– jool@nic.mx es una cuenta de correo que puedes utilizar para dirigirte - solo a nosotros los desarrolladores.

- -

Aunque te podríamos dar algún consejo a través de este medio, nosotros agradeceremos que uses la cuenta de
-jool-list@nic.mx para este propósito, con el fin de quedar registrado y que pueda ser de beneficio para algún
-otro usuario en el futuro.

- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/es/dns64.html b/doc/usr/_site/es/dns64.html deleted file mode 100644 index 50c56c14c..000000000 --- a/doc/usr/_site/es/dns64.html +++ /dev/null @@ -1,213 +0,0 @@ - - - - - DNS64 - - - - - -
-
- -
- -
-
- -

Documentación > Ejemplos de uso > DNS64

- -

Tutorial DNS64

- -

Ãndice

- -
    -
  1. Introducción
  2. -
  3. Red
  4. -
  5. Configuración -
      -
    1. BIND
    2. -
    3. Todo lo demás
    4. -
    -
  6. -
  7. Resultado
  8. -
- -

Introducción

- -

Este documento se enfoca en DNS64, la última llave para tener una instalación de NAT64 completamente coherente.

- -

Cualquier implementación correcta de DNS64 se supone debería funcionar; BIND será utilizado para efecto de ilustrar. Espero que estes familiarizado con DNS y que tengas una idea por lo menos de como luce la configuración de BIND.

- -

Red

- -

Fig.1 - Setup

- -

Aunque Jool y el DNS64 son ilustrados como nodos separados, no hay nada que te prevenga de unirlos en una sola máquina (a menos de que Jool esté monopolizando todas las direcciones IPv4 de sus nodos, por supuesto).

- -

Configuración

- -

BIND

- -

Primero, voy a dejar en claro lo que queremos lograr.

- -

example.com es un dominio que esta disponible ambas la Internet IPv4 y la IPv6, y por lo tanto tiene ambos tipos de registros:

- -
$ dig example.com A
-(...)
-;; ANSWER SECTION:
-example.com.		66029	IN	A	93.184.216.119
-(...)
-
-$ dig example.com AAAA
-(...)
-;; ANSWER SECTION:
-example.com.		86040	IN	AAAA	2606:2800:220:6d:26bf:1447:1097:aa7
-(...)
- -

nat64-tutorial.mx es un ejemplo de un dominio disponible solo desde IPv4:

- -
$ dig nat64-tutorial.mx A
-(...)
-;; ANSWER SECTION:
-nat64-tutorial.mx.	66029	IN	A	200.94.182.36
-(...)
-
-$ dig nat64-tutorial.mx AAAA
-(...)
-;; AUTHORITY SECTION:
-nat64-tutorial.mx.	240	IN	SOA	potato.mx. hostmaster.jool.mx. 2013070801 3600 900 604800 1800
-(...)
- -

No hay necesidad de que un nodo IPv6 accese example.com mediante el NAT64. Por otra parte, nat64-tutorial.mx no puede ser accesado desde IPv6 si uno.

- -

En otras palabras, queremos que el servicio de DNS64 devuelva 2606:2800:220:6d:26bf:1447:1097:aa7 cuando le sea solicitado el registro AAAA de example.com (que es lo que normalmente hace), y 64:ff9b::200.94.182.36 (ej. el prefijo NAT64 mas la direccion IPv4) cuando le sea solicitado el registro AAAA de nat64-tutorial.mx (el cual es el hack NAT64 completo).

- -

Primero, ten funcionando un servidor BIND. En Ubuntu, lo único que teines que hacer (assumiendo que todavia no tienes uno) es ejecutar

- -
user@B:~# apt-get install bind9
- -

La configuración mas básica es muy minimalista.

- -

The most basic configuration is very minimalistic. Para activar DNS64, la sección de opciones del archivo named.conf (en mi caso, /etc/bind/named.conf.options) es la única que debe ser actualizada:

- -
options {
-	(...)
-
-	# Listening on IPv6 is off by default.
-	listen-on-v6 { any; };
-
-	# This is the key. Note that you can write multiple of these if you need
-	# more IPv6 prefixes.
-	# "64:ff9b::/96" has to be the same as Jool's `pool6`.
-	dns64 64:ff9b::/96 {
-		# Options per prefix (if you need them) here.
-		# More info here: https://kb.isc.org/article/AA-01031
-	};
-};
- -

Y recuerda recargar.

- -
user@B:~# sudo service bind9 restart
- -

Eso es todo!

- -

Todo lo demás

- -

Las redes mas externas cambiaron, y eso deberia ser reflejado probablemente en las tablas de ruteo de todos:

- -
user@J:~# /sbin/ip -6 route del 2001:db8:1::/64
-user@J:~# /sbin/ip -6 route add default via 2001:db8:2::1 dev eth0
- -

(Instrucciones similares deberían ser replicadas en los routers y los nodos)

- -

Jool o J no necesita estar consciente del DNS64 por que los nombres de dominio son completamente transparentes a NAT64, asi que no necesitas hacer nadamas en J.

- -

En cuanto a los nodos hoja, cualquier nodo IPv6 que necesita acceder solo a contenido IPv4 debe utilizar el DNS64 como su servidor de nombres por default (a menos de que quieras especificarlo manualmente en tus comandos dig, supongo).

- -

Resultado

- -

Desde uno de esos nodos IPv6:

- -
$ dig example.com AAAA
-(...)
-;; ANSWER SECTION:
-example.com.		86040	IN	AAAA	2606:2800:220:6d:26bf:1447:1097:aa7
-(...)
-
-$ dig nat64-tutorial.mx AAAA
-(...)
-;; AUTHORITY SECTION:
-nat64-tutorial.mx.	86040	IN	AAAA	64:ff9b::c85e:b624
-(...)
- -

Si monitoreas el trafico, deberias ver paqueter hacia example.com en R, y paquetes hacia nat64-tutorial.mx mediante S:

- -

Fig.2 - Arrows

- -

Final Feliz!

- - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/es/documentation.html b/doc/usr/_site/es/documentation.html deleted file mode 100644 index b8fff8097..000000000 --- a/doc/usr/_site/es/documentation.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - Documentación - Ãndice - - - - - -
-
- -
- -
-
- -

Documentación

- -

Bienvenido al índice de la documentación de Jool.

- -

Introducción

- -
    -
  1. Qué es SIIT/NAT64?
  2. -
  3. Qué es Jool?
  4. -
- -

Consulta el RFC 6586 para experiencias de desarrollo usando NAT64 Stateful.

- -

Instalación

-
    -
  1. Servidor Jool
  2. -
  3. Herramienta de Configuración
  4. -
- -

Ejemplos de uso

-
    -
  1. SIIT
    - a) RFC 6791
  2. -
  3. SIIT + EAM
    - a) EAMT
  4. -
  5. NAT64 Stateful
    - a) Pool IPv4
    - b) BIB
    - c) Mapeos Estáticos
  6. -
  7. DNS64
  8. -
  9. 464XLAT - SIIIT/DC Modo de traducción dual
  10. -
- -

Herramienta de Configuración

- -
    -
  1. Banderas
  2. -
- -

Otros

-
    -
  1. FAQ
  2. -
  3. MTU y Fragmentación
  4. -
  5. El problema con Offloading
  6. -
  7. Interfaz Única
  8. -
- - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/es/download.html b/doc/usr/_site/es/download.html deleted file mode 100644 index 440e0e826..000000000 --- a/doc/usr/_site/es/download.html +++ /dev/null @@ -1,250 +0,0 @@ - - - - - Descarga - - - - - -
-
- -
- -
-
- -

Descarga

- - - -
    -
  • Las versión resaltada en negritas es la última actualización y es la más recomendable a instalar.
  • -
  • Las versiones no resaltadas son versiones estables pero anteriores. Éstas se podrían requerir en caso de que alguna opción, en la más nueva, falle. ¡Los reportes son bienvenidos!
  • -
  • Las versiones tachadas no son recomedables, pues son muy antiguas o tienen errores críticos ya bien identificados.
  • -
- -

3.3.x

- -

Jool 3.3 es un SIIT y Stateful NAT64 bastante apegado al estándar.

- -

La versión 3.3.3 es la más actual, y es considerada la más madura.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
DescargaSHA512MD5Git commit
3.3.3SHA512MD5Enlace
3.3.2SHA512MD5Enlace
3.3.1SHA512MD5Enlace
3.3.0SHA512MD5Enlace
- -

3.2.x

- -

La serie de versiones 3.2 mejora la 3.1 implementando Apertura simultánea de Conexiones TCP. Además, se incluyó una opción para limpiar sus pools y se realizaron muchos otros ajustes internos.

- -

3.2.3 es la última actualización de esta serie de versiones.

- -

La documentación en este sitio pertenece a la serie de versiones 3.3. Se puede descargar una imágen de la documentación de la serie 3.2 aquí (Nota: está en inglés).

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
DescargaSHA512MD5Git commit
3.2.3SHA512MD5Enlace
3.2.2SHA512MD5Enlace
3.2.1SHA512MD5Enlace
3.2.0SHA512MD5Enlace
- -

3.1.x

- -

La serie de versiones 3.1 esta bastante apegada al estándar stateful NAT64. Sus carácteristicas faltantes son:

- -
    -
  • Políticas de filtrado.
  • -
  • Apertura simultánea de Conexiones TCP.
  • -
- -

La última actualización de esta serie de versiones es la 3.1.6.

- -

La documentación en este sitio pertenece a la serie de versiones 3.3. Se puede descargar una imágen de la documentación de la serie 3.1 aquí (Nota: está en inglés).

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
DownloadSHA512MD5Git commit
3.1.6SHA512MD5Enlace
3.1.5SHA512MD5Enlace
3.1.4SHA512MD5Enlace
3.1.3SHA512MD5Enlace
3.1.2SHA512MD5Enlace
3.1.1SHA512MD5Enlace
3.1.0SHA512MD5Enlace
- - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/es/eamt.html b/doc/usr/_site/es/eamt.html deleted file mode 100644 index d686cab44..000000000 --- a/doc/usr/_site/es/eamt.html +++ /dev/null @@ -1,198 +0,0 @@ - - - - - EAMT - - - - - -
-
- -
- -
-
- -

Documentación > Ejemplos de uso > SIIT + EAM > EAMT

- -

EAMT

- -

Ãndice

- -
    -
  1. Definición
  2. -
  3. Ejemplos
    - a) Registro 01
    - b) Registro 02
    - c) Registro 03
  4. -
  5. Resumen y Notas Adicionales
  6. -
- -

Definición

- -

La tabla EAMT (Explicit Address Mappings Table) por sus siglas en inglés, es una colección de registros en un servidor SIIT y en ella se guarda la relación de cómo las diferentes direcciones deben de ser traducidas.

- -

Lo que distingue este tipo de mapeo con los otros mecanismos es, en que la dirección IPv4 no forma parte de la dirección IPv6 a usar.

- -

Ejemplos

- -

Aquí se encuentra un ejemplo de una tabla EAMT:

- - - - - - - - - - - - - - - - - - - - - - - - - - -
No.RegistroPrefijo IPv4Prefijo IPv6
01192.0.2.1/322001:db8:aaaa::5/128
02198.51.100.0/242001:db8:bbbb::/120
03203.0.113.8/292001:db8:cccc::/125
- -

Un registro EAMT está compuesto en pares, un prefijo IPv4 y un prefijo IPv6. Cuando una dirección esta siendo traducida, su prefijo es literalmente reemplazado de acuerdo a la tabla.

- -
	NOTA IMPORTANTE: En la implementación de Jool, todos los registros son bidireccionales.
-
- -

Registro 01

- -

Este es el caso más sencillo, porque no tiene prefijo. El registro literalmente dice: “La dirección 192.0.2.1 debe de ser siempre traducida como 2001:db8:aaaa::5, y a la inversaâ€.

- -

Ya sea que la dirección sea origen, destino o esté dentro del paquete interno de un error ICMP, no importa.

- -

La representación IPv6 de 192.0.2.1 es 2001:db8:aaaa::5, y la representación IPv4 de 2001:db8:aaaa::5 es 192.0.2.1.

- -

Registro 02

- -

La segunda entrada es más interesante, porque hay un byte de sufijo. El registro esta diciendo: “El grupo de direcciones 198.51.100.x debera ser tradicido como 2001:db8:bbbb::x, y viceversa. Donde x está en el intervalo de 0-255.â€

- -

Como en:

- -
    -
  • 198.51.100.0 <-> 2001:db8:bbbb::0
  • -
  • 198.51.100.1 <-> 2001:db8:bbbb::1
  • -
  • 198.51.100.2 <-> 2001:db8:bbbb::2
  • -
  • …
  • -
  • 198.51.100.254 <-> 2001:db8:bbbb::fe
  • -
  • 198.51.100.255 <-> 2001:db8:bbbb::ff
  • -
- -

Esta forma puede ayudarte a simplificar la configuración cuando tienes muchas direcciones a traducir; el sufijo siempre es preservado. La ventaja, que es evidente, es que un solo registro EAMT puede describir la traducción de una red entera.

- -

Por mencionar otro ejemplo, un registro EAMT con /16 será mucho más eficiente que los 65536 registros atómicos equivalentes.

- -

Registro 03

- -

El reemplazo de prefijo puede ser hecho a nivel de bits. El tercer registro ejemplifica esto, porque son 3 bits de sufijo. El registro esta diciendo: “El grupo de direcciones 203.0.113.x debera ser tradicido como 2001:db8:cccc::y, y a la inversa. Donde x = [8,15], y = [0,7].â€

- -

La dirección 203.0.113.8 se convierte en 2001:db8:cccc::, no en 2001:db8:cccc::8. Esto es porque la forma binaria de .8 es 00001000, y la máscara es de 29 por lo que el uno se encuentra en el lado del prefijo.

- -
    -
  • 203.0.113.8 <-> 2001:db8:cccc::
  • -
  • 203.0.113.9 <-> 2001:db8:cccc::1
  • -
  • 203.0.113.10 <-> 2001:db8:cccc::2
  • -
  • 203.0.113.11 <-> 2001:db8:cccc::3
  • -
  • 203.0.113.12 <-> 2001:db8:cccc::4
  • -
  • 203.0.113.13 <-> 2001:db8:cccc::5
  • -
  • 203.0.113.14 <-> 2001:db8:cccc::6
  • -
  • 203.0.113.15 <-> 2001:db8:cccc::7
  • -
- -

Resumen y Notas Adicionales:

- -
    -
  • En el mecanisimo de transición SIIT-EAM se emplea y se mantiene la tabla de direcciones de mapeo explicito.
  • -
  • En dicha tabla existen duplas con prefijos de IPv4 e IPv6 válidos.
  • -
  • El prefijo es remplazado a nivel de bits.
  • -
  • La dirección IPv4 no forma parte de la dirección IPv6 a usar.
  • -
  • Los registros son bidireccionales.
  • -
  • Los registros EAMT no se pueden intersectar.
  • -
  • Los paquetes que empleen dichas direcciones se tratarán como tales, es decir, con ese tipo de traducción.
  • -
  • Si Jool no encuentra una coincidencia en la tabla para una dirección, intenta traducir basado en el prefijo pool6.
  • -
  • Si eso también falla, el paquete es devuelto al kernel. Se asume que el paquete no debe ser traducido.
  • -
- -

Ve la demostración o el material de referencia para obtener información de cómo crear y destruir registros manualmente.

- - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/es/faq.html b/doc/usr/_site/es/faq.html deleted file mode 100644 index 31136cf85..000000000 --- a/doc/usr/_site/es/faq.html +++ /dev/null @@ -1,234 +0,0 @@ - - - - - FAQ/Solución de problemas - - - - - -
-
- -
- -
-
- -

Documentación > Otros > FAQ/Solución de problemas

- -

FAQ/Solución de problemas

- -

Esto resume problemas en los cuales hemos visto que los usuarios se meten.

- -

Instalé el módulo de Jool pero no parece estar haciendo nada.

- -

Instalar el módulo del Jool sin argumentos suficientes es legal. Asumirá que intentas terminar de configurar utilizando la Aplicación de espacio de usuario, y se mantendra inactivo hasta que lo hayas hecho.

- -

Utiliza el parámetro --global para saber el estado en el que se encuentra Jool:

- -
$ jool_siit --global
-  Status: Disabled
- -
$ jool --global
-  Status: Disabled
- -

Los requerimientos minimos de configuracion del SIIT de Jool son:

- - - -

Los requerimientos minimos de configuración de Stateful Jool son:

- - - -

Si ese no es el problema, intenta habilitar la depuración mientras compilas.

- -
user@node:~/Jool-<version>/mod$ make debug
-
- -

Reinstalalo. Jool sera mas descriptivo en dmesg:

- -
$ dmesg | tail -5
-[ 3465.639622] ===============================================
-[ 3465.639655] Catching IPv4 packet: 192.0.2.16->198.51.100.8
-[ 3465.639724] Translating the Packet.
-[ 3465.639756] Address 192.0.2.16 lacks an EAMT entry and there's no pool6 prefix.
-[ 3465.639806] Returning the packet to the kernel.
-
- -

Si no esta imprimiendo nada a pesar de que estas habilitando la depuración, quizá es por que tu nivel de lo es muy alto. Ve esto.

- -

Los mensajes de depuración se vuelven rápidamente gigabytes de log, asi que recuerda revertor esto antes de ponerlo en producción.

- -

Que hacer con este mensaje de error? Está horriblemente ambigüo.

- -

Así es, los mensajes de respuesta del modulo del kernel hacia el espacio de usuario son muy primitivos. Podriamos mejorar realmente la comunicación con la Aplicación de espacio de usuario, pero no tenemos control sobre la comunicación de modprobe.

- -

De cualquier forma, tendras mejor suerte leyendo los logs de Jool. Como con cualquier otro componente del kernel, los mensajes de Jool estan mezclados junto con otros y se pueden ver ejecutando dmesg En general, la mayor parte de los kernels son muy silenciosos una vez que han terminado la fase de arranque, asi que el mensaje mas reciente de Jool deberia encontrarse hasta el final.

- -
$ sudo modprobe jool_siit pool6=2001:db8::/96 pool4=192.0a.2.0/24
-ERROR: could not insert module jool_siit.ko: Invalid parameters
-$ dmesg | tail -1
-[28495.042365] SIIT Jool ERROR (parse_prefix4): IPv4 address or prefix is malformed:
-192.0a.2.0/24.
- -
$ sudo jool --bib --add --tcp 2001:db8::1#2000 192.0.2.5#2000
-TCP:
-Invalid input data or parameter (System error -7)
-$ dmesg | tail -1
-[29982.832343] NAT64 Jool ERROR (add_static_route): The IPv4 address and port could not be
-reserved from the pool. Maybe the IPv4 address you provided does not belong to the pool.
-Or maybe they're being used by some other BIB entry?
- -

Jool es intermitentemente incapaz de traducir tráfico.

- -

Ejecutaste algo como:

- -
ip addr flush dev eth1
- -

?

- -

Entonces quizá hayas eliminado las direcciones de enlace de la interfáz.

- -

Las direcciónes de enlace son utilizadas por muchos portocolos IPv6 relevantes. En particular, son utilizadas por el Protocolo de Descubrimiento de Vecinos, lo que significa que si no las tienes, la máquina de traducción tendrá problemas para encontrar a sus vecinos IPv6.

- -

Observa la salida de ip addr.

- -
user@T:~$ /sbin/ip address
-1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
-    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
-    inet 127.0.0.1/8 scope host lo
-    inet6 ::1/128 scope host 
-       valid_lft forever preferred_lft forever
-2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
-    link/ether 08:00:27:83:d9:40 brd ff:ff:ff:ff:ff:ff
-    inet6 2001:db8:aaaa::1/64 scope global 
-       valid_lft forever preferred_lft forever
-    inet6 fe80::a00:27ff:fe83:d940/64 scope link 
-       valid_lft forever preferred_lft forever
-3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
-    link/ether 08:00:27:c6:01:48 brd ff:ff:ff:ff:ff:ff
-    inet6 2001:db8:bbbb::1/64 scope global tentative 
-       valid_lft forever preferred_lft forever
-
- -

La primera interfaz está correctamente configurada; tiene ambas una dirección de “alcance global†(utilizada para un tráfico típico) y una direccion de “alcance de enlaceâ€(utilizada para administración interna). La interfáz eth1 carece de una dirección de enlace, y como resultado tiende a inducir dolores de cabeza.

- -

La manera más facil de restaurar las “direcciones de “alcance de enlaceâ€, que hemos encontrado, es reiniciar la interfaz:

- -
ip link set eth1 down
-ip link set eth1 up
- -

Si, hablo encerio:

- -
user@T:~$ /sbin/ip address
-1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
-    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
-    inet 127.0.0.1/8 scope host lo
-    inet6 ::1/128 scope host 
-       valid_lft forever preferred_lft forever
-2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
-    link/ether 08:00:27:83:d9:40 brd ff:ff:ff:ff:ff:ff
-    inet6 2001:db8:aaaa::1/64 scope global 
-       valid_lft forever preferred_lft forever
-    inet6 fe80::a00:27ff:fe83:d940/64 scope link 
-       valid_lft forever preferred_lft forever
-3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
-    link/ether 08:00:27:c6:01:48 brd ff:ff:ff:ff:ff:ff
-    inet6 fe80::a00:27ff:fec6:148/64 scope link 
-       valid_lft forever preferred_lft forever
-
- -

(Toma en cuenta que, necesitas agregar la dirección global de nuevo)

- -

Tambien, como referencia futura, ten en mente que la manera “correcta†de vaciar una interfaz es

- -
ip addr flush dev eth1 scope global
- -

IPv4 no necesita direcciones de enlace.

- -

El rendimiento es terrible!

- -

deshabilita los offloads!

- -

Si estas ejecutando Jool en una máquina virtual huesped, algo importante que debes mantener en mente es que quizá prefieras o tambien tengas que deshabilitar los offloads en el enlace ascendente de la máquina virtual

- -

No puedo hacer ping a la dirección IPv4 del pool.

- -

De hecho, esto es normal en Jool 3.2.x y versiones anteriores. La dirección de destino del paquete ping es traducible, asi que Jool se esta robando el paquete. Desafortunadamente, no tiene ningun registro relevante en el BIB (por que el ping no fue iniciado desde IPv6), asi que la traducción falla( y el paquete es desechado).

- -

Dejando de lado este aspecto extraño, no causa ninguna otra catastrofe; solo haz ping a la dirección del nodo.

- -

Jool 3.3+ maneja mejor esto asi que el ping deberia de ser exitoso.

- - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/es/index.html b/doc/usr/_site/es/index.html deleted file mode 100644 index 4be4230ae..000000000 --- a/doc/usr/_site/es/index.html +++ /dev/null @@ -1,315 +0,0 @@ - - - - - Home - - - - - -
-
- -
- -
-
- -

Página Principal

- -
- -

Introducción

- -

Jool es un SIIT y NAT64 para Linux. Desarrollado sobre Ubuntu. Probado en Debian, CentOS, SuSE, RedHat y recientemente en Raspbian.

- - - -
- -

Estatus

- -

Nuestra meta actual es que Jool sea un SIIT y un Stateful NAT64 apegado a los estándares de la IEEE. Nuestro agenda al 2015-04-13 es:

- -
    -
  1. -

    La Versión 3.4.0 será una refactorización para remover de Jool Stateful NAT64 la necesidad de una segunda dirección IPv4, y optimizar el pool4. (De hecho, son practicamente el mismo bug.)

    -
  2. -
  3. -

    La Versión 4.0.0 implicará una una reprogramación completa . Se está evaluando las alternativas de programarlo como un pseudo device o servicio (daemon) en el userspace. Se estima que esto lo hará más protable y simple de configurar, pero con algo de demérito en su performance.

    -
  4. -
  5. -

    La Versión 4.1.0 añadirá muchas caracteristicas nuevas.

    -
  6. -
- -

Es posible que existan versiones intermedias dependiendo de los problemas reportados. Sus sugerencias puede persuadirnos para cambiar prioridades. Si tienes alguna recomedación que darnos, presiona aquí.

- -

Nuestra versión más reciente es la 3.3.3.

- -
- -

Noticias

- -

2015-08-17

- -

Versión 3.3.3 liberada.

- -

Error crítico #166 corregido heavy_exclamation_mark

- -

Además en esta versión:

- -
    -
  1. Se añadió el soporte para el framework DKMS!
  2. -
  3. Se corrigieron los errores #150 y [#151] (https://github.com/NICMx/NAT64/issues/151) al usar la Herramienta de Configuración de Jool en el despliege de las tablas (bib, sessions y pools) cuando están vacías.
  4. -
- -

2015-04-14

- -

Versión 3.3.2 liberada.

- -

Este es el resumen:

- - - -

Se dieron de alta dos listas de correo:

- -
    -
  • jool-news@nic.mx para emitir noticias. Exclusivo para anunciar las nuevas liberaciones. Ház click aquí para empezar a recibirlas.
  • -
  • jool-list@nic.mx para discusión pública (ayuda, propuestas, etc.) y noticias. Haz click aquí para registrarte.
  • -
- -

jool@nic.mx aún puede ser utilizado para accesar a los desrrolladores.

- -

small_red_triangle_down También nos gustaria disculparnos por el inconveniente que tuvimos recientemente con el certificado. Aunque están siendo generados, los archivos de la lista de correos no están disponibles todavia, y esto está en la lista de pendientes de nuestros administradores.

- -

2015-03-11

- -

Error importante #137 descubierto heavy_exclamation_mark

- -

Precisamente, ya liberamos Jool 3.3.1 para resolver dicho problema.

- -

2015-03-09

- -

Se ha concluido Jool 3.3.0.

- -

small_red_triangle_down Las polítcas de Filtrado aún no son soportadas en esta versión, pero las traducciones tipo Stateless para IP/ICMP (SIIT) son ahora soportadas.

- -

Lee la introducción a SIIT/NAT64 para conocer este nuevo paradigma. Aqui encontras un tutorial. Para su mejor comprensión, ve a 464XLAT.

- -

Se reorganizó la herramienta de configuración de Jool, por favor actualiza tus scripts:

- - - -

También se liberó la actualización de Jool 3.2.3, para corregir los errores encontrados desde la versión 3.2.2. Uno de los principales errores es sobre la vulnerabilidad de DoS. Actualizar es altamente recomendada.

- -

2014-10-24

- -

El error importante #112 fue descubierto, y la versión 3.2.2 queda ya desactualizada.

- -

2014-10-17

- -

La documentación provista sobre --plateaus ha sido mejorada. Su definición también.

- -

small_red_triangle_down Ha llamado nuestra atención que no hemos incluido una explicación acerca de las IP literals, esto quedará dentro de la próxima actualización.

- -

2014-10-08

- -

versión 3.2.1 liberada. La serie 3.2 es considerada más madura que la 3.1.

- -

Los cambios importantes son:

- -
    -
  1. Jool siempre intentará enmascarar los paquetes usando el primer prefijo de la pool. Esto significa que Jool no era capaz de manejar mas que un solo prefijo.
  2. -
  3. La pérdida de memoria en el kernel ha sido corregida.
  4. -
- -

Los cambios menos relevantes son:

- -
    -
  1. log_martians no es incluido como un paso al insertar Jool (aunque no afecta si usted lo mantiene).
  2. -
  3. La actualización del estado de SNMP es regresado. Ver nstat y netstat -s.
  4. -
  5. El checksum es actualizado correctamente en los paquetes de Error de ICMP truncados.
  6. -
- -

NOTA: Cuando un error de ICMP es demasiado grande, no se fragmenta; se trunca. Esto se debe a que, puesto que es un mensaje de error entonces no es necesario que todo el mensaje llegue.

- -

2014-09-01

- -

Nos tomo más tiempo del planeado la realización de las pruebas, pero finalmente la versión 3.2.0 es liberada.

- -

Note que se cambio el número de versión menor, porque la Herrmienta de Configuración del Jool es ligeramente diferente. Los parámetros de configuración de un sólo valor han sido juntados en la opción de --general y ésta remplaza a --filtering, --translate y --fragmentation. La aplicación tiene además tres nuevas caracteristicas:

- -
    -
  1. La capacidad de limpiar las pools.
  2. -
  3. Se añadió la opción de --quick.
  4. -
  5. Se añadió la opción de --svg, en BIB y session.
  6. -
- -

El segundo cambio más importante es el Soportar varias conexiones de TCP simultáneas. La atención a este tipo de eventos es ahora menos complicada.

- -

Una pequeña confusión saco a luz que el path a la libnl había sido codificada en el script de configuración. Si usted ha tenido problemas para compilar la Herramienta de Configuración de Jool, entonces pruebe esta nueva versión.

- -

Lo menos relevante incluye un complemento al viejo caso #65, más documentación del código smiley. La documentación para los usuarios se ha actualizado significativamente, para ver los cambios vaya aquí.

- -

small_red_triangle_down No se completaron los cambios para la nueva implementación del mecanismo de fragmentación. Esto fue uno de los principales motivos para el retrazo de esta versión. Al parecer se requiere conciliar el desfragmentador del kernel y el RFC para poder implementar las políticas de filtrado. Sigue siendo un caso activo.

- -

También se liberó el 3.1.6, el cual contiene pequeñas correciones al 3.1.5. Esto se hizo en consideración a los usuarios que por alguna razón requerian continuar usando la serie 3.1.x.

- -

2014-06-26

- -

Si está familiarizado con los Markdown y los Github’s diffs, puedes encontrar los cambios en la documentación de la versión 3.1.5 aquí, aquí y aquí.

- -

2014-06-18

- -

La versión 3.1.5 fue liberada.

- -

La más importante corrección fue al caso #92. Errores incorrectos de ICMP confunden a los nodos de IPv4, lo cual baja la confibilidad en el tráfico de 4-a-6.

- -

Aparte de esto, la Herramienta de Configuración de Jool ha sido ajustada para que no se inhiba más cuando las tablas de sesiones y BIB son grandes, y para dar de baja las sesiones cuando las BIBs son borradas.

- -

Entonces, se tuvieron un par de problemas de performance y optimización. Colateralmente, para alinear la prioridad de debugeo versus el resto del kernel, se puso mayor cuidado de que información será registrada en el Log del Sistema para mantenerlo lo más limpio posible.

- -

Si te interesa cuidar el performance, lee este artículo y la documentación de --minMTU6. Este parámetro de configuración te ayudará a evitar la fragmentación.

- -

Si nadie encuentra algún error crítico en esta versión, esta actualización será la última de la serie 3.1.x. Estaremos trabajando para cumplir al 100% el RFC en la próxima actualización.

- -

2014-04-25

- -

La versión 3.1.4 ha sido liberada, y corrige:

- -
    -
  1. Dos problemas de inhibición del equipo caso#90 y caso#84.
  2. -
  3. La Herramienta de Configuración del Jool ahora resuelve nombres.
  4. -
  5. Se añade el soporte para Linux 3.13+.
  6. -
- -

x No recomendamos el uso de Jool en el kernel 3.12.

- -

2014-03-26

- -

La versión 3.1.3 ha sido liberada, y corrige:

- -
    -
  1. El uso de una incorrecta validación no permite la configuración de Jool en ciertos sistemas.
  2. -
  3. Un error que provoca que Jool no envíe ciertos errores de ICMP.
  4. -
  5. Una pérdida de memoria en un caso de paquetes fragmentados.
  6. -
  7. Se realizó una ligera optimización en el algoritmo de traducción del paquete al replazar algunos spinlocks con RCUs.
  8. -
- -

2014-03-04

- -

bell Website ha sido liberado. !Este website!

- -

y con este viene un nueva actualización 3.1.2, que:

- -
    -
  1. Estándariza el procedimiento de compilación e instalación en la Herramienta de Configuración de Jool.
  2. -
  3. Hace más explicto el manejo de sufijos de prefijos.
  4. -
  5. No se inhibe cuando el comando modprobe recibe argumentos inválidos .
  6. -
- -

2014-02-21

- -

La versión 3.1.1 ha sido liberada.

- -

Esta contiene dos correcciones:

- -
    -
  1. Se añadió el solicitar permisos de administrador para efectuar los cambios a parámetros en la Herramienta de Configuración del Jool.
  2. -
  3. Se corrigieron problemas de compatibilidad en los kernels ~3.1 .
  4. -
- -

2014-01-15

- -

small_orange_diamond La versión 3.1.0 ha sido liberada. ¡Jool, finalmente, maneja fragmentación!

- -

Otras correcciones importantes:

- -
    -
  • Se realizaron optimizaciones relevantes en ambas base de datos: BIB y session. El módulo deberá escalar mucho más elegantemente cuando los clientes se encuentren demandando más tráfico.
  • -
  • Jool ya no requiere de otra dirección IPv4 por separado.
  • -
  • El pánico del kernel cuando se removia el módulo ha sido suprimido.
  • -
  • Y además.
  • -
- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/es/intro-jool.html b/doc/usr/_site/es/intro-jool.html deleted file mode 100644 index 78e2dbc23..000000000 --- a/doc/usr/_site/es/intro-jool.html +++ /dev/null @@ -1,234 +0,0 @@ - - - - - Introducción a Jool - - - - - -
-
- -
- -
-
- -

Documentación > Introducción > Jool

- -

Introducción a Jool

- -

Ãndice

- -
    -
  1. Descripción
  2. -
  3. Cumplimiento
  4. -
  5. Compatibilidad
  6. -
- -

Descripción

- -

Jool es una implementación de varios mecanismos de transición en IPv6. Todos en la categoría de traducción: Stateful NAT64, SIIT y SIIT con EAM. Jool es una aplicación de código abierto (open source) en Linux, desarrollado sobre Ubuntu, y probado en otros Linux (Debian, CentOS, Raspbian, RedHat, SuSE).

- -

De Jool 1.0 a Jool 3.2.3 -> Stateful NAT64
-De Jool 3.3.0 en delante -> Stateful NAT64, SIIT y SIIT con EAM

- -

Cumplimiento

- -

Este es el estatus actual de cumplimiento de Jool 3.3:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
RFC/borradorNombre de recordatorioEstatus
RFC 6052Traducción de dirección IPCumple Totalmente.
RFC 6144Marco de traducción IPv4/IPv6Cumple Totalmente.
RFC 6145SIITCumple Totalmente. Esta en desuso el empleo de los fragmentos atómicos. .
RFC 6146Stateful NAT64Por Completar.
(Problemas por la implementación del RFC 6145)
(Políticas de Filtrado).
RFC 6384FTP sobre NAT64Por Completar.
RFC 6791Peculiaridades de ICMPPor Implementar.
(Unificar Pool de direcciones en IPv4)
(Extensión del encabezado de ICMP)
RFC 6877464XLATImplementado como SIIT-DC; vea abajo.
draft-ietf-v6ops-siit-dcSIIT-DCCumple Totalmente.
draft-ietf-v6ops-siit-dc-2xlatSIIT-DC Edge TranslatorModo basado en Host. No Implementado.
draft-ietf-6man-deprecate-atomfrag-generationDeprecación de los Fragmentos AtómicosLos continuamos soportando, pero no recomendamos su uso.
draft-anderson-v6ops-siit-eamEAMCumple totalmente.
- -

email Por favor, haznos saber si encuentras problemas de cumplimiento adicionales o RFCs/drafts que no hayamos considerado.

- -

Compatibilidad

- -

Soportamos los kernels de Linux del 3.0 en adelante para Jool 3.1.x y 3.2.x

- -

Soportamos los kernels de Linux del 3.2 en adelante para Jool 3.3.x

- -

El desarrollo se ha hecho usando las distribuciones LTS de Ubuntu 12.04 y 14.04, pero hemos realizado una saludable cantidad de pruebas formales en Jool 3.1.5, 3.1.6, 3.2.0, 3.2.1, 3.2.2 y 3.3.2 en las siguientes variantes:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
DistribuciónKernels
CentOS 73.10.0-123.el7.x86_64
Debian 7.53.2.0-4-amd64
Red Hat Enterprise Linux 73.10.0-123.4.4.el7.x86_64
SuSE Linux Enterprise Desktop 11 SP33.0.101-0.31-default
Ubuntu 12.043.1.10-030110-generic, 3.2.60-030260-generic
Ubuntu 12.103.3.8-030308-generic, 3.4.94-030494-generic, 3.5.7-03050733-generic
Ubuntu 13.043.6.11-030611-generic, 3.7.10-030710-generic, 3.8.13-03081323-generic
Ubuntu 13.103.9.11-030911-generic, 3.10.44-031044-generic, 3.11.10-03111011-generic
Ubuntu 14.043.12.22-031222-generic, 3.13.11-03131103-generic
Ubuntu 14.103.14.8-031408-generic, 3.15.1-031501-generic
- -

small_red_triangle_down Red Hat y CentOS muestran un warning debido a un error entre el kernel de base usado en Red Hat y el de Debian. Estamos buscando aún cómo eliminarlo, pero este mensaje no es crítico porque no nos ha ocasionado problemas durante las pruebas.

- - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/es/intro-nat64.html b/doc/usr/_site/es/intro-nat64.html deleted file mode 100644 index b34fc5b35..000000000 --- a/doc/usr/_site/es/intro-nat64.html +++ /dev/null @@ -1,241 +0,0 @@ - - - - - Documentación - Introducción a los Mecanismos de Transición - - - - - -
-
- -
- -
-
- -

Documentación > Introducción > Mecanismos de Transición

- -

Mecanismos de Transición de IPv6 soportados por Jool

- -

Ãndice

- -
    -
  1. Introducción
  2. -
  3. Ejemplos de Traducción
    - a) SIIT con EAM
    - b) SIIT tradicional
    - c) Stateful NAT64
  4. -
- -

Introducción

-

Este documento proporciona una introducción general a los tres mecanismos de traducción implementados en Jool.

- -

El algoritmo para SIIT fue definido formalmente a inicios del 2000 por Erik Nordmark de SUN Microsystems en el RFC 2765. Este ha sido actualizado en varias ocasiones: (RFC 6145, 2011), (RFC6791, 2012) e inclusive hasta nuestros días. De éstos, ya están incluidos en Jool el (draft-ietf-v6ops-siit-dc, 2015), el (draft-ietf-v6ops-siit-dc-2xlat, 2015) y el (draft-anderson-v6ops-siit-eam, 2015). Estas tres adiciones a SIIT han sido propuestas y promovidas por Tore Anderson de la compañía Redpill Linpro en Noruega.

- -

La metodología del Stateful NAT64 fue uno de los resultados del Proyecto Trilogy, organizado por la Unión Europea, con una inversión aprox. de 9 millones de Euros, por un período de 3 años (2008 al 2010) donde participaron 5 Universidades, 4 compañías de telecomunicación y 2 centros de investigación. El estándar para el NAT64 que es el RFC 6146 fue publicado en el 2011 por el mismo coordinador del projecto, el Dr. Marcelo Bagnulo Braun de la Universidad Carlos III y otros dos colaboradores del proyecto.

- -

bulb Conoce más trabajos elaborados por la IETF acerca de NAT64 en TOOLS IETF y en Datatracker.

- -

Ejemplos de Traducción

- -

SIIT (Stateless IP/ICMP Translation) y NAT64 (“NAT seis cuatroâ€, no “NAT sesenta y cuatroâ€) son tecnologías orientadas a comunicar nodos de red que únicamente hablan IPv4 con nodos que solo hablan IPv6. - La idea es básicamente la de un NAT mejorado; es decir que, un “Traductor IPv4/IPv6†no solo reemplaza direcciones y/o puertos en los paquetes, sino también encabezados de capa 3.

- -
    -
  • -

    SIIT, es la manera sencilla, permitiendo MAPEOS 1-a-1 preconfigurados entre IPv4 e IPv6.
    - Es decir, que en SIIT tú establecerás lo siguiente:
    - a) Para cada uno de tus nodos en IPv6 existirá una dirección alterna en IPv4.
    - b) Para cada uno de tus nodos en IPv4 existirá una dirección alterna en IPv6.

    -
  • -
  • -

    Stateful NAT64, o simplemente NAT64, permite que VARIOS NODOS IPv6 compartan UN RANGO PEQUEÑO de direcciones IPv4.
    - Es decir, que en NAT64 tú establecerás lo siguiente:
    - a) Para cada uno de tus nodos en IPv4 existirá una dirección alterna en IPv6, pero esa nueva dirección estará formada de un prefijo de IPv6 + dir. en IPv4.
    - b) Los nodos en IPv6 será identificados por una o varias IP válidas en T (Jool), aparentando ser una “Red Privada de IPv4†(red local).

    -
  • -
- -

NAT64 es definitivamente útil cuando se dispone de un número restringido de direcciones de IPv4.

- -

Por razones históricas, algunas veces etiquetamos a SIIT como “Stateless NAT64â€. Ya que esta expresión no parece estar incluida en ningún estándar relevante, la consideramos imprecisa, a pesar de que tiene cierto grado de sentido. Si es possible, por favor trata de no usarla.

- -

En una implementación SIIT siempre se modifican los encabezados de red y en algunas veces los checksums. En un Stateful NAT64 también se manipulan los identificadores de transporte.

- -

SIIT con EAM

- -

Esta parte es la más fácil de explicar. Considera la siguiente configuración:

- -

Fig.1 - Red de ejemplo EAM

- -

(T representa “Translating boxâ€. En español “Caja de traducciónâ€.)

- -

Asumiendo que la puerta de enlace por default de todos es T, comó comunicarías A (IPv6) con V (IPv4)?

- -

Para lograr la comunicación entre A y V bastaría con establecer lo siguiente:

- -
    -
  • Le dices a A, “la dirección de V es 2001:db8:4::16â€.
  • -
  • Le dices a V, “la dirección de A es 198.51.100.8 “.
  • -
  • Le dices a T, “La dirección IPv4 de A debe de ser 198.51.100.8,
    - y la dirección IPv6 de V debe de ser 2001:db8:4::16â€.
  • -
- -

La primera es resuelta por SIIT, las demás pueden ser realizadas vía DNS.

- -

Veamos:

- -

Fig.2 - Flujo EAM

- -

El traductor esta “engañando†a ambos nodos haciéndoles pensar que el otro puede hablar el mismo lenguaje.

- -

“EAM†significa por sus siglas en inglés “Explicit Address Mappingâ€, mapeo de direcciones explícitas. Es más versátil que un simple mapeo de direcciones aribtrarias a otras direcciones arbitrarias.

- -

bulb Revisa nuestro resumen o repasa sus especificaciones en el draft EAM.

- -

SIIT (tradicional)

- -

El modo básico es un poco más complejo. Las direcciones no son remplazadas completamente por otras, sino una parte será usada en su dirección asociada con el otro protocolo. Considera la siguiente configuración:

- -

Fig.3 - Red de ejemplo Vanilla

- -

Para lograr la comunicación entre A y V bastaría con establecer lo siguiente:

- -
    -
  • Le dices a A, “la dirección de V es 2001:db8:192.0.2.16â€.
  • -
  • Le dices a V, “la dirección de A es 198.51.100.8 “.
  • -
  • Le dices a T, “La dirección IPv4 de A debe de ser 198.51.100.8,
    - y la dirección IPv6 de V debe de ser 2001:db8:192.0.2.16â€.
  • -
- -

La idea es, simplemente remover el prefijo durante el mapeo de IPv6 a IPv4, y adjuntarlo en el otro sentido. Como lo puedes apreciar en la siguiente figura:

- -

Fig.4 - Flujo Vanilla

- -

Por supuesto, esto significa que la dirección IPv4 de cada nodo en IPv6 tiene que ser codificada dentro de su dirección, lo cual es un poco engorroso.

- -

Podría parecerte que SIIT con “EAM†y SIIT “tradicional†son cosas diferentes, pero pueden trabajar a la par. En implementaciones de este tipo, primeramente se intentará mapear las direcciones IP consultando la tabla EAM (según SIIT con EAM), y si NO están registradas, se retrocede y se añade o se remueve el prefijo (según SIIT).

- -

Puedes encontrar un ejemplo concreto de como SIIT “tradicional†y “EAM†pueden ser combinados eficientemente para cumplir un caso de uso en la siguiente propuesta de solución para Centros de Datos: draft-v6ops-siit-dc.

- -

Dependiendo de la longitud del prefijo, la dirección IPv4 se incorporará en diferentes posiciones dentro de nuestro rango de 128 bits según se establece en el RFC 6052.

- -

warning Siempre que el RFC 6052 esté involucrado, es muy conveniente dar de alta también un DNS64 para que
- los usuarios no necesiten estar al tanto del prefijo, y resuelva por nombre.

- -

Stateful NAT64

- -

Este modo es el más parecido a lo que la gente entiende como NAT, por sus siglas en inglés de IP Network Address Translator. Recordemos, un NAT opera de la siguiente manera:

- -

Fig.5 - Red de ejemplo NAT

- -

Note que, la red de la izquierda es llamada “Privada†por que usa Direcciones no disponibles en la Internet Global. NAT modifica las direcciones de los paquetes para que los nodos externos piensen que el tráfico proveniente de los nodos internos fue en realidad iniciado por el NAT:

- -

Fig.6 - Flujo NAT

- -

Es decir que para propósitos externos, los nodos desde A hasta E están “compartiendo†la misma dirección global de NAT (o grupo de direcciones).

- -

Aunque NAT ayuda a reducir el empleo de direcciones globales en Internet de IPv4, esto tiene un precio: NAT tiene que recordar cual nodo privado emitió el paquete a V, porque la dirección de A fue suprimida dentro de la respuesta de V. Por eso, es que es llamado stateful, porque guarda el estado de las sesiones, pues crea mapeos de direcciones y los recuerda por un tiempo.

- -

Dos cosas que hay que tomar en cuenta es:

- -
    -
  • Cada mapeo require memoria.
  • -
  • V no puede iniciar la comunicación con A, porque primeramente el NAT debe aprender el mapeo en el sentido de la Red_Privada-a-Red_Externa (de izquierda a derecha).
  • -
- -

Si quieres saber más sobre NAT y sus diferentes tipos, consulta los siguientes documentos: RFC 2663, RFC 2766 y RFC 3022.

- -

Stateful NAT64 es muy similar a un NAT-PT (Protocol Translation). La única diferencia es que la “Red Privada†es de hecho una red IPv6:

- -

Fig.7 - Red de ejemplo Stateful NAT64

- -

Para lograr la comunicación entre A y V bastaría con establecer lo siguiente:

- -
    -
  • Le dices a A, “la dirección de V es 2001:db8:203.0.113.16â€.
  • -
  • Le dices a V, “la dirección de A es 203.0.113.2 (T)â€.
  • -
  • Le dices a T, “La dirección IPv4 de A debe de ser 203.0.113.2 (T),
    - y la dirección IPv6 de V debe de ser 2001:db8:203.0.113.16â€.
  • -
- -

La idea es, enmascarar A y remover el prefijo a V durante el mapeo de IPv6 a IPv4, y adjuntar el prefijo en V y quitar la máscara a A cuando va de IPV4 a IPv6. Como lo puedes apreciar en la siguiente figura:

- -

Fig.8 - Flujo Stateful

- -

NAT64 maneja otros escenarios y es aquí donde termina la similitud con NAT. Debido a que en IPv6 la capacidad de identificación de los nodos es sumamente enorme, se contempla que cada dispositivo cuente con una dirección pública de IPv6. En otras palabras se prevé o planea que TODOS los dispositivos en IPv6 tenga acceso a Internet. Considerando esto, una conectividad posible sería:

- -

Fig.9 - Internet Stateful NAT64

- -

De esta manera, los nodos A hasta E son solo de IPv6, pero tienen acceso a ambas Internets. A la IPv6 mediante un ruteador R, y a la IPv4 mediante T.

- -

Si gustas conocer el resto de los escenarios posibles en Stateful NAT64 y SIIT consulta el RFC 6144, cap. 2.

- -

warning Para soportar direccionamiento por nombre se requiere habilitar el DNS64.

- - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/es/logging.html b/doc/usr/_site/es/logging.html deleted file mode 100644 index 4b7a2fb79..000000000 --- a/doc/usr/_site/es/logging.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - Logging - - - - - -
-
- -
- -
-
- -

TODO

- - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/es/mod-install.html b/doc/usr/_site/es/mod-install.html deleted file mode 100644 index 906e704b8..000000000 --- a/doc/usr/_site/es/mod-install.html +++ /dev/null @@ -1,237 +0,0 @@ - - - - - Instalación del Servidor Jool - - - - - -
-
- -
- -
-
- -

Documentación > Instalación > Servidor Jool

- -

Instalación del Servidor Jool

- -

Ãndice

- -
    -
  1. Introducción
  2. -
  3. Requerimientos
    - a) Kernels Válidos
    - b) Encabezados del Kernel
    - c) Interfaces de Red
    - d) Ethtool
  4. -
  5. Baja, Compila e Instala
    - a) De la Web Oficial
    - b) Del Repositorio GIT
  6. -
  7. Genera Archivo de Dependencias
  8. -
- -

Introducción

- -

Jool tiene cuatro componentes, es decir, cuatro ejecutables:

- -
    -
  1. Dos Módulos de Kernel, uno donde se implementa el Stateful NAT64, nombrado como jool, y el otro donde se implementa SIIT y SIIT-EAM, nombrado como jool-siit.
  2. -
  3. Dos aplicaciones en el Espacio de Usuario, una para Stateful NAT64 y la otra para SIIT y SIIT-EAM, nombrados de igual manera: jool y jool-siit respectivamente.
  4. -
- -

En este documento nos enfocaremos a los primeros dos módulos del kernel, o sea, a las aplicaciones principales para habilitar uno u otro servicio. Para activar la traducción de paquetes se requiere insertar los módulos en el kernel. Continúe leyendo este documento, si quiere conocer cuáles son los requisitos y su procedmiento.

- -

La instalación de los Módulos del Kernel es convencional, pero para los usuarios que no tienen experiencia previa en instalar aplicaciones que son extensiones al kernel, les podrá ser de gran utilidad.

- -

Las aplicaciones en el espacio de usuario son para configuración de Jool, la explicación de cómo instalarlas se encuentra en una página aparte.

- -

Requerimientos

- -

Kernels Válidos

- -

Jool fue desarrollado sobre ambiente linux y lenguaje de programación “Câ€. Para conocer la lista actualizada de kernels soportados y probados en las diferentes distribuciones de Linux haz click aquí. Es factible que no vaya a haber problema alguno, al compilar Jool en versiones más recientes de kernel. ¡Ãnimo, prueba y compartenos tu experiencia!

- -

NOTA: No recomendamos usar el kernel 3.12 porque el sistema se inhibe cuando se invoca la función icmpv6_send.

- -

Para verificar la versión de tu kernel, usa el siguiente comando:

- -
$ /bin/uname -r
- -

Encabezados del Kernel

- -

Para que Jool se compile y lige sin problemas es necesario que tu equipo cuente con los encabezados de kernel para la versión en la que te dispones a trabajar. Para ello, ejecuta con permisos de administrador lo siguiente:

- -
user@node# apt-get install linux-headers-$(uname -r)
- -

Interfaces de Red

- -

Jool requiere al menos de una interfaz de red para poder comunicarse con los nodos via IPv6 e IPv4. Esto es posible, al habilitar una sola interfaz de red, con doble pila y varios protocolos, pues el kernel lo permite; sin embargo, por consideración a las personas que están incursionando en este tipo de aplicaciones se usarán dos interfaces de red separadas: una para IPv6 y otra para IPv4. Y de esta manera, poder identificar más facilmente los paquetes al usar las aplicaciones de debugeo como WireShark y otros. Entonces, para validar cuáles y cuántas interfaces de red están disponibles ejecuta lo siguiente:

- -
$ ip link show
-(...)
-2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
-    link/ether 08:00:27:3d:24:77 brd ff:ff:ff:ff:ff:ff
-3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
-    link/ether 08:00:27:ca:18:c8 brd ff:ff:ff:ff:ff:ff
- -

Ethtool

- -

Ethtool es una utilería para configurar las tarjetas Ethernet, con ella se pueden visualizar y modificar sus parámetros. Para instalarla ejecuta con permisos de administrador:

- -
user@node# apt-get install ethtool
- -

Baja, Compila e Instala

- -

Por simplicidad, solo se distribuyen los fuentes. Para descargar Jool, hay dos opciones:

- -
    -
  • Las versiones oficiales de Jool en nuestro Sitio Web. Éstas se encuentran en la Página de Descarga.
  • -
  • Las versiones en desarrollo en nuestro Repositorio de GitHub. Éstas se encuentran en Proyecto NAT64.
  • -
- -

Existen algunas pequeñas variantes al bajarlo de un portal u otro, no tan solo de nombre, sino de contenido.

- -

Quizá estes acostumbrado a un procedimiento estándar de tres pasos para compilar e instalar programas: ./configure && make && make install. Los módulos de kernel no vienen con un script configure, para generar el Makefile, sino ya está hecho, por lo que solo se requiere ejecutar los últimos dos pasos.

- -

De la Web Oficial

- -

Si buscas la versión más estable o versiónes anteriores de Jool, entonces descárgalo desde este mismo portal, dirigiendote a la página de Descarga. Sigue estos pasos:

- -

1) Elige la versión

- -

2) Elige el formato (zip, sha, md5)

- -

3) Descarga el archivo comprimido

- -

4) Descomprime

- -

small_orange_diamond Asumiendo que lo bajastes en formato ZIP, en la carpeta de Downloads y lo quieres colocar en Desktop, ejecuta los siguientes comandos:

- -
user@node:$ cd Downloads
-user@node:~/Downloads$ unzip Jool-<version>.zip -d ../Desktop
- -

5) Compila ambos módulos SIIT y NAT64

- -
user@node:~$ cd ../Desktop/Jool-<version>/mod
-user@node:~/Desktop/Jool-<version>/mod$ make
- -

6) Instala

- -

El proceso de instalación consiste en copiar los binarios generados a tu pool de módulos del sistema. Empleando permisos de administrador ejecuta:

- -
user@node:~/Jool-<version>/mod# make modules_install
- -

Del Repositorio GIT

- -

Si descargas Jool del Repositorio de Github, te sugerimos acceder el último commit de la rama principal, porque las otras ramas son para desarrollo, y están en constante cambio y no hay garantía. Sigue estos pasos:

- -

1) Elige la rama “masterâ€

- -

2) Selecciona el icono Download ZIP

- -

3) Descarga

- -

4) Descomprime

- -

small_orange_diamond Asumiendo que se descargó en Downloads y lo quieres colocar en Desktop, ejecuta los siguientes comandos:

- -
user@node:$ cd Downloads
-user@node:~/Downloads$ unzip NAT64-<version>.zip -d ../Desktop
- -

5) Compila ambos módulos SIIT y NAT64

- -
user@node:~$ cd ../Desktop/NAT64-<version>/mod
-user@node:~/Desktop/NAT64-<version>/mod$ make
- -

6) Instala

- -

El proceso de instalación consiste en copiar los binarios generados a tu pool de módulos del sistema. Empleando permisos de administrador ejecuta:

- -
user@node:~/NAT64-<version>/mod# make modules_install
- -

Genera Archivo de Dependencias

- -

El hecho de que residan en la pool no significa que ya hayan sido indizados, entonces, para finalizar, también necesitarás indexar los nuevos módulos. Ejecuta aqui también con permisos de administrador el comando:

- -
user@node:~# depmod
- -

Mediante el comando depmod se genera el archivo de dependencias Makefile que usará modprobe para cargar los módulos, aprende cómo hacerlo consultando el ejemplo básico de SIIT.

- -

thumbsup Jool puede ser inicializado ahora.

- -
-

ADVERTENCIA :

- -

A partir del kernel 3.7 en Ubuntu puedes autentificar tus módulos, lo cual es una buena práctica. Te recomendamos, firmar tus modulos de kernel para asegurarte de que los estás agregando de manera responsable. -Si tu kernel NO fue configurado para solicitar esta característica no tendrás problema. Los kernels de muchas distribuciones no lo hacen. Solo ten en cuenta que cuando corras el comando make modules_install, se mostrará el siguiente mensaje: “Can’t read private keyâ€; esto puede parecer un error, pero de hecho es una advertencia, así que puedes continuar la instalación. -Si tu kernel fue compilado para solicitar el firmado de módulos, probablemente ya sepas como llevarlo a cabo. Nota: Lo omitiremos aquí.

-
- - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/es/mod-run-464xlat.html b/doc/usr/_site/es/mod-run-464xlat.html deleted file mode 100644 index c5c2367ab..000000000 --- a/doc/usr/_site/es/mod-run-464xlat.html +++ /dev/null @@ -1,306 +0,0 @@ - - - - - 464XLAT - - - - - -
-
- -
- -
-
- -

Documentación > Ejemplos de uso > 464XLAT

- -

TODO - Pendiente hacer revisión

- -

464XLAT

- -

Ãndice

- -
    -
  1. Introducción
  2. -
  3. Red de ejemplo
  4. -
  5. Flujo de paquetes esperado
  6. -
  7. Pruebas
  8. -
  9. Palabras de cierre
  10. -
  11. Lecturas adicionales
  12. -
- -

Introduction

- -

NAT64 no es perfecto. Aunque puedas ver mucho trafico ser tradicido sin capricho alguno, quizá puedas llegar eventualmente al siguiente comportamiento inesperado.

- -

Salvo el RFC 6384, NAT64 solo traduce cabeceras de red (IPv4, IPv6 y ICMP) y cabeceras de transporte (UDP y TCP). Algunas veces, esto es un problema. Algunos protocolos que trabajan encima de UDP y TCP tienen el mal hábito de incluir direcciones IP (“Valores IP literalesâ€) a lo largo de sus conversaciones; ya que NAT64 solo traduce protocolos de mas abajo, estos valores pasaran por el NAT64 sin ser modificados.

- -

Por ejemplo, algunos sitios que no toman en cuenta IPv6, los cuales normalmente contendrian este HTML:

- -

Enlace a algo.

- -

Podrian ser pobremente codificados de esta manera:

- -

Enlace a algo.

- -

Esta dirección está dentro del cuerpo de un archivo HTML, no de una cabecera de transporte de red. No es viable para Jool soportar la traduccion de todos los protocolos de aplicación existentes.

- -

Si le das click a la segunda versión del enlace mostrado en la parte de arriba desde un nodo que solo soporta IPv6 y tratas de utilizar el NAT64, es obvio que no funcionará, por que el nodo no tiene una pila IPv4 con cual accesar a 203.0.113.24. www.jool.mx funciona bien por que el DNS64 adjunta el frefijo NAT64 una vez que el nodo pregunta por el dominio; por otra parte, si todo lo que el nodo tiene es 203.0.113.24, realmente no puede decir que esta hablando mediante un NAT64, mucho menos saber que prefijo deberia ser añadido.

- -

464XLAT es una técnica orientada a solucionar esta limitante. Funciona agregando un SIIT a la ecuación, que revierte el trabajo hecho por el Stateful NAT64. La idea puede ser generalizada para tambien proveer Internet a servicios que solo soportan IPv4 cuando todo lo que tienes es un espacio de direcciones IPv6, la cual es un Modo de traducción dual SIIT/DC

- -

Este documento es un resumen simplificado de ambas técnicas, colapsado en una introducción que usa Jool.

- -

Red de ejemplo

- -

Figure 1 - 464 Needed

- -

La caja roja seria tu dominio. n6 respresenta un “nodo IPv6†y R es un “routerâ€. Digamos que tu proveedor de internet solo te proporciona direcciones IPv6, pero tambien te garantiza acceso a IPv4 mediante un stateful NAT64(PLAT; Traductor del lado del proveedor o “Provider-side Translator†por sus siglas en inglés). n4 nodo de Internet IPv4 aleatorio.

- -

Digamos que tu usuario de n6 hace click a un enlace hacia 203.0.113.24. n6 no tiene una pila IPv4, asi que la solicitud no tiene a donde ir. La situación puede ser enmendada agregando el prefijo NAT64 a la direccion, pero el usuario no lo sabe. Por supuesto, un DNS64 seria la solución ideal y transparente, pero desafortunadamente el sitio proporcionó una dirección y no un nombre de dominio, asi que n6 no le esta enviando ninguna solicitud al DNS.

- -

Alternativamente, n6 quizá quiera proveer un servicio legado(o cliente) el cual esta desafortunadamente ligado a IPv4. Ya que n6 solo tiene direcciones IPv6 globales, aparentemente no puede hacerlo.

- -

En terminos amplios, la solución es proporcionar a n6 una pila IPv4 “falsa†cuyos paquetes serán traducidos a IPv6 antes de llegar al PLAT. En -otras palabras, un servicio SIIT (en terminos 464XLAT llamado “CLATâ€; Traductod del lado del cliente o “Customer-side Translator†por sus siglas en inglés) estará, de cierta forma, deshaciendo el trabajo del PLAT.

- -

Hay muchas maneras de hacer esto. Desafortunadamente, una de ellas (volver n6 el CLAT) todavia no se encuentra implementada en Jool. Una que funcion es hacer que R sea el CLAT. La red luciría como esto:

- -

Figure 2 - 464XLAT'd Network

- -

Tambien removi las nubes para simplificar el ruteo en el ejemplo. La idea de la traduccion realmente no tiene nada que ver con el ruteo, asi que esto no es importante.

- -

Flujo de paquetes esperado

- -

Este es el flujo normal que un paquete de origen IPv6 atravesaría. Es un flujo sateful NAT64 típico y la traducción dual presentada en esta configuración no interferirá con el: Toma en curnta que hemos elejido 64:ff9b::/96 como prefijo NAT64 del PLAT:

- -

Figure 3 - Normal Stateful Flow

- -

El flujo 464XLAT que queremos lograr es el siguiente. n6 utilizará su dirección IPv4 para intentar consultar el valor literal (o cualquier dirección de internet IPv4):

- -

Figure 4 - Literal

- -

R

- -

R will SIIT the packet into IPv6 so it can traverse the IPv6-only chunk. Address 192.168.0.8 will be translated using the EAMT, and 203.0.113.24 will receive the pool6 prefix treatment to mirror PLAT’s.

- -

Figure 5 - SIIT'd packet

- -

PLAT hará su magia y mandará el paquete a la internet IPv4:

- -

Figure 6 - Stateful NAT64'd packet

- -

Y la modificación será espejeada para la respuesta:

- -

Figure 7 - Mirror

- -

Configuración

- -

n6 no sabe que de alguna forma es dueño de otra dirección IPv6 en la red 2001:db8:2::/96. Nunca ve el trafico, por que R siempre siempre lo traduce hacia 192.0.2.0/24.

- -
service network-manager stop
-
-ip link set eth0 up
-ip addr add 2001:db8:1::8/64 dev eth0
-ip addr add 192.168.0.8/24 dev eth0
-
-ip route add default via 2001:db8:1::1
-ip route add default via 192.168.0.1
-
- -

Esto es R:

- -
service network-manager stop
-
-ip link set eth0 up
-ip addr add 192.168.0.1/24 dev eth0
-ip addr add 2001:db8:1::1/64 dev eth0
-
-ip link set eth1 up
-ip addr add 2001:db8:100::1/64 dev eth1
-
-# Traffic headed to the real IPv4 Internet goes via PLAT.
-ip route add 64:ff9b::/96 via 2001:db8:100::2
-
-# Enable routerness.
-sysctl -w net.ipv6.conf.all.forwarding=1
-sysctl -w net.ipv4.conf.all.forwarding=1
-
-# Enable SIIT.
-# We're masking the private network using an EAMT entry.
-# Traffic towards the Internet is to be appended PLAT's prefix.
-# Recall that the EAMT has higher precedence than the prefix.
-modprobe jool_siit pool6=64:ff9b::/96
-jool_siit --eamt --add 192.168.0.8/29 2001:db8:2::/125
-
- -

El paquete de n6 tendra la dirección 192.168.0.8 y 203.0.113.24. La primera será traducida utilizando el registro EAMT ( ya que coincide con 192.168.0.8/29) y la segunda utilizará el prefijo pool6 (por que no coincide).

- -

Tambien toma en cuenta que R es una implementacion aproximada de SIIT y jamas se debe de pensar en esta instalación de Jool como nada mas que eso.

- -

Para efectos de ilustrar completamente, mostramos la configuracion de red de PLAT:

- -
service network-manager stop
-
-ip link set eth0 up
-ip addr add 2001:db8:100::2/64 dev eth0
-# I'm pretending the ISP gave us these two prefixes to play with.
-ip route add 2001:db8:1::/64 via 2001:db8:100::1
-ip route add 2001:db8:2::/64 via 2001:db8:100::1
-
-ip link set eth1 up
-ip addr add 203.0.113.1/24 dev eth1
-ip addr add 203.0.113.2/24 dev eth1
-
-modprobe jool pool6=64:ff9b::/96 pool4=203.0.113.2
-
- -

Y n4 es profundamente aburrido:

- -
service network-manager stop
-
-ip link set eth0 up
-ip addr add 203.0.113.24/24 dev eth0
-ip route add default via 203.0.113.2
-
- -

Pruebas

- -

Haz un ping a n4 mediante IPv4 desde n6:

- -
$ ping 203.0.113.24 -c 1
-PING 203.0.113.24 (203.0.113.24) 56(84) bytes of data.
-64 bytes from 203.0.113.24: icmp_seq=1 ttl=62 time=4.13 ms
-
---- 203.0.113.24 ping statistics ---
-1 packets transmitted, 1 received, 0% packet loss, time 0ms
-rtt min/avg/max/mdev = 4.130/4.130/4.130/0.000 ms
-
- - - -

HAz un ping a n4 mediante IPv6 desde n6:

- -
$ ping6 64:ff9b::203.0.113.24 -c 1
-PING 64:ff9b::203.0.113.24(64:ff9b::cb00:7118) 56 data bytes
-64 bytes from 64:ff9b::cb00:7118: icmp_seq=1 ttl=62 time=14.0 ms
-
---- 64:ff9b::203.0.113.24 ping statistics ---
-1 packets transmitted, 1 received, 0% packet loss, time 0ms
-rtt min/avg/max/mdev = 14.053/14.053/14.053/0.000 ms
-
- - - -

Palabras de cierre

- -

Aunque en este punto puedes ver como puedes defenderte de los valores IP literales y applicaciones legadas que solo soportan IPv4, quizá quieras ser advertido previamente de que al menos un protocolo de aplicación allá afuera esta tan pobremente diseñado que trabaja diferente dependiendo de si esta trabajando sobre IPv6 o IPv4. Como resultado, []

- -

Though at this point you can see how you can defend yourself against IP literals and legacy IPv4-only appliances, you might want to be forewarned that at least one application protocol out there is so poorly designed it works differently depending on whether it’s sitting on top of IPv6 or IPv4. Therefore, addressing IP literals in this case is not sufficient to make FTP work via NAT64.

- -

Por otra parte, algunos protocolos solo dependen parcialmente de valores literales, y el NAT64 no va a entrometerse en el camino de los que no. El modo pasivo de FTP cae en esta categoria.

- -

On the other hand, some network-aware protocols only partially depend on literals, and the NAT64 is not going to get in the way of the features that don’t. FTP’s passive mode falls in this category.

- -

You can make active FTP work by deploying a fully stateless dual translation environment such as siit-dc-2xlat. It works because both the client and server are both using IPv4 sockets, the IPv4 addresses are unchanged end-to-end, and it’s fully bi-directional, so active and passive FTP on arbitrary ports work fine. In siit-dc-2xlat, the IPv6 network in the middle becomes an invisible “tunnel†through which IPv4 is transported.

- -

Here’s a list of protocols that are known to use IP literals. You might also want to see RFC 6586.

- - - -

Lecturas adicionales

- - - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/es/mod-run-alternate.html b/doc/usr/_site/es/mod-run-alternate.html deleted file mode 100644 index 9ba359858..000000000 --- a/doc/usr/_site/es/mod-run-alternate.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - Ejecución Alterna de Stateful - - - - - -
-
- -
- -
-
- -

Doc > Otros > Interfáz Única

- -

Interfáz Única

- -

Esta sección está aquí is here solo para decirte que si quieres que tu SIIT o NAT64 brinden servicio a ambos protocolos en la misma interfáz, aun estás cubierto. Jool puede ver paquetes viniendo desde cualquier interfaz y puede enviar paquetes mediante cualquier interfaz. (aunque ignora, el loopback).

- -

Fig.1 - Single interface NAT64

- -

Esta es la misma configuración que en el Ejemplo de uso de Stateful NAT64, excepto por el hecho de que todo mundo ahora esta compartiendo el mismo cable, y tambien removí los nodos reduntantes por que entiendes el punto.

- -

A y V son configurados exactamente como en sus contrapartes del ejemplo Stateful, asi que voy a brincarme sus comandos. Lo único que es diferente es T ahora teniendo todas sus direcciones en la misma interfáz:

- -
user@T:~# service network-manager stop
-user@T:~# 
-user@T:~# /sbin/ip link set eth0 up
-user@T:~# /sbin/ip address add 2001:db8::1/96 dev eth0
-user@T:~# /sbin/ip address add 203.0.113.1/24 dev eth0
-user@T:~# /sbin/ip address add 203.0.113.2/24 dev eth0
-user@T:~# 
-user@T:~# ethtool --offload eth0 tso off
-user@T:~# ethtool --offload eth0 ufo off
-user@T:~# ethtool --offload eth0 gso off
-user@T:~# ethtool --offload eth0 gro off
-user@T:~# ethtool --offload eth0 lro off
-user@T:~# 
-user@T:~# /sbin/modprobe jool pool6=64:ff9b::/96 pool4=203.0.113.2
-
- -

Así que básicamente, A y V comparten el mismo cable, pero de todos no pueden hablar por que no hablan el mismo lenguaje. Esto es, a menos de que le soliciten a T traducir su pequeña conversación:

- -
user@A:~$ /bin/ping6 64:ff9b::203.0.113.16
-PING 64:ff9b::203.0.113.16(64:ff9b::cb00:7110) 56 data bytes
-64 bytes from 64:ff9b::cb00:7110: icmp_seq=1 ttl=63 time=10.0 ms
-64 bytes from 64:ff9b::cb00:7110: icmp_seq=2 ttl=63 time=8.16 ms
-64 bytes from 64:ff9b::cb00:7110: icmp_seq=3 ttl=63 time=8.39 ms
-64 bytes from 64:ff9b::cb00:7110: icmp_seq=4 ttl=63 time=5.64 ms
-^C
---- 64:ff9b::203.0.113.16 ping statistics ---
-4 packets transmitted, 4 received, 0% packet loss, time 3003ms
-rtt min/avg/max/mdev = 5.645/8.057/10.025/1.570 ms
-
- - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/es/mod-run-eam.html b/doc/usr/_site/es/mod-run-eam.html deleted file mode 100644 index bc2bd2dab..000000000 --- a/doc/usr/_site/es/mod-run-eam.html +++ /dev/null @@ -1,249 +0,0 @@ - - - - - SIIT-EAM - Ejemplo de uso - - - - - -
-
- -
- -
-
- -

Documentación > Ejemplos de uso > SIIT + EAM

- -

EAM: Ejemplo de Uso

- -

Ãndice

- -
    -
  1. Introducción
  2. -
  3. Red de ejemplo
    - a) Configuración de Nodos en IPv6
    - b) Configuración de Nodos en IPv4
    - c) Configuración del Nodo Traductor
  4. -
  5. Jool
  6. -
  7. Pruebas
    - a) Conectividad de IPv6 a IPv4
    - b) Conectividad de IPv4 a IPv6
    - c) Conectividad a un Web Server en IPv4
    - d) Conectividad a un Web Server en IPv6
  8. -
  9. Deteniendo Jool
  10. -
  11. Lecturas adicionales
  12. -
- -

Introducción

- -

Este documento explica cómo ejecutar Jool en modo EAM. Si no tienes nociones de este tipo de traducción ingresa a SIIT-EAM .

- -

Más que un “modo†es simplemente proveer a SIIT con registros en la tabla de Direcciones de Mapeo Explícito. Obtenen más detalles sobre ésta.

- -

Similar al SIIT Tradicional, solo necesitas una instalación exitosa de ambos: del Servidor Jool y del Configurador para SIIT.

- -

Red de ejemplo

- -

Figura 1 - Red de ejemplo

- -

Aquí también, son válidas y aplican las observaciones mencionadas de la sección Red de Ejemplo para SIIT. Resumiéndolas, tenemos que:

- -
    -
  • Al menos necesitarás tres nodos: A, V y T.
  • -
  • Usa el bloque de direcciones 198.51.100.8/29 para referenciar a tus nodos de IPv6 sobre IPv4.
  • -
  • Jool requiere Linux, los otros Nodos no necesariamente.
  • -
  • Para este tutorial, consideraremos que: a)todos están en Linux, b)la configuración de red se hará manualmente, c) todo el tráfico será redirigido por defecto hacia T.
  • -
- -

Configuración de Nodos en IPv6

- -

Para los nodos de A a E, ejecuta la siguiente secuencia de comandos con permisos de administrador:

- -
user@A:~# service network-manager stop
-user@A:~# /sbin/ip link set eth0 up
-user@A:~# # Replace "::8" dependiendo en que nodo estés.
-user@A:~# /sbin/ip addr add 2001:db8:6::8/96 dev eth0
-user@A:~# /sbin/ip route add default via 2001:db8:6::1
- -

Configuración de Nodos en IPv4

- -

Para los nodos de V a Z, ejecuta la siguiente secuencia de comandos con permisos de administrador:

- -
user@V:~# service network-manager stop
-user@V:~# /sbin/ip link set eth0 up
-user@V:~# # Replace ".16" dependiendo en que nodo estés.
-user@V:~# /sbin/ip addr add 192.0.2.16/24 dev eth0
-user@V:~# /sbin/ip route add default via 192.0.2.1
- -

Configuración del Nodo Traductor

- -

Para el Nodo T, ejecuta la siguiente secuencia de comandos con permisos de administrador:

- -
user@T:~# service network-manager stop
-user@T:~# 
-user@T:~# /sbin/ip link set eth0 up
-user@T:~# /sbin/ip addr add 2001:db8:6::1/96 dev eth0
-user@T:~# 
-user@T:~# /sbin/ip link set eth1 up
-user@T:~# /sbin/ip addr add 192.0.2.1/24 dev eth1
-user@T:~# 
-user@T:~# ethtool --offload eth0 tso off
-user@T:~# ethtool --offload eth0 ufo off
-user@T:~# ethtool --offload eth0 gso off
-user@T:~# ethtool --offload eth0 gro off
-user@T:~# ethtool --offload eth0 lro off
-user@T:~# ethtool --offload eth1 tso off
-user@T:~# ethtool --offload eth1 ufo off
-user@T:~# ethtool --offload eth1 gso off
-user@T:~# ethtool --offload eth1 gro off
-user@T:~# ethtool --offload eth1 lro off
- -

Hasta aquí, no hemos convertido a T en un traductor todavía; pero, quizá quieras asegurarte de que T puede comunicarse con todos los nodos antes de continuar.

- -

Jool

- -

Recuerda, la sintaxis para insertar Jool SIIT en el kernel es:
-(Requieres permiso de administración)

- -
user@T:~# modprobe jool_siit [pool6=<IPv6 prefix>] [blacklist=<IPv4 prefixes>] [pool6791=<IPv4 prefixes>] [disabled]
-
- -

Para configurar nuestra red de ejemplo, ejecuta como administrador:

- -
user@T:~# /sbin/modprobe jool_siit disabled
-user@T:~# jool_siit --eamt --add 2001:db8:6::/120 198.51.100.0/24
-user@T:~# jool_siit --eamt --add 2001:db8:4::/120 192.0.2.0/24
-user@T:~# jool_siit --enable
- -

A diferencia de pool6, no es práctico insertar la tabla EAM completa en un solo comando, asi que instruimos a Jool para que inicie deshabilitado. Luego insertamos los registros de la tabla EAM, uno por uno, utilizando la Herramienta de Configuración. Cuando la tabla está completa, le decimos a Jool que puede empezar a traducir trafico mediante la opción de --enable.

- -

De hecho utilizar disabled y --enable no es necesario; Jool va a deducir naturalmente que no puede traducir tráfico hasta que la tabla EAM y/o pool6 sean llenados. La razón por la cual Jool fue “forzado†a permanecer deshabilitado hasta que la tabla estuviera completa fue para que no hubiera un periodo de tiempo donde el tráfico estuviera siendo traducido inconsistentemente debido a una tabla incompleta.

- -

Y de nuevo, el prefijo IPv6 y la tabla EAM no son modos de operación exclusivos. Jool siempre va a tratar de traducir una dirección utilizando EAM, y si eso falla, retrocederá a utilizar el prefijo. Si quieres esto, agrega pool6 durante el modprobe.

- -

Pruebas

- -

Conectividad de IPv6 a IPv4

- -

Haz un ping a V desde A:

- -
user@A:~$ ping6 2001:db8:4::10 # Reminder: hex 10 = dec 16.
-PING 2001:db8:4::10(2001:db8:4::10) 56 data bytes
-64 bytes from 2001:db8:4::10: icmp_seq=1 ttl=63 time=2.95 ms
-64 bytes from 2001:db8:4::10: icmp_seq=2 ttl=63 time=2.79 ms
-64 bytes from 2001:db8:4::10: icmp_seq=3 ttl=63 time=4.13 ms
-64 bytes from 2001:db8:4::10: icmp_seq=4 ttl=63 time=3.60 ms
-^C
---- 2001:db8:4::10 ping statistics ---
-4 packets transmitted, 4 received, 0% packet loss, time 3003ms
-rtt min/avg/max/mdev = 2.790/3.370/4.131/0.533 ms
- -

Conectividad de IPv4 a IPv6

- -

Haz un ping a A desde V de esta forma:

- -
user@V:~$ ping 198.51.100.8
-PING 198.51.100.8 (198.51.100.8) 56(84) bytes of data.
-64 bytes from 198.51.100.8: icmp_seq=1 ttl=63 time=5.04 ms
-64 bytes from 198.51.100.8: icmp_seq=2 ttl=63 time=2.55 ms
-64 bytes from 198.51.100.8: icmp_seq=3 ttl=63 time=1.93 ms
-64 bytes from 198.51.100.8: icmp_seq=4 ttl=63 time=2.47 ms
-^C
---- 198.51.100.8 ping statistics ---
-4 packets transmitted, 4 received, 0% packet loss, time 3004ms
-rtt min/avg/max/mdev = 1.930/3.001/5.042/1.204 ms
- -

Conectividad a un Web Server en IPv4

- -

Agrega un servidor en Y y accesalo desde D:

- -

Figura 1 - IPv4 TCP desde un nodo IPv6

- -

Conectividad a un Web Server en IPv6

- -

Agrega un servidor en B y haz una solicitud desde X:

- -

Figura 2 - IPv6 TCP desde un nodo IPv4

- -

Si algo no funciona, consulta el FAQ.

- -

Deteniendo Jool

- -

Para detener Jool, emplea de nuevo el comando modprobe usando el parámetro -r:

- -
user@T:~# modprobe -r jool_siit
- -

Lecturas adicionales

- -
    -
  1. Por favor, lee acerca de problemas con MTUs antes de seleccionar alguno.
  2. -
  3. Si te interesa Stateful NAT64, dirigete al tercer ejemplo.
  4. -
- - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/es/mod-run-stateful.html b/doc/usr/_site/es/mod-run-stateful.html deleted file mode 100644 index d72f0aff2..000000000 --- a/doc/usr/_site/es/mod-run-stateful.html +++ /dev/null @@ -1,252 +0,0 @@ - - - - - Stateful NAT64 - Ejemplo de uso - - - - - -
-
- -
- -
-
- -

Documentación > Ejemplos de uso > Stateful NAT64

- -

Stateful NAT64: Ejemplo de Uso

- -

Ãndice

- -
    -
  1. Introducción
  2. -
  3. Red de ejemplo
    - a) Configuración de Nodos en IPv6
    - b) Configuración de Nodos en IPv4
    - c) Configuración del Nodo Traductor
  4. -
  5. Jool
  6. -
  7. Pruebas
    - a) Conectividad de IPv6 a IPv4
    - b) Conectividad a un Web Server en IPv4
  8. -
  9. Deteniendo Jool
  10. -
  11. Lecturas adicionales
  12. -
- -

Introducción

- -

Este documento explica como ejecutar Jool en modo Stateful NAT64. Si no tienes nociones de este tipo de traducción ingresa a Stateful NAT64.

- -

Similar a los modos anteriores, solo necesitas una instalación exitosa de del Servidor Jool. El Configurador no se necesita en esta ejecución básica.

- -

Red de ejemplo

- -

Figura 1 - Red de ejemplo

- -

Aquí también, son válidas y aplican las observaciones mencionadas de la sección Red de Ejemplo para SIIT exceptuando dos: el del uso de direcciones en el segmento 198.51.100.8/29 y el default gateway. Resumiéndolas, tenemos que:

- -
    -
  • Al menos necesitarás tres nodos: A, V y T.
  • -
  • Jool requiere Linux, los otros Nodos no necesariamente.
  • -
  • Para este tutorial, consideraremos que: a)todos están en Linux, b)su configuración de red se hará manualmente.
  • -
- -

Configuración de Nodos en IPv6

- -

Para los nodos de A a E, ejecuta la siguiente secuencia de comandos con permisos de administrador:

- -
user@A:~# service network-manager stop
-user@A:~# /sbin/ip link set eth0 up
-user@A:~# # Replace "::8" depending on which node you're on.
-user@A:~# /sbin/ip address add 2001:db8::8/96 dev eth0
-user@A:~# /sbin/ip route add default via 2001:db8::1
- -

Configuración de Nodos en IPv4

- -

Para los nodos de V a Z, ejecuta la siguiente secuencia de comandos con permisos de administrador:

- -
user@V:~# service network-manager stop
-user@V:~# /sbin/ip link set eth0 up
-user@V:~# # Replace ".16" depending on which node you're on.
-user@V:~# /sbin/ip address add 203.0.113.16/24 dev eth0
- -

Estos nodos no necesitan una ruta por defecto. Esto es consecuencia de que se encuentran en la misma red junto con el NAT64. Como la dirección 203.0.113.2 estará enmascarando los nodos IPv6, asi que desde V hasta Z piensan que están hablando directamente con T.

- -

Configuración del Nodo Traductor

- -

Para el Nodo T, ejecuta la siguiente secuencia de comandos con permisos de administrador:

- -
user@T:~# service network-manager stop
-user@T:~# 
-user@T:~# /sbin/ip link set eth0 up
-user@T:~# /sbin/ip address add 2001:db8::1/96 dev eth0
-user@T:~# 
-user@T:~# /sbin/ip link set eth1 up
-user@T:~# /sbin/ip address add 203.0.113.1/24 dev eth1
-user@T:~# /sbin/ip address add 203.0.113.2/24 dev eth1
-user@T:~# 
-user@T:~# ethtool --offload eth0 tso off
-user@T:~# ethtool --offload eth0 ufo off
-user@T:~# ethtool --offload eth0 gso off
-user@T:~# ethtool --offload eth0 gro off
-user@T:~# ethtool --offload eth0 lro off
-user@T:~# ethtool --offload eth1 tso off
-user@T:~# ethtool --offload eth1 ufo off
-user@T:~# ethtool --offload eth1 gso off
-user@T:~# ethtool --offload eth1 gro off
-user@T:~# ethtool --offload eth1 lro off
- -

En modo Stateful es especial en el sentido de que el NAT64 necesita por lo menos dos direcciones IPv4 separadas:

- -
    -
  • Una o más direcciones utilizadas para el trafico local (ej. hacia y desde T). En la configuración de arriba, esta es 203.0.113.1.
  • -
  • Una o más direcciones utilizadas para la traducción NAT64. Linux necesita estar consciente de éstas por que necesita enviarles una respuesta ARP. En nuestro ejemplo es 203.0.113.2.
  • -
- -

La necesidad de esta separación es una peculiaridad de Jool y estamos investigando como eliminarla.

- -

Las direcciones de traducción requieren menos prioridad que las del tráfico local para que T no las use por accidente. Una manera de lograr esto, es simplemente añadiendo las direcciones NAT64 después de las direcciones de nodo.

- -

Recuerda que quizá quieras asegurarte de que T puede comunicarse con todos los nodos antes de continuar.

- -

Jool

- -

Esta es la sintaxis para insertar Jool Stateful NAT64 en el kernel:
-(Requieres permiso de administración)

- -
user@T:~# /sbin/modprobe jool \
-	[pool6=<IPv6 prefix>] \
-	[pool4=<IPv4 prefixes>] \
-	[disabled]
-
- -
    -
  • -

    pool6 es el prefijo que el mecanismo de traducción estará adjuntando y removiendo de las direcciones de los paquetes.

    -
  • -
  • -

    pool4 es el subconjunto de direcciones de los nodos que seran utilizadas para la traducción (la longitud del prefijo es /32 por defecto).

    -
  • -
  • -

    disabled inicia Jool en modo inactivo.

    -
  • -
- -

EAM y pool6791 no tienen sentido en modo stateful, y como tal no estan disponibles.

- -

Para nuestra red de ejemplo:

- -
user@T:~# /sbin/modprobe jool pool6=64:ff9b::/96 pool4=203.0.113.2
-
- -

Jool escuchará en la dirección 203.0.113.2 y para los paquetes en IPv4 agrega y remueve el prefijo 64:ff9b::/96.

- -

Pruebas

- -

Conectividad de IPv6 a IPv4

- -

Haz un ping a V desde C:

- -
user@C:~$ ping6 64:ff9b::203.0.113.16
-PING 64:ff9b::192.0.2.16(64:ff9b::c000:210) 56 data bytes
-64 bytes from 64:ff9b::cb00:7110: icmp_seq=1 ttl=63 time=1.13 ms
-64 bytes from 64:ff9b::cb00:7110: icmp_seq=2 ttl=63 time=4.48 ms
-64 bytes from 64:ff9b::cb00:7110: icmp_seq=3 ttl=63 time=15.6 ms
-64 bytes from 64:ff9b::cb00:7110: icmp_seq=4 ttl=63 time=4.89 ms
-^C
---- 64:ff9b::203.0.113.16 ping statistics ---
-4 packets transmitted, 4 received, 0% packet loss, time 3004ms
-rtt min/avg/max/mdev = 1.136/6.528/15.603/5.438 ms
- -

Conectividad a un Web Server en IPv4

- -

Agrega un servidor en Z y accesalo desde A:

- -

Figura 1 - IPv4 TCP desde un nodo IPv6

- -

Para saber cómo permitir que los Nodos IPv4 inicien comunicación consulta la sección de lecturas adicionales.

- -

Si algo no funciona, consulta el FAQ.

- -

Deteniendo Jool

- -

Para detener Jool, emplea de nuevo el comando modprobe usando el parámetro -r:

- -
user@T:~# /sbin/modprobe -r jool
- -

Lecturas adicionales

- -
    -
  1. Un nodo IPv4 externo no puede iniciar la comunicación por que el ve a la red IPv6 como una red privada IPv4 que está atrás de un NAT. Para remediar esto, Jool te permite configurar el “redireccionamiento de puertos†(port forwarding). Ingresa aqui si estás interesado.
  2. -
  3. Aprende más sobre la pool IPv4.
  4. -
  5. El documento de DNS64 te dirá como configurar un DNS64 para hacer transparente el uso de dirección-prefijo a los usuarios.
  6. -
  7. Por favor, lee acerca de problemas con MTUs antes de seleccionar alguno.
  8. -
  9. Hay otra manera de correr el Stateful NAT64. Quizá te ayude a ver las cosas desde una perspectiva más amplia.
  10. -
- - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/es/mod-run-vanilla.html b/doc/usr/_site/es/mod-run-vanilla.html deleted file mode 100644 index aa097212c..000000000 --- a/doc/usr/_site/es/mod-run-vanilla.html +++ /dev/null @@ -1,279 +0,0 @@ - - - - - SIIT - Ejemplo básico - - - - - -
-
- -
- -
-
- -

Documentación > Ejemplos de uso > SIIT

- -

SIIT: Ejemplo de Uso

- -

Ãndice

- -
    -
  1. Introducción
  2. -
  3. Red de ejemplo
    - a) Configuración de Nodos en IPv6
    - b) Configuración de Nodos en IPv4
    - c) Configuración del Nodo Traductor
  4. -
  5. Jool
  6. -
  7. Pruebas
    - a) Conectividad de IPv4 a IPv6
    - b) Conectividad de IPv6 a IPv4
    - c) Conectividad a un Web Server en IPv4
    - d) Conectividad a un Web Server en IPv6
  8. -
  9. Deteniendo Jool
  10. -
  11. Lecturas adicionales
  12. -
- -

Introducción

- -

Este documento explica cómo ejecutar Jool en modo SIIT. Si no tienes nociones de este tipo de traducción ingresa a SIIT Tradicional.

- -

En cuanto a software, solo se necesita una instalación exitosa del Servidor Jool. El configurador queda fuera del alcance de esta página.

- -

Para la implementación de las pruebas, puedes usar alternativamente máquinas virtuales u otro tipo de interfaces, dado que Jool no está ligado al uso exclusivo de interfaces físicas del tipo “ethXâ€.

- -

Red de ejemplo

- -

Figura 1 - Red de ejemplo Vanilla

- -

No es necesario que des de alta todos los nodos que se muestran en el diagrama; puedes lograrlo con solo 3 nodos: A, T y V. El resto son muy similares a A y V y son mostrados para propósitos ilustrativos.

- -

Considera que tienes un bloque de direcciones 198.51.100.8/29 para distribuirlo entre tus nodos IPv6.

- -

Jool requiere que T tenga instalado Linux. El resto de los nodos puede tener cualquier otro sistema operativo, siempre y cuando manejen TCP/IP.

- -

Sin embargo para efectos de simplicidad, los ejemplos aquí mencionados asumen que todos los nodos tienen instalado Linux y que todo esta siendo configurado estáticamente usando el bien-conocido comando ip. Y además, todo el tráfico será redirigido por defecto hacia T.

- -

Dependiendo de tu distribución de linux, la forma de cómo deshabilitar el administrador de red puede variar. Esto se requiere, para que tomes control sobre las direcciones y rutas de tus interfaces; de otra forma, los comandos ip pudieran no tener efecto.

- -

Configuración de Nodos en IPv6

- -

Para los nodos de A a E, ejecuta la siguiente secuencia de comandos con permisos de administrador:

- -
user@A:~# service network-manager stop
-user@A:~# ip link set eth0 up
-user@A:~# # Replace ".8" depending on which node you're on.
-user@A:~# ip addr add 2001:db8::198.51.100.8/120 dev eth0
-user@A:~# ip route add default via 2001:db8::198.51.100.1
- -

Configuración de Nodos en IPv4

- -

Para los nodos de V a Z, ejecuta la siguiente secuencia de comandos con permisos de administrador:

- -
user@V:~# service network-manager stop
-user@V:~# ip link set eth0 up
-user@V:~# # Replace ".16" depending on which node you're on.
-user@V:~# ip addr add 192.0.2.16/24 dev eth0
-user@V:~# ip route add default via 192.0.2.1
- -

Configuración del Nodo Traductor

- -

Para el Nodo T, ejecuta la siguiente secuencia de comandos con permisos de administrador:

- -
user@T:~# service network-manager stop
-user@T:~# 
-user@T:~# ip link set eth0 up
-user@T:~# ip addr add 2001:db8::198.51.100.1/120 dev eth0
-user@T:~# 
-user@T:~# ip link set eth1 up
-user@T:~# ip addr add 192.0.2.1/24 dev eth1
- -

Hasta aquí, no hemos convertido a T en un traductor todavía, pues el servicio está dado de baja; por lo cual, los nodos desde A hasta E no pueden interactuar todavía con los nodos V hasta Z. Pero, quizá quieras asegurarte de que T puede comunicarse con todos los nodos antes de continuar.

- -

La única precaución que debes tener en mente antes de activar Jool (o lidiar con IPv6 en general) son los “offloadsâ€. “Offloading†es una característica de los nodos terminales, y para los que no lo son esto es un problema, por lo cual es importante apagarlos en todos los ruteadores. Lee este documento si quieres conocer más detalles sobre esta problemática.

- -

Hazlo por medio de ethtool:

- -
user@T:~# ethtool --offload eth0 tso off
-user@T:~# ethtool --offload eth0 ufo off
-user@T:~# ethtool --offload eth0 gso off
-user@T:~# ethtool --offload eth0 gro off
-user@T:~# ethtool --offload eth0 lro off
-user@T:~# ethtool --offload eth1 tso off
-user@T:~# ethtool --offload eth1 ufo off
-user@T:~# ethtool --offload eth1 gso off
-user@T:~# ethtool --offload eth1 gro off
-user@T:~# ethtool --offload eth1 lro off
- -
NOTA: Si no puedes cambiar alguno de los parámetros, considera que es posible que ya este apagado.
-	     Ejecuta `sudo ethtool --show-offload [interface]` para averiguarlo.
-
- -

Jool

- -

Esta es la sintaxis para insertar Jool SIIT en el kernel:
-(Requieres permiso de administración)

- -
user@T:~# modprobe jool_siit \
-	[pool6=<IPv6 prefix>] \
-	[blacklist=<IPv4 prefixes>] \
-	[pool6791=<IPv4 prefixes>] \
-	[disabled]
-
- -

Los parámetros válidos son:

- -
    -
  • -

    pool6 (abreviación de “Pool de IPv6â€) es el prefijo que el mecanismo de traducción estará adjuntando y removiendo de las direcciones de los paquetes. Este podría ser opcional, porque quizá estas planeando usar EAM.

    -
  • -
  • -

    blacklist representa direcciones IPv4 que Jool no va a traducir usando el prefijo pool6, por lo que esto no afecta en la traducción EAM. Puedes insertar hasta cinco prefijos separados por coma durante un modprobe. Si necesitas más, utiliza la Herramienta de Configuración de Jool.

    -
  • -
  • -

    pool6791 es un pool IPv4 secundario que se utiliza cuando no hay una conexión directa entre uno o varios nodos y el traductor. Si este pool está vacío, Jool enviará la dirección propia de su nodo hacia el nodo destino. Puedes insertar hasta cinco prefijos pool6791 separados por coma durante un modprobe. Si necesitas más, utiliza la Herramienta de Configuración de Jool.

    -
  • -
  • -

    disabled inicia Jool en modo inactivo. Si estás utilizando el configurador, puedes usar esta opción para asegurarte de que has terminado de configurar antes de que tu tráfico empiece a ser traducido. -Si no está presente, Jool empieza a traducir el tráfico de inmediato.

    -
  • -
- -

Lo siguiente es sufciente para nuestra red de ejemplo.

- -
user@T:~# modprobe jool_siit pool6=2001:db8::/96
-
- -

Eso significa que: “La representación IPv6 de cualquier dirección IPv4 va a ser 2001:db8::<IPv4 address>.â€

- -

Pruebas

- -

Conectividad de IPv4 a IPv6

- -

Haz un ping a A desde V de esta forma:

- -
user@V:~$ ping 198.51.100.8
-PING 198.51.100.8 (198.51.100.8) 56(84) bytes of data.
-64 bytes from 198.51.100.8: icmp_seq=1 ttl=63 time=7.45 ms
-64 bytes from 198.51.100.8: icmp_seq=2 ttl=63 time=1.64 ms
-64 bytes from 198.51.100.8: icmp_seq=3 ttl=63 time=4.22 ms
-64 bytes from 198.51.100.8: icmp_seq=4 ttl=63 time=2.32 ms
-^C
---- 198.51.100.8 ping statistics ---
-4 packets transmitted, 4 received, 0% packet loss, time 3006ms
-rtt min/avg/max/mdev = 1.649/3.914/7.450/2.249 ms
- -

Conectividad de IPv6 a IPv4

- -

Haz un ping a V desde A:

- -
user@A:~$ ping6 2001:db8::192.0.2.16
-PING 2001:db8::192.0.2.16(2001:db8::c000:210) 56 data bytes
-64 bytes from 2001:db8::c000:210: icmp_seq=1 ttl=63 time=3.57 ms
-64 bytes from 2001:db8::c000:210: icmp_seq=2 ttl=63 time=10.5 ms
-64 bytes from 2001:db8::c000:210: icmp_seq=3 ttl=63 time=1.38 ms
-64 bytes from 2001:db8::c000:210: icmp_seq=4 ttl=63 time=2.63 ms
-^C
---- 2001:db8::192.0.2.16 ping statistics ---
-4 packets transmitted, 4 received, 0% packet loss, time 3003ms
-rtt min/avg/max/mdev = 1.384/4.529/10.522/3.546 ms
- -

Conectividad a un Web Server en IPv4

- -

Agrega un servidor en X y accesalo desde D:

- -

Figura 1 - IPv4 TCP desde un nodo IPv6

- -

Conectividad a un Web Server en IPv6

- -

Agrega un servidor en C y haz una solicitud desde W:

- -

Figure 2 - IPv6 TCP desde un nodo IPv4

- -

Si algo no funciona, consulta el FAQ.

- -

Deteniendo Jool

- -

Para detener Jool, emplea de nuevo el comando modprobe usando el parámetro -r:

- -
user@T:~# modprobe -r jool_siit
- -

Lecturas adicionales

- -

Si quieres profundizar te recomedamos leer:

- -
    -
  1. El argumento pool6791 y su uso.
  2. -
  3. Por favor, lee acerca de problemas con MTUs antes de seleccionar alguno.
  4. -
  5. Si te interesa EAM, dirigete al segundo ejemplo.
  6. -
  7. Si te interesa Stateful NAT64, dirigete al tercer ejemplo.
  8. -
  9. El documento de DNS64 te dirá como configurar un DNS64 para hacer transparente el uso de dirección-prefijo a los usuarios.
  10. -
- - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/es/mtu.html b/doc/usr/_site/es/mtu.html deleted file mode 100644 index 822b691a2..000000000 --- a/doc/usr/_site/es/mtu.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - - MTU y Fragmentación - - - - - -
-
- -
- -
-
- -

Documentación > Otros > MTU y Fragmentación

- -

MTU y Fragmentación

- -

TODO - Pendiente hacer revisión

- -

Enunciación del problema

- -

Hay una diferencia principal entre IPv4 e IPv6 la cual un traductor IP no puede compensar.

- -

La cabecera de un paquete IPv4 con tiene un “parámetro†llamado No Fragmentar o en inglés Don’t fragment(DF). Determina si la fuente le permite a los routers fragmentar el paquete.

- -

En IPv6, los paquetes nunca pueden ser fragmentados por los routers. Es como si el parámetro No Fragmentar siempre estuviera encendido.

- -

Cuando hay un traductor en el medio, un paquete IPv4 el cual puede ser fragmentado se convierte en un paquete IPv6 que no debe de ser fragmentado.

- -

Asi que, que pasa si el paquete es muy grande?

- -

(Los tamaños actuales de los paquetes son diferentes debido a cambios en los headers, pero entiendes el punto.)

- -

Fig.1 - flujo MTU fallido

- -

Esta definido por implementación. Si n4 es inteligente, tratará de decrementar la longitud del paquete. Si no, el paquete nunca llegará a n6.

- -

Implementaciones apropiadas de hecho utilizan Path MTU discovery y por lo tanto jamas desactivan el parámetro de No Fragmentar.

- -

It’s implementation defined. If n4 is smart, it will try to decrease the lenght of the packet. If it’s not, the packet will never reach n6.

- -

Proper implementations today actually use Path MTU discovery and therefore never unset the DF flag. Still, stubborn or legacy code is not unheard of.

- -

Por cierto: cuando quieras saber el MTU de un link, preguntale a Linux:

- -
$ ip link
-(...)
-2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
-    link/ether 08:00:27:bf:a6:6e brd ff:ff:ff:ff:ff:ff
-
- -

Solución

- -

Si conoces el MTU más pequeño a lo largo de todas tus redes IPv6, dile a T sobre el:

- -

Fig.2 - Proper Network

- -

T sabe que está traduciendo, asi que sabe que tiene que fragmentar aunque es una especie de router IPv6.

- -

Jool solia tener un parámetro llamado --minMTU6 para hacer esto. Ya que confiar la fragmentación al kernel es considerada una mejor práctica, ahora lo configuras en Linux desde la versión de Jool 3.3.

- -
ip link set dev eth0 mtu 1300
-
- -

Y voilà:

- -

Fig.3 - MTU flow succeeds

- -

Si no sabes el MTU mínimo de tus redes IPv6, asigna 1280. Todo nodo IPv6 debe de ser capáz de manejar por lo menos 1280 bytes por paquete de forma estandarizada.

- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/es/offloading.html b/doc/usr/_site/es/offloading.html deleted file mode 100644 index 8793cbec4..000000000 --- a/doc/usr/_site/es/offloading.html +++ /dev/null @@ -1,172 +0,0 @@ - - - - - Offloading - - - - - -
-
- -
- -
-
- -

Documentación > Otros > Offloading

- -

Offload

- -

Ãndice

- -
    -
  1. Teoría
  2. -
  3. Práctica
  4. -
- -

Teoría

- -

Offloading es una técnica orientada a optimizar el rendimiento de la red. Nació de la observación de que un solo paquete grande es significantemente más rapido de procesar que muchos pequeños, la idea es combinar muchos de ellos

- -

Offloading is a technique meant to optimize network throughput. Born from the observation that a single large packet is significantly faster to process than several small ones, the idea is to combine several of them from a common stream on reception, and then pretend, to the eyes of the rest of the system, that the new packet was the one received from the cord all along.

- -

Aquí tenemos un ejemplo visual. Así es como los paquetes son procesados normalmente (sin offloading):

- -

Fig.1 - No offload

- -

(Por el momento, asume que la capa de Internet soporta IPv4.)

- -

Hay dos streams aquí. El amarillo consiste de tres paquetes muy pequeños:

- -
    -
  1. 1st packet: bytes 0 through 9.
  2. -
  3. 2nd packet: bytes 10 to 29.
  4. -
  5. 3rd packet: bytes 30 to 39.
  6. -
- -

Y el azul contiene unos paquetes más largos:

- -
    -
  1. bytes 0 to 599
  2. -
  3. bytes 600 to 1199
  4. -
  5. bytes 1200 to 1799
  6. -
- -

Hay muchas manetas de implementar offloading. Abajo se encuentra ilustrada una versión simplificada de lo que una NIC(interfáz de red) quizá podria hacer, en lugar de lo de arriba:

- -

Fig.2 - Offload done right

- -

Simplemente poner, muchos paquetes continuos

- -

Puesto simplemente, muchos paquetes continuos son unidos en uno equivalente y mas grande. La tarjeta podria por ejemplo hacer esto uniendo fragmentos IP o incluso segmentos TCP (aunque TCP se encuentre 2 capas arriba). No importa mientras el cambio sea completamente transparente por lo menos en lo que a transferencia de datos se refiere.

- -

Y si, ahora estamos lidiando con piezas de datos más pesadas, pero a decir verdad, la mayor parte de la acitivdad de las capas de Internet y Transporte recae en los primeros bytes de cada paquete (ej. los encabezados). Asi que mayormente conseguimos procesar n paquetes por el precio de uno.

- -

Esto esta excelente, pero empiezas a tener problemas en caso de que el sistema tenga que redireccionar los datos (en lugar de comsumirlos). Digamos el hardware tiene una Unidad de Transmisión Máxima (MTU) de 1500; esto es lo que pasa:

- -

Fig.3 - Offload on a router

- -

En el paso 1 sucede la agregación, lo que hace le paso 2 muy rápido, pero como el paquete ensamblado del flujo de datos azul es muy grande para la interfaz de salida (tamaño 1800 > max 1500), el paquete se fragmenta en el paso 3, lo cual es ineficiente.

- -

Mas importante, si el emisor realizó un path MTU discovery, entonces el MTU óptimo computado se perderá en el paso 1 (por que no esta almanecado en el paquete; es indicado por su tamaño, el cual es modificado por el paso1). Por que el parámetro “Don’t Fragment†del paquete estará encendido, entonces el paquete eventualmente e irremediablemente sera desechado tan pronto llegue a un MTU menor. Por lo tanto, hemos creado un hoyo negro.

- -

(Bueno, no completamente. Un cierto numero de condiciones son requeridas por la Interfaz de red(NIC) para ejecutar el offloading. Puede que en algunas ocasiones raras y aleatorias estas condiciones no se cumplan, asi que ciertos paquetes ocasionalmente no serán agregados, y asi evitan el hoyo. Si tu protocolo de transporte reintenta suficientemente, en lugar de tener una denegación de servicio completa, tienes una red extrema - EXTREMAMENTE - lenta.)

- -

Cuando la maquina de redireccionamiento es un router IPv6 (o, en el caso de Jool, un SIIT/NAT64 traduciendo de IPv4 a 6), esto es un problema mas inmediato por que los routers IPv6 no estan pensados para fragmentar paquetes (se espera que solo desechen el paquete y devuelvan un mensaje de error ICMP). Así que tu paquete se perdera en el paso 3 incluso si el parámetro “Don’t Fragment†del paquete original no fue indicado.

- -

Si estas ejecutando Jool en una maquina virtual huesped, algo importante que debes mantener en mente es que quizá prefieras o tambien tengas que deshabilitar los offloads en el enlace de subida del Host de la maquina virtual.

- -

Y eso es todo. Offloading para nodos finales es gandioso, para los routers es un problema.

- -

Práctica

- -

Así que, si quieres ejecutar Jool, debes de desactivar el offloading. Así es como comenzamos a hacerlo (el alcance puede variar):

- -
$ sudo apt-get install ethtool
- -

Luego aplica esto a toda interfáz relevante:

- -
$ sudo ethtool --offload [your interface here] gro off
- -

“gro†es por sus siglas en inglés “Generic Receive Offloadâ€. Actualmente no sabemos con certeza por que no tenemos que desactivar lro (Large receive offload), gso (Generic segmentation offload) y quizá otros (vea man ethtool). Si no estás seguro, yo diria que debes ir a lo seguro y deshacerte de todas las variantes que veas:

- -
$ sudo ethtool --offload [your interface here] tso off
-$ sudo ethtool --offload [your interface here] ufo off
-$ sudo ethtool --offload [your interface here] gso off
-$ sudo ethtool --offload [your interface here] gro off
-$ sudo ethtool --offload [your interface here] lro off
- -

(Si puedes iluminarnos mas en cuanto a este tema, por favor notificanos - jool@nic.mx.)

- -

Algunas veces ethtool asegura que no puede cambiar algunas de las variantes, pero ten en cuenta que es usualmente por que no esta soportado y por lo tanto no estaba en un principio. Verifica tu configuración utilizando

- -
$ sudo ethtool --show-offload [your interface here]
- -

Suerte!

- - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/es/pool4.html b/doc/usr/_site/es/pool4.html deleted file mode 100644 index 40430ed64..000000000 --- a/doc/usr/_site/es/pool4.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - Pool IPv4 Stateful - - - - - -
-
- -
- -
-
- -

Documentación > Ejemplos de uso > NAT64 Stateful > Pool IPv4

- -

Pool IPv4 Stateful

- -

Fig.1 - Red del Caso 3

- -

Aquí hay un paquete teorético que podría viajar desde C hasta E:

- -
Origen: Dirección 2001:db8:2::10, puerto 1234 (aleatorio)
-Destino: Dirección 64::192.0.2.10, puerto 80 (ej. intentando llegar a un sitio web)
-
- -

Respecto al campo del puerto de origen: Es bien sabido que un puerto es un valor de dos bytes, lo que significa que se te pueden acabar. Esto no es normalmene un problema, ya que 65536 puertos por nodo es una cantidad bastante razonable.

- -

El paquete de arriba podria ser traducido por J en algo como esto:

- -
Origen: 192.0.2.2#1234
-Destino: 192.0.2.10#80
-
- -

Y Jool va a memorizar que 2001:db8:2::10#1234 tiene relación con 192.0.2.2#1234. E respondera

- -
Origen: 192.0.2.10#80
-Destino: 192.0.2.2#1234
-
- -

Y por virtud de su memoria, Jool sabrá que tiene que traducir eso en

- -
Origen: 64::192.0.2.10#80
-Destino: 2001:db8:2::10#1234
-
- -

Pero que sucede si D genera el siguiente paquete?

- -
Origen: 2001:db8:2::11#1234
-Destino: 64::192.0.2.10#80
-
- -

Jool no puede traducirlo en

- -
Source: 192.0.2.2#1234
-Destination: 192.0.2.10#80
-
- -

Por que entonces tendría dos mapeos contradictorios. Cual usara cuando la respuesta de E muestre su cara?

- -
    -
  1. 2001:db8:2::10#1234 <-> 192.0.2.2#1234
  2. -
  3. 2001:db8:2::11#1234 <-> 192.0.2.2#1234
  4. -
- -

La solucion enmascarar no solo direcciones, sino puertos también. En lugar de generar el paquete mencionado anteriormente, Jool generara esto:

- -
Origen: 192.0.2.2#6326
-Destino: 192.0.2.10#80
-
- -

Y el BIB lucirá como esto:

- -
    -
  1. 2001:db8:2::10#1234 <-> 192.0.2.2#1234
  2. -
  3. 2001:db8:2::11#1234 <-> 192.0.2.2#6326
  4. -
- -

A lo que quiero llegar es, todos los nodos IPv6 comparten la misma dirección IPv4(a diferencia de SIIT). Esto es bueno por que no necesitas una dirección IPv4 por nodo IPv6, pero al mismo tiempo necesitas estar consciente de que Jool podria quedarse sin puertos.

- -

C y D utilizaron un puerto cada uno (y resulto ser el mismo), pero Jool tuvo que utilzar 2 de todas maneras. Cada nodo IPv6 tiene 65536 puertos con los que puede trabajar, pero como todos comparten la misma dirección IPv4, como grupo, pueden utilizar hasta 65536 puertos mediante le traductor. Entre más nodos IPv6 tengas, J se quedará más rápido sin puertos.

- -

Como encuentras una solución para esto?. Le puedes dar a Jool mas direcciones. Obtendrás 64k de puertos frescos por cada dirección IPv4 que ingreses. Si el lado IPv4 es de hecho proveedor de servicios de internet, recuerda que el será quien proporcionará las direcciones.

- -

Puedes especificar hasta 5 direcciones durante la inserción del módulo:

- -
user@J:~# modprobe jool pool4="192.0.2.2, 192.0.2.3, 192.0.2.4, 192.0.2.5, 192.0.2.6"
-
- -

Si necesitas mas, las puedes agregar utilizando la aplicación de espacio de usuario:

- -
user@J:~# jool --pool4 --add 192.0.2.7
-user@J:~# jool --pool4 --add 192.0.2.8
-user@J:~# # etc.
-
- -

Puedes resumir muchas direcciones usaando el formato con prefijo. Lo siguiente ingresa direcciones desde 192.0.2.8 hasta 192.0.2.15:

- -
user@J:~# modprobe pool4=192.0.2.8/28
-or
-user@J:~# jool --pool4 --add 192.0.2.8/28
-
- -

Ten en cuenta que la implementacion de pool4 actual de Stateful Jool es lenta cuando se trata de agregar direcciones. Cada dirección tambien solicita mucha RAM (~0.5 MB son considerar los registros BIB, quizá más si la paginación no esta de tu lado).

- -

Y recuerda que Linux quizá tenga que responder solicitudes ARP para ellas:

- -
user@J:~# /sbin/ip address add 192.0.2.2/24 dev eth1
-user@J:~# /sbin/ip address add 192.0.2.3/24 dev eth1
-user@J:~# /sbin/ip address add 192.0.2.4/24 dev eth1
-user@J:~# /sbin/ip address add 192.0.2.5/24 dev eth1
-user@J:~# # etc.
-
- - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/es/rfc6791.html b/doc/usr/_site/es/rfc6791.html deleted file mode 100644 index 783940784..000000000 --- a/doc/usr/_site/es/rfc6791.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - RFC 6791 - - - - - -
-
- -
- -
-
- -

Documentación > Ejemplos de uso > SIIT > RFC 6791

- -

RFC 6791

- -

Ãndice

- -
    -
  1. Introducción
  2. -
  3. Definición del Problema
  4. -
  5. Ejemplo
  6. -
  7. Notas Adicionales
  8. -
- -

Introducción

- -

Este estandar fue propuesto en Nov 2011 y aprobado como tal un año después. Presentado por Xing Li y Congxiao Bao del Centro CERNET de la Universidad de Tsinghua y Dan Wing de Cisco.

- -

En este se establece la forma de cómo proveer de direcciones válidas en IPv4 a los HOPs de IPv6 en el caso de que alguno de ellos requiera reportar algún error de ICMP.

- -

Definición del Problema

- -

Un traductor Stateless IPv4/IPv6 podría recibir paquetes de IPv6 que contengan direcciones no-traducibles a IPv4 como dirección fuente, provenientes de los enlaces entre redes.

- -

Se entiende por no-traducibles cuando se cumple estas dos condiciones:
-a) Que no siga la norma establecida en el RFC 6052, cap2.,
-b) Ni que esté dado de alta en la table EAM, ver draft EAM, sección 3.2.

- -

Si esto sucede, entonces implica que dos condiciones ocurrieron:

- -
    -
  1. Existe al menos un ruteador entre el Nodo en IPv6 y el Traductor (Jool) antes de llegar al Nodo en IPv4.
  2. -
  3. El paquete es del tipo ICMPv4 Error Message.
  4. -
- -

En dichas excepciones, los paquetes deben pasar a través de T a la dirección destino de IPv4 para que éste pueda tomar la acción correspondiente.

- -

Ejemplo

- -

Suponga que n4 enviá un paquete a n6, pero hay un problema, el mensaje es muy grande, entonces R envíará un paquete de error ICMP a n4. Tome en consideración que T está traduciendo usando el prefijo 2001:db8::/96.

- -

Figura 1 - Red

- -

El paquete de R tendrá las siguientes direcciones:

- - - - - - - - - - - - - - -
OrigenDestino
4000::12001:db8::192.0.2.13
- -

T está en problemas por que la dirección de origen del paquete no tiene el prefijo de traducción, asi que no puede ser extraia una dirección IPv4 de el.

- -

Normalmente, no se tienen muchas direcciones IPv4, asi que no es razonable garantizarle una a cada uno de los nodos en el lado IPv6. Debido a su único propósito(casi siempre) de redireccionamiento, los routers son buenos candidatos para direcciones intraducibles. Por otro lado, los errores ICMP son importantes, y un NAT64 no deberia desecharlo simplemente por que viene de un router.

- -

Notas Adicionales

- -

Por favor considere los siguientes parrafos del RFC 6791 mientras decide el tamaño y las direcciones de su RFC 6791 pool:

- -
La dirección de origen utilizada NO DEBE causar que le paquete ICMP
-sea descartado. NO DEBE ser tomada del espacio de direcciones de
-[RFC1918] o de [RFC6598], ya que ese espacio de direcciones es probable
-a estar sujeto al filtrado unicast Reverse Path Forwarding (uRPF) [RFC3704].
-
-(...)
-
-Otra consideración para la seleccion del origen es que debe ser
-posible para los contenedores IPv4 del mensaje ICMP ser capaces de
-distinguir entre la diferentes posibles fuentes de los mensajes ICMPv6
-(por ejemplo, soportar una herramienta de diagnostico de traza de ruta
-que proporcione algo de visibilidad a nivel d red limitada a través del traductor
-IPv4/Pv6). Esta consideración implica que un traductor IPv4/IPv6
-necesita tener un pool de direcciones IPv4 para mapear la direccion de origen 
-de paquetes ICMPv6 generados desde origenes diferentes, o para incluir
-la información de la dirección de origen IPv6 para mapear la dirección de origen 
-por otros medios.  Actualmente, el TRACEROUTE y el MTR [MTR] son los únicos
-consumidores de mensajes ICMPv6 traducidos que se  translated ICMPv6 messages that care about the
-ICMPv6 source address.
-
-(...)
-
-Si un pool de direcciones publicas IPv4 está configurado en el traductor,
-Se RECOMIENDA seleccionar aleatoriamente la dirección de origen IPv4 del
-pool. La selección aleatoria reduce la probabilidad de que dos mensajes ICMP
-sucitados por la misma Traza De Ruta puedan especificar la misma dirección
-de origen y, por consiguiente, erroneamente dar la apariencia de un bucle de ruteo.
-
- -

Un Stateful NAT64 generalmente no tiene este problema por que render every IPv6 address translatable (ya que todos los nodos IPv6 comparten las direcciones IPv4 del NAT64). Para hacer claras las cosas, un modulo SIIT debe de mantener un pool de direcciónes reservadas. Al recibir un error ICMP con un origen que no se puede traducir, Jool deberia asignar un aleatorio de los que contiene en su pool.

- -

El Ejemplo de SIIT muestra como configurar el pool durante un modprobe. Tambien lo puedes editar despues mediante la Aplicación de espacio de usuario.

- - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/es/static-bindings.html b/doc/usr/_site/es/static-bindings.html deleted file mode 100644 index 1bd26d036..000000000 --- a/doc/usr/_site/es/static-bindings.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - Mapeos Estáticos - - - - - -
-
- -
- -
-
- -

Documentación > Ejemplos de uso > Stateful NAT64 > Mapeos Estáticos

- -

Mapeos Estáticos

- -

Cuando sucede una traducción de IPv6 a IPv4, queda muy poco de los headers del paquete original. Por esto, Jool tiene que recordar quien intentó hablar con quien y en que puertos, para que cuando la respuesta llegue, poder deducir a que conversación pertenece el paquete, y modifique los headers correctamente. Esto no es solo un capricho del Stateful NAT64; le Stateful NAT tradicional tambien lo hace.

- -

La base de datos en la que estan almacenados los mapeos se llama BIB (Binding Information Base) por sus siglas en inglés. Cada registro en la base de datos contiene una dirección IPv4 A y su puerto b, y una dirección IPv6 C y su puerto d. El registro básicamente dice, “Si un paquete hacia la dirección A en el puerto b llega, traducelo y redireccionalo a la dirección C en el puerto dâ€.

- -

Por que necesitas saber eso?. Una instalación básica de una Stateful NAT64 le dará a tu red IPv6 acceso a tu Internet IPv4 promedio, pero es un poco o muy molesto que los nodos IPv4 no puedan hablar con los nodos IPv6 sin que los últimos hayan iniciado las conversaciónes. De cualquier manera, NAT64 hereda de NAT la habilidad de configurar mapeos manuales entre nodos internos y externos(“Redireccionameiento de puertosâ€). Si quieres poner como ejemplo, publicar un servidor en tu red IPv6 para que losd nodos IPv4 lo vean, entonces tendras que dar de alata manualmente un registro BIB en la base de datos.

- -

Fig.1 - Diseño de la red

- -

Asi que lo que tenemos es, los nodos IPv6 pueden ver a un servidor HTTP mandando una solicitud a 1::1 en el puerto 80. lo que queremos es hacerlo visible al exterior mediante la dirección 1.2.3.4 en el puerto 5678 (Usaremos un puerto diferente simplemente por que podemos).

- -

Para crear un mapeo, tienes que solicitarle a la aplicación de espacio de usuario algo en estas lineas:

- -
$ jool --bib --add <protocols> <Ipv6 address>#<"IPv6" port> <IPv4 address>#<"IPv4" port>
-
- -

el cual en nuestro ejemplo sera traducido a:

- -
$ jool --bib --add --tcp 1::1#80 1.2.3.4#5678
-
- -
-

Si te manda un error, ejecuta dmesg para conocer la causa. Muy probablemente estas usando una dirección IPv4 que no agregaste al pool. Agrega la dirección de esta manera:

- -
$ jool --pool4 --add 1.2.3.4
-
- -

Luego intenta de nuevo la inserción del mapeo.

-
- -

Y diviertete.

- -

Fig.2 - Test

- -

Ejecuta una versión no operativa del comando --bib para mostrar tu base de datos actual:

- -
$ jool --bib
-TCP:
-[Static] 1.2.3.4#5678 - 1::1#80
-  (Fetched 1 entries.)
-UDP:
-  (empty)
-ICMP:
-  (empty)
-
- -

Si la salida muestra una tabla mas poblada, es por que Jool ha estado traduciendo trafico. Mapeos estáticos (manuales) y dinámicos(creados por Jool) pertenecen a la misma base de datos.

- -

Ten en cuenta que no hay solo una, sino tres tablas BIB diferentes. Agregamos el registro solo al BIB TCP por que utilizamos el parámetro --tcp.

- -
$ # Add an entry to the UDP BIB
-$ jool --bib --add --udp 1::1#80 1.2.3.4#5678
-$ # Add an entry to the TCP and ICMP BIBs
-$ jool --bib --add --udp --icmp 1::1#80 1.2.3.4#5678
-$ # Show the three tables.
-$ jool --bib --tcp --udp --icmp
-$ # Show the three BIBs, quick version.
-$ jool --bib
-$ # (We didn't include any protocols, so Jool assumed we wanted to show every table.)
-
- -

“Aguarda!â€, te escucho gritar. “El protocolo ICMP no usa puertos!â€. Pero utiliza identificadores ICMP, los cuales son muy similares. Sin embargo no tiene mucho sentido crear mapeos ICMP manuales, ya que los identificadores ICMP son frecuentemente impredecibles (a diferencia de los puertos de destino).

- -

Si necesitas remover el mapeo, reemplaza “add†por “remove†y especifica cualquier lado de la ecucación (Los mapeos son únicos en ambos lados):

- -
$ jool --bib --remove --tcp 1::1#80
-or
-$ jool --bib --remove --tcp 1.2.3.4#5678
-or
-$ # This won't hurt you (and will make sure you're removing exactly what you want to remove).
-$ jool --bib --remove --tcp 1::1#80 1.2.3.4#5678
- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/es/usr-flags-atomic.html b/doc/usr/_site/es/usr-flags-atomic.html deleted file mode 100644 index 9d2b430c2..000000000 --- a/doc/usr/_site/es/usr-flags-atomic.html +++ /dev/null @@ -1,294 +0,0 @@ - - - - - Fragmentos Atómicos - - - - - -
-
- -
- -
-
- -

Documentation > Herramienta de configuración de Jool > Flags > --global > Fragmentos Atómicos

- -

Fragmentos Atómicos

- -

Ãndice

- -
    -
  1. Introducción
  2. -
  3. Parámetros -
      -
    1. --allow-atomic-fragments
    2. -
    3. --setDF
    4. -
    5. --genFH
    6. -
    7. --genID
    8. -
    9. --boostMTU
    10. -
    -
  4. -
- -

Introducción

- -

Los “Fragmenos Atómicos†son por decirlo de otra manera “Fragmentos Aisladosâ€; es decir, son paquetes de IPv6 que poseen un fragment header sin que éste realmente sea un segmento de un paquete mayor. Este tráfico de fragmentos es permitido entre los saltos, hops, para el envío de información entre IPv6 e IPv4. Por lo general, estos paquetes son enviados por hosts que han recibido un mensaje de error del tipo ICMPv6 “Packet too Big†para advertir que el próximo equipo, ya sea ruteador, hub, etc., soporta un MTU inferior al mínimo en IPv6, o sea que, el Next-Hop MTU es menor a 1280 bytes. Hay que recordar, que hasta el día de hoy entre redes Ethernet en IPv6 se suele emplear su valor máximo que es de 1500 bytes, pero en IPv4 el máximo ha variado con el tiempo y depende del medio y del protocolo por el cual se esté comunicando. En IPv6, por regla, el nodo origen es quien tiene la obligación de fragmentar el paquete y no los equipos que enlazan la red, cosa que si es permitido en IPv4. Para más información sobre las cabeceras de fragmento, ver RFC. 2460, sección 4.5, 1998.

- -

Sin embargo, esta implementación es vulnerable a infiltraciones, y algún hacker puede tomar ventaja de la diferencia entre el MTU mínimo de IPv4, que es de 68 bytes, y el de IPv6, que es de 1280 bytes, para introducir fragmentos y generar problemas. Algunas referencias sobre este tema son:

- -

2010, RFC. 5927
-2012, Security Implications of Predictable Fragment Identification Values
-2013, RFC. 6946

- -

La IETF está tratando de normar el desuso de los fragmentos atómicos. Incluso en el RFC 6145, que es el documento principal de SIIT, advierte sobre dichos problemas de seguridad.

- -

DESDE la perspectiva de Jool, como no se ha oficializado su desuso, estos aún siguen siendo soportados. Pero es destacable mencionar, que hemos registrado problemas técnicos al permitir los fragmentos atómicos. El kernel de Linux es particularmente deficiente cuando se trata de cabeceras de fragmento, asi que si Jool está generando uno, Linux añade otro adicional.

- -

Figure 1 - que podría salir mal?

- -

En Jool 3.2 y en versiones anteriores se evade esto al NO delegar la fragmentación al kernel; pero, el hacelo así nos introdujo otros problemas más sutiles.

- -

Ahora en Jool 3.3, la configuración por omisión es deshabilitar los fragmentos atómicos, lo cual te recomendamos no cambies.

- -

Estamos totalmente de acuerdo con la iniciativa de su desuso, 2014 y cuando se formalize, en breve, se omitirá en Jool.

- -

Parámetros

- -

--allow-atomic-fragments

- -
    -
  • Nombre: PERMITE LOS FRAGMENTOS ATÓMICOS
  • -
  • Tipo: Booleano
  • -
  • Valor por Omisión: Apagado(0)
  • -
  • Modos: SIIT & Stateful
  • -
  • Sentido de traducción: IPv4 -> IPv6 & IPv6 -> IPv4
  • -
- -

Esta bandera sumariza la acción de las otras cuatro banderas (setDF, genFH, genID y boostMTU) con el propósito de habilitar o deshabilitar la recepción y traducción de los fragmentos aislados, llamados atómicos.

- -

Para HABILITARLO, sencillamente ejecute:

- -
$(jool) --allow-atomic-fragments verdadero
- -

Y esto es equivalente a:

- -
$(jool) --setDF verdadero      #NO FRAGMENTES
-$(jool) --genFH verdadero      #GENERA CABECERA DE FRAGMENTO
-$(jool) --genID falso
-$(jool) --boostMTU falso
- -

Según lo establece el RFC 6145, sección 6 este sería el comportamiento mandatorio, pero está siendo verificado por la IETF, ver Draft Deprecate Atomfrag Generation](https://tools.ietf.org/html/draft-ietf-6man-deprecate-atomfrag-generation-00).

- -

Para DESHABILITARLO, sencillamente ejecute:

- -
$(jool) --allow-atomic-fragments falso
- -

Y esto es equivalente a:

- -
$(jool) --setDF falso    #FRAGMENTABLE
-$(jool) --genFH falso    #NO INCLUYAS CABECERA DE FRAGMENTO
-$(jool) --genID verdadero
-$(jool) --boostMTU verdadero
- -

Reafirmando: Jool 3.3 opera de esta última forma; es decir, NO deja pasar los fragmentos atómicos.

- -

NOTAS:
-(1) La separación de los cuatro parámetros existe por razones históricas en la implementación, mas en el avance del proyecto se ha visto que no tiene sentido manejarlos individualmente y que los otras posibilidades conviene que sean descartadas.
-(2) La relación entre --setDF y --boostMTU es delicada. Consulta abajo para más detalles.

- -

--setDF

- -
    -
  • Nombre: NO FRAGMENTES
  • -
  • Tipo: Booleano
  • -
  • Valor por Omisión: Apagado(0)
  • -
  • Modos: SIIT & Stateful
  • -
  • Sentido de traducción: IPv6 -> IPv4
  • -
- -

Mediante esta bandera se puede establecer si el mensaje es candidato a ser fragmentado o no, en su tránsito de IPv6 a IPv4.

- -

La lógica descrita en forma de pseudocódigo es:

- -
SI (el paquete entrante tiene una cabecera de fragmento):      #SI PAQ. ENTRANTE en IPv6 TIENE CABECERA DE FRAGMENTO?
-	El parámetro DF del paquete saliente en será Falso.           #AVISA PAQ. SALIENTE en IPv4 es un FRAGMENTO
-De otra forma:                                                 #SI PAQ. ENTRANTE en IPv6 NO TIENE CABECERA DE FRAGMENTO?
-	SI (--setDF == 1):                                            #SI LA BANDERA "NO FRAGMENTES" ESTÃ ENCENDIDA?
-        El parámetro DF del paquete saliente será Verdadero.         #AVISA PAQ. SALIENTE en IPv4 NO está FRAGMENTADO <> Va Entero
-	De otra forma:                                                #SI LA BANDERA "NO FRAGMENTES" ESTÃ APAGADA? (Es Fragmentable)
-        SI (la longitud del paquete saliente es > 1260):             #SI PAQ. SALIENTE en IPv4 > 1260? (Rebasa el Mínimo MTU en IPv6)          
-			El parámetro DF del paquete saliente será Verdadero.        #AVISA PAQ. SALIENTE en IPv4 NO está FRAGMENTADO <> Es Fragmentable pero NO va Fragmentado
-		De otra forma:                                               #SI PAQ. SALIENTE en IPv4 <= 1260? <> Menor al Mínimo MTU en IPv6
-			El parámetro DF del paquete saliente será Falso.            #AVISA PAQ. SALIENTE en IPv4 es un FRAGMENTO <> Primer Fragmento
-
- -

NOTAS:
-(1) El valor mínimo de MTU en IPv6 es igual a 1280 bytes, si a este valor le quitamos el tamaño del encabezado en IPv6, que es 40, y le sumamos el de IPv4, que es 20, nos da 1260 bytes.
-(2) Para una mejor comprensión, ver --boostMTU y revisar la Sección 6 del RFC 6145.

- -

--genFH

- -
    -
  • Nombre: GENERA CABECERA DE FRAGMENTO IPV6
  • -
  • Tipo: Booleano
  • -
  • Valor por Omisión: Apagado (0)
  • -
  • Modos: SIIT & Stateful
  • -
  • Sentido de traducción: IPv4 -> IPv6
  • -
- -

En IPv4 no hay diferencia a nivel de encabezados entre un paquete fregmentado y otro que no lo es. Esto se establece mediante el campo de Identification y el valor del Fragment Offset. Los segmentos de un mismo paquete son identificados con un mismo número y en el Fragment Offset se guarda a partir de que número de dato se está trasmitiendo. Pero, en IPv6 si existe diferencia entre el primer segmento y el resto. En IPv6, sólo el 1er paq. incluye la cabecera a nivel 3 (ICMP, UDP, TCP) y en el resto se omite; es decir, ya no se repite como en IPv4.

- -

A través de esta bandera se puede prever que en la transición de IPv4 a IPv6 se incluya o no una cabecera de fragmento.

- -

La validación descrita en forma de pseudocódigo es:

- -
Si (--genFH == 1 && el paquete entrante tiene ** DF inactivo**):   #SI GENERA CABECERA en IPv6 && PAQ. ENTRANTE FRAGMENTABLE?
-	Jool generará una cabecera de fragmento IPv6.                     #AGREGA en PAQ. SALIENTE de IPv6 CABECERA DE FRAGMENTO <> 2o Fragmento en delante
-Si (--genFH == 0):                                                 #SI NO GENERA CABECERA en IPv6?
-	Si (paquete entrante es un fragmento):                            #SI PAQ. ENTRANTE en IPv4 es un FRAGMENTO?
-		Jool generará una cabecera de fragmento IPv6.                    #AGREGA en PAQ. SALIENTE de IPv6 CABECERA DE FRAGMENTO <> 1er Fragmento
-	De otra forma:                                                    #SI PAQ. ENTRANTE en IPv4 NO es un FRAGMENTO
-		Jool NO generará una cabecera de fragmento IPv6.                 #PAQ. SALIENTE de IPv6 NO tiene CABECERA DE FRAGMENTO <> Paq. Completo
-
- -

NOTAS:
-(1)Cuando --genFH está apagado no importa si el parámetro DF del paquete entrante nos dice que el paquete “no está fragmentado†o si “es fragmentableâ€.
-(2)Este es el parámetro que causa que Linux se comporte erróneamente cuando necesita fragmentar. No funciona bien, así que actívalo bajo tu propio riesgo.

- -

--genID

- -
    -
  • Nombre: GENERA IDENTIFICACIÓN IPV4
  • -
  • Tipo: Booleano
  • -
  • Valor por Omisión: Encendido (1)
  • -
  • Modos: SIIT & Stateful
  • -
  • Sentido de traducción: IPv6 -> IPv4
  • -
- -

Los paquetes IPv6 solo disponen de un campo de identificación si son un fragmento; es decir, si tienen una cabecera de fragmento. Sin embargo, todos los paquetes de IPv4 deben de llevar un campo de identificación. Esta bandera sirve para especificarle a Jool qué hacer cuando vaya a traducir un fragmento de IPv6 a IPv4.

- -

La lógica descrita en forma de pseudocódigo es:

- -
SI (el paquete entrante tiene una cabecera de fragmento):      #SI PAQ. ENTRANTE en IPv6 TIENE CABECERA DE FRAGMENTO?
-	Copia los bits de orden más bajo del campo de                 #TRANSFIERE EL NO. IDENTIFICADOR de IPV6 a IPV4 
-	identificación de la cabecera de fragmento en 
-	IPv6 al de IPv4
-De otra forma:                                                 #SI PAQ. ENTRANTE en IPv6 NO TIENE CABECERA DE FRAGMENTO?
-	SI (--genID == 0):                                            #SI LA BANDERA "GENERA IDENTIFICACIÓN IPV4" ESTà APAGADA?
-        Selecciona el el campo de identificación                     #NO. IDENTIFICADOR de IPV4 = 0
-		de la cabecera de fragmento de IPv4 = 0
-	De otra forma:                                                #SI LA BANDERA "GENERA IDENTIFICACIÓN IPV4" ESTà ENCENDIDA?
-        Selecciona el el campo de identificación                     #NO. IDENTIFICADOR de IPV4 = Número Aleatorio <> 1er Fragmento
-		de la cabecera de fragmento de IPv4 = 
-		Número Aleatorio
-
- -

--boostMTU

- -
    -
  • Nombre: PROMUEVE MTU IPv6
  • -
  • Tipo: Booleano
  • -
  • Valor por Omisión: Encendido (1)
  • -
  • Modes: SIIT && Stateful
  • -
  • Dirección de traducción: IPv4 -> IPv6 (aplica en: msg. de error de ICMP)
  • -
- -

Como se mencionó en la introducción, decíamos que cuando un paquete es muy grande para el MTU de un enlace, los routers en IPv4 generan mensajes ICMP de error -Fragmentation Needed- en IPv4 que pudieran ser traducidos como -Packet too Big- en IPv6.

- -

Estos errores ICMP se supone deben contener el MTU infractor para que el emisor pueda reajustar el tamaño de sus paquetes. Dado que el MTU mínimo para IPv4 es 68 bytes y el de IPv6 es 1280, Jool puede encontrarse queriendo reportar un MTU illegal en IPv6 al traducir un Fragmentation Needed (v4) en un Packet too Big (v6). Con --boostMTU se trata de evitar este tipo de falla.

- -

Jool requiere hacer un pequeño ajuste al comparar los MTUs, por la diferencia entre la longitud básica del header IPv4(20 bytes) y la del header IPv6(40 bytes). Un paquete en IPv6 puede ser 20 bytes más grande que el MTU de IPv4 por que va a perder 20 bytes cuando su cabecera IPv6 sea reemplazada por una de IPv4.

- -

La validación descrita en forma de pseudocódigo es:

- -
IPv6_error.MTU = IPv4_error.MTU + 20
-SI (--boostMTU == 1 && IPv6_error.MTU < 1280):   		#SI LA BANDERA "PROMUEVE MTU" ESTÃ ENCENDIDA && LONGITUD DEL PAQ. ENTRANTE ES MENOR A LA LONG. MÃNIMA PERMITIDA EN IPV6?
-	MTU de IPv6 = 1280                                     #ASIGNA A MTU de IPV6 SU VALOR MÃNIMO
-
- -

En cualquier otro caso, con --boostMTU deshabilitado y/o IPv6_error.MTU >= 1280 , Jool no alterará este campo.

- -

Para mayor información vea la sección 6 del RFC 6145. Alli se describen los fundamentos básicos.

- -

AVISO:

- -

Si --setDF && --boostMTU están ambos en ENCENDIDO (1) y hay un enlace IPv4 con MTU < 1260, se llega a establecer un bucle infinito similar al MTU hassle:

- -
    -
  1. El emisor IPv6 transmite un paquete de tamaño 1280.
  2. -
  3. Jool lo traduce en un paquete IPv4 de tamaño 1260 con DF=1
  4. -
  5. Un router IPv4 con interfaz de salida con MTU < 1260 genera ICMPv6 Frag Needed con MTU=1006 (o algún otro).
  6. -
  7. Jool lo traduce a ICMPv6 Packet Too Big con MTU=1280.
  8. -
  9. Ve al punto 1.
  10. -
- -

Extendemos un agradecimiento a Tore Anderson por darse cuenta de ello y reportar esta peculiaridad.

- - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/es/usr-flags-bib.html b/doc/usr/_site/es/usr-flags-bib.html deleted file mode 100644 index 2c9d34a5b..000000000 --- a/doc/usr/_site/es/usr-flags-bib.html +++ /dev/null @@ -1,224 +0,0 @@ - - - - - --bib - - - - - -
-
- -
- -
-
- -

Documentación > Herramienta de configuración de Jool > Parámetros > --bib

- -

--bib

- -

Ãndice

- -
    -
  1. Descripción
  2. -
  3. Sintaxis
  4. -
  5. Opciones -
      -
    1. Operaciones
    2. -
    3. <protocols>
    4. -
    5. --numeric
    6. -
    7. --csv
    8. -
    9. <bib4>, <bib6>
    10. -
    -
  6. -
  7. Ejemplos
  8. -
- -

Descripción

- -

Interactua con el Binding Information Base (BIB) de Jool. Si no sabes que es, por favor sigue el enlace antes de continuar.

- -

Sintaxis

- -
jool --bib <protocols> [--display] [--numeric] [--csv]
-jool --bib <protocols> --count
-jool --bib <protocols> --add <bib4> <bib6>
-jool --bib <protocols> --remove (<bib4> | <bib6> | <bib4> <bib6>)
-
- -

Opciones

- -

Operaciones

- -
    -
  • --display: Lista las tablas BIB. Operación por omisión.
  • -
  • --count: Lista el número de registros BIB.
  • -
  • --add: Combina <bib6> y <bib4> en un registro BIB, y lo añade a las tablas de Jool.
  • -
  • --remove: Borra el registro descrito por <bib6> and/or <bib4> de las tablas BIB.
  • -
- -

<protocols>

- -
<protocols> := [--tcp] [--udp] [--icmp]
-
- -

El comando aplica sobre la(s) tabla(s) específica(s). Si no se indica, entonces afecta a los tres protocolos.

- -

--numeric

- -

La aplicación intentará resolver el nombre del nodo IPv6 de cada registro BIB. Si tus nameservers no están respondiendo, esto retardará la salida.

- -

Utiliza --numeric para desactivar este comportamiento.

- -

--csv

- -

La aplicación muestra la información en un formato amigable para la consola.

- -

Utiliza --csv para imprimir en formato CSV para abrirse como hoja de cálculo.

- -

<bib4>, <bib6>

- -
<bib4> := <dirección IPv4>#(<puerto> | <identificador ICMP>)
-<bib6> := <dirección IPv6>#(<puerto> | <identificador ICMP>)
-
- -

Un registro BIB está compuesto de una dirección de transporte IPv6 (los identificadores de conexión de los nodos IPv6) y una dirección de transporte IPv4 (los identificadores de conexión que Jool está utilizando para enmascarar los de IPv6).

- -

Si estas agregando o removiendo un BIB, puedes proveer ambas direcciones mediante estos parámetros.

- -

Toma en cuenta que el componente <bib4> debe ser un miembro del pool IPv4 de Jool, así que asegurate de que lo has registrado ahí primero.

- -

Dentro de una tabla BIB, toda dirección de transporte IPv4 es única. Dentro de una tabla BIB, toda dirección IPv6 también es única. Por lo tanto, si estas removiendo un registro BIB, sólo necesitas proveer uno de ellos. Aun puedes ingresar ambos para asegurarte de que estas eliminando exactamente lo que deseas.

- -

Ejemplos

- -

Premisas:

- -
    -
  • 4.4.4.4 pertenece al pool IPv4.
  • -
  • El nombre de 6::6 es “potato.mxâ€.
  • -
  • 6::6 ya le habló a un nodo IPv4 recientemente, así que la base de datos no está vacía.
  • -
- -

Despliega la base de datos entera:

- -
<br />
-$ jool --bib --display<br />
-TCP:
-[Dynamic] 4.4.4.4#1234 - potato.mx#1234
-  (Fetched 1 entries.)
-UDP:
-  (empty)
-ICMP:
-  (empty)
- -

Habilita la recepción en un par de servicios TCP:

- -
# jool --bib --add --tcp 6::6#6 4.4.4.4#4
-# jool --bib --add --tcp 6::6#66 4.4.4.4#44
- -

Lista la tabla TCP:

- -
$ jool --bib --display --tcp
-TCP:
-[Static] 4.4.4.4#4 - potato.mx#6
-[Static] 4.4.4.4#44 - potato.mx#66
-[Dynamic] 4.4.4.4#1234 - potato.mx#1234
-  (Fetched 3 entries.)
- -

Igual, pero no llama al DNS:

- -
$ jool --bib --display --tcp --numeric
-TCP:
-[Static] 4.4.4.4#4 - 6::6#6
-[Static] 4.4.4.4#44 - 6::6#66
-[Dynamic] 4.4.4.4#1234 - 6::6#1234
-  (Fetched 3 entries.)
- -

Publica un servicio UDP:

- -
# jool --bib --add --udp 6::6#6666 4.4.4.4#4444
- -

Guarda la base de datos en un archivo CSV:

- -
$ jool --bib --display --numeric --csv > bib.csv
- -

bib.csv

- -

Muestra cuantos registros hay en las tablas TCP e ICMP:

- -
$ jool --bib --count --tcp --icmp
-TCP: 3
-ICMP: 0
- -

Cancela el registro del servicio UDP:

- -
# jool --bib --remove --udp 6::6#6666
- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/es/usr-flags-blacklist.html b/doc/usr/_site/es/usr-flags-blacklist.html deleted file mode 100644 index a5ef5c8f6..000000000 --- a/doc/usr/_site/es/usr-flags-blacklist.html +++ /dev/null @@ -1,160 +0,0 @@ - - - - - --blacklist - - - - - -
-
- -
- -
-
- -

Documentación > Aplicación de espacio de usuario > Parámetros > --blacklist

- -

--blacklist

- -

Ãndice

- -
    -
  1. Descripción
  2. -
  3. Sintaxis
  4. -
  5. Opciones
  6. -
  7. Ejemplos
  8. -
- -

Descripción

- -

Interactua con el pool de direcciones que se encuentran en la lista negra de Jool.

- -

El pool dicta que direcciones pueden ser traducidas utilizando el prefijo pool6. Toma en cuenta que EAM tiene mas prioridad que el prefijo, asi que no tienes que agregar un registro a este pool para cada registro EAM que necesitas.

- -

Hay algunas direcciones que Jool se reusará a traducir, independientemente de blacklist. Estas incluyen

- -
    -
  • Las direcciones que pertenecen al nodo de Jool (por que Jool solo puede utilizarse en modo de redirecionamiento, actualmente).
  • -
  • Direcciones de Software (0.0.0.0/8).
  • -
  • Direcciones de Host (127.0.0.0/8).
  • -
  • Direcciones de enlace local (169.254.0.0/16).
  • -
  • Broadcast limitado (255.255.255.255/32).
  • -
- -

Sintaxis

- -
jool_siit --blacklist [--display]
-jool_siit --blacklist --count
-jool_siit --blacklist --add <IPv4 prefix>
-jool_siit --blacklist --remove <IPv4 prefix>
-jool_siit --blacklist --flush
-
- -

Opciones

- -
    -
  • --display: Los prefijos de las direcciones del Pool son impresos en la salida estandar. Esta es la operación por default.
  • -
  • --count: El número de direcciones (no prefijos) en el pool es impreso en la salida estandar.
    -Por ejemplo, si todo lo que tienes es un prefijo /30, espera “4†como.
  • -
  • --add: Carga <IPv4 prefix> al pool.
  • -
  • --remove: Borra la dirección <IPv4 prefix> de las tablas.
  • -
  • --flush: Remueve todas las direcciones/prefijos del pool.
  • -
- -

Ejemplos

- -

Despliega las direcciones actuales:

- -
$ jool_siit --blacklist --display
-192.0.2.0/28
-198.51.100.0/30
-203.0.113.8/32
-  (Fetched 3 prefixes.)
-
- -

Despliega solo el conteo de direcciones:

- -
$ jool_siit --blacklist --count
-21
-
- -

(That’s /28 + /30 + /32 = 16 + 4 + 1)

- -

Remueve un par de entradas:

- -
# jool_siit --blacklist --remove 192.0.2.0/28
-# jool_siit --blacklist --remove 198.51.100.0/30
-
- -

Devuelve una entrada:

- -
# jool_siit --blacklist --add 192.0.2.0/28
-
- - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/es/usr-flags-eamt.html b/doc/usr/_site/es/usr-flags-eamt.html deleted file mode 100644 index a8fdcea85..000000000 --- a/doc/usr/_site/es/usr-flags-eamt.html +++ /dev/null @@ -1,183 +0,0 @@ - - - - - --eamt - - - - - -
-
- -
- -
-
- -

Documentation > Aplicación de espacio de usuario > Parámetros > --eamt

- -

--eamt

- -

Ãndice

- -
    -
  1. Descripción
  2. -
  3. Sintaxis
  4. -
  5. Options -
      -
    1. Operaciones
    2. -
    3. --csv
    4. -
    5. <prefix4>, <prefix6>
    6. -
    -
  6. -
  7. Ejemplos
  8. -
- -

Descripción

- -

Interactua con la Tabla de mapeo de direcciones explícitas de Jool (EAMT) por sus siglas en inglés. Ve la introducción para una que tengas visión general rápida, nuestro resumen de drafts para mas detalles, o el draft EAM para la historia completa.

- -

Sintaxis

- -
jool_siit --eamt [--display] [--csv]
-jool_siit --eamt --count
-jool_siit --eamt --add <prefix4> <prefix6>
-jool_siit --eamt --remove (<prefix4> | <prefix6> | <prefix4> <prefix6>)
-jool_siit --eamt --flush
-
- -

Opciones

- -

Operaciones

- -
    -
  • --display: La tabla EAMT es impresa en la salida estandar. Esta es la operación por default.
  • -
  • --count: El número de registros en la tabla EAMT es impreso a la salida estandar.
  • -
  • --add: Combina <prefix4> y <prefix6> en un registro EAM, y lo carga a la tabla de Jool.
  • -
  • --remove: Borra de la tabla el registro EAM descrito por <prefix4> y/o <prefix6>.
  • -
  • --flush: Remueve todos los registros de la tabla.
  • -
- -

--csv

- -

Por default, la aplicación va a imprimir las tablas en un formato relativamente amigable para la consola.

- -

Utiliza --csv para imprimir en formato CSV el cual es amigable con una hoja de cálculo.

- -

<prefix4>, <prefix6>

- -
<prefix4> := <IPv4 address>[/<prefix length>]
-<prefix6> := <IPv6 address>[/<prefix length>]
-
- -

Estos son los prefijos de los cuales esta hecho cada registro, Ve la explicación general EAMT

- -

<prefix length> es por default /32 en <prefix4> y /128 en <prefix6>. Jool pone en cero cualquier sufijo de cualquiera de las direcciones si existe.

- -

Todo prefijo es único a lo largo de la tabla. Por lo tanto, si estas removiendo un registro EAMT, solo necesitas proveer uno de ellos. Aun asi puedes ingresar ambos para asegurarte de que estas eliminando exactamente lo que quieres.

- -

Ejemplos

- -

Agrega un puñado de mapeos:

- -
# jool_siit --eamt --add 192.0.2.1      2001:db8:aaaa::
-# jool_siit --eamt --add 192.0.2.2/32   2001:db8:bbbb::b/128
-# jool_siit --eamt --add 192.0.2.16/28  2001:db8:cccc::/124
-# jool_siit --eamt --add 192.0.2.128/26 2001:db8:dddd::/64
-# jool_siit --eamt --add 192.0.2.192/31 64:ff9b::/127
- -

Despliega la nueva tabla:

- -
$ jool_siit --eamt --display
-64:ff9b::/127 - 192.0.2.192/31
-2001:db8:dddd::/64 - 192.0.2.128/26
-2001:db8:cccc::/124 - 192.0.2.16/28
-2001:db8:bbbb::b/128 - 192.0.2.2/32
-2001:db8:aaaa::/128 - 192.0.2.1/32
-  (Fetched 5 entries.)
- -

Ingresa la base de datos en un archivo csv:

- -
$ jool_siit --eamt --display --csv > eamt.csv
- -

eamt.csv

- -

Despliega el numero de registros en la tabla:

- -
$ jool_siit --eamt --count
-5
- -

Remueve el primer registro:

- -
# jool_siit --eamt --remove 2001:db8:aaaa::
- -

Vacia la tabla:

- -
# jool_siit --eamt --flush
- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/es/usr-flags-global.html b/doc/usr/_site/es/usr-flags-global.html deleted file mode 100644 index 0874c95ab..000000000 --- a/doc/usr/_site/es/usr-flags-global.html +++ /dev/null @@ -1,666 +0,0 @@ - - - - - --global - - - - - -
-
- -
- -
-
- -

Documentación > Herramienta de Configuración de Jool > Parámetros > --global

- -

--global

- -

TODO pendiente hacer revisión

- -

Ãndice

- -
    -
  1. Descripción
  2. -
  3. Sintaxis
  4. -
  5. Ejemplos
  6. -
  7. Llaves -
      -
    1. - - - - - - - -
      [--enable--disable](#enable—disable)
      -
    2. -
    3. --address-dependent-filtering
    4. -
    5. --drop-icmpv6-info
    6. -
    7. --drop-externally-initiated-tcp
    8. -
    9. --udp-timeout
    10. -
    11. --tcp-est-timeout
    12. -
    13. --tcp-trans-timeout
    14. -
    15. --icmp-timeout
    16. -
    17. --fragment-arrival-timeout
    18. -
    19. --maximum-simultaneous-opens
    20. -
    21. --source-icmpv6-errors-better
    22. -
    23. --logging-bib
    24. -
    25. --logging-session
    26. -
    27. --zeroize-traffic-class
    28. -
    29. --override-tos
    30. -
    31. --tos
    32. -
    33. --allow-atomic-fragments -
        -
      1. --setDF
      2. -
      3. --genFH
      4. -
      5. --genID
      6. -
      7. --boostMTU
      8. -
      -
    34. -
    35. --amend-udp-checksum-zero
    36. -
    37. --randomize-rfc6791-addresses
    38. -
    39. --mtu-plateaus
    40. -
    -
  8. -
- -

Descripción

- -

Bajo esta opción se agrupan todas las variables configurables de Jool exceptuando las tablas (Pool4, Pool6, Pool6791, BIB, Session, EAMT y blacklist), porque cada una de éstas son seleccionables directamente.

- -

--global es el modo por omisión de Jool. Asi que de hecho, no requieres ingresar ese parámetro.

- -

Sintaxis

- -
jool_siit [--global]
-jool_siit [--global] <llave> <valor>
-jool [--global]
-jool [--global] <llave> <valor>
-
- -

Ejemplos

- -
    -
  • -

    Para Desplegar la Configuración Actual:

    - -

    $ jool_siit –global

    -
  • -
- -

O simplemente:

- -
$ jool_siit
-
- -
    -
  • -

    Para PAUSAR Jool:

    - -

    $ jool –global –disable

    -
  • -
  • -

    Para ENCENDER Filtra Dependiendo del Direccionamiento:

    - -

    $ # Valores válidos: {true, false, 1, 0, yes, no, on, off}
    - $ jool –address-dependent-filtering true

    -
  • -
  • -

    Para ACTUALIZAR la Lista Plateaus:

    - -

    $ jool_siit –mtu-plateaus “6000, 5000, 4000, 3000, 2000, 1000â€

    -
  • -
- -

Llaves

- -

--enable|--disable

- -
    -
  • Nombre: HABILITA & DESHABILITA JOOL
  • -
  • Tipo: No Aplica
  • -
  • Modos: SIIT & Stateful
  • -
  • Valor por Omisión: ** Conforme a la bandera empleada al insertar JOOL **
  • -
- -

REANUDA Y PAUSA LA TRADUCCIÓN DE PAQUETES, RESPECTIVAMENTE.

- -

Esto puede ser muy útil si requieres cambiar más de un parámetro de configuración y no deseas que los paquetes sean traducidos inconsistentemente mientras ejecutas los comandos; pero, si prefieres que Jool no se detenga mientras estas reconfigurando, usa disable.

- -

Mientras Jool está inactivo, los timeouts no serán pausados para que las entradas ya registradas en BIB y session puedan estarse actualizando y al llegar a su término de duración los paquetes y fragmentos almacenados puedan ser desechados.

- -

--address-dependent-filtering

- -
    -
  • Nombre: FILTRA DEPENDIENDO DEL DIRECCIONAMIENTO
  • -
  • Tipo: Booleano
  • -
  • Modos: Stateful
  • -
  • Valor por Omisión: APAGADO (0)
  • -
  • Nombre anterior: --dropAddr
  • -
  • Fuente: Ver RFC 6146, sección 1.2.3
  • -
- -

EN RESUMEN:
- –address-dependent-filtering OFF significa que Jool debe ser un NAT de cono completo.
- –address-dependent-filtering ON significa que Jool debe ser un NAT de cono restringido.

- -

Referencias:
-Wiki.
-Voipex.
-Think Like A Computer.
-voipforo.

- -

BREVE EXPLICACIÓN:

- -

Partiendo que n6 está hablando con n4a mediante el NAT64:

- -

Fig.1: Legal chat

- -

El registro BIB es

- - - - - - - - - - - - - - - - -
IPv6 transport addressIPv4 transport addressProtocol
2001:db8::1#10192.0.2.1#10TCP
- -

n4b se da cuenta del servicio de n6, quizá por que n4a le dice sobre el:

- -

Fig.2: n4b finds about n6

- -

Luego n4b trata de conversar con n6 también:

- -

Fig.3: suspicious query

- -

Ya que el registro BIB existe, J sabe que n4b significa “2001:db8::1#10†cuando el dice “192.0.2.1#10â€, asi que el paquete puede ser técnicamente traducido. Sin embargo, debido a las tablas de sesión, J tambien puede decir que n6 no ha estado conversando con n4b en el pasado.

- -

Si --address-dependent-filtering está Deshabilitado, J permitirá al paquete de n4b pasar. Si --address-dependent-filtering está encendido, J desechará el paquete de n4b y responderá con un error ICMP con el mensaje “Communication Administratively Prohibitedâ€. Esto restringe efectivamente cualquier intento de comunicación iniciado desde IPv4, aún si hay registros BIB (estáticos u otros).

- -
    -
  • -

    Cuando el NAT64 es utilizado para publicar un servicio que solo es soportado bajo IPv6 a la internet IPv4, tiene sentido que --address-dependent-filtering esté deshabilitado. Esto es por que se espera que los clientes se enteren del servicio IPv6 por su cuenta, ya que el servidor normalmente no inicia la conversación, sino responde las consultas.

    -
  • -
  • -

    Cuando el NAT64 es utilizado para permitir a los nodos IPv6 navegar sobre la Internet en IPv4, tiene sentido que --address-dependent-filtering esté encendido. Dado que los Nodos Clientes de IPv6 eligen sus puertos de manera aleatoria, este mecanismo nos sirve para descartar el acceso a nodos aleatorios externos que pretendan adivinar estos puertos.

    -
  • -
- -

Si --address-dependent-filtering está Encendido, podria impedir metodos de recorrido de NAT como STUN, o por lo menos, hacer imposibles algunos modos de opreación.

- -

--drop-icmpv6-info

- -
    -
  • Tipo: Booleano
  • -
  • Modos: Stateful
  • -
  • Valor por Omisión: APAGADO (0)
  • -
  • Sentido de traducción: IPv6 -> IPv4 (sólo ICMP Informational Messages)
  • -
  • Nombre anterior: --dropInfo
  • -
  • Fuente: RFC 6146, section 3.5.3
  • -
- -

Si activas esta bandera, los mensajes del tipo echo y echo reply generados a través del comando ping serán bloqueados mientras estén siendo traducidos de ICMPv6 a ICMPv4.

- -

No se supone que debamos bloquear pings de ICMPv4 a ICMPv6, pero como se necesitan ambas, una solicitud y una respuesta, para un eco exitoso, el resultado de salida parece ser el mismo.

- -

Esta regla no afecta los mensajes de Error ICMP.

- -

--drop-externally-initiated-tcp

- -
    -
  • Tipo: Booleano
  • -
  • Modos: Stateful
  • -
  • Valor por Omisión: APAGADO (0)
  • -
  • Nombre anterior: --dropTCP
  • -
  • Fuente: RFC 6146, section 3.5.2.2
  • -
- -

Enciende --drop-externally-initiated-tcp para demoler cualquier intento de iniciar comunicación TCP con nodos IPv6 por parte de nodos IPv4.

- -

Por supuesto, esto NO bloqueará el tráfico IPv4 si algun nodo IPv6 lo solicito primero.

- -

--udp-timeout

- -
    -
  • Tipo: Entero (segundos)
  • -
  • Modos: Stateful
  • -
  • Valor por Omisión: 300seg = 5 min
  • -
  • Nombre anterior: --toUDP
  • -
  • Fuente: RFC 6146, section 3.5.1
  • -
- -

Cuando una sesión UDP ha estado inactiva por el periodo de tiempo especificado aqui, su registro será removido de la base de datos automáticamente.

- -

Cuando cambias este valor, los tiempos de vida de todas las sesiones UDP ya existentes seran actualizados.

- -

--tcp-est-timeout

- -
    -
  • Tipo: Entero (segundos)
  • -
  • Modos: Stateful
  • -
  • Valor por Omisión: 7200seg = 2 hr
  • -
  • Nombre anterior: --toTCPest
  • -
  • Fuente: RFC 6146, section 3.5.2.2
  • -
- -

Cuando una conexión TCP ha permanecido inactiva por el periodo de tiempo especificado aquí, su existencia será cuestionada. Jool enviará un paquete de sondeo a uno de los puntos y eliminará la sesión si una respuesta no es recibida antes de el --tcp-trans-timeout timeout.

- -

Cuando cambias este valor, los tiempos de vida de sesiones TCP ya establecidas son actualizados.

- -

--tcp-trans-timeout

- - - -

Cuando una sesión TCP insalubre ha estado inactiva durante el periodo de tiempo especificado aquí, su registro será removido de la base de datos automáticamnete. Una seisión “insalubre†es una en la que el handshake TCP no ha sido completado, esta siendo terminada por los puntos, o está técnicamente establecida pero ha permanecido inactica por el tiempo indicado en --tcp-est-timeout.

- -

Cuando cambias este valor, los tiempos de vida de sesiones TCP transitorias existentes son actualizados.

- -

--icmp-timeout

- -
    -
  • Tipo: Entero (segundos)
  • -
  • Modos: Stateful
  • -
  • Valor por Omisión: 60seg = 1 min
  • -
  • Nombre anterior: --toICMP
  • -
  • Fuente: RFC 6146, section 3.5.3
  • -
- -

Cuando una sesión ICMP ha estado inactiva por el periodo de tiempo especificado aquí, su registro será removida de la base de datos automáticamente.

- -

Cuando cambias este valor, los tiempos de vida de todas las sesiones ICMP son actualizados.

- -

--fragment-arrival-timeout

- -
    -
  • Tipo: Entero (segundos)
  • -
  • Modos: Stateful
  • -
  • Valor por Omisión: 2 seg
  • -
  • Nombre anterior: --toFrag
  • -
  • Fuente: Ninguns (el parámetro denota un capricho de Linux).
  • -
- -

Jool Stateful requiere un reensamble de fragmentos.

- -

En kernes 3.13 y mas recientes, --fragment-arrival-timeout no hace nada en lo absoluto.

- -

En kernels 3.12 y mas antiguos, el modulo de reensamble de fragmentos IPv6 (nf_defrag_ipv6) es un poco engañoso. Recolecta los fragmentos y en lugar de reensamblarlos, los manda a todos al resto del kernel en orden ascendente y muy rápido. Ya que Jool tiene que procesar todos los fragmentos de un solo paquete al mismo tiempo, tiene que esperar hasta que nf_defrag_ipv6 los haya entregado todos.

- -

--fragment-arrival-timeout es el tiempo que Jool esperará para que nf_defrag_ipv6 ingrese todos los fragmentos de un paquete común. No tiene nada que ver con esperar a que los fragmentosd lleguen al nodo.

- -

Como nf_defrag_ipv6 ya ha esperado a que todos los fragmentos lleguen, deberia entregarlos en nanosegundos. Debido a esto, el valor por omisión de
---fragment-arrival-timeout de 2 segunos es probablemente alto. Por otra parte, a menos de que haya un módulo desconocido desechando los paquetes en medio, todos los fragmentos deberían llegar inmediatamente, por lo tanto el temporizador nunca deberia de acabarse (incluso si estas siendo atacado).

- -

Jool SIIT no necesita reensamblado de paquetes para nada.

- -

Este comportamiento cambio desde Jool 3.2, donde --toFrag solía ser de hecho el tiempo que Jool esperaría para que los fragmentos llegaran al nodo.

- -

--maximum-simultaneous-opens

- -
    -
  • Tipo: Integer
  • -
  • Modos: Stateful
  • -
  • Valor por Omisión: 10
  • -
  • Nombre anterior: --maxStoredPkts
  • -
  • Fuente: RFC 6146, section 5.3 (indirectamente)
  • -
- -

Cuando un nodo (IPv4) externo intenta primero abrir una conexión y no hay ningun registro BIB para el, Jool normalmente contesta con un mensaje de error ICMP - Address Unreachable (type 3, code 1), ya que no puede saber a cual nodo IPv6 se está dirigiendo el paquete.

- -

En el caso de TCP, la situación es un poco más complicada por que el nodo IPv4 puede estar intentando una Apertura Simultanea de conecciones TCP. Para saber realmente que está pasando, Jool tiene que almacenar el paquete por 6 segundos.

- -

--maximum-simultaneous-opens es el numero máximo de paquetes que Jool va almacenar al mismo tiempo. El valor por omisión indica que puedes tener hasta 10 aperturas simultáneas, simultaneamente; Jool retrocederá a responder con un error ICMP en la número 11.

- -

--source-icmpv6-errors-better

- -
    -
  • Tipo: Booleano
  • -
  • Modos: Stateful
  • -
  • Valor por Omisión: Apagado(0)
  • -
  • Sentido de traducción: IPv4 -> IPv6 (sólo errores ICMP)
  • -
  • Fuente: Issue 132
  • -
- -

Por alguna razón, el RFC 6146 quiere que el origen de los errores ICMPv6 sea igual que la dirección de destino de sus paquetes internos. Esto luce muy extraño.

- -

Por ejemplo (TODO volver esto una imagen):

- -
n6 ----- j ----- R ----- n4
-
- -
    -
  • n6 es un nodo IPv6; its address is 2001:db8::1.
  • -
  • j es un Stateful NAT64. Su dirección IPv4 es 192.0.2.1.
  • -
  • Res un router IPv4. 192.0.2.6.
  • -
  • n4 es un nodo IPv4. 203.0.113.13.
  • -
- -

Digamos que el enlace entre R y n4 colapsa.

- -
    -
  • -

    n6 empaqueta en TCP n4: 2001:db8::1 -> 64:ff9b::203.0.113.13.

    -
  • -
  • -

    j traduce y redirecciona: 192.0.2.1 -> 203.0.113.13

    -
  • -
  • -

    R responde ICMPv4 error “Host unreachableâ€. The packet’s addresses are 192.0.2.6 -> 192.0.2.1. The packet contains a TCP packet whose addresses are 192.0.2.1 -> 203.0.113.13.

    -
  • -
  • -

    j traduce a un paquete IPv6 cuyas direcciones son 64:ff9b::203.0.113.13 -> 2001:db8::1. Su paquete interno lee 2001:db8::1 -> 64:ff9b::203.0.113.13.

    -
  • -
- -

Esto interrumpe rastreos de ruta. No deberia de haber sido 64:ff9b::192.0.2.6 -> 2001:db8::1?

- -
    -
  • --source-icmpv6-errors-better Desactivado hara que Jool obedezca el RFC 6146 (y que interrumpa los rastreos de ruta).
  • -
  • --source-icmpv6-errors-better Encendido traducirá la dirección de origen externa directamente, simplemente agregando el prefijo.
  • -
- -

--logging-bib

- -
    -
  • Tipo: Booleano
  • -
  • Modos: Stateful
  • -
  • Valor por Omisión: Apagado(0)
  • -
  • Sentido de traducción: IPv4 -> IPv6 & IPv6 -> IPv4
  • -
  • Fuente: RFC 6888, section 4
  • -
- -

Habilita el registro de la creación y destrucción de mapeos de direcciones. Si eres un proveedor de servicios, tu gobierno quizá te solicite que hagas esto.

- -

El análisis de estos registros puede permitirte saber cual dirección IPv4 y Puerto enmascaró a alguno de tus nodos IPv6 internos en algun momento. Aquí hay una salida de ejemplo:

- -
$ jool --logging-bib true
-$ dmesg
-[  312.493235] 2015/4/8 16:13:2 (GMT) - Mapped 2001:db8::5#19945 to 192.0.2.2#8208 (UDP)
-[  373.724229] 2015/4/8 16:14:3 (GMT) - Mapped 2001:db8::8#46516 to 192.0.2.2#12592 (TCP)
-[  468.675524] 2015/4/8 16:15:38 (GMT) - Forgot 2001:db8::5#19945 to 192.0.2.2#8208 (UDP)
-
- -

En este ejemplo,

- -
    -
  1. -

    2001:db8::5 utilizó el puerto(propio) 19945 para hablarle a alguien utilizando el protocolo UDP. Este alguien pensó que la dirección de 2001:db8::5 era 192.0.2.2, y que estaba utilizando el puerto 8208.

    -
  2. -
  3. -

    Aproximadamente un minuto despues, 2001:db8::8 (en el puerto 46516) empezó a hablarle a alguien utilizando TCP. fue en enmascarada como 192.0.2.2#12592. Esta conexión no ha terminado todavia.

    -
  4. -
  5. -

    Algunos momentos despues, Jool olvidó el mapeo (debido a inactividad, no por que el último paquete sucedió a las 16:15:38. “Cuanta inactividad†esta controlado por los timeouts - en este cao, el de UDP). En este punto, 192.0.2.2#8208 esta libre de 2001:db8::5 y Jool lo puede reasignar.

    -
  6. -
- -

Así que, si tu gobierno viene y dice “Detecté que alguien llamado 192.0.2.2#8208 hizo algo ilegal a las 4:14 pm via UDPâ€, puedes reportar que el culpable es 2001:db8::5#19945 y liberarte de la culpa.

- -

Hay muchas cosas importantes las cuales se tienen que tener en cuenta:

- -
    -
  • -

    La singularidad de cada paquete se extiende al protocolo. Si tu registro solo dice se tradujo 2001:db8::5#19945 a 192.0.2.2#8208 (UDP), no puedes asumir que 2001:db8::5#19945 es 192.0.2.2#8208 en TCP también.

    -
  • -
  • -

    Si tus nodos IPv6 comparten direcciones IPv4 entonces, los puertos importan.

    -
  • -
  • -

    No hay información de a quien le estaba hablando 2001:db8::5. Esto es bueno; significa que le estas haciendo honor a la privacidad de tu cliente tanto como puedes.

    -
  • -
  • -

    El registro utiliza GMT; quizá necesites convertir esto para efectos de comodidad.

    -
  • -
- -

Esto es falso por defecto por que genera enormes cantidades de registros mientras está activo (recuerda que necesitas infraestructura para mantenerlos). Toma en cuenta que los mapeos son vertidos en el log del kernel, asi que los mensajes serán mezclados junto con cualquier cosa que el kernel tenga que decir (incluyendo los mensajes de error de Jool, por ejemplo). Los mensajes de registro tendran prioridad INFO.

- -

Si loggear el destino tiene sentido para ti, ve --logging-session (abajo). Para cubrir con el REQ-12 del RFC 6888 quieres asingar el valor true a --loging-bib y el valor false a --logging-session.

- -

--logging-session

- -
    -
  • Tipo: Booleano
  • -
  • Modos: Stateful
  • -
  • Valor por Omisión: Apagado(0)
  • -
  • Sentido de traducción: IPv4 -> IPv6 & IPv6 -> IPv4
  • -
  • Fuente: RFC 6888, sección 4
  • -
- -

Habilita el registro de todas las sesiones mientras son creadas y destruidas.

- -

El formato es

- -
<fecha> <hora> (GMT) - <acción> sesión <nodo IPv6>|<representación IPv6 de un nodo IPv4>|<representación IPv4 de un nodo IPv6>|<nodo IPv4>|Protocolo
-
- -

Aquí hay una salida de ejemplo:

- -
$ jool --logging-session true
-$ dmesg
-[ 3238.087902] 2015/4/8 17:1:47 (GMT) - Added session 1::5#47073|64:ff9b::c000:205#80|192.0.2.2#63527|192.0.2.5#80|TCP
-[ 3238.099997] 2015/4/8 17:1:47 (GMT) - Added session 1::5#47074|64:ff9b::c000:205#80|192.0.2.2#42527|192.0.2.5#80|TCP
-[ 3241.624104] 2015/4/8 17:1:51 (GMT) - Added session 1::5#33160|64:ff9b::c000:205#8080|192.0.2.2#15496|192.0.2.5#8080|TCP
-[ 3241.630905] 2015/4/8 17:1:51 (GMT) - Added session 1::5#33161|64:ff9b::c000:205#8080|192.0.2.2#7060|192.0.2.5#8080|TCP
-[ 3478.498559] 2015/4/8 17:5:48 (GMT) - Forgot session 1::5#47073|64:ff9b::c000:205#80|192.0.2.2#63527|192.0.2.5#80|TCP
-[ 3478.499758] 2015/4/8 17:5:48 (GMT) - Forgot session 1::5#47074|64:ff9b::c000:205#80|192.0.2.2#42527|192.0.2.5#80|TCP
-[ 3481.632214] 2015/4/8 17:5:51 (GMT) - Forgot session 1::5#33160|64:ff9b::c000:205#8080|192.0.2.2#15496|192.0.2.5#8080|TCP
-[ 3481.632342] 2015/4/8 17:5:51 (GMT) - Forgot session 1::5#33161|64:ff9b::c000:205#8080|192.0.2.2#7060|192.0.2.5#8080|TCP
-
- -

Este registro es remarcablemente mas voluptuoso que --logging-bib, no sólo por que cada mensaje es mas largo, si no por que las sesiones son generadas y destruidas más frecuentemente que los registros BIB (cada registro BIB puede tener múltiples sesiones). Debido al REQ-12 del RFC 6888 sección 4, lo mas probable es que ni siquiera quieres la información extra que las sesiones te pueden proporcionar.

- -

--zeroize-traffic-class

- -
    -
  • Tipo: Booleano
  • -
  • Modos: SIIT & Stateful
  • -
  • Valor por Omisión: APAGADO (0)
  • -
  • Sentido de traducción: IPv4 -> IPv6
  • -
  • Nombre anterior: --setTC
  • -
  • Fuente: RFC 6145, sección 4.1
  • -
- -

El campo Clase de Tráfico de la Cabecera IPv6 es muy similar al campo Tipo de servicio (Type of Service TOS) por sus siglas en inglés.

- -

Si dejas esto desactivado, el valor del campo Tipo de Servicio será copiado directamente al campo Clase de Tráfico. Si lo activas, Jool siempre le asignara el valor cero al campo Clase de Tráfico.

- -

--override-tos

- -
    -
  • Tipo: Booleano
  • -
  • Modos: SIIT & Stateful
  • -
  • Valor por Omisión: APAGADO (0)
  • -
  • Sentido de traducción: IPv6-> IPv4
  • -
  • Fuente: RFC 6145, section 5.1
  • -
  • Nombre anterior: --setTOS
  • -
- -

El campo Clase de Tráfico de la Cabecera IPv6 es muy similar al campo Tipo de servicio (Type of Service TOS) por sus siglas en inglés.

- -

Si dejas esto desactivado, el valor del campo Clase de Tráfico será copiado directamente al campo Tipo de Servicio durante las traducciones de IPv6-> IPv4. Si lo activas, Jool le asignará al campo Tipo de Servicio el valor indicado en el parámetro --tos.

- -

--tos

- -
    -
  • Tipo: Integer
  • -
  • Modos: SIIT & Stateful
  • -
  • Valor por Omisión: Apagado(0)
  • -
  • Sentido de traducción: IPv6-> IPv4
  • -
  • Nombre anterior: --TOS
  • -
  • Fuente: RFC 6145, section 5.1
  • -
- -

Valor que se va a asignar al campo Tipo de Servicio de los paquetes IPv4 durante la traducción de IPv6-a-IPv4. _Esto solo aplica cuando --override-tos está activo.

- -

--allow-atomic-fragments

- -

En desuso. Ve Atomic Fragments.

- -

--setDF

- -

En desuso. Ve Atomic Fragments.

- -

--genFH

- -

En desuso. Ve Atomic Fragments.

- -

--genID

- -

En desuso. Ve Atomic Fragments.

- -

--boostMTU

- -

En desuso. Ve Atomic Fragments.

- -

--amend-udp-checksum-zero

- -
    -
  • Tipo: Booleano
  • -
  • Modos: SIIT
  • -
  • Valor por Omisión: APAGADO (0)
  • -
  • Sentido de traducción: IPv4-> IPv6 (Solo UDP)
  • -
  • Fuente: RFC 6145, sección 4.5
  • -
- -

En IPv4, es legal para los paquetes UDP contener zero como checksum. Esto es por que la cuestion completa sobre UDP es que es poco confiable, y por lo tanto algunas veces el valor de validacion del checksum no justifica su costo.

- -

En IPv6, zero es un valor checksum inválido para paquetes UDP.

- -
    -
  • -

    Si --amend-udp-checksum-zero está Activo y un paquete UDP IPv4 con valor cero en el campo checksum llega, Jool va a calcular su chechsum antes de traducirlo. Ten en cuenta que, esto quizá sea computacionalmente costo.

    -
  • -
  • -

    Si --amend-udp-checksum-zero está Inactivo y un paquete UDP IPv4 con valor cero en el campo checksum llega, Jool va a desechar el paquete y registrar sus direcciones (with Log Level KERN_DEBUG).

    -
  • -
- -

Esto no afecta a paquetes fragmentados con valor cero en el campo checksum. SIIT Jool no reensambla, lo que significa que no puede calcular el checksum. En estos casos, el paquete será desechado sin importar --amend-udp-checksum-zero.

- -

El Stateful NAT64 de Jool siempre procesa los checksums con valor cero de los paquetes UDP IPv4. Debido aa que reensambla, tambien lo hara para paquetes fragmentados.

- -

--randomize-rfc6791-addresses

- -
    -
  • Tipo: Booleano
  • -
  • Modos: SIIT
  • -
  • Valor por Omisión: Encendido(1)
  • -
  • Sentido de traducción: IPv6-> IPv4
  • -
  • Fuente: Issue 130
  • -
- -

Si el origen de un error ICMPv6 no puede ser traducido, el RFC 6791 quiere que asignemos una dirección IPv4 del pool RFC 6791

- -
    -
  • Si --randomize-rfc6791-addresses está Acitvo, Jool seguirá la sugerencia del RFC 6791, asignando una dirección aleatoria del pool.
  • -
  • Si --randomize-rfc6791-addresses está Inactivo, Jool asignará la dirección mas alta especificada en la llave hop limit del pool.
  • -
- -

Porque? se podria decir que hop limitth es mejor.

- -

--mtu-plateaus

- -
    -
  • Tipo: Lista de Enteros separated by commas (If you want whitespace, remember to quote)
  • -
  • Modos: SIIT & Stateful
  • -
  • Valor por Omisión: 65535, 32000, 17914, 8166, 4352, 2002, 1492, 1006, 508, 296, 68
  • -
  • Sentido de traducción: IPv4-> IPv6 (Solo Errores de ICMP)
  • -
  • Nombre anterior: --plateaus
  • -
  • Fuente: RFC 6145, sección 4.2
  • -
- -

Cuando un paquete no debe de ser fragmentado y no encaja en un enlace por el que se supone debe pasar, el router del problema se supone debe de responder con un mensaje de error indicando Fragmentation Needed. Idealmente, este mensaje de error contendría el MTY del link para que el emisor original estuviera consciente del tamaño ideal del paquete y evite la fragmentación. Sin embargo, la especificación ICMPv4 no requiere que los routers incluyan esta información.

- -

La compatibilidad con versiones anteriores le otorga a las estrategias de los emisóres IPv4 la capacidad de retroceder cuando encuentren tal situación, pero IPv6 siempre fue diseñado con el campo en mente. Entonces, so Jool traduce un mensaje ICMPv6 con valor cero en el campo MTU, podria suceder un caos (los resultados dependeran principalmente de la implementación IPv6 del cliente).

- -

Para solucionar este problema, cuando Jool se encuentra intentando traducir un mensaje con valor cero en el campo MTU, reemplazara el MTU con el plateau mas grande el cual es mas bajo que la longitud total del campo del paquete original. Hay que reconocer, que esto podria o no ser el MTU correcto, pero es una suposición muy educada. Ve este ejemplo para obtener más detalles. Información más profunda puede ser encontrada en el RFC 1191.

- -

Toma en cuenta que si --boostMTU está activado, el MTU será todavía 1280 incluso si el plateau relevante es menos que 1280.

- -

No es necesario que ordenes los valores mientras los estas ingresando.

- - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/es/usr-flags-help.html b/doc/usr/_site/es/usr-flags-help.html deleted file mode 100644 index 2bb42ce46..000000000 --- a/doc/usr/_site/es/usr-flags-help.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - --help - - - - - -
-
- -
- -
-
- -

Documentación > Herramienta de configuración de Jool > Parámetros > --help

- -

--help

- -

Indice

- -
    -
  1. Descripción
  2. -
  3. Sintaxis
  4. -
  5. Ejemplos
  6. -
- -

Descripción

- -

Imprime un resumen de la documentación de los parámetros elegibles de Jool, y muestra la formas abreviadas.

- -

--help es la única opción que no necesita que Jool este activo.

- -

Para mayor información, consulta man jool_siit/man jool.

- -

Sintaxis

- -
(jool_siit | jool) --help
-
- -

Ejemplos

- -
jool_siit --help
-jool --help
-
- - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/es/usr-flags-plateaus.html b/doc/usr/_site/es/usr-flags-plateaus.html deleted file mode 100644 index 5e2cd3533..000000000 --- a/doc/usr/_site/es/usr-flags-plateaus.html +++ /dev/null @@ -1,178 +0,0 @@ - - - - - --plateaus - - - - - -
-
- -
- -
-
- -

Documentation > Aplicación de espacio de usuario > Parámetros > --global > --plateaus

- -

MTU Plateaus (Ejemplo)

- -

Introducción

- -

Este articulo explica el propósito del parametro --plateaus mediante un ejemplo.

- -

Esta es la red de ejemplo:

- -

Fig.1 - Red

- -

El número máximo de bytes por paquete (MTU) de los enlaces n6-J y J-r4 es 1500.

- -

El enlace r4-n4 es una red ARPANET, Por lo tanto, sus paquetes pueden ser de 96-8159 bits de longitud (~1007 bytes).

- -

Aunque las cabeceras de IPv4 son 20 bytes más cortas que las de IPv6 y existen otras peculiaridades; para propósitos de facilitar la comprensión, vamos a establecer que Jool no modificará el tamaño de los paquetes que traduce.

- -

Ejemplo

- -

n6 quiere enviar un paquete IPv6 de 1500 bytes a n4 (100 bytes de header y 1400 bytes de datos). J lo convierte a un paquete IPv4 de 1500 bytes y lo envía a r4. r4 no puede retransmitirlo a n4 por que es muy grande para su límite establecido de 1007 bytes, asi que devuelve un error de ICMP a n6.

- -

Fig.2 - Intento 1

- -

La técnica Path MTU discovery opera bajo la suposición de que el router que no puede entregar el paquete reportará el tamaño máximo de paquete que puede transmitir. En este punto, el error ICMP contendria el número mágico “1007â€, y entonces n6 sabría que tiene que segmentar su paquete en las piezas necesarias si es que sigue interesado en la llegada de su mensaje.

- -

Desafortunadamente, la especificación del protocolo de ICMPv4 no ordena la inclusión del número; esto es una idea tardía. Si r4 es lo suficientemente antiguo, dejará el campo MTU sin asignar(esto es cero), y n6 sería confundido ante la perspectiva de tener que dividir sus datos en grupos de cero bytes. ICMPv6 ordena la inclusión del campo MTU, así que los nodos dependen en ello.

- -

La tarea de encontrar una forma de solucionar esto recae en el NAT64 dado que es el único que tiene comprensión sobre cuál es el problema.

- -

J se dará cuenta de que existe un problema por que observará que está tratando de traducir un error ICMPv4 con MTU cero a ICMPv6, donde eso es illegal. J no tiene una forma de saber el MTU de la red r4-n4, así que tiene que adivinar. Sabe que el paquete rechazado fue de 1500 bytes de longitud, asi que revisa el parámetro --plateaus, cuyo valor por omisión está basado en la siguiente tabla ver RFC. 1191, y escoge el plateau más cercano inferior que rechazaría un paquete con tamaño de 1500:

- -
   Plateau    MTU    Comments                      Reference
-   ------     ---    --------                      ---------
-	      65535  Official maximum MTU          RFC 791
-	      65535  Hyperchannel                  RFC 1044
-   65535
-   32000             Just in case
-	      17914  16Mb IBM Token Ring
-   17914
-	      8166   IEEE 802.4                    RFC 1042
-   8166
-	      4464   IEEE 802.5 (4Mb max)          RFC 1042
-	      4352   FDDI (Revised)                RFC 1188
-   4352 (1%)
-	      2048   Wideband Network              RFC 907
-	      2002   IEEE 802.5 (4Mb recommended)  RFC 1042
-   2002 (2%)
-	      1536   Exp. Ethernet Nets            RFC 895
-	      1500   Ethernet Networks             RFC 894
-	      1500   Point-to-Point (default)      RFC 1134
-	      1492   IEEE 802.3                    RFC 1042
-   1492 (3%)
-	      1006   SLIP                          RFC 1055
-	      1006   ARPANET                       BBN 1822
-   1006
-	      576    X.25 Networks                 RFC 877
-	      544    DEC IP Portal
-	      512    NETBIOS                       RFC 1088
-	      508    IEEE 802/Source-Rt Bridge     RFC 1042
-	      508    ARCNET                        RFC 1051
-   508 (13%)
-	      296    Point-to-Point (low delay)    RFC 1144
-   296
-   68                Official minimum MTU          RFC 791
-
- -

Asi que J sospecha que la red r4-n4 es un paquete con formato IEEE 802.3, y por tanto, traduce el error ICMPv4 con MTU de valor cero a un error ICMPv6 con MTU de valor 1492.

- -

n6 segmenta su mensaje y ahora envia dos paquetes, uno de 1492 de longitud (100 bytes de cabecera y 1392 de datos), y otro de 108 bytes(100 de cabecera, y 8 de datos). J los traduce, y luego otra vez r4 dice “solicitud rechazadaâ€, por que el primer paquete de 1492 bytes sigue sin encajar en una red con un MTU de 1007.

- -

Fig.3 - Intento 2

- -

J otra vez se da cuenta de que esta tratando de traducir un error ICMP con MTU 0, asi que otra vez reportar el primer plateau el cual objetaría al paquete rechazado. Esta vez, el siguiente plateau de 1492 is 1006, asi que J supone que r4-n4 es un paquete SLIP o ARPANET. Como puedes ver, esta vez la suposición es correcta.

- -

Al recibir la noticia, n6 ahora segmenta sus datos en un paquete de tamaño 1006 (100 + 906) y otro de 594 (100 + 494). Esta vez, los paquetes traducidos de IPv6 cumplen con el requerimiento de longitud establecida por r4 y llegan a n4.

- -

Fig.4 - Intento 3

- -

Recapitulando

- -

La estrategia plateaus es la mejor alternativa existente para efecutar un Path MTU Discovery. Por que toma como referencia los MTUs existentes, converge rápido y no permite la fragmentación excesiva del paquete. Para una compresión más profunda sobre el PMTU Discovery vea el RFC 1191.

- -

Por otra parte, mirando el ejemplo podrías haber pensado “ARPANET se disolvió hace mucho tiempo!â€, y estarías en lo correcto. Aunque el RFC 1191 dice “los implementadores deben usar referencias actualizadas para escoger un conjunto de plateausâ€, nadie ha propuesto algo.

- -

Consideramos que no es tan negativo usar la lista tal cual, dado que algunos de los protocolos de la tabla todavía siguen en uso. Es más precavido, conservar todos los valores versus a que nos lleguen a faltar.

- -

Cabe mencionar que la lista plateaus NO está codificada directamente en Jool. Si deseas establecer tu propia lista plateaus, ejecuta (después de instalar la Herramienta de configuración de Jool.

- -
$(jool) --mtu-plateaus <list>
-
- -

Por ejemplo:

- -
jool_siit --mtu-plateaus "80000, 40000, 20000, 10000"
-
- - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/es/usr-flags-pool4.html b/doc/usr/_site/es/usr-flags-pool4.html deleted file mode 100644 index 1d1e0b61f..000000000 --- a/doc/usr/_site/es/usr-flags-pool4.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - --pool4 - - - - - -
-
- -
- -
-
- -

Documentación > Herramienta de configuración de Jool > Flags > --pool4

- -

--pool4

- -

Ãndice

- -
    -
  1. Descripción
  2. -
  3. Sintaxis
  4. -
  5. Opciones -
      -
    1. Operaciones
    2. -
    3. --quick
    4. -
    -
  6. -
  7. Ejemplos
  8. -
- -

Descripción

- -

Interactua con el Pool IPv4 de Jool.

- -

El pool IPv4 es el subconjunto de direcciones en IPv4, del nodo, que puede ser utilizado para traducir.

- -

NOTA: -Debido a fallas en la implementación actual, evite administrar prefijos de longitudes /24 o menores porque esto demandará mucha memoria y alentará su sistema.

- -

Sintaxis

- -
jool --pool4 [--display]
-jool --pool4 --count
-jool --pool4 --add <IPv4 prefix>
-jool --pool4 --remove <IPv4 prefix> [--quick]
-jool --pool4 --flush [--quick]
-
- -

Opciones

- -

Operaciones

- -
    -
  • --display: Lista los prefijos dados de alta y activos del pool. Operación por Omisión
  • -
  • --count: Lista la cantidad de prefijos dados de alta y activos del pool.
  • -
  • --add: Añade todas las direcciones de <IPv4 prefix> al pool.
  • -
  • --remove: Borra del pool todas las direcciones de <IPv4 prefix>.
  • -
  • --flush: Remueve todas las direcciones del pool.
  • -
- -

El valor por omisión de la longitud de <IPv4 prefix> es 32, asi que puedes añadir o remover direcciones en lugar de prefijos.

- -

--quick

- -

Ve --quick.

- -

Ejemplos

- -

Muestra las direcciones actuales:

- -
$ jool --pool4 --display
-192.0.2.1/32
-198.51.100.1/32
-203.0.113.8/32
-  (Fetched 3 prefixes.)
-
- -

Cuántos prefijos están dados de alta:

- -
$ jool --pool4 --count
-3
-
- -

Remueve un par de registros:

- -
# jool --pool4 --remove 192.0.2.1
-# jool --pool4 --remove 198.51.100.1
-
- -

Añade de nuevo solo uno de ellos:

- -
# jool --pool4 --add 192.0.2.1
-
- - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/es/usr-flags-pool6.html b/doc/usr/_site/es/usr-flags-pool6.html deleted file mode 100644 index 40844e5e0..000000000 --- a/doc/usr/_site/es/usr-flags-pool6.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - - --pool6 - - - - - -
-
- -
- -
-
- -

Documentation > Herramienta de configuración de Jool > Parámetros > --pool6

- -

--pool6

- -

Ãndice

- -
    -
  1. Descripción
  2. -
  3. Sintaxis
  4. -
  5. Opciones -
      -
    1. Operaciones
    2. -
    3. --quick
    4. -
    -
  6. -
  7. Ejemplos
  8. -
- -

Descripción

- -

Interactua con el pool IPv6 de Jool. El pool dicta que paquetes viniendo del lado IPv6 son procesados; si la dirección de destino de un paquete entrante tiene uno de los prefijos IPv6, el paquete es traducido por Jool. De otra manera es entregado al kernel para ser redireccionado de alguna manera o ser entregado a las capas superiores.

- -

Sintaxis

- -

($(jool) puede ser jool_siit o jool.)

- -
$(jool) --pool6 [--display]
-$(jool) --pool6 --count
-$(jool) --pool6 --add <IPv6 prefix>
-$(jool) --pool6 --remove <IPv6 prefix> [--quick]
-$(jool) --pool6 --flush [--quick]
-
- -

Opciones

- -

Operaciones

- -
    -
  • --display: Lista los prefijos dados de alta y activos del pool. Operación por Omisión
  • -
  • --count: Lista la cantidad de prefijos dados de alta y activos del pool.
  • -
  • --add: Agrega el <prefix>al pool.
  • -
  • --remove: Borra de la tabla el prefijo <prefix>.
  • -
  • --flush: Remueve todos los prefijos del pool.
  • -
- -

--quick

- -

Ver --quick. Solo disponible en jool.

- -

Ejemplos

- -

Despliega los prefijos activos:

- -
$ jool --pool6 --display
-64:ff9b::/96
-  (Fetched 1 prefixes.)
- -

Muestra el número de prefijos activos:

- -
$ jool --pool6 --count
-1
- -

Remueve el prefijo por omisión (64:ff9b::/96):

- -
$ jool --pool6 --remove 64:ff9b::/96
- -

Añade un prefijo (2001:db8::/64):

- -
$ jool --pool6 --add 2001:db8::/64
- -

Destruye todos los prefijos, y cancela el servicio hacia o desde estas direcciones:

- -
$ jool --pool6 --flush --quick
- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/es/usr-flags-pool6791.html b/doc/usr/_site/es/usr-flags-pool6791.html deleted file mode 100644 index 3310fd305..000000000 --- a/doc/usr/_site/es/usr-flags-pool6791.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - - --pool6791 - - - - - -
-
- -
- -
-
- -

Documentación > Aplicación de espacio de usuario > Parámetros > --pool6791

- -

--pool6791

- -

Ãndice

- -
    -
  1. Descripción
  2. -
  3. Sintaxis
  4. -
  5. Opciones
  6. -
  7. Ejemplos
  8. -
- -

Descripción

- -

Interactua con el pool RFC 6791 de Jool. El pool define direcciones para origenes en errores ICMP intraducibles.

- -

Si el pool está vacio, Jool retrocederá a utilizar las direcciones de su nodo para estos casos.

- -

Sintaxis

- -
jool_siit --pool6791 [--display]
-jool_siit --pool6791 --count
-jool_siit --pool6791 --add <IPv4 prefix>
-jool_siit --pool6791 --remove <IPv4 prefix>
-jool_siit --pool6791 --flush
-
- -

Opciones

- -
    -
  • --display: Los prefijos del pool son impresos en la salida estandar. Esta es la operación por default.
  • -
  • --count: El número de direcciones (no prefijos) en el pool es impreso en la salida estandar.
    -Por ejemplo, si todo lo que tienes es un prefijo /24, espera “256†como salida.
  • -
  • --add: Carga <IPv4 prefix> al pool.
  • -
  • --remove: Borra el prefijo <IPv4 prefix> del pool.
  • -
  • --flush: Remueve todos los prefijos del pool.
  • -
- -

Ejemplos

- -

Despliega los prefijos actuales:

- -
$ jool_siit --pool6791 --display
-192.0.2.0/24
-198.51.100.0/26
-203.0.113.16/28
-  (Fetched 3 prefixes.)
-
- -

Esto significa que la direccion de origen de un normalmente intraducible error ICMP va a ser cualquiera dentro de los siguientes rangos: 192.0.2.0-192.0.2.255, 198.51.100.0-198.51.100.64, o 203.0.113.16-203.0.113.31.

- -

Despliega solo el conteo de prefijos:

- -
$ jool_siit --pool6791 --count
-336
-
- -

(Eso es /24 + /26 + /28 = 256 + 64 + 16.)

- -

Remueve un prefijo:

- -
$ jool_siit --pool6791 --remove 192.0.2.0/24
-
- -

Devuelvelo:

- -
$ jool_siit --pool6791 --add 192.0.2.0/24
-
- -

Destruye todos los prefijos. Jool empezará a utilizar las direcciones de su host como origen.

- -
$ jool_siit --pool6791 --flush
-
- - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/es/usr-flags-quick.html b/doc/usr/_site/es/usr-flags-quick.html deleted file mode 100644 index 86caaca0a..000000000 --- a/doc/usr/_site/es/usr-flags-quick.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - --quick - - - - - -
-
- -
- -
-
- -

Documentación > Herramienta de configuración de Jool > Parámetros > --quick

- -

--quick

- -

Terminología:

- -
Partiendo que
-
-* La [dirección _A_ de IPv4](usr-flags-pool4.html) es dueño de un [registro BIB _B_](usr-flags-bib.html)  si y solo si _A_ es igual a la dirección  de IPv4 de _B_.
-
-* El [prefijo _P_ de IPv6](usr-flags-pool6.html) es dueño de un [registro de sessión _S_](usr-flags-session.html)  si y solo si _P_ corresponde a la dirección IPv6 local de S.
-
-Entonces cuando Jool está activo y configurado tenemos una serie de direcciones _A's_ asociados a BIBs _B's_ && prefijos _P's_ asociados a sesiones _S's_. Los procesos que se establecen mediante las entradas de las BIBs y sesiones vinen a ser "esclavos" de los primeros.
-
- -

Si utilizas --remove o --flush en un dueño, es decir, en una dirección de IPv4 o Prejifo de IPv6, sus “esclavos†se volverán obsoletos por que los paquetes ya no serán traducidos, y mientras se remueve a los dueños, Jool se deshará de los nuevos esclavos huérfanos.

- -

El borrar los dueños con sus escalvos, nos permite ahorrar memoria y nos ayuda a mantener eficiente la búsqueda de registros durante la traducción de paquetes.

- -

MEDIANTE la opción de --quick, Jool solo purgará a los dueños.

- -

Los esclavos huérfanos permanecerán inactivos en la base de datos, y eventualmente se removerán a si mismos una vez que las condiciones se cumplan. Las sesiones huérfanas morirán una vez que su tiempo de inactivdad permitido expire.

- -

Esta opción es recomendable si existen muchos esclavos y se requiere limpiar las tablas lo más rápido posible, o si es necesario desconfigurarlo temporalmente, en cuyo caso, al reconfigurar, los esclavos que todavia permanezcan se convertiran en relevantes y usables de nuevo.

- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/es/usr-flags-session.html b/doc/usr/_site/es/usr-flags-session.html deleted file mode 100644 index e7085934e..000000000 --- a/doc/usr/_site/es/usr-flags-session.html +++ /dev/null @@ -1,207 +0,0 @@ - - - - - --session - - - - - -
-
- -
- -
-
- -

Documentación > Herramienta de configuración de Jool > Parámetros > --session

- -

--session

- -

Ãndice

- -
    -
  1. Descripción
  2. -
  3. Sintaxis
  4. -
  5. Opciones -
      -
    1. Operaciones
    2. -
    3. <protocols>
    4. -
    5. --numeric
    6. -
    7. --csv
    8. -
    -
  6. -
  7. Ejemplos
  8. -
- -

Descripción

- -

Mediante el mecanismo de sesiones el NAT64 decide cuando las entradas BIB pierden validez y deben de ser eliminadas. Mediante estas puedes saber exactamente quien le está hablando a tus nodos de IPv6.

- -

Cada registro BIB es un mapeo, en el cual se guarda la relación entre un servicio en IPv4 y otro en IPv6. Para cada entrada BIB, hay cero o mas registros de sesiones. Estas representan las conexiones activas (BIBs en uso).

- -

Este comando solo es informativo y con éste puedes obtener información detallada de cada una de tus conexiones.

- -

Sintaxis

- -
jool --session [--display] [--numeric] [--csv] <protocols>
-jool --session --count <protocols>
-
- -

Opciones

- -

Operaciones

- -
    -
  • --display: Lista las tablas de sesión. Operación por omisión.
  • -
  • --count: Lista la cantidad de registros por tabla de sesión.
  • -
- -

<protocols>

- -
<protocols> := [--tcp] [--udp] [--icmp]
-
- -

El comando aplica sobre la(s) tabla(s) específica(s). Si no se indica, entonces afecta a los tres protocolos.

- -

--numeric

- -

La aplicación intentará resolver los nombres del nodos remotos hablando en cada sesión. Si tus nameservers no estan respondiendo, esto retardará la salida.

- -

Utiliza --numeric para desactivar este comportamiento.

- -

--csv

- -

La aplicación muestra la información en un formato amigable para la consola.

- -

Utiliza --csv para imprimir en formato CSV para abrirse como hoja de cálculo.

- -

En el formato CVS cada registro es impreso en una sola linea. Te recomendamos esta opción si requieres usar el comando grep para filtarar la información.

- -

Ejemplos

- -

Fig.1 - Red para ejemplo de sesión

- -

El cliente ipv6client.mx efectua dos solicitudes HTTP y un ping al servidor example.com en IPv4.

- -

Para desplegar todas las sesiones activas en los tres protocolos, resolviendo nombres y con formato consola, ejecutar el siguiente comando:

- -
$ jool --session
-TCP:
----------------------------------
-(V4_FIN_V6_FIN_RCV) Expires in 2 minutes, 57 seconds
-Remote: example.com#http	ipv6client.mx#58239
-Local: 192.0.2.1#60477		64:ff9b::5db8:d877#80
----------------------------------
-(V4_FIN_V6_FIN_RCV) Expires in 3 minutes, 52 seconds
-Remote: example.com#http	ipv6client.mx#58237
-Local: 192.0.2.1#6617		64:ff9b::5db8:d877#80
----------------------------------
-  (Fetched 2 entries.)
-
-UDP:
----------------------------------
-  (empty)
-
-ICMP:
----------------------------------
-Expires in 50 seconds
-Remote: example.com#1402	ipv6client.mx#13371
-Local: 192.0.2.1#1402		64:ff9b::5db8:d877#13371
----------------------------------
-  (Fetched 1 entries.)
- -

Ahora, filtra UDP e ICMP, muéstrame las IP numéricas y formato estándar:

- -
$ jool --session --display --tcp --numeric
-TCP:
----------------------------------
-(V4_FIN_V6_FIN_RCV) Expires in 2 minutes, 57 seconds
-Remote: 93.184.216.119#80	2001:db8::2#58239
-Local: 192.0.2.1#60477		64:ff9b::5db8:d877#80
----------------------------------
-(V4_FIN_V6_FIN_RCV) Expires in 3 minutes, 52 seconds
-Remote: 93.184.216.119#80	2001:db8::2#58237
-Local: 192.0.2.1#6617		64:ff9b::5db8:d877#80
----------------------------------
-  (Fetched 2 entries.)
- -

Sin resolver nombres, guarda todo en formato CSV al archivo session.csv:

- -
$ jool --session --display --numeric --csv > session.csv
- -

session.csv

- -

Para concluir, solo muestra el número de registros de todas las tablas:

- -
$ jool --session --count
-TCP: 2
-UDP: 0
-ICMP: 1
- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/es/usr-flags.html b/doc/usr/_site/es/usr-flags.html deleted file mode 100644 index 94010698a..000000000 --- a/doc/usr/_site/es/usr-flags.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - Documentación - Parámetros de la Herramienta de Configuración - - - - - -
-
- -
- -
-
- -

Documentación > Parámetros de la Herramienta de Configuración > Parámetros

- -

Parámetros

- -

Introducción

- -

Esta recopilación de documentos explican que parámetros existen para las dos modalidades: SIIT (jool_siit) y NAT64 Stateful (jool).

- -

NOTAS:

- -

Si todavía no has generado los ejecutables, ve a instrucciones de compilación e instalación.
-** Las opciones de despliegue no requieren privilegios de administrador de red, ni que la parte server este insertada, pero todos los de configuración SÃ.** Consulta:(CAP_NET_ADMIN).

- -

Ãndice

- -

Opciones comunes:

- -
    -
  1. --help
  2. -
  3. --global -
      -
    1. Atomic Fragments
    2. -
    3. MTU Plateaus (Example)
    4. -
    -
  4. -
  5. --pool6
  6. -
- -

Opciones exclusivas de jool_siit:

- -
    -
  1. --eamt
  2. -
  3. --blacklist
  4. -
  5. --pool6791
  6. -
- -

Opciones exclusivas de jool:

- -
    -
  1. --pool4
  2. -
  3. --bib
  4. -
  5. --session
  6. -
  7. --quick
  8. -
- - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/es/usr-install.html b/doc/usr/_site/es/usr-install.html deleted file mode 100644 index b1820de57..000000000 --- a/doc/usr/_site/es/usr-install.html +++ /dev/null @@ -1,192 +0,0 @@ - - - - - Instalación de la Herramienta de Configuración de Jool - - - - - -
-
- -
- -
-
- -

Documentación > Instalación > Herramienta de Configuración de Jool

- -

Instalación del Configurador de Jool

- -

Ãndice

- -
    -
  1. Introducción
  2. -
  3. Requerimientos
    - a) Libnl-3
    - b) Autoconf
  4. -
  5. Genera, Compila e Instala
    - a) De la Web Oficial
    - b) Del Repositorio GIT
  6. -
  7. Validación
    - a) Versión
    - b) Ayuda
    - c) Uso
  8. -
- -

Introducción

- -

Jool tiene cuatro componentes, es decir, cuatro ejecutables:

- -
    -
  1. Dos Módulos de Kernel, uno donde se implementa el Stateful NAT64, nombrado como jool, y el otro donde se implementa SIIT y SIIT-EAM, nombrado como jool-siit.
  2. -
  3. Dos aplicaciones en el espacio de usuario, una para Stateful NAT64 y la otra para SIIT y SIIT-EAM, nombrados de igual manera: jool y jool-siit respectivamente.
  4. -
- -

En este documento abordaremos a las aplicaciones en el espacio de usuario.

- -

Para ver detalles de los requisitos e instalación de los módulos de kernel accese aquí.

- -

Requerimientos

- -

Libnl-3

- -
-

NOTA: Libnl, libnl-1.x, 2.x no son compatibles. Se necesita Libnl-3 ver. 3.1 o superior.

-
- -

Jool emplea [NETLINK] (http://www.carisma.slowglass.com/~tgr/libnl/) para comunicar sus procesos de espacio de usuario con los de kernel, y viceversa.

- -

De preferencia no bajes y compiles en forma manual la libería para evitarte problemas de ubicación y acceso a la misma.

- -

Si tu distribución reconoce a libnl-3-dev como un producto instalable:

- -
user@node:~$apt-cache show libnl-3-dev
- -

Entonces, instala la libería ejecutando el siguiente comando con permisos de administrador:

- -
user@node:~#apt-get install libnl-3-dev
- -

Autoconf

- -
-

NOTA: Se necesita autoconf ver. 2.68 o superior.

-
- -

Si descargas Jool del Repositorio de Desarrollo de NICMx, te será necesario instalar la aplicación de autoconf para que se pueda generar de manera automática el script de configuración y los makefiles. Para llevarlo a cabo la instalación hazlo con permisos de administrador:

- -
user@node:~#apt-get install autoconf
- -

Genera, Compila e Instala

- -

Asumiendo que previamente ya se instaló el Servidor Jool, solo pasate a la carpeta USR, genera los archivos MAKEFILES, conforme GNU, compila todo e instala.

- -

De la Web Oficial

- -
user@node:~/Desktop/Jool-<version>$ cd usr
-user@node:~/Desktop/Jool-<version>$ ./configure
-user@node:~/Desktop/Jool-<version>$ make
-user@node:~/Desktop/Jool-<version>$ #Con acceso de administrador instala
-user@node:~/Jool/usr# make install
- -

Del Repositorio GIT

- -
user@node:~/Desktop/NAT64-<version>$ cd usr
-user@node:~/Desktop/NAT64-<version>/usr$ ./autogen.sh
-user@node:~/Desktop/NAT64-<version>/usr$ ./configure
-user@node:~/Desktop/NAT64-<version>/usr$ make
-user@node:~/Desktop/NAT64-<version>/usr$ #Con acceso de administrador instala
-user@node:~/Desktop/NAT64-<version>/usr# make install
- -

Validación

- -

Ahora, podemos ejecutar varias acciones como: validar que versión de Jool compilamos y consultar la ayuda en línea.

- -

Versión

- -

Para desplegar la versión de Jool ejecuta:

- -
user@node:~/Jool/usr/$ cd stateful
-user@node:~/Jool/usr/stateful$ ./jool --v
- -

Ayuda

- -

Para desplegar la ayuda en linea sobre los parámetros configurables y desplegables de Jool puedes usar las opciones -? o --help, de la siguiente manera:

- -
user@node:~/Jool/usr/stateful$ ./jool -?
- -
user@node:~/Jool/usr/stateless$ ./jool_siit --help
- -

Uso

- -

Para desplegar en forma resumida cuáles son las combinaciones válidas de los parámetros configurables y desplegables de Jool es con:

- -
user@node:~/Jool/usr/stateless$ ./jool_siit --usage
- -

Para TODAS las demás opciones se requiere habilitar previamente el servicio de traducción de paquetes como tal, es decir, haber insertado Jool en el Kernel, ya sea la modalidad stateless o stateful. Para aprender sobre ello, consulte la página de Banderas.

- - -
-
-
-
- - en - - | - - es - -
-
 
-
-
- - - - - - diff --git a/doc/usr/_site/images/atomic-double-frag.png b/doc/usr/_site/images/atomic-double-frag.png deleted file mode 100644 index 8633b5e643982920b1ee060864279eb77bd74943..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84136 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

+Vv$=q_hK>pVz+%(4FAM@?>R|KdU9aCy z)1cjoy%5QQ=*tFO`3HT&fy*C_mVuNV7{;TKm-)GzALnrT>}3TAPA;9%mI-c1v?cDQ z6%X6vYomOSbw|%AOp~~%%!OT#rJ<6bCZU3S=)Aj+vn+Q_%)ysmo6D=GgVTJl-&MrE z)kRL@VhwEk6i5~`318PV2^V;%Ryw1?_YUvE@YYBqoAEw;UcY#M=N2AeaDbeRKP{8HaO1ys6;$v0+dKr7ZDeH#zdYk@ad5pxvV7cGT91PGDv` zmZnptZ~HnPX(dm2hD$JIv44|iveN2ixnlU|*?JkOgVER zreIN^Ol*!!-LoRkW6I=-A@SbfLtp0nsuyoGT=)V|_m<;nh5USCU`U#B&`jfyqoU*F z^>e_1fp0dvP3O*Z>JWgHJ%pYZ+nK&eDw<#RD|cy!(Y12_-@ zPo>y$dXm&w!>JN{uKFmPb0b|ZYIlmltjpT;bg<>rrU2E)BrCPVM?e(`eEp`ldqP^~LEN~TOh zB3x4N4iZ$B!sv27X9>OZwX&90mA1QU)GGef-xv6!8s+x+xc?G|s4{y#E+t)M>nS~T z6tv%D0JNPg|2EgQ+(En#1|UaR=e#&fxwu`-YU?r5eydf3Xb~K$Dy2SJtJOLF0e10& zvZ7d~m0C4@5#C3{bu^=>LHk03fNO3?ev=&rk|z$y|} z;(hB;N$Ax?!00+$vcr9{wu8lSyW4^ApDwakI=bvOWlZR2Z2@2Yt}16B*T-)n?`XlW zCr}ac5vJ#wu`i>zzhXg?$fzWzde5;8s`F#s`mj6|voguZMmqPp z)6T_p@)%i6&Z#L`;ve@w=_k4m&&3>;vZ~JN3eS5AJH-Esw1&9s0uca_H9`b7by8>z zvO_7#TJ=hQ2g!ab?Nb>4(Bt)Wl#!7y+LMsWkbNJYwi7>WeHOqg?VC6QS#h~7wqA^9 z60Y;FMiKI~>TiQd!&_(c3O_ z0ycYq_~`8JctgzYm2WW9b}OZ=*tOxVfz55DOkAVwiVtd`8EUstPph132@FCy{CL&d zo1y*52<`_w^wrDU?SuWh6skIr)rR1H{A}~Wk&8|g(@KTyHbJtl=F6_GF0@&4YC-(D z;HlU6tGKn;9ZpI-yq6K-C|JxxW>8P1f$URj^_RU*(=S{}PllQY0znn7Ks$5q3G;JW zP6f8#5OtD3v@60D7?m!KzSdRbPMxCs0XbmK3JkEvEr9;=!(f%;TGE%7G_}1u0Rn79 zdgx~+r%dK9I={675r8}VX+AK zZRyaqKg9S=7RSGBQu#-wFmM&CN{9&us8?6*5v7p3KDvMX0WbHb;=9?O`?B#zP-2?* zfeNP3L*Pn&Qvog*;L2*=aVsQQRm^EO$4e7MFE(xua8h$g6C&i)n+|$4r?^?myADT3!+3v)p28{HWe@)PCgk zEr-^-3AePdxJM|}pAm*z+iiOH>I3y_3pD1B{?upm>hP?rEWGe{18oU3?-$F5gpxjp zADGeyNcLVoo(CXA`fk_=E8$Fv<=%Mg!fg#b;f#V%>6|UqHe!CErAK~Ct11SIsDZ(i zmc-d;msi_~1ti(%7SV}RI3-$^EbR|(Np`e@@fV#s`wNc6iaw)h()aC$yDs2r$oUI;0K}w6R43l}{ z4TV(Ct;T?OVKSX)0$%o*<6T3wu|$yh`mcnj9wIH?&2bh-$9=Od={XGpj7P?@T;2YJ zt2?xmufRjhDp_9wtOq(qnQ@u~APsV5K7Bu=-(s0pyy2MKJBltV$9CHnWd5r!D@O+h~H z!%6O%tqnn+htr>P3Wsa&W^c(5d5=Uv0=z)eiz7Cz_w{z~o%8QW%p(}B>T;{A`>#zV zgKa~tN2RBy?wRAY$geBOI>Fh-v?&9kOV#GL?BoKd-l}pQ>UPS1BZu6lozmk5yP^@j zvrK@ZuCO7m89VMTM90qW`99PaE>~B^ zjtV?~S1u0$PVOGgL4y?H{C|PVqMl{B*>}%c-M3swlxn&~qzT0dfwD|B8C?$>pE^Vd zMHFR1yZt>5UigTwGwJB!;^!dw?r-8tJrAC)D+sb0FLlK`s=%H0#JG(1N$#A_h(ZT8 z(lV5tvpez2aJcBvPPF}IBTdYK4%f5W^G5JE11vx>B*%lSWV=6RRvy!5qjB;H0wKNj z$9kJSaM6A;UBKOUb3e+nV5Y5s@(Oi{qa5|wHrYQiVT@zSeN#I#dhUsD zB|Zk*^)Ub^j0if51MvP!-oJu*gQ@*wkeMx-^^0&A4gw6kp+5UZ+m=)eW6>_eH^iw8o+*u9gSbhAqVP3|Co>g ztbyQocsHV}1l9FQsy!QQ-ra@1pw7W(Pqn!%vBlGr$1pyPjL&)X+7ed0wu)0&z5|B@ zw`*k7QFJL`y3-_2-Artx0H!luYawkF2lCkt@pZO*Wg6?$Dfh%%i{}E8IcgH#piRNT zHxv(|Uxv)MW7K-U;ftRizGdq>y9oS$KWFss=<6Kst&#KUa$V1vE*3@Aaza>U2RX21o~OmU7__Z@xHV7scl{eKB6Q#rB8gPOazRE( zPn4QkgE1A;&Rt$8TA8%j!OQJw^&SVp4HpA!%}J_;C4+?gv-UF{@;lELWT_o@7$as} z!~-^A-jX`t2(y z3o3}R=0#Vj;Q0#++=}XXpTLc?1`Sdl9hdrtq>u}mJR%woFqY{}KS><;jY!$mTiSD1 zA)^&5q5tdnhELKDfFH@)OJw`wAzxY`qsrrr-`V8tlvRnAJJ-pLJ5P!+;Jf^kenWKh z+*2M8SK_M_NXqJ1ZA$h8Vt%mJ7tzb`P@m6^A|5-!}^Vo zzOKYCJ}7OCJ+c*)fh!3AV!l*A%mEIZA;+%9D-O)WdO66nQr8_H)nTNM3xMRsrzULx-08ndMmxmiYnLVvDqK)FL{lnL&V<7iz7|u)~!u-%B2fmmZ`wPn- z;&_|a71lWnx#V?VC3uNq4L}I{!2-Ymq@&0?Wx&74BD@EMJ6rN{)yS=Gg&g1X1dF7G z0Yj>x67U`Kl&$6#NFBcFJR;S=eu3xP%&)>(`M_3D-*;qN8}H?F!&Y6B^GZqpt^~FM zC3YKZ0DjijTIwSKuuKm^otc!u;p)N9Tx`u=52N}dmHv$bPCs+m?3w>0V;Fa zl)iie1Jc#*o#OBaXUBXrR{)wHE=dnA$`cNA+B7dJITl3bUI08fcq~-QC_sKKIa3A4 z0w0j?x(yIU_amWK?Ss6jjG@UxifJntw^ASjM+Jw>l`fds!3|S+Z_45WQBA6qVl6d5YhaznVDI)*?wn7VF-+-21bwxNsEaXz0RmTI2M$ zwW;)sb8PY3gj0wcv$TK#-YO=MkYGXp0E!!&Xf4XS<{vZFLm-2K;f2pX`~r|&=CB0q zsp^ zL^CV!;TOkl`>vxu^;v`o5KvMel&SVw z*Fe%lRY{L~)li#FKGIp?^Ml^zhR%LpozQGNr`4bI?F7&}*o`x1-^Pv6-@N z&NSB*<0rV;IC2l=`a(uzquES@#i;iy?4yW1vrz^~p+&W+9s;0ai+pcxzS48B*Y|lp z^n{pSS(hV4*#gF?tSL&vD~rFZwKFO8y6MZ!qd z0=Y-L(=p{J+iyl$kpd#1$$O!4{Tau=EnN-OV=&PxC;Ap(pg&f(9E4%PQY>bYJlZMj zcWdzTyILcK{87m$)`;lEF6u_AHuvo|zO}tt%&_^9&{-AsXILl86z!#yqL76{SFb<> zIv@O0rQ?->_N{s}h0RD4XmH-x51MI$V%%Qz<7Htrzo04Fsrdb@dGo@AnZ6cRMVt-d z$ylscmvRO#>@+I;*-Di}Kp{-BspPZ2{Ti(2r2bXCq!g9(z)g$%VO%vhYC=yyFKJ$x zKVL|SOzeB>dUDtoeLBwQAwI0}w~Ch(IP1b5c>sXQt>^5jE9RW0BBx4s%USz@yaD+jr%OZ$ z5L+%acjy*nWB=r4SfQ|go~gi6^FVtUs`4c4@qpfFKs6mb+=KTRj=k|=roh}FuB)@b z)qR2?RIwM`xxq#m$adp)%w_Z?e}KwT0R@n2P!*SjK>sya&aPA!EyI_nh2+xF;PY`K}DOcpG>4P15fL_FRJ9pNo6CNvT%xCIJzpgjx5$s|E*^O~Ee6q!^~ zYK)81c!rM@hS1KF9JFlP&#vutU+u_POCG%^sB~yN`3-F1s5U0r0SA3UjPWw>#@f6s zdIdj75n(bOqa{y7dq=bz16%bwv5>Wdr-~LO?c{A?0Er=)dqsAS35hZx{b+uK6F= zeQ7%j_=%)ZTxc+o5Km{#jB=6KQg8IgmAU;`1zID~Zk(#+28EPLzdg|ru3q%j_=7}h z=28gB5z)32=}cSFp^n_n_pm&`T#YM_pI8;7oaf4V1_uirU`iKu`;9-y+*LM7M^e$C zk`FCkZVZgO*k^8_zok}J)we&19Sivb`(jK9^i7Jzz0BJ>kltIjh}PXBj6(Mv{z zN)56y4qq5d8G-*y(=vV#svlLz-ui!7fb?huh|~PZqtu|n0D5OKTnlk&&lMlEmdP5Q z4e^18QTA4+4u#}9nRvo(C1#J26LWf;aPEl%*)y5qIsfSCbB4vwm4fB>1pad`@v|5$ z)=M-eTpatQaL7fTU~lgSXbl4v9E{nWv%C)-KsINtb0y)rlde0r#{yu#z0uIh#9VIL zanB;LBVgz$Rv51vMoJnj&e>F%)2`a^iZp^JQ`wd{7`=@x55c0razq>5`Tn7?pvO?B z0)SD~;kjM$<$9{f(+W3Iad*kRs>SSm^vV(YE%(ZHw#ZZLGC+?R9V@LwiG3yL33Og6%7)xkGZsXv z-ng4s*;_~bkoXMe+|fK!f@falb93>vwNq8tf!SrOi)BzEd5uq`r1rEmx%NMRN! zBT88#_0YZsl0R9r4?7dO+G1o`7`>y@W^`yG0BtH#q!S3bjzI=sDrqS-E>Gxdt+v}e zVZmgrbv+&`slTkZaXvPn4HzsuQHp1%xhD>fa3-SapdWw=K$6`KCzSiFAS*f`7>x>m zfc0;L>H#Zz1NLyLL!pZ1+#dorbJ#m7hKr-_Y<@f3N7>p3yD@*?Ki3tB35k}00(tk7 z`jv0T#Rz=M>hp`18l4`+^CW{H`aT5pwxO3MO{+r669H~u83UHtG3xr9<}as@jr}%M zj3=pVz7qUj(zBvZrRE$j-GVay~o2i>L3gWfQWj>0q%s; zbdKjQ!62wBoP`cPbHr1nfPw8ef*nhnvU6vG3qWd3O_wV6`1Xc}#ZZA4J4Dc^6RUQD zKMO?y;Q^oZG$;$o#=dpG)97jJNQ(got8@jF5>!}4jn&tXgI66?$FiXxTKQ4l!v;Ff zY;RN^^DM6OB8r@#Ol`d}@4@^i);bm6F|?t=jN(A57FQdb=u!-5Lr46c+v6rIi0jeh z`}w*^fRx$>znD!pQaDMNfG`tWfU`aLOw$wQP6V1#trG;m&_dWJK$1j^U|~|7ktVI* zW^dV#r0;0QIic>n>KAgziAiFXjHbdb$7ZkrnbN&CpjwX}o;SE3Z}!M;?7|NkT{yt^ z9Y5herK6RvaNyt3b`nqG>Tg*0>yJW*Hcd|vsATt;#pZgNsZ7H;1#ynMDNxEbD(g8V zaB47~IS%+=J2Z=1EWCxMm2jE>VYM$u-(iK5#tQ#1E3(Gqz2*L#3IhjkZGT2>3t${d zRV}9PDU8+esm1*g73`02!wN`?{Yj92CuG4;%Nx_1OcrR+Zi0tQ+{5B0of%h(Zdt`M zC=nIk1c24@Mr~Ks){3*eEwE@u7)*?e=x!_Q(d%0dCqc)Bjt%DOHJxJByJld(B)F)& zAO85oob_GCpHmWyWQ$uXDcf6i9ga76Vpi=(jP;fdy5~0ge9|e!{J}wTt9sIR>v8S{ zFTN}8CK~`5stBx0F8ybbkI#&#UX;Z+E>oz@z3As0&EFddE;khCwy?+|E}0M0F!}qM z-7N%z4JljnlF!qW>BcD-uy8iq^4Wz|JS1R7hu?U4G5GUyF|)}*vSE9n-Cy*L+D33z zP{8dn)W0zLSN0sdNQ1$@BLIHA@O=ZKMC+M+bMVHzZIPeIeNAb%p=}u@sZJmtEGr`U zOOW`II#Q&0-!Rg27l@HKK%%txQ23K!Fb}TBSpj+T??bW)OyK^fR8A-k*bw#X{`p-) z=wfkJe0;nVX3?VE^tAjD#yemGqZIeN!8Cu}qdSFuu#U3FnIxh^njVnWg7!c-VLg@V zQZ{J&npJA8ckt$_9jdu+vtNI_XvU0p{Y=cO10985kB*1*2IcvE9>g8g#CN1K{s-5;&_8whDHQYkWzo|cDbyi+o7&_8Bm}7FP`N>zEw_`)QSNpoDR4>Xds(!N;9f+oU+JpHPf_N$Z3I3Uigkf2lDpHs^barmUpD|GhB+wDooL4!RIpp zq|t}`T-{G_(y3YNCuMyFP@+VgnCg4Dzg(kRT|t-njq z9Ij;D%sM3nheeNqqvJQ~F4SyDo0+*2l1Z954#@k=h)eP6l>o!jEZtoA%{ATutl)F5h#P^fK$h7Jmr`NG&EQ1Q%SR5pMe= zyJoq6oq;F{z$(~ifxiDj_gcr~7ZTo4y#k7z!BXH5K4u5c;6LqjLJ8e8D=baJJ7O&z z>}Wy+8(Mm(U+Hyd`?Hd^;CIjU>SvDzuGoK6J)yBKQ@+f^X{bPR1xX0Bu9IdD7P6tw znVOn5PaLe7K?G~(mq7h>IgfG;H)W<=<4(u4W;PPnun;OPMAx+aEts~R>5pi6H;8Tf zZiB*Q`h!LJj$HT^f4MpX5khu{bU?6(#G=3X(fJKHdTZ0Nkcg<7tVU}oDoJbs0 zY}p*GLT#-XB3f2SODB6tUv`TyFW|fLQH$W8>D#5_dEu#ak|9u)S>%m5U_TwznxI*m zAOYzY?dyWGQjNWOmAa%-zT1Kq0l58O6XJ1(On-lO9xX4 z!tiFbY+;Yt<+)(ToDVgTS!gLH5~|d_#35)H;B1&H%1KHmegbmdKml$v*CPuMEjhH5$Ro)$WLE!V0tuc{$?@y zz;2jr`k!qg|Nh4lEIv@|n$h*`b#@k`WdRgTn0=_#iXxwL?>wsN!l$+zJjs+sUcxus z!g9$xpZH2^?fRqOJ^#Sgx)b`>GxQO$IGA^HRYIhD-FWUnmVynsSR*odqT-(_R(@2k z*fhmCnVUi3Die~Mds)gfuHOX_eH!mfYq$U9IDWx7eHhR(`^SAW6ojGxT!j!1hWz8o zA{Ik?I;8%R`1kVxh95cOKTViFro&_gaxMZG=&H5o2SKggCam{XbH z{-qQckj1UbWk|_i%uO6d*Nw`h^{Rey&#hbjHjw%_aaA~}ed{8qYD>9I(>GLN-BCVX zj2=5??MwoGvI3LUKzIFU2G%Oh>$&9Z`+t~)mebDT%NVvCBc6mux5-w#u2ZO&Wyt%D zc-6N__{Bm!1NM$c>(5IS8~oCGvgGDfox%PzrRdplC*oS0FBjzytUx|ty*IwTx8;Wf z5oi;J&f@P%-3kDz1dLZOwur;XFWMxqF}7>KtC6(ztQJ^FI*v$BGqSB&YwA)vED2AfKMBG-OgP-*WYgrJp-Y% z>JN>X1k@n!Qg0JN1=1YeQ{>p5(dFGGUSNd@9DQzW7!} zgX-L%0W*#BYoeQ8*I)oghA&VYr#MR(@EZ5Wc?j(_z6yfTFa`{U7&7gUWP2?gVf zLh|3aAOn8PZ9$fy@_0(8Gi_P@#huOMkva>38S4S2!vcxuvc8WoG>s*X`IA3TJzS;a z9?nIFZ=fB?zaBG}F_|$AC$28a81_VS`WqiEr?=F7&l6XYU!4SvrY&AiBy!;u^g3$J z_+|FZ&G!PAR&;+epqqU(7(X%T=oemFx#Azz&^9v}veO77TDbZngM$hvtjl^D8^|5i(53Yb$xYR>;lgbOHiEa(J~8>zG@&7}!eqK8N7@8Mu5IsT6nA1QxCY^{^z#+*F0Ma5*Sm^hN^1@+fe4rs4oVmTUFmmFq^uM9qyX!{D3&yG>x6 zsbjoTR{2-mGHaj$v11xkg#V|+2Pk^RfHK(ZMiVgQtL&^ndP|GRkN}A%M$_GZB(C2L zc$Vv&CS0#~RXwfw+~q%coayJS{dzp7vy-HkSh@$1Te|N*cXpCemIgvsWw2cnI3ol0 z)(Ljou1FyO*|$0NXQ#rLKia5W*N<3=ZO`gVj4Tx^R?~m~Lt1Gt-7VUj?u*&VHzdakdy?M|c7s}=TfIet2{Z1g;>dx^et*|tnz zI@7ruUG}b{o7rgj*uhirTDk`KC3mentez!3?pVIK2{p;+gUY6#1lZo%%3i2l37enL z61}5kXcM)o)4FJ3EIj7|U5tQ2)I3SrblKor9jo~R)eO&+ ze1#lsLno)PlSo>2fM4T4^_)!1C9*Ru1{ufy1?MFX2ujlt%@~7GaH3BWDq$1l`oe|> zd|2u`0$NMXW1~gA_FfkF{vGuCy@L_scA0JDZnE^vbF4EMEd^BTFKrCI7jiPOR+cXZ8 z`I3FpWTqDXa#G9olC$!2ouk^D&0LaelG8*Ixq6VRz3bx-a#9`J{|Oeus(MlteeF4e z>q})0U1Uh z-f!4>g`;$L-q%NgY2ZbJmKQKz5zF^fC80p9x>)3vMTF2}&)DI8Cne5>Zc$IBV&VMA zif3NyH-*sS^{)MH$8Nd8^$eV^UnYRP3Ifp%8o)JX4?q|A$J_=k8cIk z&y-nwIfYR3r$Bcz{{pJ}>vFY{Yxl^2O8OBx98b{y5M#d*0W?Qn`#I`rouMr)W6Tp8 zez2^W2X&?@`HaTlrF~y@Z@>Wuki_W_dfWXT#OL*xNB^XgyMNY@e^Oa90ZC_q$^g^5rw? z)Zm4bS>NHx2jZ-MRJd>D5JGt$6!15~1*8bxmNdF-2VAZZ+Y@F0Z|vl2>>1zy(d&y9 z_Vc6TVQtNJtM$auo;gIi8ihi(tY5h_tBu}(nEyM7=6PU#8>;}ZnFnN^_vVP|IRDk5 zMyI_tx7sgw^wNZ(>j_Y7(IZG$F1b8}a;41vxK_U!Z`mLN*m~+c3Dwik^5Ak@f0Z}Z zmHBU)P5%jleDTk``e(nxibM+IDlBtvc8uqetFkDcacI*2H->Fpq4y}!Y72fy8NswV zE90kNt1|PP`-EQuqsas+bmU|t z-{=?Bonl7g+F$sv*@CHd)e2d6pXUxs0ksgv!@)SJ^E zOtdS3j)RTfl_3GY&{n^H%g$#%XWyTc2i&A+-1PR#k8Pud?5kZ>VHe$~{b#{er2 z!GY{wXj;;K?9NSdI_dTY#&Gr+W|*4jfL|Pr)z&+R7lIpCW1!h=>Mo5IY!RNDkyDNS zP2cplz2hst{40KYk6E@^rfjQMGtciFztNUgZ=0@%pD@28x)3dz4gGy;zDnZLaIWxZ zgiQq*%L3sR`zIzQDjhDc+g*=Ia6cq9?MM#CAnYnoQIvx9p7vGTnCXnQGAVwwCgXDt zGBATK(z%Fp#rE$KPj0sX*P*r`!6y~IRgppJej>T5q#6T?6Zg+FZ|N;Nd&XzX7Tw!JYd=Upp2oAF_0yOeLWcg=n4?VI`JI5PVjhX#J&o=S4nQ@2 z3`urT_W2gf-Uhc!(!|sdZ)g#+K&NV^K4!L8G-@`>grtez{x1P{dB*Q)rVgW0%3-;j zv#PBfYY-o*$|f>t=h}K{7eqxc0g8VB1BOB^C2ET}$XU(1-j?s0+N=9iP+VOsid|jJ z2({D*ZbQ1YHcFXPadVQy-iL*Z5 zmHrWAmWZF#-hajY#;j4)DKFOS$`GZ`>BP{LsWg&6@it+Ag%hV;jwtuTgLQCvGF_wT zVoQtbiek4$GI_$?`5z`vs|NjkezCtxhK>g3nu0$NO#`RJez??3>szFkwln*o(mV2km{d07v#v`vuNQ;y9t`0u#7R%8k zN|y!IHS4b8+p`5tJb5xbe{a*}yzN6bykB0Q_kZp-3mkHttO&!}I4wA7-C>A$E2OM! z{1;-koZ%Gr>(BJK*4R@3|DM6wf>Xk81F`PN1TY|pOsQY_yUSWj6nK+dkHB6emK9~1- zR||1`0Z|B1W|PYsIhNm)y9fRB`Z__3g*v)?(5w~ z3@G$j!9$d<7QYX@?)7>EtRL2%fGKPTKLb*Tj%q&ONix3tpZPsAWRgm6c>}^`8zsX_ z195dNqxUA~q{fjhlf+#=U5Qa*Dx=RJT!r#Yiu@lx&aARH;(7T?@yv*U4p zh}yFi)}-Uqw%S;x?Wyx^P@aub5faICx z{AiL!LEsl}5r68dQ10I=gJr_ z3*%6-VN!~-u%#l1XY`S2;L}|*80~n{`CzfX167`KfaPA)*ShLeqK0)*XX-MhHCXTZ zH7sLJj?~;QU8t=W%kXzJ?dJ%{yMH-iC@U}P!PSH@Y2wBz@Orj>ED;B-C@gt-`SazN zao2|A{vvMqx?bxry=TWma{X@gOuVa;s)joOyNaymlbqR}#hmMQ9z!@@wN6QMId%2J z5#M?wDh43k9YGRlDZRMIFdTG93ApG9`a)N*i@)14xB^`4~tdvq;?a&N&2``_+a1=DiZ^(Ir3j*pK&46*PBa7{myH?wtN zu)(9d%NUSUUn@YCZOGlvtNIRDHR1?y^jJ@M(gXVdi3okW-^)oD&QQXCgtncw< zqQacX8bvZ*kw%|5X03~dL+-Qb*n{?QOj@3GGSxvK52k&driEVzR6&2Zh#oBUXJT7cmI16FNOO?8KaiK8w=g zZ?W2>TdNQgNmji(FnFE*hO`onY?`GgTm49D(<_GfZD})_WFj6;a51qV33XwA+f}0v zMg9@%XlA<<&SzCV5_o~|>&no`9o^SOn^`#57C3TN zdU|xbE}X}mSw8*^uUz3uedYY~9HlhGw#d;DHFl1pdt;bYBmFvn!(lby3EDePbEjJw z@SW1_S-yMII=x{R=0?8HnNo50ndur#oS)*jFEJZAxQIR0+z%t)DczvR=``N}<>yi* z;~G@mosvcCY%)DSn9ca6ee|nEl=bb-R*X9h-4Sd)^`v&M-~3p{z)Fq$T5kyeK+67j zNJ^@M8`gHHy%5-R=cFlSm{e-`XOxd{qBox#MV)LN!;SbL00phs&0g-^*Z^E!q2_cd z)H66N%?(XY*X6c9UatwgNBWGdT$4eSd^N*{^8GcD^_Z+h@6(q)#7yGh(*I!r9@{!} zk1;OQKhi5$Q#cXPWu%6n4IA+jqMO}1%-~3@R^n1LYz#|9H(%SSG^o)yzNplEK!2=V zpfFK0tKqvC^c(ko4z@FTx74NFefpq8WtkO*Tm-UhyUd2 zMm(BE93d-j$JXag)A*oOPXjG&+X)%6euI0qVQ!a88;fq_y_W~x%Cl2VYkLp&+M#*b z_qS4kNB_goOP;(l{>UJ8AJQWyHWzUWawE%S`(XPNDjz+Uk>F6V>p}n6=!Z>WSGc>K zy{@oT0k$1SItYIMP=tt8>=$-r@xbSqxK6uS*(#6gV`=rbGbf7c8V;LcYiD9X$!bJC ztU92c6&0*bOw+`=8|c=q>jhg-AxBwg{jGcJ@zApz8aWa_BQ1`njF*!~ri~)f7Xa8= zaKoFGaWrMPUH7uwjx}ju1Nc$NU}Gd}jMoqk{$r^{$DIe?c#Q~uhGg0fyk0Rvbj5w% zVMxYr@j_JlL-uLmABn*dbk7Zf74))Wzkvz+n$iGBbO3tBE95K1;kTifwYDN9f>Mo- zbaUc|^a=T9bg=_WWCZ&6w$pyzv;FriT|Wjp1lp7S008y%IqnuP@P)7<~^Z3Vp!HUzl>m9Jcm*$bgiNRw(c{o z`_P>&`W71&CG*&-yYNHAQ7Abrg%(@v%`xC+{up@mI7|67Mj2&AkF2&K2p0r6O*;NB z>fSP{uIE`BJdglM(BKY%;LgF_-Q5YnJ$P_;cXxMpcXxMpcZWIo$-MXe*PZpQSu^ut z_7~`VI8FE7)!kK3JyrEpTS7*aoE2g~V9Q**mqYFd05}-QcN8-P8j}5tR*qprfbw^# zHBK)kJl{5G@BR5sZ9s}JoZT09q`sa2~bOnqu+c$DBEJ?laT6%jbIE{a24o$Qjg z+6JXvzI3qG@g)`xg?i3h?Yb&`XXl7KDxR#K9gb7 z<;1GebiZoS>;UV&`yx_^sU^f8x>fG!OQF+?4So#6H3=ehj$!Pmv{7t$8SgaQ&wMzh zk=hys?`9^d++5FY!KH&3VOC;o#@Y4>WKk^krrmshA-P!enRhJF$8ae=d~kHhO^$4N zI&5|z6x}g{9Gx%IM?fY762_H@XgRyQzfY_EbrNeo-_4|&$kG^)md42{xj4J2r2(6l z?quHP`@vy~u={s4Tf72J+LK+Nb3Po1m?UyOC`s&6%Ef$`PR5CwDpK>NlUhuOW;=PF z|ET?DA)*mRY-+x-+xZp`1ur_1>3RBOeWYvV413J0w~7Hqh&lX*?&h#G5rE##1~f!j z?3}ReSu)PK-yw#;({1)U-dv%PL2F_s42R^SMDV0mAB0|cxeY6Y+as?9Z`ecZA!c3* zq@-*!?&Ekkeck>fII>&7UoRHIYHqYsDehQ!4jg-lBfYn|sutog)uwcGira47N{53w zuf?Ved^Xon(^8ZZ5GVzsJ_|f&E|vQ7o*@A%{_d=+k%IXN$x{Iz23z+|XEpkfy9L^& zh|^9#k~i|!W6wX$;o-GLyJNW`*VN`q`llgcW(D$Mw=OH0)-YCCsB%*=y+qYh2}6zG zFNv3CmjNW|aO5j)Mhv9+ zt@ZKTXIxGB7}y38{2Q!8t$3N1FVplUkFCjU^=Er>;DE@rRY^sMsGqUB@JAr5ian5; zk)1#p{h>6L2wsFDc#J<6kdugBDM^R|)4IjpsBN786?V8P3S62{0E*O_HkR2LSviiGt z@MvQr*AYL}GqF@j=O@Kqu8U9T%UYIn88-t$COX0^5ezG~m^gQ`gwLU+ht1}~U&g~z6Uz%mc2BKuTB=8)D zJIZMnlE#NGRj-jMzyLg$SZScmQcAz(Sbf-IKKUlL@T4inA+j`bl~||3WoRJAq_4uQ z-smCXtljn^sB{=lfbbJr4vKKQ zh-ULa``)LhHePZ}36JnZW1I6$KPyz)wa0i7YHd6y-!<4Wgq?A1Rn(GVcA9Z~Txb%2 z;J_u>xZ1hQu=~~gE*9_hr(7GRhx}T`8=h)Rj5VU*7+$sRi84qeAOJ=E&r#E+;>M67 z_15{3Rf7;8m;|;U$GQy~8H@XA7DNpOxh)_(m0E@eDe2@?$_;IidjWFOYDA;7HA>Jq z9{A>xI07#1t?M-uOiWP{s)R~{^YNwOm8Xm){t-cDACoH3Q`ZDzDjiulD4c;ee1r5j zxwN}8>5N+hNFd@U7Q^o=lg&A7hz|gsVZ|@_qk>EM!DpNh2p<=Mc#^4fjruBD$Vt#) zWPD-s?Ia$_Kban%@%D7n$!3m|dc0&)P^q0-nVQ5qkyScD!c)mpct*C*AMBf(#}UBi zpb~$Y!T@Agqg*xuHXT3zs57oB?)QwhM3xC_xq5o6EnTG=T^)BoSN**^aebOR+TOaO zrGFxk-=aX*$%llPk+i3M^7&tY%CxDUo3KVAF_)kuRRkQy+=lTAYq;AQpHr0|IlLjs zy(_MCT+yUvF|a7h*@q!=a2z?b?P}Za5W9sD<9JOL1@7qG)65!!1nkGvnJ}fvwU$Y@ zFLv!*`CFeQW8x!Bd*G(A-lb}7XC7un=7P(CkmbEN&3>q~^hlxt4}-Bz}BJ$#C3A7kDDnmHBiZ-9Y5^Q#^b`F>hgD4X2l zAnqv81n^ay>*Swv)+2E3;LL&#`%|d|tb9$WI&~~tV_9r)VaTJZN-qr5p z;g7?iX>HLYXi1pSXXcHW znH2hlU46~QvO~D7S*c#7Bd~@}i6_pV=g(uM z(B&M19s*u`5~Aeu>EA6#Pgkdh>XRYtXb!zs0(f72{nYuTFH~N7B^iND9_%C+8rlbOv2r7Pc2vWgoU}fBc@T_8-`7N zNd8=XF6o`Rq`kEnVLj#fynY5KW3i`Uy(CHQ=9I8!;9YC>bI&21Rv9=JO|ew8rpYDP z%wzo+X{uYnbYo*rTbLxsi`x<}YDtd~mbw}shX|jK1T8J>Z6|yHOOa9VfPwOq0~YqRpKzDw!NpUYhLF|BQ{#ub}19 zAGG--dL2jbHGRWc)^~m$KWN2t-qtSvcfB!w)vX;m!>pVu;Wx1{HXIb{hn@4O2gxTD z_Qgv{$l`6a`f!A9n$$&RF zXC~H*V<+kb^KxdFi6#SH{P*hpRv;ZE)ML%l8x4(V>4mCYeHk0${v;@LbbtFjH%$V? zb=|fUisat$B(G645g8Ec{?f1f0)e{?*9=OI?vz%u-CuA(-a4a#hF0$c1CxHpXbA|< zR`N}UaTfps;8b59+D|`ysIPg6<2U38SgyeTmI|ITvy-f1r+r{RCX^v7tm#y5W@iF7 zN>0-+2zx}c@8oSSq!wgVi?>o-hX58G{cbcJ9pQa-w0HqxXWfAGhG7$blS&)dyNCQ> zay{=}sxRptn~did{UkpMw1i*Tl$c$L_DjGx_&~-n;}fsqa^4qlr&4<((VR86(&D3x zXBc!`%0)9Na2Vwo>!$vC1Cit?SJSub?s|sVDz6{b)A!U8X$<+Z=he23R*CWa)<>{~ zW5=G8zU8hBQk%ew`8`*njM1ppMub%P1zB6Qqs;ZwKAO)fwJitByt|s(-n3236zON_ z+LjYh~itZ0; z@`(H&fBbI~Qdr|Ja?(GT%D+uomaU(EK`;OClF+gL?x*uB+Fy~E|2F^a=HDUwM>qdA zz5nUvf79!~Gx^{2`k#Y)PyYsn&rO4d1^(CATKfNjhyJgo^6wZ5l|%pmLBIWB|Be)e z?WC39?HL^rv0N`aZlBB*XQ8*Ah28d<<7`qI5?b!88KN1@Ehkco%)q4w`+3$aJjhwVtpWb&x;#6Xs<6>w7JwTN@BP^ zqBp&r;eqxVYiTyVtfQdWwzli2zlO$T-0sIm1MAWX_`?E&DAVFlMzDIn-&BDJOGQz! znODYTJD#fwr0B*BOKV+QhqOkV8f5_hU_vQhoTYIO3{1Pe`}>t>v0<>{ByLf3Sp3xu zh6%?Oeb7L(Y20}uV&ZVZ%-de`;`H-OBmxf+4i4)>g0RE=g{gE@Oq7$WA=Oh`BSij} zCw&L^FKMqaV1RQB5_|i4VgO(V-r!a>YM;#MUPH_M0HJxg`Ay0Wugz+^povfK!pVGO zO^4rs1OVtb87lPYaQ$)*QFPvDz6+EoOgKvBsi)e+Cu8bT~Vq{8A5Cde=Q~*-jE!<9<8I;}bb( z^?@U2Iw1k;g;Wyg4QiF`(UO)Hl$Nf{`qAwNZZAFVR);ihPfkhz9uzZC{O$Ai;4ht$8C_sS-o2&eay~Pi15*+N2 zmk)1kb$7N~BXFrR004`{HfQMq3wm?tSuJp5B)clj)i%itl84#WVt<3DW@dZG-bBYV z)l$W(P(-M6-qpScc|Trpj|fKsoz?vsxwNEx?!C>Zk@qGJOo#y>vzL~1RLu%v>#d@i z!{^<28lu_z5)vsHKP8arAKjprYqAtJ{cdma@H`sCl7wa78Az(`ChUCaC5&!S9d97HYh*gIKE3 z&@}wX<>GB^Z}{Sr(Zhl8K_pdSqZgN-1In&P$$qGU@NTK)_QM5tW7WcXIKS1H+Jj{& zC}mWQCxN+rmG} zc*er$qWm?~n5U|Su@@e$G?+XhqGQ5xO?NL2-$ApcoA}QQqVY`S!0g?=Z2L7{2$?;? z%49Y2*yeu+$1J!$fDe+5t^K{DTpNPOPo>qM7P#jFDt@ovUmvJnydzKNCO%-doOzFg zgC_f_rthy$z&(-CKraO0Q%=L5Z~S>Rf20g_``#T}|7`H{S=%HZga`fkjKDpetm+rN z*gjs-E#`-iwMa_-w^!N7_9b@vg{1c(GQBS#*<aUR|zVs4p+(!9QR%I$5DowhqJ_ zfEmhijx2t0;aK?y&U^l~x_*5ivi&u1ptY`dy*Qa?gURTrub5Tf^f2aOaZ{037s?Ll z(??xhA4%>k#K+1_8^3$RPanOsx(zIv7k3OSRNNKwnL|^1-^Z+xTJpz(`cZC?>c!bD zFhj6^_Va;8^*UUG$uP7tRtCLjq~^sF^jx@Rkg8Hc+LSXrQu+*cqQ&hD&`!GE6J9FN zrhd84ta+SZHRZ3j{A8x>@>0L}RdJY*V0&O|<2qp;?-}0WLPuM*mXtiSfGSl^X+(C|A<(~YuFLsS+ymy!io_&o4>XdRSAT6I#Seg92|tg6WU zTN|+4@O@)=pII93U~h}yfcyG)UP>0J*yG+|R-re#_Vpu@)SePX<-rTG^0=ZEirrm(-%ZlV;>6pWj{nlB zHaxrhZoOd>{K`d17B5^(`^xFG>(C-N(bakQskZ*4AoqRdrlm0C$1SM6^I&(-3Yldv z)d=aF&50%E8jEnV&VVNhg9asZ9sE!wS>_(eS*<5=KDkZznXc`}0 zc2_6c4fbg>5CZ7XW}DJ>dr_G%k*JyIOF#r5a>c~0p;xlpX&T6$TqZ_e*Q#bAes$%c zye??3zrQI6@e|yOL6P$+(;vtMBa;#*{jprnr~?4d!l~$Q8KLo}caW=@Tf!5=d38yy8nk^cZwFE{MGzZ$Cu&uA1oh z+!V3AHX5a>>~1PnJ_*X4W{G28(EVn&+(_;wXKf%vvl^98VdX%&pXnTwNGo;sj;4KShKKbb*UG3nWM3tGzoz>tuy3*ekQUn2u}q=7g{AA zhtZ67IwhnaQgi`;YBD6$_+kpJc9DMnxc03lJOS+5TbjQA-*zjeW000R|#y0#;bI)D3IFhrp06<=3 zHrR?71u>5{B32csHm--hPTE|Ay^i=mSFORb(%noxulegMho&!QX5_14WZBZ&Z5?p9 zZ+JfMD4a?i9aQ^~#fD7xfk9oU^qNr+0?ZZ_2egGxz6R4R*y86{-?Y(#lb!7|x7C^N zx7DRShha~f?gsQiSx6roe7cmxH(&f}P!nGiWIxmjF|;l<&`E2o=M4zDQa z_pp}By>6kwv(pu4LPqviH-!a3(PQ3J+h0w*&0~F*Z)2qwv_>n*7#Ff<8t z&R8=3@WX-yY}ddovy$LP0jdY}%zw)eE7r{j7kgMi2b>toXhF!B;0DuuGuS_r@{#7q*x_ zX#D|HZt|;?hpf5jJUapF;D^8rLL_{*A?W3T`xT-A7;ajLw}@Wo2n+;nG^5bqKML$e zIgS6O!14tB$8EQD1PmylMrkf}k++Op_jFPlX{lfLp`aq#F^>7ffAkc&4EAi}%+p9> zq=9>8JbQ>@S;R*Gcu?2Z*lcXy&p?{{gpJBZo;XG<@=Vm)#ML@{@}X?BCWO~zzfElI zlIqJjC3C0qQ^{`)S#GQ5n(e&Kfp7MdJNN0M=Mu%d*%D_bO%b7a6ah`fUFTMeO;pPa za}6iGr3pC0c{w!U8msc{g~}5QobiXynr&%}ZT64p25~90JyB+21KfV6JG& zRO}VlY;QYt;2w&nJH_K@m^rJumm3D_)(OSmRDrsy*LBfomd3gO{VqN#OaMUeC!2YT zVQ2;Yj$GsW8T_LwssSo+Ik1$xHFLKe%R#z?TU?cvJH&p*%n*=a+(4yqZrc435R$1{ zeh3O!Ub(bwCeytA1)BKyd4olKXPA1|SR3w%Wxqg_*Mm?{Fx_urC3`6|_WU?vOQDe^ z*QeTL1uRHFq=V`BQ^oZAuENxSM?Ql2S%j@E7u-+R^2KbfWZgSsYLPr8UE`{T^;HKd}Z&=1b z@v*J{CBnBg^bjC$7F!W9V0ww6|50*zZPj5d<=ZI31!O!tkEpz~rAG7l`3y7id{e(q z@3kL`$wtv}DQ>}cA|g4N`MJ#*9qn2s8~$a5_r_9Aip{0~lcmLAI!6i#k&)aQNcn91Z)|k@bFe5k&9=N^f6Z8zMl3@C4W& zg}(-`P`FF5xIOCo)=ft^cD|K8+2UWN8%8oA`P)@(2>B|EeX?gHnlbvZnZ zgmkkPS7cTi2P>mianoJdy7mxDBtB!yPa+bta+bHBoM+aTot+efx(R*_eIetWr{9_K zK+Y#Zt~gyzQaB~HoLGvKPl-^HDiSNV>3Of=)SH}TY!`}egu)B>j5pqF#dhr-hq&mj zsf>k$iPUI;U}w-f1nnpWAYL!cRvP1e&r^=j)89Ki=Cg2S7B|p*EhS4uNK>J;*%$9W zRENh4{+zlPt4b;dP9)WsoV~2Jy)+exd&c<`uG(by3e;WlBo=*~(6O-67Pd%p6&+p2rUz zQcS1C@((7j=@H4kY$a1r12m@tptCe0y%0G=IB4!w==+Bkhk8~D)7O#xPln%j5CB8; zI-d=8R@OQfI(qsV$4P0Hg}6C-9m}?#)QUGLZIt1Qhhlnuf&*0QxPZh?_GW#|OtlVJ zr^{Icn>xB_Jc{2_+sG_H5v1dTDyN!0stXfxBoE|OWA4;?jvSt%Zh3}4LBKP}{yu3NoFGEMM zo1P@F42HpTS=vkJ&#yW^I=_!L*MF=X4%Dc5;nT9Kk7>*&{`}DbH#=^%P8$JpK@QeL zx?FTxA&y3xyKOILZwI4{?LoM^k(?bE(j=LN)xt&Ta&5^)OanIps{9k4jUPN6Btm6l z&IWqoM-EMOjZBI+O$j_fUJptjgHO3p5lI4&MN5{Q_0Z-Hf>zyUsu0M)RG3~lM#10E zfp=nP`%30bcb5l7eHJ@my9{Z8#IOK>ZV`}&I#wQp`H`fpR1rPx1!o;~B-Z(sY$D0X zeIF^CvFM-g00Yp5HF{H9(eUS-urA&Kk;KL7bS>vVBfr(Lytkb&idP8MFTvMs?LM@ct`=}HZn-ETW zLwHwga?>VuuIj%nCbpu*t_oX$jzn>c?)=3$ColZm0(_6LEZu=~?&5Vi$Yi)4D1HF= zB`iw(?`Ul}4J2F~0py7j1H8ZsrYGB{$iYqJ%Ovda6oYg_tL4Rb#( z7C(ItU9bD)EEkUQ6|3orF>z|S8nVoCWt4}pWKD=SC|zho)2e;6Dm6NV0c7>1WcNde z%KGLFcezpnP%fE!GBW!!H-C>FhSFjBO;;Y>ZQEihi36Ar&q8#}(9L`8fL9{k`~qZLOO!h1{n-BjA>GO>NCc<7C$#WQ+)`_| zCdOltSO_op3S`nA%Kd)eXH+gnO<|jVQ0+H(c=#wVzx_4+Vx*kcS*!`_K_z%93RGcA ze(DRkC?HS2otMe6zrKe zs7fjk$cb!UIFn(M@9>RJ@wN0@s{S@-mgCvmdYz`kz{s$ptroRt!aXs#G6 zkdP0Z2X&ErMr<<$QnL-AU7ltQZ6z1yt$p+h(=;qs{JOmYN*>t1jajJ-V;AG)?ifeVrb zF-q6G;_v91x3U>U|JawgN3MrR;(4inx0!<1HdOK%!2EHg-fl6ItbDdAtZ7}p#R)t0 z!cuhy$WUro+FNzlgiWCjfd4z*4-Ne$6BFw8ID5Cph`CUkQ^e$dwRWY&JHi3fm?G$UIh!5^9A%eF1&tbc? zt@%s_EmHovhsB8f9<bH&=s9XOa(B~<;`mVi_Il|5;`^UKT>PRNo`Qw){ zx+?cZcjB+ZNt``-HGB&KIaaW`rCyS?q$+Jo)Ew}DG#T}m_YJS4WTKpSZH!k#(Jf+i zZr2vsUS2Kgzp&W8Wv*$!pR~UmLXk-gkNMrt_X`4{Cn6X>V777#(odHf!H8Cwz^XH1`8p-xss({fc^j zTr5dUwr_LmW{bP3;}+|Kj@drvGFB*yhN#cxLw27vDu-2-Dsji6S?aK|0kcJy*_GC3?Syl`1iz+N^9gX zLAa1*@(&m1(X9mA*(8eL5LXS0ojsGWmmMg@U52Vx%TYdM-K`86(&BfBNXNfznpH#C zS;$D|*TB)2f?;KN>G_sQedUw~!bU3hDnk(aY&70y>?F&(ctl&bJz?+kF{sApC0xqh zIgJ2#-eEYaNb|=T*%rBFVt;dgu2NwWc}Q5XXuE00G|S^3r>WTUu~#0Rp-PU&`M>yTKUcQE5eYXtum2cIo-J1OqC}P zS12vsnKE&E*G&KC+03|Q5dYn-yS2g>OxYyWFH5Lwwg3Y2b<#hsQ5b0PxMIru$Wtf) zK84M>;AuFaBs-f4Q{k;u+HphMoC(YD%4~NLJ<+9iwREniKPqL*4>srJuCw!WocWmc zJ~vU;x>J~-bORAGg4dZQI})woOafq=OnoUQe0i(ZAJD30-;`TePaR&>z3X*1yBQvr zv&Ge@Gcx-FAHkm8UXagX?9%B2CW!UYN9Qm>bfzB=lR9Hc6WUj4so(Kn1e=to&}Czy z`*0bp^Ix?5=^9D_F%PzM{OM7s^7Z+xt}BRmkqm`c{wjqU?d-VgCep#$#MW}fQ304{ z$TzN`BXeE!znBRxa`Mx^iIW&Wu8zVnK%>H&{b;Gkay>yPcw2caT=w0I-l$urdaboy zdgyqZ3OAe0X4X_kfA_8^@v42o*AF?h{|IDZ1Bj+$zC7k?&VG->nm0f6H5h&+ZDO+8 z4QfPghh&k~4>Mbf#8&2Cy}9dno)4O;fsj((i`qNW+(6g3qtArGf5g`*{QtOPD;rdCSL@tGEtO{S4}E-j*~S(za<= zK|Pi1&6lG$$D@OCn%qj$!{DR<-qpx`h?rCQOUAf1)ZG-l3XhY2k%5RJ|Iiwvu+V2)&=V$u*`j)ybfQ^a) z&^9*Ey>@N3K6DHXwz)M`OXOmSJ{eXGBWx)m%ywUEtdlD%ghB4_NE&j}W=w?}=>5go z*|Ff(yYQJt>2$cOWM#`;qgty8f#rPAiO_SO-SGe15fHCeW!56hFuwY}To?Q~(UFzr z9B19?Bo~HOi+%mAh28z5@S4RV-Dvm~Sawk|LRKaK{VU z=O8a)vxi`!@9e7*K9~|ffB#;P%yzF`XBEW>4fr3GAuzzS!9&WoaPNF4?D^``quKs2 ztHLtO5x=r!G4s_Xppk8$SK+!z2MjYNpwAem!ZmcMFSVHDG!`Jg+@x7v*;Gr#i-F2N zZ<%in9jeBm5AA8XXqWtSOsY=&VJ%lcWnwqjSZGJVVQB!{P&Z4)LF5i5c;!+|Lh8bS}^)x4y`gIWb=>reCm06>4OFz~N0e_TWUCJg#7>AypV zC$OrXO-^|6kT3xreCWVBlN+QPY!0izvt+(SG;B&j@ujU@T-#>9Yh|mjQqy$pk@jEf zq2-!xqY+Uv?R?<=w;VRD{8r5vrXRM!m z!tq?7=kj9v|4ZOm(Q{|8jnnFB8=exw0tB+N_t%wKy2}}-Cmlg(bdQXI^$22P%O@?e zvKYCrXiv~q)qu8Lield_b}iE~PKtY`Nl+MKOjHyiS%K;CFHA?Anf!LW#n;j|al9I6 zxa3vAViiS@&Lb$T!R+FBFpt#ku+u_OLSQjlp|5Zu%e^_`w}A0SN%+vVnJk~+$A7;U zvhw_y=)25R{w6Pl?yXQ+Fb8IW3cYjX8?YcR4H6&HQa(7Xi;%?>Z;j*0X%eA zxrmwWj?TU{h18kSfOhM?zO%F9;12+!2D4Ta=hutx*W+FR|F7V^qXYE1c=1?`jY;lK zFyZ9SGfI}696Wz(PV03H|8Pl~#wm+J)t<%UxEFz-;thM^Abo7IQ*p1nQd{Es&P7nI z%b$dfJSZ)HV1)fb6}B4qM}We~{y)Z5EeLP&2o7%~t<>8)+@$slMmb+UEQwpDNyW^_ zm4B%uAEksahsI$8MAlixfHsLwe!fJ*ic9%*PRD9tN_%U;OL)Rb_O@nA-sYx<>_KZY;M~&^ zGoYBwKNTGROEf)s(E0N{+w+?+6?7z`hyL{VH04G(oo>0UmBnnHDPDM(fmw-F?c{&e zVx+(Ts%gKihvN>CX@YhX8*8ZaVBNt2kpCxQM`3YMy@hZByjFX8ukS82btF$=75t!_ zY`G8>$yd23Q=qeUv9*WJe8;-5YO7`$u;dTB;~`f|aZy`vsSU*#`NFl-7QJ>~Sx34> zkwW-x@xd(cHXDdWO%ChAp^>IHW$uqb$FrouP6#^4-~F}_Ew6?>O}nza1HhA3PYA!R z38holvrv7wOFw*FZ@ z6CR=cfJO`bt^GzYYMQV5wVz=yQmR~fkN7RV%409oF6QsKRZ=b`2TAAZEph#XyUFV1 z9He(rGB`2Lg~T_HNd04xId5PI#gbVKg$i^vR7b;&(Hf2AL!Xlb4gt;7JS47=_xLt8`fjncqjjNUYBb5I zshVTvO7KmvXc*w2!LQB;P7Im%b>Zs!D+{(2nE7y8rD>|4wk(*wi=;l^9OAb--YSJD zVL?gOm_vh((Qk#v0#9eFSTYG$qr--(X3cvBN3*&FL=?X-Il@Ql8Gn-H=tC?*$iWU9 zC@sOj#QfY0oRu*P04uhNQy2S@WX_%-ZPzm+UtXGK1lfO}e7=-<}vz2z80R zOuNFusbA^V61NnGkcQMAbVljCY zQFGb`WQ~%O4ozuec3I1-DeQ2P5{u-?PqK@&WQNG~#By0E7?bHMt2d^MD4Bx&z+_Wi zD3kS%^;D;!gcbBHB$Q!`DF=s0dq$I%59#O>U#Uqa zr2pjt+G(_LP{9+ncLlDjZV zDLJkKl8w5h5ir_RO=o>rY4AL=`3QdbEQ5CI)tiT;L>Vz5((ZOVXW|VPcN5M8e!bie+{D|}|v~%ka!@36oZ-fg|hD)-0 zq>qvU$iCZ%XkEeNf0-)Ti^WjY@}BxEAS@arIgo4-g9V+}M3H*r% zENmc!^1;)1>fEZmNn2t#s?BgeHYERI{|5 zlC?wIJm#7U_t~MQI~T>b+9e2Ie;7vcCPY+3M=GxDkPPGH=I60wU``?=96;}|yOm-N z+f8Gj>Ws5W^D6WGN$3nO_tj`KLXm*|7VR=Bu1z<@;j%yvcBAj5toAn&^4OFmm@q;6$qz=p5A+!jaWalt4xM zbCDE$&XiGUSBufFx7XSWgJpL(y_%d|V=@78D(RD^5A=2X!*Lcl>ouRk9+Pnc$pBS5 zdwA_avG(eXGzR_OPu1NGTA*{tzsC$)s^??%j;hW z=?f#_O)j?=wxd|;_Pv2%=yBV+KXuE`aI=Pun(uy^fv%IYwk8&jpg+$5lUm)fSBsnD zP?s#L$0`$)6joIVIy`I<#V8$t&GML#F1LykR!HAnak2W~C`mhec*PsO$0vM$mF1O* zRx^3k9*aaU=EBY55>d8)_mx~#9hWiN7)f1K< z%xmMj<&Boi{kd3d^)|oo)sC#J*=s9m$CyhR6uuJ*N)wC^b25!xnhZh$2;0fx{qSB$ z40Cc>0UI3iR<5P9zi1t9E4~DaQWCQn6=)PznwW)a@^5dUh~`@cEsw#T?B{rUC%Sj6 z&(Ebvr7UKGYI-ey;E7GUJ+`}hU4I0C0I0bYZ7y+NPP|k{0f%+k&RM??bMoM2ni>%h zwQ=1tyEK1nFBi>T2!QJc@2RP&t*xJ&oUKJMpr5X;uR7g+u1UAv`wcAW<1em@3}LPm z-r+O8l+qlH`rf8g=qr_{t7+rPd9`YYraYqP^2=Rgou04&`iVlW5G6(T+;GKO zyzXC5>cyM3OU<-`qq_xHf6H2e6KAGwr3w zflta5lEiQVyw&>fQG4yeG=RoYlTTqE#OQ77vG}tuKP&}71G@cSr|0LT#l(tO(^hyu z$x$$X_iip=U<&$6kEtY8#p>C!Yt7zQP6urZH7g)>e0va9 z32t<(8tv8*iK{8RKV#AqaVf+?6^F6cu8B&GQ|$O@%8D!60ofL3z;FY^`F$Y%8(u*> zJ)eyh3PWc$?SACobY5+Wi)mvB!{5=@NZtl8~)`aenvm zp%qr#e5GewM)dB+{nWSWHK96}g_ZcFSJ;8`Iq{au;X`O#mZ4->ECX&@k+qrCkFu9_ zu-aS>&1BV&iE-H4+H*aN(siT$aOeqDXyTi@LnEv>ljbgKXAbW}g0zs&KFK6GEwf-Z zk44^;gcpiGM6IM)5I9(zF&Jo69Q@%?>_2OXUU6!|Awc{HnloKN1h?x*_P<&Us} z6U|1qY>(xoEeQdB@6t!JXDAI=5>vS-U~!?)rDU{UdX@3T3~CoF@aHYyr`X4sB*`ST z4ZRdfe-t-+CWunxZtq;-11;_C9dk*~5LbRq)N+-|?={1Te7USEFJ*O5`RaiQkXai2 zr2wHiL;opf&?@w@?K=F~4qS1HaXNZ8;fTeaB|oW%%!p#zrX+bA8<%NqJO1ZP`0;W0 zjIHu5X=v>GtC?_@1W__H@YTndQj6&ufp4o#DqTcVlJDO{RHLf6jd!sGmg+f5_zrw* zHE-+b7Tj44YPDqs6hYjjh)g;U?#*3aXK_`~$Gv%u#vD!hGkjjXUnlJO&ofp;a}zN* zcA@b+3rxeFKhBDX3Ji@urEBxn4>b8#?VyXsIgxYI9tXJ(Q}ci^z) zxOXNX4@!h8VCrNpO<5iTy>*NVv{pD4XZj4Kl`y|ZaiWWcoDCnHPTJeZ|Hvq}OCcqH z%^C;{E!EvNbq{WBLRh*{(2;veSj#-1f_dKaj7kvQD}s5X@g^+*C9{6k;t5vLDUM=M zQO5z1PEl<@*E{@}yaKCDdq8HzjQ zxq0BRBVNLKE0wSkT1C5mvfFwiCOJFg4U9O`v1Gq!hvaRM;f_7uJ}31Z8n3vEt9oVA zTR*$NpgK`M8CW3Kl}Jc9Ab)muQF*AznG?PdwY8FL?AFXw^@^u*_jEZNH)IbbgFS+V z=_eTaG99CHV=x$*v-0WXAtdnkmIg71c?-H$_|HVvO+@Y>f<3bJ7Wu#_dMEd{#Q)R# zhuwHmUy#{{O5J#-*1+Ak7uyw?8evu77JQ)S)>!T2fX6tkk{GKdJ*_}LG;7>1G8Q>< z-(PrZmFKCcM9MQv=0oG|u#39FYvNZHk&^Kg?^Ai)vZ(vQ{qM41dzCE%vU-X;y_q+@ z>Egtf_r~hC=;yKYKayeqN)J=;5{I4FH3t3)>AET@&JTKi?Qgp)ntqErB6J#F#BvM! zT>NKARIR)`H$)?zyZKg5Mr@T^FIv-U1Ih>)OQ8Lyae8as!AyUtv|V4+DJHypB$H#z zQA^jHHQn&^P+vJER&9BHZsYrA{YQl%t+dw*E~gQRkzdSOj(nPTv&pYOti|0$rHP}j z;3JEuAf*Rg84A#%&rbB@$v9`f*Gcg7zYG{(Tw>s7*e-x{-c5V~VTbR)FRwH z04DfPDo|O$9Dl}?pB2piBD~xMTeDqh!sEtPhi#|HD^K5+m*gB=g&F14r zN(tCPz3PV@J{Y$+9Oh2i%XHUTtgCz&4+7kA0|g^Rb4=w{}c&zJvZ|P_%9?{ zR!Q z&_RU{{jSW{+!=S3kLCKS*j%GO5hP3Ng80X_2s7+Q4ABq?L%?>}4-Z#py0VFeuk*%% zWu>Z*F8@WKWxA=tyqplXbG)2f&1ozl`!G&p>z)LXfcC9d%(vY`1Vm2*h|?vvd0=}> zF>TYi^tN>Cb^OGEGdC-si?ank+rGk~lxO5`haGN7Q`U_XZq=ZbV{_r-n=(+zRIU~u zQ2oh`HNCK~04gC@@^XdSKcVW3G=WFr@}T3wGE+V)lRXh%w@k(U(P_-A_X|d@r2LeE zxNbcO%6B*T4fZnFDHGml8LtNiyO~hmzftGRIaD1D?I#!A1s_MeAQeJ5zWC=2G>Bf? z4#35MQFx#pMA22W?G=wrxk)FB#MoT;Xb(Pv*kJbi*UG z=-wO9?GBYC5fKp$fy8&h4+cxF4n}0@-sk6bJQaDt{#*b+rT&6+6wNSAS!oQ#kQam& zuWTG-vw2M#ab{Ms;!fLO`nHg0-m}7-@=W!S?_Xi2>kis<*&!sN(obL2*%2A=>TJ)f z!7VF8ubtV$|HlpI4+Db1r|4KdC+j;ougA8qumGQn#fRIyl?M`zOQ%oR(f|WLb9YNtACU|I-Yo ziud_H<41+Jc85Mcx!8IK$Un3Y;@L-k)i<-dl*$RnC+(Tu-d56g)gH_>nkyoC@p75B zG&$Q)dr@E-YRM|HU3`@pc$FHGY zE@|pozauz2w>tkLP1GNDdv_>7A|9UBu;G!J*-nQ@rHilOs>Y>vu&siNUAX#nbFw>> zg!+z5vWx|5&Kdc-K}w5xu+BJ&5G*MaFQ=L6u#bg%OlNve=6;`#&|j=d!i2fS@Ft0` z>A%3Ujyb0cl=7?I$&X)g#unaS(Jdq8cE3VF?1^Z#U%R|3U3Bv?#iWu9ElrKHEO;HCs$yy{lkL zE}_c?tR^*`$HzJ@&Y=Ip#)Sft(8e9}+G)l7J7jbQanX=3^Srs)+*%b{kYHGnL_(j~ zc)WMb8=%Knd4=AIRB+Klzo5!V-cfv0Z%Poe3_^NAK2Cw69<09-NVBvXZMAC<)IMbd zLDQe)+<6Y4?TfYV(LLm%B|j5~VSRuG@%i~p-_IcahWEeE9U>SMrQyFdk^eM){jIDj zEE56#Cu+|G`TMNph0;d`|CajEMe5FX%bWK+TkV10-0E+httz3@==-v{=5u=s$TjX? zXx)}7%);iaSOEHXPzb*Yvj4R9+gQ#|Pi{ZY@T^nqrcDK~5Sq7rh0u z3Cdx)li&NdtxFw#a}A+S7&-P44~d}si{HjnP%^bn-;Pp7zU1}_To!X%637sBO3-xU zW_9BuEukn|nLfUz`~juu?oQife`jgMS7{qMdO2gwysMNN3wV!s_z9&6DcSL(R4f`> zeel{tkC`QT7(Mju`J!3_Ye%Tv&sgYIV>jpbFm4Z(Ezx9Eb*leq-9qV16OYaf$SW&E zIHW^?dAuK9cB&Hq6M6KF0T&!AArA{_>H~$L1U@9Y<+u^8r!FdLf_khLjnn($90BE0R;9?o&(wnP^6Tf>G zWjf+nW=(aeN-e)ok&)DF&^xN#>fzAP7=fF%)~n2Xv$>^!2JoQ?>x?d+XlSI>H01oR zEJs}=B+fr3)k~-zxN7uvN0TC_8VUI@-*eSb*U9I<3);C)o}Vvk4c=#3tZc`|13j&+ zRdkiLx>Q%Ha(sWaUn#vp_^6PcDBlINHtzv|ZqKTB+D0eOPl)5F@_$o^>iNDVXN(qb ze!RHSyn+SoIMJiL16mIbL!fhMev_`US)Z!WH71OfI|5QmPgaekqpmQnd~R^e-VUME zt_!DTN;3D&RoZ5>=R+1gxPba6n(pxQC2nlIOo7L>{6n}R6_3nWPEZ`rFUCL)Ex~iQW=n4u-Ncg-Bn?vxAcWLf5-wTSs zHibga09(Ke;B+0w*PUB}GN-*;EwuSB?^QE8OC~31K`lUDjUPU>@_aoWg$GL4Re0Ds zZS`x~21?Qc{zY=+%lZRw)gJ7bVxA8q*QmB|G@4B{M2U+tv#ChEmXdUv{>D#48AzkR z)0qV3y&lDwR=i9b#+Vh;asoVo%3S=w=ik)WNB|Phy^xH>$rvfML4iJIu zV>?XX5aN#W(U3gyuYg0fmw3Y53_S+JA3Ebaiums+#YP^)F&GF87?uQEuiMtH6(SP2 zxM)A5F%f`XiRewQ3=J2fSzx3YP=&hoH4Wd1v>~h$LhOq`U79Cp&(i*sF|-&|!_3Z3F&7j$HiKFy2b8z2zFjQ8+MekeN?9E@27aJ5nX z2oVDVOf>qZCk{C2!neB@l67BF7(f1#ClCHt-(Ci8?z#nIW2d@aYpm)skvDGdwKn&w zO`s?$78W7gE%4pVgYtxbp7u-mXx-VIw)?Mx;IGEB3()CS{M;rGJ}q|JB?2gfNe-2G^IlNu5hb^znl;r{(4(a19q{WJkg(*!nhxXJ9jl6Ho&uk!T z@EPd;4Bf%ti_Ov6dED4~&? z-|GoD6(y3JUzd~P+_2KNbPncY&i+;U=-8A0+3C}TsO;=inmBNv&1*5$z{Eg=zte+T z@nhT&C9c_0)!mh9E|bCTBPc&G`?!s6!b-$5Ot<&hX8NSQzEvD3^4%iHZNU~yAQczY zC41U@=lWE;s2raz3V|zHsk?Y=P5uCe`1)<8NT(u-#R2D}uquCLmg4c@wWyHDD)xBEQ3bAbsXFQVa0m-t5vGAxt)tZn+LCdDUOz zqD(9TG~9@%au^SwS^HX-3{M=}snzZ=dW7ivmeDKr;k9ZyhuwLF^~QZ(<6dyAnb0Hr zvM)!C44S~>uA$w#yq1Rv!D(D6wZAGQ1|M_sR z#GOkB=7nDrKP(bdu|0X)t7$>^3+F&xn=Jrlke%H|Fv9v=bPGK=er zmCR?HDpVS8pmWch`Dr|p3;xIJ9WgDcCy)$#rX!T|RGpGW*P$L#nKNnIdNcIa3CD{u zCi~3OH>6GBfOkyfKvQsB@t%jIquuka6G;j=gU54sKlXO9ppaI09=BYl(s~MN4n51J0#0xebjHWFxfAZ{iD2i~B12SD zCE>y?Csyk_`>@6xWFaie=OvTn#}#)rnffMzHj3@cZO38d#ExOr)K-Ujw&|&vop#rd zqL%A7-^T{#o98N$1EgMe+_)RsJw<%g{4aMKw4&m2d`Vj+s5$*MG+diKDf}t@BvK1( zlQ%~hC3Zpj*shPSwmlof5|cqv11Dyyr+bChvxBddui|y+2)zu0ZE;g8k2E3gr^1=e zexT1eBfzxjjuy)pW4F*e?3YUT2Ub>AwnInhqGf6{G+rK?FJazaJ32a^u=0GkS4d3P z$9}l-G+3qWcU&w1-#Id)Bn@`fRJX>!d-M=K#Uyv6BMtJJ=- zS}!c+rT<=>&3XJD$<4Zd{0iJ4 zVxST^D)M<`?W5JmWw8Ss#|XJ-U%$>W>*V(-)033n>DYN~Yg%~0_V1dRV%dLt0Wx{N z{uutQG557pmwSp#?sOZcz6LA0Awd{U%c$ylc1^k!1ur`5u<7H? z@gh5A(_K?Q{{)PX?rJ%cwu(HQhrvmYy;K_%J&$4+>nx;%S4!>gRhrtk^mAp1=@bte zSd?0w1)WlscCRc6H{`P>QgnGolktg5UPV63jY>*HG@#iYiyU52ihB=itL>y2(DnT+ zC@a>z@_u%yIk3QSsk^R_vz^DeV&l|wt}3IXryhKAlzt%=;`=r+sA z@J^etsEqFcHi{aU(?G0v-WJ^xMPr}GlJBr=^>XP=6WKMW()d_c z@$Q$|^NIZl6mmVB8oO7|!|CV=_bvYV!c3?*AR#OM%NG}Or_MNQJ6x9c)L<-h7(Y!J zA8d}dp*S+l`zfd>^z0XYKqmsX&-OhI-=)f=I2vy$&4?vY_MUGLETtkX! z#afp`8$x0{R!a41fl;AVeioQZ9{c#a3W8R+6^U~d)6-oEU$ zs6CBB@Os30L8`>bD&qu}q&y0jcqMQFe%E+v=ZP(^!L85|6e+k_{C7y_hfv&>z?WO40w$o^1RQ}&F{qW&AiwbJuqUnO@A$MP~RG2s2~A%cb!B zDN@I?D#pe*#ZyA~)f=_-3rFY`H))|Eg}g>W4)3>vq37fHrmMTYpvYYD$0Isyn$dGRC7y93sU;|)&x1)4)bog-^#?X?<{Wq>N^i6VZF8LTzz){Z4<+mrdw>)w8MlFfBu zt^E|Jk1dw+w08{l{v%U~#$d_k#hoSh=_=TQ`qC0KVGp;6)l@Yx@6@eOG|{KKEHAB_ z71{uK2ygE19GC>4Bgmth+eRO>P((0gd%IhY(bf&L5vLvhlBB|zliVYly_1WcoG1R) z$7z5LEnfEHhHO>y*Bb1sD1m*&57+5MBX*RsD4wHd%A=AL`wRwRstAoRtVnEZU_x2D zbw;b+8=+$@K^kl%N%Y;3Ld6s7*jWEjT~WleK(!ZCT|u=s02Pb)n$Yl;(Hpt*b4*Z@ z0F}L0)^UzkiV&5-8%IT0h^63e zZMsAYF1rO8uVpI>UaotrAt z&TK?|67y&96Y!X;(dUd?{$v+t9#Q~C95Np%&6Lw=yI9E*oynAvAx*~%W38;R zdW+EKRA;Tp6*2SgFIWEL>l|HEq;MeOqTY7%+JTWqV_%bDE%Y{5Ns(ORSD`rOeo-UF z==1<3mC)gevgqS1N>UvtJCfhwrh9qP|X5aQ zhWG*q#%&NOdWM9%CRjyLciG3U*T<+NMq<+~{a;=l zljvOS$j7oHUea=!TI@di4jm_CKDc}Fz53;fkk6eCp0<1FI78G{4rqEt$ti%YU61o~ zkCHNZ4$q^9>DamGB(xoZlk`2y2mLccc)>RF} zILo~KoLSObNVbUc>!JB&40Hp*loz~L8voC5$l0KiIzP%gHQ;$6Q{I;6>i(8lbVUOkw|3V6gXXmdaSy;y@_KQ>qzex0iUyULGr!y zHud!#OO?5>#nijToJVc@H-$h`$a>!f;wOl~jeW<|8oTVb*scoB0&j{xu>*77yI+$^gxybO z66Xl+2XS#}Y}!#{s%{YfiW@F*e&dEFCx2)S$Z|aX4Uk3fmcSk9{Mf9Igk@V*R10&h zru~4stn|v_>1Ny8{n2;6H$$4|>ie9f9|W>MWg&=)P^Yt;9g2kp2$-;2TJ~4+Zq~|Z zu+4yaAJ-3SruN*_3&9N^;v$=^u9fau{RvL?omuCELgC=%wb(8McTidg3M;O!)9eEX z+g$U8S{sXx+}dUy?nya#*yMNYJalk=j}h_zfGDX`M_eCu*qBM~o;1q% zf%D+hnoo&~x3nsTt0^rfHfDDVvhR8UL;Bqtyd=YA$UXNb;I|q3-g{?h&el51K#I-H z9^vlQ#B4tA9a#0&NA*Du`HV##yCfV7smfwso+MSn=26+6Hr_~%r*hn~_sXeu(g|GCz zAlowA|E_Nw%Tef62~XkAqkU+<nde(GY?M-x&cI1+ z_!CsnNy(?w63jR9Kt9Wnb{l?sfm*)R`te+{Gvu(wHF+!4^ z;h4wvTBrFmH0>E4#&kN~z$5n0Uxcz#lRX7a<_Bn%-rD7tp!z~fwyVgVtvU`4Ze0G% zhLFIJUICRmf~@SHZ|pV0{S^s>bUR@kq#R|>SpzjVb+^HO+0lLPotdF3f-AK4%!el8 zUrnp-5wyix4`{yMQ?J-d2K!W)*R!9f@fup=nBXirow9d-hXmwfHs1H2V(4=kvXq>y zGa5H^l3)Q~I#Qog_c>f!Y{qo-+>p)sym>=3?K$&pvoL(eR4VT9nnH{x`&UNNGZfqv z*>4VMIZ+rs$t>n)jFl#27SaG*&GwsqeQ7R5z!Ph-2AD8%Q(2T_-~m4W15;sk+t>}- zqP&xDv1jcDVmj>ymeguk6G%Mm7|!J%qIHXab7U|k%&t4<^Uc2cyuC(^GbLLWDpgyG zF;8O!JWn~iBWm|x;<{*?Y7PM)5#Z<`(9##>tE6>RX7z&0i?4cQ)){lxblpl^$4EK> z;k+WzK+}HR?Y}S?_sd{H`xWLkynCi~TA}YnvaZ|{>d@f0hLa~SdTAdg*UOoN_A~7L zT;Bqz`HpbS7Q(eU-f_cu`r3s51JUsp6#JV70dXSx@AXKLkzZJ>d#XWfhK*4C=ZWk< zY8^2-bhto+p3JhnK;-*hj4B7UT4# z>YF>V1gRqi!#AsIC%igl^-yRIp*QY(Pc0?hO)BbdT(r>Ab`tZ=)Qya60yYRzm0B1N z4JKf@WvY@0{5!2=h)>>~{Y7@L+I|M}(ntJ@AzDupYc82uXqN-YD_fQv*)9*pKPg2! z8w@~Htq;j>P{{V#Gl>#jTOcvsThBR9L<<;L#_jsDICP<6bHa6SYG%9POEsNTM7UPZ zb}V#AEj9*>db<=Q(L5~O)f;?OKW-PRc1c{l$nfT&$wlNEgI{47OcmbIT6-A+ZaLTH zTf`x)+IOU#=zo#A{!|~X!NJ9;6jjHXXsu)8wG?zN1&c$5J~TejYdz6OqInPt5Wren zX*C*$WQthAJdnu-dVp!bu< z2$8l>)lj{9M!)3(D*L{%^X2a7Io63$MTu6gicBlx4rQmcTI<>5lq!OFXYK+|oYKb?Qi*egKpD7OoC5z)eZITF%jM>Z(kj@^la>KO@ zE>E9p9EHuuya_QI`%&g`6wlg;n&l%gqubG%O#dj6UO%|JF42F%L*yu{0MLuVM^3ZV z;j3>+y{fI1xSe9ALzFZ%y@IGBDgtP#FdJ+J;Zh8VfhtKZ+H~e7%lByIM$lSK^|$wV z4|FRI%HBQyj*oU{Zq60$#$?vq8n?iF9?DIP#fh2{S%J+Fh5B@Hc&yEGN;}>(&$r^z zja$=Ne1Q3<;fAWg!=t%fwfz-~!9H2LyE|^0C`3g!&hu{lNt!u+EWWBoniNiFC%fE5 zoU6LlhML9^)-n#w4|#oWvs!ZIfDe#X@1YmW;`B~-7rtsv=LrppHiGTVbB>66F`q|0 zgmsWzKU&|`%zy**emKw6r`3umi6nD7+txA=cTZ1_;((@sVKa9OPF&BhY)DCp^mF2_ z^RRvS@=CmWuby2K#vW(}#=lNTmFOGe&G0aFH##xpS{Z#$0FAyTt zgR>qvb-t8I6=beK6EOJccEm^biy7!;f3HeU#&Y?yRxJO=MGeq)MgT z0F_pdchrF_h9J-tJF*4nwrQw$!H?CmT@d(1(Y)ve4v^9-83PA=sCVG_K%d0iz~&tG zE7*YC+hh*}pguivXDnx@vy{ZqeUWOl{U^RCm>TlKANxi8LZ{pftd|DujFHi{m#(?Y z0Or7=dG}Y6eXEh2Q>6%gR%qnN+t#vWW`t^dO#D^mo;D zvHnc9M~xlZHH4SIhin<8M4{rtVqm5NB>-joCu77k<7QmI`R3= z!AW>|QSPTC@7Lmy5i~xT4ptR<)eQo=*bcZHC;$|7RBvKqi?N#N>BKn%Y0+Kr#-Fh4 zXi{OPF?$&;Eqh;IRBGp!ma`cN#pKaH@zOOCaQ0UO^1=HIN{!}VO9Avi!b^-d?_g|X z{W`?wy4WjL@2Zl_8`95cCXx>uFHha}Xt+ncj1K!7JLA3P@lRY?kRZ_1P7CQ0DN+np z<;y?eR6LyA3~E{%Gm~|1QVgO$dK2VSw+nywqQ&|mExLO3yBFTQytU!(5?p9J zVcCoUE3S&Rm4}O^#tbh~G_njt#P+h2-Ibs!K2lh&Cs$aja(K8XDb#jpsW!s8hk+Ah zywjyZ8sCTnmD`E{9yn~%#S#K>T@^1qgqCodFFHuDVKPIbO|~X?5w#jZ#_fl{80#5x zvvfN$C}V!@pliQvm(`y9x!MqN18hu8*VlRi!-~^)I)4Gibd%ta~GzzFm+N)$H{45v5-}q&X5Yfc7xH*5A2HF7mwgYp4Op{xGkCaAp`iG z)V}8ZhzO;(C)rVJjE*p3c?`GfN|(9b;E!|Y`dXYxyrTr4tXf8A*(!pm0QOCBb9*Pqzo>8&fG(qwzr2r zqAyA*bsLxX|7an9DkY$I5yYe|x*~#zn(hUl)uToL8Z(`PyG8mzP^hZ~1i4$d3k}^2su2 z^hIAscSvK6NLleozPYA#&YIVYTndiIelG`X$mq7Vcp$8p)Z3fcWubje6`#u!_*^rn zjrp!RLGabwRKrmPs!(zU@tHPh=lDNdT1 z_L+hNv{!>ix2Pb=exO_j?KOklzYcDSqv%@N$!)Z^Up!>5_zbv))X0;klLt>IKsx4Ihk0=bmBaW0c~R7SG^mYonpm?n`1&0@=c_QeCF=vo_Gr5qLrWZ! zl!Z>|K$G5X^9rq2gPROXs;BT>G++^wyw>Z+p6# zlk%wQ=iDy^_($z0p~`d4am9}J_A-ZZ_AGqwb6k!)C>tg+Vm4~4<#Mb6iiRx^ahaBl zAq#{=(xr56nGU6BBK3&`4xg1I(5rw0v{ib{j-FnC!i>Srw8!Zko)^3BXoaUY`lJ`c z@ZJ&Dd?YMPW_$PpKcYo7PbIJ$o-~z4e#zl>w-F`i!}VcI_J9n59eOFU%aXwM<>fYlPxFf>Qm`DnXQQhT*`6a zjUoOP4HA_NX~yuTgLy)S@28b+kMDY;XrKLe5iP6@^mnGGjQi(qwE*jjPs15J)#lWA zVTF;W9bT4HXlF)qd3=9DxRF%mriupTBi}lRmUvy>*J3-^Ca8Jcmhx=$`~Jniy+jv8 z9hX8M^K$suXC^X0&YWrgpl_f%c%#*usjAZ&hCK^3ox)pLAD(9dH~Foz^Vwcw!|+~G zK_%2T-p3e&RrAB1Y+YdB>!W|vPTWfvmUw%Ig}l)lpD2aH9sZqX`c`Z-=SlsHHI_i8 z*S8VImlFGxRJ}G)7*Et!V{2C>biSd25jXWq008EsuwrCB1prX;QVxyQR+3SZQ=Ko4ilv> z2+FW@kN^PutWUm)tPG=2w;q@*>&pHCrRECq9>fZbvhPM)8Un0>O{sZbcJXtdtylLy zj^j7&=guQaA*modcr6KNe&!}<(?8HCtM2M}bUYQ$%xKKYpvuw4tJ`D*BOf&i&(t3S z10+hUWka0&=rf(`7537`IH-1vC6OC(LKG37`*Hs1c;7(C51oJDwy#taNu%p%f-g{wL)fA<8*#fzk5 ze~mP2HLY|I?&84RurHy*N{Y`Y^rn99X_xeI~%9i1o*G|Z6|)|r-DVS)H@6XBD{$ri z!g^+&;A+Ib#zsezrXTxM73P2$B`mButQ#_aGh{b_+W(-V%<-uvYngCfRG!HtVq+w> zuLo}Oc&I6ZC#*}~Rs)HIrx29sR7+RrI+yN(kyIA1Jn6NoaXU@VkcEUn0#DA{7-~}D zcZImPtk6M|Lh1O_^mHmJW$5eZ{q;WM*V*T#)G z6-p{*qsk~bfo~OZvc4);-MzZb{$yPSE%dAyfxiGbg=0StXzBAyWvJAT(FHn{$vUUo0&9W}0IhAMDHX_s`fO>qT z=_xIR#Isx^Z<%W~C;jaOa3-@EY4R0RUhDso9~7B}pHTMr5`=n+2hbRfgu^p0FiP4n zyRt7At61x?Sg19~w2l!P%72M&KBf6^-KkM+(S@Am0c|nCT5pGQuym>;{c@Oh1nRo{ zjCdqu97zl56}D>6Mq@KU!Xn2u2RmRiyhsG+Cxj`tJc34~0j|7z#?Q)B#BJI~(`_AZZ7Pm|oF zov^gCqy#>B*Rm6ZC5cfKek1C|@`A*$3h(eeY9;JSiWo@3Ga9&wU^Dab{P+cy zd{0KVq7C4Y4l=wM^!jW4fMl=$t5_01 zwpQcDDu#|O)bJ938c6cVphJ15)+{)DH8?y*lI?B2jw)c2T}Qu6SHfkS*kirbmHf^R z5XV-1yQVQ|PNVCAc^#3HM2jL;{gtGC6TFjpxiS?pfj^j%!1qH}IXOPo3{chVuxdCE zgRqNOpb;^kVEPsF8-)A*G7kQ=?|5)zMowOD+V?&-AC-z6PiHkCUdxotJyCHJGTS1G zN&^RY2IA==!xIqzu1D2Z{ewuQ4?$bl?08ARMcNcZOFQ?^~2ZDNs&`-O5kkBw_k3l|KGH+&wSga@IA4kEy zAWidGjs+19>7S~d@56d}==<|;Yx!Hi@$ddIQ_3+$g2O~zmdLbC0E8d3zP8?7oBSK< zOyy=^acvtl_yB=)Xx_xGn}PFd%xeihL9p{sFu>;pDEP{rLe29{oF6n0{-s~dWmR?g z$bxc$^|ayDS~2|Iz^V{n+I7`Iq;PgCf&x(w0&ah#KSE$3qvFU8^~O2rygY#MP3Rce zh7^4pkqK=UoDiOZ(?+w~#(={HN2v^HN7ugA=}!1?{MkmRy_0M`A4*>x>k+CwqG10Z z6ivV;3ycYJ{^M&!v+nd=9u>AVrk^A7=h&GX#y(0ECpemwu5^DQ`+)Ji4K;@!AkP&O zkvQ?!7663u+wlP78#)6*?>J<55gjvcB~uzxu^PE5V8 zp{SH)dnJt8+7DHu43AFIe(}w`QK$&|I+V%U+Sqfw2r`VC+)QoV(!?VS2#QYrjK<7M z%%ze;25vSfXN1!_9ZYGqI}BTNrA&<8uFT`95;1eD^5jnp0o;nuk8hHn%Be}Pd*hkH zYr{Dkz7zYXKltcl?-~Jm@AT~A5rmn=p&5)6v0;0EDkjf%nWQoC;~S%GCi~1H%wL|IB8LssEen38+*IJ~orG_$Y%4iZoW5FN4}^3JJQg%9TkQ*e{rPYQ4VMF*^xwqP2-4`4tPt>P081u)^q!M74DV`KOP z0A>Z&mL4qPPO-+znfYRZ;ajd>_>u~yL0n!AHtUwrWlI47=N4VKAHKW@>l_Xy8TZ2D zwk)cgHhHq&C)>u~Gwh>wZT7CqtT(_W)rLJoY8PkwNKjlMD!gX#Ed zZ>G697bfA4-aZ=>SIGWXzdMj8^Q}+aki>m|9J0{D7t*cTFA0MQjxanQwJ{d#f= zD-Q=B)OAv6!%h^Bfc^%yTnecV$xBQO{SnL86^RBH#@|V4wY`iJv|I;Fc zpiKn41B@&xiAh%CBm=%BPT%2%m{eEJO?oy$PTyINyyVsp9feN4TXYQI^FqNvc(V#f zyQlpWFz!visRD_T+>Wku8YCs!)ew}3&*6?-ikMYw(L@`>37-?e7!AmE|KLuIZuL$2gVnF9zcb|>kUGS(I0FV#Xq~=G_d`Tsei5v)!x#4fk zleB;9sG9YnafLmgWcnZCqAIoEXo5wYz* zkmHDuI-J0?EsB-x;Mg<*S~yitC?VAE1iv9@Tll=ozFf~@u{ninNu}??cCp2}O!KST z;U-z^fj$p_*X3+)fL9uMDFfkxj?T`It&kxFa}k`fU4!FrqZbXk+sF4k*h(kS{}^2p}7ePu`Q$ zXqyNL(fKs5rirZVjw^tfB7cYg%OtM1Dq&onJU?dpCQ1EvH^vG8v|8znm~ZDvd%l$_ zMtPOn4hH4<)N+L3sg&VV6FO;Na=-YtI){i{vW}YA{_iuKvfA?h<(-numZ1EIk z4i|NPU!($ge%$XxL(%7LL3<>mxE7V=8TJNu+bmzSSLPGV-=?nnXHpP>D1dBkB|Ilj z9Gbe$=FrO;#53-4ScH>^tMg_fe>TVh2Y0L$!W3x>?Ry7h1%{%TY zsPcsV#*>TRrA%-dY#i*035|#TSru$se+D9MB%v`$QY7Z&1+V2=ivuUgzJnI}0NPk;$2cHvN9ou6$V=k;~1KLgBB(XyCQ-h}3)+|Li@z=MDKc1e{?;^R# zOQE&fkCFCn?}0Cl2U^#Ms7{Nd|G&x}la5?I)gU(LD(>O>&m8xyr)>mfZriV}Jfcwl zC>*-&tjYg>5@-J5p8>4D=fFX`Q7fw5!(^~E=X=bLV47#vj)(B^pT!yW`0s@=Et|>p zr)P^sr%$U|ZfX9**rh5XZEn_x`vea%rqSpz> zV;>zHJj}3({x{jK3_%)BJrV6{Iz-WF+K-ZgeMH?U4KSFr^Oh=si&@{`>yUspJD69SUQ zQk|Txea+Pk(lj9els0J`KULD+nX`{!F69zpDA2W-iJL9s9&O3bxn6|kZ>f@HV2LBQ}G~AyjJd&)q94n9kiXL_`!UW-0i`BRlIK=+{8avB?sP=a4j{+hhAV^4qq;w-)(jc8fh;(z(WU5U=0H_oWjXSLo+csxo+3Ul2lq)xRa>s zMcTh-A8vNE{uEH&w_2)OKQrw!JD_oqUkq{=AONb>X_)R8{gBHUq1R_916{PnqHI=~I`@!t2-!YF`#!btL$1V(v z>`9MN*s?(YoEZL?}>f7-aCgbSbbUvtTNzvx==Pv`#J$9!q1fPob`-QG9@^|lwwyrn0 zKOK(jY$*JYnEZJ79#&Pw@l0E+ftoSMzdPU1cscvS8dI~`r^L0rY8^CPo6pwkt$FSw$fdaP@!ZrFhnrE_f4WI8-xpiU8Cx6g zZuaeSVUpo!KW{(X(_a9hJ7Wc38^|TgHEX3PW6Lya_wImqCyshoflY`1n`X+{XPXJa z9!%)Ds4|iqBkM*F<{SBSIuOjSRKE=+FzY1MNKR;``eTfDVx$dNiVnU7Lo9gX^$$#x z7o%bxMV9T~CV;Twd2^2R9xPE(5t;nROCqGee8JaqJe(WD8D@j?BH(rQhZiIcY1`J{ zAom(OLzVgk)~*w7BY_AEZYb{sN{qax>kA%DM>=bVUT}yJS{~CK!>M=Zhk>tzcXB?i z_GXg-8@qMoDw4e+&1Txiv}zy{0Rc!?*M`!xY&ymseiVTXTSFrMit-0X=usA6*U4BZ zF@#eVSlVS*qr;xHtXa5PO^D{@I-3<3eKD9vQMBDL8drzEq>9!_4(!uRy3ryAVT^}n58LDH>gR2ukX{?`BAkN-+zbN2Xk z;l8VSdd97Ua+c-%LVuVvNGUokPV4hjRUU2yzixHjplGBLP3a=n&g{J}d9nB@*-d-z zceLMlOvP_DsjL|q3@4m9*xo!eXR2j%F7Qkf2f4WfxT95$(yUd~*Q=p+D(LW`R7|F3mJDMp@=vrCt`y^x z$fGCW!M%k^W$|8z$oNcE9%*qguL_cuz73Sbs>!{cT!EKM$nsp=aw7*ZovLXt>R`tW zn2^+-hox{-vlY5^C(^6bT=ahrX(xa-T+v(jk3B4Yy@{rI@gk2hp`pfAyGd-UG%r^1 zUB8THzdASDq<&>X>A+ybL4ln8&%S|?WI37vT`Xy=mo^}uPqb1}23uRaQSouqbJp#J ziep1r?=s{Ey0{ptCeo|HT;B@OOqC^jCWq{_Lyaz)G&7?V4$zRi!fKdwi!HMrjs_Iy z{EVE87T`gkpIgzz(%(DIx36m?LlY<$K8Omz&d#?r%LrwanG=6K4|Dv$h@9Iad!jA` zMBT~|eai-oLrw>WQ+6?qBfO=nbPTY7>-5brUz*A<%EJCh-IXMlE-ee@{$_{t$>6$3 z&aQD7yzm^8OHy*a7g(8B;cgL4QWo5Ds>cIX2ijfhQXf-KxUJ)feG5b4}PM(wMAY2P`X;mR7A>8io z&{Bd!8WDn=Tuino3)GUC_dRQ7`#v$B(SO*~Iyw}KL8nSewTdEC%xU%MpMq+x0sD#p z2wn~1L;Wr~DM?5YNiTDh-mUc&{LcwsI}Q17m*M0#w{Hqs`D}_?lz9nB^-jvQBqCUR zo~hl{)|O==Seq@MQ|c{rxR6iu_L-O_VlcR7WiFSC5Pc2KY8)N0svWR+(hFg!zX4LSIn6u=Rv1)TbZD|fyk8{Zq?g})CXpe66L8{jEK2{6H z)}!G=iW(ZK9kn;tFQ%;lhSHx&mZDp@#R@j7wiKI@T26Pm#@g(Pl7~u*O`dt`@l~W& zDgu~$g4WBw~`K>!5TS8388&Z|XjyF&HL z;!6w=UD0r{)q!NS^A>*ESqrs?MZh+9jwtk>onO2;Xf_xv6YfT2yU?9r^526 z7}IJj=t7TysA8n3xJR}veD8w2e|I}G=L=m%mchSItI>x(B{}CFR_FR|Blm0OP~dRj zsQL3pwL7<2#a_d$ntMwNa8o3%A)~abvV`dz!|aOj(Z&~T@Vq*kqr)ZCTq)XxGv#U1 z#!9feMWpM!m6Iwe(d1LNQ?nB9&Eua2JN2)dz`JI<>JB#h221kDXJea5m;D<6_BX7pYcW| z4&tIL8piW;V-pa#LM6Xw#aqnDi1}sz{;&4tE8*U2v-Jc#x1AK^bpqFI*T$@3 zqu-6Ox~_?C+o2zoX$8 zW8|~>{nzhw^ey((0W5^b7%9*WRixb}gWHmubv(%mt=6*B;PFG9gSldciaWQcIpiK=|_(=nOk-kw!j$M_M>91IJSxOgrbqo0AGOj5w zdg3o9Z35orT2x?A+M!%gtiyZbwOpH+>P78jl;-(k_oCX50~F;!#{V6vsmzaAHr=%V zia8^f8hc}_vG8nx1WVeK9m2V;SzAdmV%(|-(muV+k`B=!orKkIKbezzpuE3L{c7&o zDz2d%sFg1afal=|TS9?Tdd0QFHoI_rC$;l+<9ffMiU|{7GQ(b$!k#=fj?WWC2#9~F z(QX@e{%P#zfIuN#0Qr~vIA}#+(;>}^Sfa$m2!iz)Vck%88b+=lV4drn*hRj<_}SZH z7B$UHhk|^VdG?=S#l43B9m{5&GA>gbtL@pP=N7T$B0)~R_7GRKF5 zpme`&wWThl`r~xzPmWNBi6f}@CM9$x?Uj!+FqVmPyiKwBPT&?c2?`VSt$^1~sRg`6!?Oy(uoM8^eUfm$Z zoVuwYM5-^xCptfE!S>wH5DxdfJC8J@xXx(So5mgCt9Z5K!6JlsT-I5Dj&usAGbAMa zp{T!KPSlW1iBd}T<43G`nkPPN7$XFhP->U!1c7790{$k?qaXR&!C26+6;!yUD(e8N zP(OxrdRk(stp!vf6JS|@{ZLxX(9}L+opyXJ?o^{BeJ@hhUx`Q0RY-vA4Ogo05oYgR#vHD_wr6$}>3&g>fGQo(!;hZdE)YRf}9y=tQO?ZJi|R%JFS z20)=3q0%mk)Mqt`o4o&JFfEx3A^o(EcPPuFDmM>)rWsh5b|cI5`OE(j*bf4c$ntJo zX(MT|T77yYShDGT@Ww!S*8Ca!BE{bfDAV_3QUAuqpIwyttTS#!hv&K%vG~CvgA*(B z@RCa81|K7H+03lZDDBsnHgaU*n5NjrR!V5OHRs;H!U0eiSWqh{7{BfHLyPB0*P#^s z*+`CW+gVkiW4pv8QK#n7`%~v57kpZP`Z9%sORAfz+dcQB6VMG8LtIBBE zb>C%dR+9^l`;s8p{Dqc7*7_PoK@qa#&9FI-c4*quF-j@C(;oQG+@&5kGqOckolmd& z1O``4u~bZNk6O6VCY85j&!ZCQxz5p z!ewpx{HVR*R8}I%ix5h0-Qkp96=Kv_h%xB;q67myeFyVD;+6mA>Hl}N?J2N8=C9c0 z)0C&c$qEO~@w z?4~PjyT+#>e556CVEfK`b|3kz>MiXyTDtAdxzhpdaeG#^`sDjVLAXzP&`_ybRA!r#=y&25P3;C ztq5l}kQHimoGg%?C_guPTrin*s(BgmPVVlmp#Sk@ZN|D(#M32obj8Qkx^^=1QTFLE zUm#u$Jsg^)KP^1J(+}uqn~cO#JQ+j;%#B$#uw7xzLod?-G*BiT?Z7A_O^N3Mz((5Z zVy&*gx$-i!-e0T!l&S*jR~j`C47IKx9=BGN$*18Ci5S}BJSb?FHgUYhr~C86;}_Eb zAaE8Oz2!LwfCJ9^6*nW(jLQM+_f8+=mVRx9E>fxhsdnDFGu-Hh&FpBLW1>J{2;`K=5m)O%jT4@>+qmLQf$tmh{+~KKv`n^x(qucfH z$7~N`cKztMG@G_OwQq1IHM9fI8m_6TX|X`c(}%H*O&O6jv#OdA*{3rn;Fp)*1=YaP z?w5_EeznsF%Cbk5(raEqSvswybnam^{4-k#5q@_7 z&aL2f`F`(Wzd})Bpv1?rl#I7}Y0-SQ$S#2yvC9yH3nW_sx&5us(TcvPKYM`vQWuL` zFhf3FS84YuTIBhid2PRYyy-#)ePpsV)vz?Aih`^}<_HdCpmDU0w_5ut@|^SfC3ols zhz?w#kU)x`FDt;)S2RlHC+>#&9XJ>E>9*IU9p|^7;v-`L_ zP4s?Q2VXEhHD)PC_n6Te6)=6sj}G|Bv}Lq4a})Vh;2;wzP%Q7 zg2pbru&R)g5wMVSbiB!fuih{1yww;sHK~gZe%De>!Z-Hbb34%enSVY_OP!U|76uTS zWBKFWsT)ykNZ@c))PUYzw9g3->G0Ye&* zd2a=TOehHj?4DoXibk&)LvyE9~cSml3%cZH4QYIa)gC zZgal(V)xm*m7T1+ybX)DUxN*^&YwR?k7xo74C=j^PkM!gM!Q#Fzwa+9JpH=aKRq5{ zfAqE&8Y!(X-F+>b?`q6IXwsC{?EGrE-)npWGWq-|<_6fl#Oz|f^|oRvco5!~rE-C) z;CY0s^=nfh)w^{)gWW^kUw!ra+Vn_Z_%Byp;^WXTf*l5OL)G{+DUeFR!h6h-e_H5gjOb z;+AG-E|TC!19mmpYkufKPdS>N)Bx$rRFBkL91Pa<*tpV-*{e{->4Oj}XJSq#)q{vw zXK5)rx!$g&DO>0+uqYs*?0AF7m$?0URe22CAX!?UTv+N2On4R;zn&+Nzw)f0M= zlzXDd@Esu8TY2A7WvsGfAM86;?~JC6zw_fM2oEgj6|XlwKAGeQQ#0GyIXY0w5u@0A z)zhgeidnw$hRH0{sW;uK+$ijZCN$qR728s?##Cg;_npd*BW^Z_$ajx=zTk+XtS2~RGqQwONMoLxay;Vr=*1T$MYqFz8#4R-`|a-{ z!*n?G(G17*wXU9d<5T*u9e?V|+GB={?sjI4XKt7NKDiA*xAj~1b>HPk($(M^mJJ%YCmsbvASvX{ zD+MDl%*)`3>|J*iGny`xefWAI6Vp0BD!|cB2=J0Z}%-B_o$#I75H3`4*L0wv@)sS&LPEQY>($P1S36MNiN#oh7RR2eg?04*t! zZ7n7ets;z9=xqM?`j=s^1>;$dH2Du^EQIwXZq0}EE2@x)YqK+JF(uBU`DVkwYiMCb zwso*>ua@idBuit`8I@|F8$rZHN}>ym^aFm)!TVS=Z%I!B0k7}O;}doZ*}CXrem%~# zTrv0Zfdyjznj)HZ9Tf#$`I>TvcZ9FC+U8V9a;QUM_!b1>Ir+KOiW>nE%HCler^;-H zcmq60sqnq@~SunmEf5M%+enE$QiIJK(#jPsaKXSFh3@lbG?sF5``TdjfDbIL6b8O+DN| zr$$Ztk;?dcRKAAVN!1dzE1(rLv0tybQau0R+=8EtfLV)T$hek}r<2 zRPh}EY&jh0mDWwVSgokD&eW4}+XEf`htG=gIQg9uHG>}f59geB4uYoKQQhLRV#f3S z2U3#KE3diADppdM9n|3=E(1MR8(qXthgoOKWZXVHtsWdA=YLo_LJ}MD+Lt@I_Tcxv z1P=;F$;J42dg725YKImX_G&03Ip<7e77!-NtD*jML`A)%TfAAWq$1adY4fW8v@`Hs z=-CG_lva4OPA=#ad`W}#9#3dzJw-+JZ%b-pJ`mL|u3sD&mgXcPLa(onZa5Z8d6#k( z9~yx1$$8B3ich=Vk3nJptSIMdD2XsUw5ud;{~8%w5Uu2Spbji1vFgc)axK?fTc4Wl zC{9!x)9NiSW-vcWcN&afeMd*5_C_6-g+G%ZSqFH`<@mdk)%BLo)4yq>aq!_E54;P} zGclBi7r=}G$T|}13l_Ef&ldZ-Fwei$r~)DRI=Tnl?hVZa8$1BwLbg-Z?wL?FOFbBc zGMS%2xG}XI`;&|hQQd6Phi=eQi>w9vAo`xNK*%_nKyXv>%TReW>Y1@=rT}MnaS7>{ zpP$G03kmQFj+bmkea4gnW@m;+w6bMyu)>RmK~V&o*$ZH#)_O=t~(T~OX&r&)GAlN5Cnc^;>xrVQ6C3eBx_54v^n=n99Fue7*X z^{OFlClH04R)YRnzQ5KTjGE;?b$IC@NE1V&GfGp$P*8qrWkuoh_V@@nshX&S{sv2h zEXFtD3xk*St1Q*`Uus~_-gC6d<|1hL!nVn!t+yq^+~)VtlYx(^c;%=BGW$mzJaMmA zOG#OIAIIjbnq<1PELOn6_#npxtjtulQR}PPHC*VR70A!J+g^F1XYOou@fpJ7-HzvD zI?dv&Wm*~LuYfH8QU&oju8 zdhXJ50D61FIhpMQS#R9a?$v_@ns3G zco?RlJx|PqVLp50#>UI_HrKW6{*WXj+hBCWQk!XJx;tQ-&-!d0BPoBjYb%$OU~Xjbv&hK7c)*=XzU<}Q0q@T|i%71wP)#($RcgG1QK3%EzORjAn zw!{g^roIl%@Du+iM@=~$rxe?~=)Kc*TwQ_*4Wgl1u&y!E!ob*b*vc4<}TGr80^u15eG z32@S0XWY#OoO*X6hFflPpW2s*F}4>Dho9P_4Pw??HkULuyeD+;HyD6-R}CFBwemK1 zdYJmRf*SOQEjpxK;pcB*IfWlK?uhGjL3d-d?m} zmB=ODpCt+u;5XB$GnWu2UM((a59{*XQb42cu737>kpAOuNIsBC!MRHDYIxHdxbs{Acw`E|X?;H-SpDeY)sS4g-g_F3iAJQL6uBOWI z?Lk>R(dzYZ%~iMa?(NbOqS6`OqwzNu4!X7|(p?jjyKS(n8)rOr!I;Olo6at(VNhOexE?$pa>l^;HWSX;Q5nCeRC=Y^7n+C_jRc zv=kLoRY{A?ZJSGw8sr$#8Ec)6bL0x&iIX<9jn9%%=QZ$iC*(eJ4FjKn^Rj`(t%i58 z`Lpf~vfbVGk<1%!!x{?jxe@L|@11bi5vwu@dfu+6Uk zu4NTv5p_@|wL4#>_J<-6NM6|}V`%#&kzPSr4T0!&qvL~QsYB#a1}1B)`^j7^8ZHU{ z-L>yX%}(xB_xkUMwF@fiY-}I3W=U-{xRXnZBiTFKa*KXq4H^S9J&_^HJhxK7{ z_tR2oC{xqP@2?Fy>;M(%x#eqC73mtKwQ6MXR0NREN1{+~b+&~#)TzOg6DosraKhF3 z%rj7RW@7;rVZ*J36pr~nEB#pn{5L=gm`)^BOlapXSNKZ_NCKs{m2ZK5;Et@{d$2T5 z=&K`Y{wV~E*3GImEswa>M?gL|Sfe`B8u|?{MV%ES;FJguXu|nzHSyS({vzh)=3~1v zYpjnnwP!R-S<#iPZQi?}2oT+T0Y@v+gBaI2wa+Qwq5SLg>)|MF0Yc|&DRHJ8Xo|hM zot^W}@eVgoHE?P-NEky#{fb%qjjh6s*&j#hoz{A*vZ`~mzj_8%pl2u^$T9V<<27qb zV`KCjOb9DwX+#4>88$|m`_KCFO+YqScj#i^zFV}4X#`q)h5 zhJS?nD!KUgLeu>9GI(nE5Wos#u;p{W^_k)FSA+p45GTJ+`1@aSTf`uSq5%6w_Cl1| zCT!lp*Mz&Z5su~OIG2|K8eX0zqr}p&bzX}#^Z%|NpmogskNN=$l|fpMv8g3bq!9O@ z+zL9^xE#a?^>#!D5fm3sMhn6V|1^d-K=S5%OE-2*(*ak++|C;p&&-)!37h*FHwl&` zR>d*rf9q%v?#dc>tr<|wJ}8bck9FUC-pS!6t)C9u>oR;Ql+;jO3v{Bg+f;uwInYSB z=)C$faMQp7N-||8zE5(p!rQKZvmIZzr^3U#N!;|a3^)`Zz z_xYxa?p{3uT();xNft1WoVYeAAaYUvL(fxw85Z$7E8PeZcL}2+G;57 z%JS}B8*CzMIv|VJioeP7*6*SSRlf%W`-Z8)N3nq!YyD%1 zCz*95t~Xz*+XY-SDH}3eFPx*Z{BV(d^4Z#7a9@xiGL?59^!dy2HCOJ7q{rAjhod5< z+70Lm+a{-=y=K2(8$_GWSSaDS)TVQR?PzvHD8;m`KXZ~lyZ(%)`LFJ&50(izzvpNc zD74Zw1gJ<6RvZ&c2ROMfyIce$bj0G8&TSMtCLWI#I_6VBE0pQm`VXHBzdOn27oXR)uCY3#ZxlDbUriKGuf7Si&@HGo++LW!AqNo7lMwwT zbVAT``k4&1i_#Ex28CC!i=!-aI6~m)p-6JYPX&o5B#pL{vwU zZ3FG`Q2^KQTsYXX>o2K!7xK8GVG%!1(jq?`TeNm;C_o|~%<;ql zP}7-&mnxeQ zXQ*NX#YAU!sr&?ZC~hM!h(~qbpmV-wXh^hTy#a^9jF&?n(im&;dFJ9Gh;7c9v+^jY zY#NtV(^p*RUJ3tOCpPAl@r3ffbYg|t?$^*h7_rq$4Qh~?+Od9(zX@leN*J})SPGN7dTYd&Jf+Qkh9b8vm!iH6GHCXM=Z+2b$`Gb_AejLGx zZ-MbRjPdXehc74+8C3D=9_dKpw-E03Kne#_na&Z-hu=MP+!uqL!9o|Bb7klN(|Un; zKIe5WvTXa+_ya2sr8;A}8_Tb&;Es35&8A23-Y@NOINz?HPMRjzaQWHTGe1CqahLow zLT_DZlEz+2T3&2$pSbLAOF%G57mLERR~Cf(#2#s}BO z5&E3zlDLF7F#mh1xn(Wc^L$fWM@JhEMi9G3o5uA#VanR5u|PTbZXoK>6J7eGu{05o z&)R6pjcNtYxjXKlQCHmkHKKJ`#Di_|Y8lq+nXd zQKoA}VfVR5CTn~aqvBLs*p!YW(r%KmcidMdMxnMbY8d_n|~aS_Ck`P zHSyu$@O_+}%jLv<Wi<+`ms@p+T$;b#wbA0!vjabI zEZXf#dA@1WPshRCM9@J))M_wiKHxKb)q}(>0E8 z=+Wl6dcVOn0z-v2oUXQFkK)H{$=0%uj7dr%07IJZAI4IpA_p~;A9W3ZKt9P!`iWh4 z34w0VJwYEso4$(eS>opAK39?gQhCANO6h#GDubssu%=`E z<#{e#VutMQ=Q6Wz(ybE7>~uw|0$WdRUT@8_q%aVJ4sNj*S_k%s$5`pN@_iiYupqo{ zen)Ml7q8qo=0;!IUAyjfs%20p72HQe7+CAqeflKFlY*1aUNC5ml`W85UVsINP_wu> zmJZLq+d&VS$ac%49JWjxBGODZcg=}n>_q1vt12tT;1_=Ohz@8L2sLUM=P^)lso zC`*5{ z99y4_u90xlAm&0pM|KC0j~)dV!#~JJS(X;i{2NXNVnGE*PI?-e6GffI(p77oS(?m` zSHA)}90~(~+t38;z^d00(f}`#g2Wb*mzOt8ZsLFq*QcqNUy}|J+}7Ng1OOYFO)^m` zgHsXgN!rGQTcc)TtjVY+_Ftu&NYpRPDy9gG9|IOss?X~xi6jQh&$U&%8bMPAx|ndi z-^vag=x_+q)^VVj3dK<0uDg5Hm+^j#$K8WrpQ5m0TTaYwi>h?k@<*D-GqQcG+OK}= z=vEso;VRe>*B70ZRC}ve@;T4#wWc6~_svy|y|^ygiPQhjyo3#hp1y>1`d@sNt<%g3?G z`cAD!bYzl{Id7Oe)ljRNC97VQxtb?8NF(_nHJ1+Lqi0|&b!&H-C7LP-CJWH zxo|a8o`7a&rxYz>NR{@wEz)?)Clx{FS1Qrn%|(o=d##$5J(uP*DtSJx(7)^FBYbVI z)H_{31$HG_{o7W>Rvp}aOP0Wj>oLyD`}=^7!E!{=vumI31)Wc<*35(*z#L9k#i znoaquwlG~r#GI_V6L~hYyOssF$i&qf7^*p)pG>u$xd&uZ^x~2}>U8JhpETuk9)@?C zY7AM8=m6)-bI332No>fsyg#N7Qw2;$KjYq=)ontbFW1az$cZlHS3Y(Z+aeE+hX?Os zjXfH#yX^H5$%av;O<)=H_ih`5Zyuu4*KcPxJ=P%Lk~WqPL8Q7BX=XO09)Xb5xrv|p zWl8X9`MYiygv%mu2gl_p+-6tb^+*c>LfYrDbEvrM&VdInn@hU1^v7Rzjh%e0C+Z|q zGF3Os_oUaP;@N>a`eTn^qs>{eeeVWlgDeU1$Lc&R9DMfi?zCN4uePS@m&|QZ@rq8X zP1x60uvb?A>TvjFW6bS&IGE#w`4>ZG8%2XFCjAyG(Z_`j66+>zckN4elZh@QuY`vK z)VBZK2k~cN|8pBe3JFdwLK7l+!jx%?!Rg6;(UJYcAYQwOPYl0=#_smW`iV<=vNXRT7j&1(dNxQc?~8n#Fqy+K!i1_B{oN`4ShHn7%d z&?drc%@zo<{Atu-+YecQnhv|%T>T#CdwuW& zMWAV-LNuu2dZEtsFiVr0kW5-uVlE)v|J74a&{T9DR0=jV~z=-;;tDi6x+@6W=%QN;4P@UF;1 z#w>B*$$>r7be<8-5N|Y#7pKr)C%pNd&Z_c=ppBe6C6|`fvk8BLnE?e}qR8G9=c;?Y znzbR(^2eXnTlqpusHHPH*HO|i&Z6k%SjG>_G&b|k;6T(LxcbevBJcr)M+`;}TU9hA z1V#B)D@f;u+ist@i1ds^$P8oAYAO-~4~<_t$r>xbD_Wn2O&7U-4hXsP^z0`oqNXj0 zD$EE>M*c0@q33Dqs?)coDBzgTmdbuxM?#9@L%FwqsgKcs6P@2jz5aNiT!M3$4KNZ+!i8G zuix?Zsz-^Vhl=X{l}UP|mElBAASBus*?W#b`n~4#9h6BZS{SpqCCV7;O~d>Qi|uOAL`fT2UeG*Zv;ZL>!1nW%)C7RwypUrwR_)IJQ=(3Nf&~EWHuY6@R$BH zE!V{&3v<#(wht-BgrDVlzf^5;?A)6kWgrQIE&FECc0R*>HE?Q9b9Y#*vch{Ra5Yq~ zoAWNxc|s*FCs!M|g~+UOB;;N9ujm8a)iX=V@>*|}qJA!*JdtoV>+K7qW3U-q`X&ORQgtx8P`UYKkxRQ~~AX9EELrrhJ8tY671aLXd~1=kDBcAjL1X z@9i%nU9rB0JNg?ZxVzKysf@5}`83G9MaHE@1*KS*BoT`dtt+<85423%TM zGEznE(&v+&%PqDS4ad2(jN%%=|6ZO4THm@^`BD8!SdY6)7$4-5KUoy?F6Rxfu!xpiI+U79myo9L@G@<$qWr@F85v%FD8$AyO@IYAZ~nR&$MY*K#DZ zA1LJV0`JPW0MCE8<)+C89Z$L#v?-Ow_CLot>;+l#VwCxRV0+j;LK;`opJWxis3=QG zYxHlrO_m92GRBEqnk2?vkiGPqfc*Jwm3Pl-UzO>UEAal(e%U&}hWFE@wu<^^Cg<%3 z1;Kh<50{Dx+;M7vzk{*>@OP%?1xn}Ac`TqS!+vGZ+G5srf*VLex3`KnboMgw?=%<` ztaWJzxo#?$_!oB%@c(yB?X`nK>%m04m^fBv`Li=`}` zeIx#bF6u%YVJ@L~Mlwm1e5JS)v!|lN_zV+(zrnzKsV8UG>1ajBf$9cf-XtvDy<)+r z!(g@?rU@UFcReauOaUc5FQrrW-V!MH)(Rv%F&9d)%6(If1xKm9F6$zLyQPa)d~$ zX-3322?1kt`!1EQ(l1WWh~p$M<8pIJ1llumrBDUmyuW@g$w+R*OZ85pzv2W(m&2dN z>H%bZ6ps>pl5{DZj=gD+YjMYM5urTH@hxyhEF=i094FM=kVUcDI`Pvy?BfyX)kzBR z$4y?>`-7j;Q*&{MwLtF&HbW{mOpFnf4E=b(ds-6!9X~u;?->bMwmr3ylsww~_AQ0G zoS$!gk46-`fbRSZSyK51SRv(jf@gfg%TBZFrZ7G{Wr;*Fqu*+&0V1K7`1)Rc69@y0 z`OL4b8wN)s+L=>tUbDvoe9stn@lhnp9@KgZHj1SWO%ry>Ryh8z%<2~asEx|(?5G>` zS=iint_lEZ^9Bu!rO@D}|D%w8fzZ9FF`4;jHb~0}5_P!mP z8)V!~LC>_p)HxlM$ptUt1r7-;mDTjn(yQ zWU{qqy$F{RmMra6cF7s2f~`YRty-IJ4vg-tz-(#dHK~+~2&DcC^#9?XFhkk?`0y4Z z*oFcQa84A`fBLtTQV*B_VzA}bjhqPCU%nZ-CHwTb=fNXXae>uz`UCIt9es}1HmbOQ z<-)9)xm=WLaP8eb&>i_NRJ`Sd-yt&^4}KMV#0(-~yd)w*eSCG5JAs39_nSn2E8zGA P0!fN~{7^3Z$@l*OqsmBo diff --git a/doc/usr/_site/images/banner1.gif b/doc/usr/_site/images/banner1.gif deleted file mode 100644 index 21a6cf3cdbcba62449d083fe499a155a200debd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 166 zcmZ?wbhEHbWMnX6IKsg2@87?7@813S^XK>P-*4Z({r~^}hYugVef#$D5F6B+s%oD^9YtO3n*K z*Z*I={Qv3W|8HOae|Z1@%jf?up8x;-`~R|q{~3q?Iv_P5yBJuNAA|^`B(QZQt?`(x f5_rVmbkUvjmrVqoSTrw4(3r^3*Wjec!e9*mV?;`n diff --git a/doc/usr/_site/images/banner_100px.gif b/doc/usr/_site/images/banner_100px.gif deleted file mode 100644 index aa10e987be8706cbe33c0ee97611a8468419302f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 314 zcmZ?wbhEHbWMoKTxXQq=fB*jfK=AMXKQQk6&U>b{rktSpD_7<5Un8HU;tDMQ3m0H3+|z+l6m!vF*zKQXX{ADF8ua6wXW*Ln5rC!Pj$dGWPNKg?S^`?=bt zn|^a$*0xn#$Y2*vHRCQ!*~FV6bomI+hDk1;szg0h^z?LFT6J_JC0Vq!B_#N?w0I{n RYfjT-;t>>gVRU4$1^^|<-jo0U diff --git a/doc/usr/_site/images/banner_50px.gif b/doc/usr/_site/images/banner_50px.gif deleted file mode 100644 index efc4012ecd2db5567b78924e1e05f1f1d9646058..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 314 zcmXAkJxIeq7=|xebg(V{AhtLa{Gn~^D2gsZ@NW<|XQ4tT!A+d~0XH37q?5BCT?8iw z2R92M#8FT>-Cc6ITyn`>;+OUtK6rV*=jHvjb~aa54-M2rUnrXtCP@>Ws94ER1|r}d z_n60AMhPXDBuT2lRhlsmgG|#P41FOy&IzTzxCgY-K*u5wzVNxvUFJHjg9#SG_d&Xj z<4_rfVF2Nf>{0@;iPl;v6~}QDMN$s@KnxfThaO{a+lMI-1Y>O5HuUWm&sIg|420H^ znThNtG;;9To*(a)D=#05&+mWx*Sp25*`MQw``$w5d#`OhUY>Saqf~9vC=}N6xDJGfM_C# zrfL5TTq(t+p8N)s#{-C0mcwr+$I{w9hg1tAIAV&msR~zyPAte+@G92pbtbM| zVAJY2nrhK1KSH-AP|Y@II<4wMnzPfOBx`!&j9j}wypHp+=n)Iy zIK*9xgeWt8KesY?Vf+@Io{p2WFl-Yu=3>|hgcU9dGzcr6D z&vPjykFqz}kcnftF^p&oGunZOrqLrQ&@`mb&z#HHPCO93Nr3bLn^(jz=W*ED^7RuAU^-iR%>d`K4_cIXg(VHA6D( zVkSB;quw0YNu$|5y5%G6G{R0}Mm@}A2gweXZfk~-p~1y%$=$il>w(|vg9^qlfq zt;V-s4RGnyQA#a?a&;Vu#4;lkt92S-i_TO6-_g-DDArp%mAAq zag Q)&Kwi07*qoM6N<$f(Ex6CIA2c diff --git a/doc/usr/_site/images/body.png b/doc/usr/_site/images/body.png deleted file mode 100644 index c4c6ba6c68332540f59d983a6ef6549c002aad32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3529 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 - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - R - - - - - - n6 - - - - - - - - - - - - n4 - 2001:db8:1::/64192.168.0.0/24 - ::8.8 - ::1.1 - 2001:db8:100::/64 - 203.0.113.0/24 - ::1 - ::2 - .1.2 - .24 - - - - - - - src: 192.168.0.8dst: 203.0.113.24 - PLAT - - diff --git a/doc/usr/_site/images/flow/464-literal-es.svg b/doc/usr/_site/images/flow/464-literal-es.svg deleted file mode 100644 index 5360b5026..000000000 --- a/doc/usr/_site/images/flow/464-literal-es.svg +++ /dev/null @@ -1,440 +0,0 @@ - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - R - - - - - - n6 - - - - - - - - - - - - n4 - 2001:db8:1::/64192.168.0.0/24 - ::8.8 - ::1.1 - 2001:db8:100::/64 - 203.0.113.0/24 - ::1 - ::2 - .1.2 - .24 - - - - - - - fuente: 192.168.0.8dest: 203.0.113.24 - PLAT - - diff --git a/doc/usr/_site/images/flow/464-mirror-en.svg b/doc/usr/_site/images/flow/464-mirror-en.svg deleted file mode 100644 index c7f080881..000000000 --- a/doc/usr/_site/images/flow/464-mirror-en.svg +++ /dev/null @@ -1,511 +0,0 @@ - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - R - - - - - - n6 - - - - - - - - - - - - n4 - 2001:db8:1::/64192.168.0.0/24 - ::8.8 - ::1.1 - 2001:db8:100::/64 - 203.0.113.0/24 - ::1 - ::2 - .1.2 - .24 - - - - - - - src: 203.0.113.24dst: 192.168.0.8 - - src: 64:ff9b::203.0.113.24dst: 2001:db8:2:: - - src: 203.0.113.24dst: 203.0.113.2 - - - PLAT - - diff --git a/doc/usr/_site/images/flow/464-mirror-es.svg b/doc/usr/_site/images/flow/464-mirror-es.svg deleted file mode 100644 index 394006d3d..000000000 --- a/doc/usr/_site/images/flow/464-mirror-es.svg +++ /dev/null @@ -1,522 +0,0 @@ - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - R - - - - - - n6 - - - - - - - - - - - - n4 - 2001:db8:1::/64192.168.0.0/24 - ::8.8 - ::1.1 - 2001:db8:100::/64 - 203.0.113.0/24 - ::1 - ::2 - .1.2 - .24 - - - - - - - fuente: 203.0.113.24dest: 192.168.0.8 - - fuente: 64:ff9b::203.0.113.24dest: 2001:db8:2:: - - fuente: 203.0.113.24dest: 203.0.113.2 - - - PLAT - - - diff --git a/doc/usr/_site/images/flow/464-normal-en.svg b/doc/usr/_site/images/flow/464-normal-en.svg deleted file mode 100644 index abda9db78..000000000 --- a/doc/usr/_site/images/flow/464-normal-en.svg +++ /dev/null @@ -1,605 +0,0 @@ - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - R - - - - - - n6 - - - - - - - - - - - - n4 - 2001:db8:1::/64192.168.0.0/24 - ::8.8 - ::1.1 - 2001:db8:100::/64 - 203.0.113.0/24 - ::1 - ::2 - .1.2 - .24 - - - - - - - src: 2001:db8:1::8dst: 64:ff9b::203.0.113.24 - src: 2001:db8:1::8dst: 64:ff9b::203.0.113.24 - src: 203.0.113.2dst: 203.0.113.24 - - - - - - - - src: 64:ff9b::203.0.113.24dst: 2001:db8:2::8 - src: 64:ff9b::203.0.113.24dst: 2001:db8:2::8 - - src: 203.0.113.24dst: 203.0.113.2 - - - PLAT - - diff --git a/doc/usr/_site/images/flow/464-normal-es.svg b/doc/usr/_site/images/flow/464-normal-es.svg deleted file mode 100644 index ec6098d15..000000000 --- a/doc/usr/_site/images/flow/464-normal-es.svg +++ /dev/null @@ -1,605 +0,0 @@ - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - R - - - - - - n6 - - - - - - - - - - - - n4 - 2001:db8:1::/64192.168.0.0/24 - ::8.8 - ::1.1 - 2001:db8:100::/64 - 203.0.113.0/24 - ::1 - ::2 - .1.2 - .24 - - - - - - - fuente: 2001:db8:1::8dest: 64:ff9b::203.0.113.24 - fuente: 2001:db8:1::8dest: 64:ff9b::203.0.113.24 - fuente: 203.0.113.2dest: 203.0.113.24 - - - - - - - - fuente: 64:ff9b::203.0.113.24dst: 2001:db8:2::8 - fuente: 64:ff9b::203.0.113.24dst: 2001:db8:2::8 - - fuente: 203.0.113.24dst: 203.0.113.2 - - - PLAT - - diff --git a/doc/usr/_site/images/flow/464-sful-en.svg b/doc/usr/_site/images/flow/464-sful-en.svg deleted file mode 100644 index c5d515d3e..000000000 --- a/doc/usr/_site/images/flow/464-sful-en.svg +++ /dev/null @@ -1,440 +0,0 @@ - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - R - - - - - - n6 - - - - - - - - - - - - n4 - 2001:db8:1::/64192.168.0.0/24 - ::8.8 - ::1.1 - 2001:db8:100::/64 - 203.0.113.0/24 - ::1 - ::2 - .1.2 - .24 - - - - - - - src: 203.0.113.2dst: 203.0.113.24 - PLAT - - diff --git a/doc/usr/_site/images/flow/464-sful-es.svg b/doc/usr/_site/images/flow/464-sful-es.svg deleted file mode 100644 index 6d43d37a5..000000000 --- a/doc/usr/_site/images/flow/464-sful-es.svg +++ /dev/null @@ -1,440 +0,0 @@ - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - R - - - - - - n6 - - - - - - - - - - - - n4 - 2001:db8:1::/64192.168.0.0/24 - ::8.8 - ::1.1 - 2001:db8:100::/64 - 203.0.113.0/24 - ::1 - ::2 - .1.2 - .24 - - - - - - - fuente: 203.0.113.2dest: 203.0.113.24 - PLAT - - diff --git a/doc/usr/_site/images/flow/464-sless-en.svg b/doc/usr/_site/images/flow/464-sless-en.svg deleted file mode 100644 index b304d3222..000000000 --- a/doc/usr/_site/images/flow/464-sless-en.svg +++ /dev/null @@ -1,440 +0,0 @@ - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - R - - - - - - n6 - - - - - - - - - - - - n4 - 2001:db8:1::/64192.168.0.0/24 - ::8.8 - ::1.1 - 2001:db8:100::/64 - 203.0.113.0/24 - ::1 - ::2 - .1.2 - .24 - - - - - - - src: 2001:db8:2::dst: 64:ff9b::203.0.113.24 - PLAT - - diff --git a/doc/usr/_site/images/flow/464-sless-es.svg b/doc/usr/_site/images/flow/464-sless-es.svg deleted file mode 100644 index da6ecde40..000000000 --- a/doc/usr/_site/images/flow/464-sless-es.svg +++ /dev/null @@ -1,440 +0,0 @@ - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - R - - - - - - n6 - - - - - - - - - - - - n4 - 2001:db8:1::/64192.168.0.0/24 - ::8.8 - ::1.1 - 2001:db8:100::/64 - 203.0.113.0/24 - ::1 - ::2 - .1.2 - .24 - - - - - - - fuente: 2001:db8:2::dest: 64:ff9b::203.0.113.24 - PLAT - - diff --git a/doc/usr/_site/images/flow/eam-en.svg b/doc/usr/_site/images/flow/eam-en.svg deleted file mode 100644 index e6b208790..000000000 --- a/doc/usr/_site/images/flow/eam-en.svg +++ /dev/null @@ -1,415 +0,0 @@ - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - src: 192.0.2.16dst: 198.51.100.8 - Translating... - - src: 2001:db8:4::16dst: 2001:db8:6::8 - src: 198.51.100.8dst: 192.0.2.16 - Translating... - - src: 2001:db8:6::8dst: 2001:db8:4::16 - - - - 192.0.2.16 - 2001:db8:6::8 - - - - - - A - - V - T - - diff --git a/doc/usr/_site/images/flow/eam-es.svg b/doc/usr/_site/images/flow/eam-es.svg deleted file mode 100644 index 12262e556..000000000 --- a/doc/usr/_site/images/flow/eam-es.svg +++ /dev/null @@ -1,426 +0,0 @@ - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - fuente: 192.0.2.16dest: 198.51.100.8 - Traduciendo... - - fuente: 2001:db8:4::16dest: 2001:db8:6::8 - fuente: 198.51.100.8dest: 192.0.2.16 - Traduciendo... - - fuente: 2001:db8:6::8dest: 2001:db8:4::16 - - - - 192.0.2.16 - 2001:db8:6::8 - - - - - - A - - V - T - - - diff --git a/doc/usr/_site/images/flow/mtu-frag-fail-en.svg b/doc/usr/_site/images/flow/mtu-frag-fail-en.svg deleted file mode 100644 index 3fb0019cf..000000000 --- a/doc/usr/_site/images/flow/mtu-frag-fail-en.svg +++ /dev/null @@ -1,568 +0,0 @@ - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - n4 - - n6 - - - - - - - src: n4dst: n6can fragmentlength: 1400 - - - - - - - - - - - T - - - - - - - R - mtu = 1500 - mtu = 1500 - mtu = 1300 - - src: n4dst: n6cannot fragmentlength: 1400 - - - src: Rdst: n4error: needs fragmentation - - - - - - - n4 - What are you talking about?I allowed fragmentation! - - - 1 - 2 - 3 - - diff --git a/doc/usr/_site/images/flow/mtu-frag-fail-es.svg b/doc/usr/_site/images/flow/mtu-frag-fail-es.svg deleted file mode 100644 index 4310dcbbb..000000000 --- a/doc/usr/_site/images/flow/mtu-frag-fail-es.svg +++ /dev/null @@ -1,568 +0,0 @@ - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - n4 - - n6 - - - - - - - fuente: n4dest: n6puede fragmentarlongitud: 1400 - - - - - - - - - - - T - - - - - - - R - mtu = 1500 - mtu = 1500 - mtu = 1300 - - fuente: n4dest: n6no puede fragmentarlongitud: 1400 - - - src: Rdest: n4error: necesita fragmentación - - - - - - - n4 - ¿Sobre que medio estás?¡Permitiré la fragmentación! - - - 1 - 2 - 3 - - diff --git a/doc/usr/_site/images/flow/mtu-frag-success-en.svg b/doc/usr/_site/images/flow/mtu-frag-success-en.svg deleted file mode 100644 index 65e551bf2..000000000 --- a/doc/usr/_site/images/flow/mtu-frag-success-en.svg +++ /dev/null @@ -1,484 +0,0 @@ - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - n4 - - n6 - - - - - - - src: n4dst: n6can fragmentlength: 1400 - - - - - - - - - - - T - - - - - - - R - mtu = 1500 - mtu = 1300 - mtu = 1300 - - src: n4dst: n6length 1: 1300length 2: 100 - - - - - - - - 1 - 2 - - diff --git a/doc/usr/_site/images/flow/mtu-frag-success-es.svg b/doc/usr/_site/images/flow/mtu-frag-success-es.svg deleted file mode 100644 index f3ae038c0..000000000 --- a/doc/usr/_site/images/flow/mtu-frag-success-es.svg +++ /dev/null @@ -1,484 +0,0 @@ - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - n4 - - n6 - - - - - - - fuente: n4dest: n6puede fragmentarlongitud: 1400 - - - - - - - - - - - T - - - - - - - R - mtu = 1500 - mtu = 1300 - mtu = 1300 - - fuente: n4dest: n6longitud 1: 1300longitud 2: 100 - - - - - - - - 1 - 2 - - diff --git a/doc/usr/_site/images/flow/nat-en.svg b/doc/usr/_site/images/flow/nat-en.svg deleted file mode 100644 index d641815bb..000000000 --- a/doc/usr/_site/images/flow/nat-en.svg +++ /dev/null @@ -1,435 +0,0 @@ - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - src: 203.0.113.16dst: 203.0.113.2 - Unmasking... - - src: 203.0.113.16dst: 192.168.0.8 - src: 203.0.113.2dst: 203.0.113.16 - Masking... - - src: 192.168.0.8dst: 203.0.113.16 - - - - 203.0.113.16 - 192.168.0.8 - - - - - - A - - V - 203.0.113.2 - NAT - - diff --git a/doc/usr/_site/images/flow/nat-es.svg b/doc/usr/_site/images/flow/nat-es.svg deleted file mode 100644 index c5ee6f582..000000000 --- a/doc/usr/_site/images/flow/nat-es.svg +++ /dev/null @@ -1,436 +0,0 @@ - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - fuente: 203.0.113.16dest: 203.0.113.2 - Desenmascarando... - - fuente: 203.0.113.16dest: 192.168.0.8 - fuente: 203.0.113.2dest: 203.0.113.16 - Enmascarando... - - fuente: 192.168.0.8dest: 203.0.113.16 - - - - 203.0.113.16 - 192.168.0.8 - - - - - - A - - V - 203.0.113.2 - NAT - - diff --git a/doc/usr/_site/images/flow/pool4-simple1-en.svg b/doc/usr/_site/images/flow/pool4-simple1-en.svg deleted file mode 100644 index f1141adae..000000000 --- a/doc/usr/_site/images/flow/pool4-simple1-en.svg +++ /dev/null @@ -1,353 +0,0 @@ - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - n6 - - - - - - - - - - - - n4 - ::8 - 2001:db8::/64 - 192.0.2.0/24 - ::1 - .1 - .24 - - - - - - - src: 2001:db8::8#5123dst: 64:ff9b::192.0.2.24#80 - T - - diff --git a/doc/usr/_site/images/flow/pool4-simple2-en.svg b/doc/usr/_site/images/flow/pool4-simple2-en.svg deleted file mode 100644 index 5b8edf296..000000000 --- a/doc/usr/_site/images/flow/pool4-simple2-en.svg +++ /dev/null @@ -1,355 +0,0 @@ - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - n6 - - - - - - - - - - - - n4 - ::8 - 2001:db8::/64 - 192.0.2.0/24 - ::1 - .1 - .24 - - - - - - - src: 192.0.2.1#5123dst: 192.0.2.24#80 - T - - diff --git a/doc/usr/_site/images/flow/pool4-simple3-en.svg b/doc/usr/_site/images/flow/pool4-simple3-en.svg deleted file mode 100644 index 1813682bf..000000000 --- a/doc/usr/_site/images/flow/pool4-simple3-en.svg +++ /dev/null @@ -1,355 +0,0 @@ - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - n6 - - - - - - - - - - - - n4 - ::8 - 2001:db8::/64 - 192.0.2.0/24 - ::1 - .1 - .24 - - - - - - - src: 192.0.2.1#5789dst: 192.0.2.24#80 - T - - diff --git a/doc/usr/_site/images/flow/stateful-en.svg b/doc/usr/_site/images/flow/stateful-en.svg deleted file mode 100644 index 86c673281..000000000 --- a/doc/usr/_site/images/flow/stateful-en.svg +++ /dev/null @@ -1,434 +0,0 @@ - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - src: 203.0.113.16dst: 203.0.113.2 - Unmasking... - - src: 2001:db8::203.0.113.16dst: 2001:db8::8 - src: 203.0.113.2dst: 203.0.113.16 - Masking... - - src: 2001:db8::8dst: 2001:db8::203.0.113.16 - - - - 203.0.113.16 - 2001:db8::8 - - - - - - A - - V - T - 203.0.113.2 - - diff --git a/doc/usr/_site/images/flow/stateful-es.svg b/doc/usr/_site/images/flow/stateful-es.svg deleted file mode 100644 index 10f98beaa..000000000 --- a/doc/usr/_site/images/flow/stateful-es.svg +++ /dev/null @@ -1,463 +0,0 @@ - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - fuente: 203.0.113.16, 50k, tcpdest: 203.0.113.2, 40k, tcp - Añadiendo prefijo en fuente yDesenmascarando en destino - - fuente: 2001:db8::203.0.113.16, 50k, tcpdest: 2001:db8::8, 40k, tcp - fuente: 203.0.113.2, 40k, tcpdest: 203.0.113.16, 50k, tcp - Enmascarando en fuente yRemoviendo prefijo en dest. - - fuente: 2001:db8::8, 40k, tcpdest: 2001:db8::203.0.113.16, 50k, tcp - - - - dir. 203.0.113.16puerto 50000protocolo tcp - dir. 2001:db8::8puerto 40000protocolo tcp - - - - - - A - - V - T - 203.0.113.2 - - diff --git a/doc/usr/_site/images/flow/vanilla-en.svg b/doc/usr/_site/images/flow/vanilla-en.svg deleted file mode 100644 index f1f440d8d..000000000 --- a/doc/usr/_site/images/flow/vanilla-en.svg +++ /dev/null @@ -1,433 +0,0 @@ - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - src: 192.0.2.16dst: 198.51.100.8 - Appendingprefix... - - src: 2001:db8::192.0.2.16dst: 2001:db8::198.51.100.8 - src: 198.51.100.8dst: 192.0.2.16 - Removingprefix... - - src: 2001:db8::198.51.100.8dst: 2001:db8::192.0.2.16 - - - - 192.0.2.16 - 2001:db8::198.51.100.8 - - - - - - A - - V - T - - diff --git a/doc/usr/_site/images/flow/vanilla-es.svg b/doc/usr/_site/images/flow/vanilla-es.svg deleted file mode 100644 index 37717a0f8..000000000 --- a/doc/usr/_site/images/flow/vanilla-es.svg +++ /dev/null @@ -1,433 +0,0 @@ - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - fuente: 192.0.2.16dest: 198.51.100.8 - Añadiendoprefijo... - - fuente: 2001:db8::192.0.2.16dest: 2001:db8::198.51.100.8 - fuente: 198.51.100.8dest: 192.0.2.16 - Removiendoprefijo... - - fuente: 2001:db8::198.51.100.8dest: 2001:db8::192.0.2.16 - - - - 192.0.2.16 - 2001:db8::198.51.100.8 - - - - - - A - - V - T - - diff --git a/doc/usr/_site/images/heavy_exclamation_mark.png b/doc/usr/_site/images/heavy_exclamation_mark.png deleted file mode 100644 index d34fab5cc011723a2b8791165db3cfc0272db1de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 502 zcmVk(YuNiQ4q%Qf6X~PeVJ=J z-AfM!iy}B83>ugih=HJBx-Vev8<_Y4#)5%hV6yS%=89q85GR2lT_ z4hB~IqxkA8QB~tVBO>^4ctpMP3gHAq0I)v|{`#C`KEpT1H9wy`r~CE`+7Se3Y)SU? z5!HN#cl``2a{>X?6>x?QdH{HrB)Ib%G=KpDge1lnc?(1YnU*XugmyznW4h&}1prbN zEKxeA8%8~RJ_4Wv;HrYA>rfy7mJe|KYz?AvLKAx$puu1=#%1Xmbc-DArv!`!L#72j zN!GxRhJI0GKQM-l$cO%`HE z8WUf>xPI8_H|xb7_1AAm64Se|iI1W-hpJk=*t5?MAKU9ox9#24`}Sjd$5hqK%sjxa zH}CoMVw>f`F&*IW*-P?!w}=OWHe{`VBMrD!+5622L3Mpab>kY@)?N0;DZe*MrVqAA shr@qE9_;S&{liDn@rdb_8PO`_U$aJ(6z3H85&!@I07*qoM6N<$f~RoTH2?qr diff --git a/doc/usr/_site/images/jool.png b/doc/usr/_site/images/jool.png deleted file mode 100644 index 44b76280430f7a189e39786eab1a071d31919760..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30663 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 diff --git a/doc/usr/_site/images/mailbox.png b/doc/usr/_site/images/mailbox.png deleted file mode 100644 index c81f9627563ee21f1207096d4486a40b6046b299..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1045 zcmV+w1nT>VP)b)XQt#MHImC?>v6F$!#8n zHYSDCsx{V1g<7pqaiO9v6m%g}bgK(-FS>W>)<4393syEA8b?y*Do z7$Yan-NelvAodg1fprF)Qe0(h$4-u2y~dUCNnW&tiPrGTThGv+U%&<7%A-eEyDpS| zVlcCZZ-4uVrw>N_`o@5(YZ14jQdMxy;2MK-25Z50JRvn)S`S16wpxxKeTTtAPeKF+ znR+pzqU7RfuVvQPZ{usNgf`(rMjSY2aboe#;C!LrNVyXF1*w&sD|$=F7l1aPMG;k0 z3rPxTqf#q)Y9)tA9wZuXhOoDYw>W2MijY#F9Y9iWRNA)C4&n$dh$yN`l7fZ|R6JBt z8!2r>N0{>t?}tAq#S(&oapVH7RtCLDzq3INEvf}oK}AVfaiPC?-6|3TsclEF$9Xrx z9jcDdDy2A5sY7^>=y&=M1{5vG2+mpP#CEe{kQ4}QJ3PMkc;|;-?@%?wHlw*g3W!wN zHq&-m2rXrVsw$EdpW;?4G)H1+Q8%nuyc@wDRfvN??2NO~ouV06dU=A->p_mFDkTd= z6-mlON?WZc8c8vXV22flcaH2EL@TjvDNORoYah~)J~zkiqV{`K6^bZDgsO@}L2}x9 z(kenuc?2ugIn+6j!nVXG<9R0s!G*D)e)QpO+wkMxYmlsK<;f|oW(ec zwQjhaL&k-egp!3?G6tx%QYD}c}$pEiIr@p;&75)a;mDmEVh0RRG67_uiS=JF~mY zw$ALXxF+T93T`OLQl`ab5$S^uNfHuKK15FmJw(s-FNAMC=G#)#hD6I|xMl^3fssMR zx~9yo;0wsQtrYsgfpa)~zvu8hU%n@B&UyX@?>)wtwN(Ikf*_#NSZ49P zk0>>6K^OpFt)=(qt89Jyb=ISBXQGs1VPS#!`FU1WmN6!ve{_=S=ACG12&LeiuYO`E z6S%u%&!=HnQa5?p4v{SRJtcDrR4bW-(c#MW9Zfm z$UFjv!xP{M2#_0U{MtXsg>TPuX{o_mhhCtkr>84CH#f)Z>@2lf4Jide2yC%PK}mj} zJ;9N^l{{Ftg|R(af!!!PY4jlG1Y37zP>&xm0k`UIKah=7ilanQ!bYw2+2DE!hysi zQj16=c`C@0oV=5hCpn^%W0bm=ibA149G8jXm@o|K@9$@NdYYM;8ES)%5Je@jHVEq} z;mHz7TDlE+inSK&4AvO5Qp6&=KgZw+)`FiT3BA3&OioU6>Wj}&+TxM`g-7AZGeur% zgG{m3V2#EZi&mPV5&&H*?jQ&PymzE&%IfMW0|NsLjSRE&X9JZfwD%Z1BGZU0MWh{M zns!H)qS6$r)%qJlK!CN5EX&BUjApZmcaFGNB26{va4(e=L&x+WJ8ircIAid};Ecs6 zh5I*Q0IfB7p3`hLSz21cIY)0?rmf(_%f~30ly;$tPuqBF)`Tt2SgcgIK;JJMhT+{} zX*Qc&yLOE@E)#|!N@;YbgDzC@g(@U1ytR01an|B>_W&mqu4KEy-g~4Jq-lzjl18IJ z6h%Z)M3S^wZMBffpgTFv$!^~{kJC9$%dQRDfVEgD5&aq7dkU3Gg^7s?q*RQKZpM3$ z)*2zin(+}gu3m=Z6N;h3SdSE*-BVL+86CkIz(?Rc#unLFdxA=(La@G%*W>i*(|qvm zn`|8}v8i6B*_K?o(&qgSKjzTk!~e1k?um**;Nc+m=DD-%M#{S1CM%`EcO~ zYJFu!Hf~__u@PKpmHHpIh@#+uyzqg$bhAwmk(!WOG9=LjAundHjFz7rb15 UQH0IucmMzZ07*qoM6N<$g1cQM9smFU diff --git a/doc/usr/_site/images/network/464-needed.svg b/doc/usr/_site/images/network/464-needed.svg deleted file mode 100644 index 713c9ef32..000000000 --- a/doc/usr/_site/images/network/464-needed.svg +++ /dev/null @@ -1,340 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - IPv4 - - - - - - - - IPv6 - R - - - - - - n6 - - - - - - - - - - - PLAT - - n4 - IPv6 - IPv4 - 203.0.113.24 - - diff --git a/doc/usr/_site/images/network/464-network.svg b/doc/usr/_site/images/network/464-network.svg deleted file mode 100644 index 6165d512f..000000000 --- a/doc/usr/_site/images/network/464-network.svg +++ /dev/null @@ -1,391 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - R - - - - - - n6 - - - - - - - - - - - - n4 - 2001:db8:1::/64192.168.0.0/24 - ::8.8 - ::1.1 - 2001:db8:100::/64 - 203.0.113.0/24 - ::1 - ::2 - .1.2 - .24 - PLAT - (CLAT) - - diff --git a/doc/usr/_site/images/network/alternate.svg b/doc/usr/_site/images/network/alternate.svg deleted file mode 100644 index 4ec5cd207..000000000 --- a/doc/usr/_site/images/network/alternate.svg +++ /dev/null @@ -1,406 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - 203.0.113.16 - 2001:db8::1203.0.113.1203.0.113.2 - - A - - V - (eth0) - (eth0) - 2001:db8::8 - (eth0) - - - - - - - - - - - T - - diff --git a/doc/usr/_site/images/network/eam.svg b/doc/usr/_site/images/network/eam.svg deleted file mode 100644 index 6ecb07a2e..000000000 --- a/doc/usr/_site/images/network/eam.svg +++ /dev/null @@ -1,587 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ::8 - ::9 - ::a - ::b - ::c - ::1 - .1 - - - - - - - - - - - A - B - C - D - E - V - W - X - Y - Z - .16 - .17 - .18 - .19 - .20 - 2001:db8:6::/96 - 192.0.2.0/24 - T - - diff --git a/doc/usr/_site/images/network/full-en.svg b/doc/usr/_site/images/network/full-en.svg deleted file mode 100644 index 03629b0a7..000000000 --- a/doc/usr/_site/images/network/full-en.svg +++ /dev/null @@ -1,377 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - IPv4 - - - - - - - - IPv6 - T - R - A - B - C - D - - E - <Your (IPv6) network(s)> - <More IPv6 infrastructure> - <IPv4 Internet> - - diff --git a/doc/usr/_site/images/network/full-es.svg b/doc/usr/_site/images/network/full-es.svg deleted file mode 100644 index 10b4af666..000000000 --- a/doc/usr/_site/images/network/full-es.svg +++ /dev/null @@ -1,377 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - IPv4 - - - - - - - - IPv6 - T - R - A - B - C - D - - E - <Tus redes (IPv6)> - <Otra infraestructura en IPv6> - <Internet IPv4> - - diff --git a/doc/usr/_site/images/network/mtu-frag.svg b/doc/usr/_site/images/network/mtu-frag.svg deleted file mode 100644 index 72e2c655f..000000000 --- a/doc/usr/_site/images/network/mtu-frag.svg +++ /dev/null @@ -1,346 +0,0 @@ - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - n4 - - n6 - - - - - - - - - - - T - - - - - - - R - mtu = 1500 - mtu = 1300 - mtu = 1300 - - - - diff --git a/doc/usr/_site/images/network/nat-en.svg b/doc/usr/_site/images/network/nat-en.svg deleted file mode 100644 index 635da5579..000000000 --- a/doc/usr/_site/images/network/nat-en.svg +++ /dev/null @@ -1,600 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .8 - .9 - .10 - .11 - .12 - .1 - .2 - - - - - - - - - - - A - B - C - D - E - V - W - X - Y - Z - .16 - .17 - .18 - .19 - .20 - 192.168.0.0/24 - 203.0.113.0/24 - NAT - (Private Network) - - diff --git a/doc/usr/_site/images/network/nat-es.svg b/doc/usr/_site/images/network/nat-es.svg deleted file mode 100644 index 225975af2..000000000 --- a/doc/usr/_site/images/network/nat-es.svg +++ /dev/null @@ -1,600 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .8 - .9 - .10 - .11 - .12 - .1 - .2 - - - - - - - - - - - A - B - C - D - E - V - W - X - Y - Z - .16 - .17 - .18 - .19 - .20 - 192.168.0.0/24 - 203.0.113.0/24 - NAT - (Red Privada) - - diff --git a/doc/usr/_site/images/network/rfc6791.svg b/doc/usr/_site/images/network/rfc6791.svg deleted file mode 100644 index f83ad958d..000000000 --- a/doc/usr/_site/images/network/rfc6791.svg +++ /dev/null @@ -1,298 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - T - R - n6 - n4 - 192.0.2.13 - 4000::1 - IPv6 - IPv4 - - diff --git a/doc/usr/_site/images/network/src-icmp6-better.svg b/doc/usr/_site/images/network/src-icmp6-better.svg deleted file mode 100644 index 4cde94c2b..000000000 --- a/doc/usr/_site/images/network/src-icmp6-better.svg +++ /dev/null @@ -1,362 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - T - R - n6 - n4 - .13 - IPv6 - IPv4 - 2001:db8::/96 - .1 - 192.0.2.0/24 - 203.0.113.0/24 - .6 - ::1 - - diff --git a/doc/usr/_site/images/network/stateful.svg b/doc/usr/_site/images/network/stateful.svg deleted file mode 100644 index dcd79d86b..000000000 --- a/doc/usr/_site/images/network/stateful.svg +++ /dev/null @@ -1,587 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ::8 - ::9 - ::a - ::b - ::c - ::1 - - - - - - - - - - - A - B - C - D - E - V - W - X - Y - Z - .16 - .17 - .18 - .19 - .20 - 2001:db8::/96 - 203.0.113.0/24 - T - .1 - - diff --git a/doc/usr/_site/images/network/vanilla.svg b/doc/usr/_site/images/network/vanilla.svg deleted file mode 100644 index 53c79adc2..000000000 --- a/doc/usr/_site/images/network/vanilla.svg +++ /dev/null @@ -1,591 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ::8 - ::9 - ::a - ::b - ::c - ::1 - .1 - - - - - - - - - - - A - B - C - D - E - V - W - X - Y - Z - .16 - .17 - .18 - .19 - .20 - 192.0.2.0/24 - T - 2001:db8::c633:6400/120(2001:db8::198.51.100.0/120) - - diff --git a/doc/usr/_site/images/offload-none.svg b/doc/usr/_site/images/offload-none.svg deleted file mode 100644 index 315750009..000000000 --- a/doc/usr/_site/images/offload-none.svg +++ /dev/null @@ -1,912 +0,0 @@ - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - stream: 2offset: 1200length: 600 - - - - stream: 1offset: 0length: 10 - - - - stream: 1offset: 10length: 20 - - - - stream: 1offset: 30length: 10 - - - - - stream: 2offset: 0length: 600 - - - - stream: 2offset: 600length: 600 - - - Network interface layer - Internet layer - Transport layer - Application layer - - - - - - stream: 1offset: 0length: 10 - - - - stream: 1offset: 10length: 20 - - - - stream: 1offset: 30length: 10 - - - - stream: 2offset: 1200length: 600 - - - - stream: 2offset: 0length: 600 - - - - stream: 2offset: 600length: 600 - - - - stream: 1offset: 0length: 10 - - - - stream: 1offset: 10length: 20 - - - - stream: 1offset: 30length: 10 - - - - stream: 2offset: 1200length: 600 - - - - stream: 2offset: 0length: 600 - - - - stream: 2offset: 600length: 600 - - - - stream: 1offset: 0length: 10 - - - - stream: 1offset: 10length: 20 - - - - stream: 1offset: 30length: 10 - - - - stream: 2offset: 1200length: 600 - - - - stream: 2offset: 0length: 600 - - - - stream: 2offset: 600length: 600 - - - diff --git a/doc/usr/_site/images/offload-right.svg b/doc/usr/_site/images/offload-right.svg deleted file mode 100644 index 268438da8..000000000 --- a/doc/usr/_site/images/offload-right.svg +++ /dev/null @@ -1,552 +0,0 @@ - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - stream: 2offset: 1200length: 600 - - - - stream: 1offset: 0length: 10 - - - - stream: 1offset: 10length: 20 - - - - stream: 1offset: 30length: 10 - - - - - stream: 2offset: 0length: 600 - - - - stream: 2offset: 600length: 600 - - Network interface layer - Internet layer - Transport layer - Application layer - - - - - - stream: 1offset: 0length: 40 - - - - stream: 2offset: 0length: 1800 - - - - stream: 1offset: 0length: 40 - - - - stream: 2offset: 0length: 1800 - - - - stream: 1offset: 0length: 40 - - - - stream: 2offset: 0length: 1800 - - - diff --git a/doc/usr/_site/images/offload-router.svg b/doc/usr/_site/images/offload-router.svg deleted file mode 100644 index 421c50e09..000000000 --- a/doc/usr/_site/images/offload-router.svg +++ /dev/null @@ -1,592 +0,0 @@ - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - stream: 2offset: 1200length: 600 - - - - stream: 1offset: 0length: 10 - - - - stream: 1offset: 10length: 20 - - - - stream: 1offset: 30length: 10 - - - - - stream: 2offset: 0length: 600 - - - - stream: 2offset: 600length: 600 - - Network interface layer - Internet layer - - - - stream: 1offset: 0length: 40 - - - - stream: 2offset: 0length: 1800 - - - - - stream: 2offset: 0length: 1800 - - - - stream: 1offset: 0length: 40 - - - - - stream: 1offset: 0length: 40 - - - - stream: 2offset: 0length: 1500 - - - - stream: 2offset: 1500length: 300 - - 1 - 2 - 3 - - diff --git a/doc/usr/_site/images/pencil.png b/doc/usr/_site/images/pencil.png deleted file mode 100644 index 373c8487c0c8bd9d54c09c79833ae6965ee2f174..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1192 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 DaY?A} diff --git a/doc/usr/_site/images/plateaus-attempt1.svg b/doc/usr/_site/images/plateaus-attempt1.svg deleted file mode 100644 index b99656d3a..000000000 --- a/doc/usr/_site/images/plateaus-attempt1.svg +++ /dev/null @@ -1,441 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - J(NAT64) - - IPv4 - IPv6 - - - - - - - r4 - - - - - - - - n6 - n4 - - - - - - - - - - - - - - - - - - diff --git a/doc/usr/_site/images/plateaus-attempt2.svg b/doc/usr/_site/images/plateaus-attempt2.svg deleted file mode 100644 index 422116725..000000000 --- a/doc/usr/_site/images/plateaus-attempt2.svg +++ /dev/null @@ -1,473 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - J(NAT64) - - IPv4 - IPv6 - - - - - - - r4 - - - - - - - - n6 - n4 - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/usr/_site/images/plateaus-attempt3.svg b/doc/usr/_site/images/plateaus-attempt3.svg deleted file mode 100644 index 8c8f3519e..000000000 --- a/doc/usr/_site/images/plateaus-attempt3.svg +++ /dev/null @@ -1,467 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - J(NAT64) - - IPv4 - IPv6 - - - - - - - r4 - - - - - - - - n6 - n4 - - - - - - - - - - - - - - - - - diff --git a/doc/usr/_site/images/plateaus-network.svg b/doc/usr/_site/images/plateaus-network.svg deleted file mode 100644 index 9d57b9965..000000000 --- a/doc/usr/_site/images/plateaus-network.svg +++ /dev/null @@ -1,329 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - J(NAT64) - - IPv4 - IPv6 - - - - - - - r4 - - - - - - - - n6 - n4 - - diff --git a/doc/usr/_site/images/run-eam-firefox-4to6.png b/doc/usr/_site/images/run-eam-firefox-4to6.png deleted file mode 100644 index bf9a5132fbc01402a9e235e67e719b9f716d5f7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26094 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 diff --git a/doc/usr/_site/images/run-stateful-firefox-4to6.png b/doc/usr/_site/images/run-stateful-firefox-4to6.png deleted file mode 100644 index 6c38204953dc83b86c81876dd3bbb0ba4dc95370..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26248 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

-
- -
- -
-
- -

About

- -

Jool is an Open Source IPv4/IPv6 Translator, funded by NIC Mexico and co-developed with ITESM.

- -

Both code and documentation are relased under the GPLv3 license.

- - - -
-
-
-
- - en - - | - - es - -
-
 
-
-
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 diff --git a/doc/usr/_site/images/run-vanilla-firefox-4to6.png b/doc/usr/_site/images/run-vanilla-firefox-4to6.png deleted file mode 100644 index 4cbed57c06b966cd083cdbc53946bced155ee5e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26115 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 diff --git a/doc/usr/_site/images/run-vanilla-firefox-6to4.png b/doc/usr/_site/images/run-vanilla-firefox-6to4.png deleted file mode 100644 index 0529aab32f8e235f633a72c7da573692f6d65fc3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26136 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 diff --git a/doc/usr/_site/images/smiley.png b/doc/usr/_site/images/smiley.png deleted file mode 100644 index 8f230d8e9f78ce0d0f34d7f24a9a71ce427fc4f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1276 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 O4ds{M7o`fOLH`A}pPmQ+ diff --git a/doc/usr/_site/images/static-network.svg b/doc/usr/_site/images/static-network.svg deleted file mode 100644 index 51d023d11..000000000 --- a/doc/usr/_site/images/static-network.svg +++ /dev/null @@ -1,895 +0,0 @@ - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - IPv4 - IPv6 - 1.2.3.11.2.3.21.2.3.41.2.3.5 - - - - - - - - - - - - - - - - - - - - - - - - - 1::1 - 1::2 - 1::3 - 1::564:ff9b:: - HTTP - - diff --git a/doc/usr/_site/images/thumbsup.png b/doc/usr/_site/images/thumbsup.png deleted file mode 100644 index 94f383ab2f11c6198537fb0c74c83d9a688b4918..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1009 zcmVb)!T2BMHt8N@60>zyNB+n zr|m+aA{Zno8u4&pxHj=$(0|e!z0eyBv8WeB41u-?wA*G2yWQP(cl#daypsR8)FxjeHY$@N|=L?;*%3&$fPH z@7~70*1Qp%&5mizx2P=DS-99?xO<;Gp1nP6jYdiV&J&g*T%M5qA29qgUn!76ptB5X z?c2jDico<<6^^t&;COsYP^!Egd@|~j9Cirt$jckhW{NNcDG1|yDVQ=K{|&u4jGoH&o7e46Lgm10T~2Dl^WqI*YgrC zvV?RxMj(jhn&h(){ml)U?G`~b!p~CD<1yK2h@EzMdiOb5nt%gQ6cid(uis?#+Kp2< znT&bx^LKbXMGEi+YV|p4trF#06%pq+tvTA?BM1cTP7@tUnxcwy0)LWlu(QjfJ3rF7 za-ARyU%-PW5AgYr&eivk)?tpOsA>gSFC$Wo%`)QAkgdCa5)(0Z>lTOrsRTkwOp$Z2 z-=lo_3y|`(r z@%Ap(m{*4996|^r;H7}fKp??+ymgo&r&6o2xBZwuzW;%0wM3rgWLbtTGz(O&ZB9%ghAgYtZfJkK%4;El!SIo+*C)H)ra zC_06Waaf-tG6RJsolX!!P+x9?_Xr>e6#{s;afkC)E+K`)T8k|-CzA=i{XU=HeDCZ# z)*_@Bj%c)+cxTB^W(@bbTv-1I6-5Xsh{_ett*x?sf16MRM00b*aYB(Bib7+8h{e^l zvvBj`Rqp=w6O%z7iD&%mIZt+a^o|P}m5@jYu!cNMkYPYlXcjMbXaxaUYsP~^0$Vwg zAHq53<2dI2?;G^Hf1#5Tv~`phR#-ZJfq2+waQy= f&jgcrSHJY%Vkh6}0+YL>00000NkvXXu0mjf7Vptx diff --git a/doc/usr/_site/images/tut2.3-network.svg b/doc/usr/_site/images/tut2.3-network.svg deleted file mode 100644 index 208fe9db0..000000000 --- a/doc/usr/_site/images/tut2.3-network.svg +++ /dev/null @@ -1,881 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - J(NAT64) - - - - - - - - IPv4 - IPv6 - - R - S - - - - - - - - - - - - - - - - - - - - 192.0.2.0/24 - 198.51.100.0/24 - 2001:db8:2::/64 - 2001:db8:1::/64 - ::11 - ::10 - ::1 - ::1 - ::11 - ::10 - .11 - .10 - .11 - .10 - .1 - .1 - A - B - C - D - E - F - G - H - (eth0) - (eth0) - (eth0) - (eth0) - (eth0) - (eth0) - (eth0) - (eth0) - (eth0) - (eth1) - (eth0) - (eth1) - pool: 64::/96 - (eth0) - (eth1) - ::2 - .2.3 - - diff --git a/doc/usr/_site/images/tut4-arrows.svg b/doc/usr/_site/images/tut4-arrows.svg deleted file mode 100644 index df020af38..000000000 --- a/doc/usr/_site/images/tut4-arrows.svg +++ /dev/null @@ -1,623 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - J(Jool) - - - - - - - IPv4 - IPv6 - - R - S - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - C - D - - B(BIND) - - - IPv6 - IPv4 - - - NAT64 - - nat64-tutorial.mx - - - example.com - - DNS64 - - diff --git a/doc/usr/_site/images/tut4-setup.svg b/doc/usr/_site/images/tut4-setup.svg deleted file mode 100644 index a4d51dc10..000000000 --- a/doc/usr/_site/images/tut4-setup.svg +++ /dev/null @@ -1,563 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - J(Jool) - - - - - - - IPv4 - IPv6 - - R - S - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - C - D - - B(BIND) - - - IPv6 - IPv4 - DNS64 - NAT64 - - diff --git a/doc/usr/_site/images/usr-dropaddr-1.svg b/doc/usr/_site/images/usr-dropaddr-1.svg deleted file mode 100644 index 0737929e4..000000000 --- a/doc/usr/_site/images/usr-dropaddr-1.svg +++ /dev/null @@ -1,864 +0,0 @@ - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - Dear64:ff9b::192.0.2.2#11:blah blah blah. - Dear 192.0.2.1#10:blah blah blah. - - - - - - - - - - - - - - - - - - - - 2001:db8::1 - 192.0.2.1 - - - 192.0.2.2 - 192.0.2.3 - n6 - n4a - n4b - j - - - - - diff --git a/doc/usr/_site/images/usr-dropaddr-2.svg b/doc/usr/_site/images/usr-dropaddr-2.svg deleted file mode 100644 index aac871158..000000000 --- a/doc/usr/_site/images/usr-dropaddr-2.svg +++ /dev/null @@ -1,836 +0,0 @@ - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - Hey, 192.0.2.3:You can talk to 192.0.2.1on port 10. - - - - - - - - - - - - - - - - - - - - - - - - - - 2001:db8::1 - 192.0.2.1 - - - 192.0.2.2 - 192.0.2.3 - n6 - n4a - n4b - j - - - - - diff --git a/doc/usr/_site/images/usr-dropaddr-3.svg b/doc/usr/_site/images/usr-dropaddr-3.svg deleted file mode 100644 index 3e7309fdd..000000000 --- a/doc/usr/_site/images/usr-dropaddr-3.svg +++ /dev/null @@ -1,832 +0,0 @@ - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - 2001:db8::1 - 192.0.2.1 - - - 192.0.2.2 - 192.0.2.3 - n6 - n4a - n4b - j - - - - - - - - - Hello,192.0.2.1#10 - - - - diff --git a/doc/usr/_site/images/usr-session.svg b/doc/usr/_site/images/usr-session.svg deleted file mode 100644 index c3c8c1ff0..000000000 --- a/doc/usr/_site/images/usr-session.svg +++ /dev/null @@ -1,769 +0,0 @@ - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - IPv6 - IPv4 - - - - - - 2001:db8::2 - 192.0.2.1 - 93.184.216.119 - - (ipv6client.mx) - (example.com) - - - - diff --git a/doc/usr/_site/images/warning.png b/doc/usr/_site/images/warning.png deleted file mode 100644 index 30ceaaf41019ab488227ad2e69eb8c4d02ebee93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 909 zcmV;819JR{P)dws7T*Nz+K z;WiK!5DBS5DiT6sQDDgymi!s4SinEiMR#2_K?-UJYN$knRH0^52_e-9P{${aJ zm^TZj6o`WyrAHcRbk3Ri<~L_F$FtTtW-x0l>FE&w^|>~_@6WP~*|LDR{|j&rxOX<6 z&1M3OPfsvvhp2u;RR0sBb{LzzxOLOe+!)zXmuvrfm4=uZ-!V4PD!k`;DI&ZXPTP-fPU{IZmizC7$Bvjh&NdX z4=6H=a}MwThb{~s-mXnl77}M({*lsn)anN$$+yV%8s&0%`V|chpHgQFl`4!>Sf#N_ zgEnMZap!KIJ9qnJdg6N#H&UT8MdY>^96p_1gFMgC$p)eM1CcA7F=s=AGsGjw`sNYq zn@1!=2~Phb#~^b>Xnw~e8x%!x{)*!69yPU%C=6EpyG2+HOOeOdU)%s-G4jy4#r>y~ zh_Rzu-Dc4JgxBBt;3Z%@9%GVqeBC1}ruQE;hELy*CThp#+~xqnLL=y5;`@x-@6c#8 zCV+I5mCsL9R}{xTcRCbos4mKn z@Jn7914FyU1`DI98)SvM{sY~xoy1j3%(NtK+>VR7(N%S$(RM_m6H5RYnc$C5W=ycm zV9Gd56BC=r%;U}dcEPVfhQ^-cBsb@s`+4V__r32LYpvKaX>)0e;X|xizHjHDyFq#4 zKK9A;4}t;MC(kKQ+(+(4MbKK6U03T@uW7ZtUxmRDxrwB#wg2gEBB{dQh*sPCwSM)Q z%C0MGt+3YW-IeRgwfAe0pwa}j7CI|;_F$+xo77t9tkMLvNRM(yPw3s1>$29$2T*Ki zPAeaKxRYZlzw+9|B!7=aAd{nn#Q@C% zy)<6@9)LplC-PG%1k~aKr-g>-7)?W=oeuT@0rC^Svo`u8WL7C5Ks0^bv-!g57l5G_ z15PVV(I03YI=N>g`+(cf+-L-wS!Dwuw)BRf27}LOr6oGH4+a%FthDB#lQdr%qukbr z0E@w55KwMwr1?^H*nvQRh9mXVAFjhicw6ow>JQh^aHRgAZPkI^qa?4w5%Q@l<%)P2 z$fvTr3PD{yZdSQu|e`Gi3w57A|=y^JZPVF0d$IvOd zqv!ECt@zpe558Q;@Ooisw`I3j)cl30e*5H0-RT@qrb=b+dnOjwoz4OMdgu$yUx>;r z7WbZIuT=bt}c(evH6_-kwT%f?!ZG3I|=0g~|fcE$29 Xs5VjuKx=gH00000NkvXXu0mjfIWe>X diff --git a/doc/usr/_site/index.html b/doc/usr/_site/index.html deleted file mode 100644 index 71a9a343e..000000000 --- a/doc/usr/_site/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - Redirect - - - Redirecting to en/index.html... - - diff --git a/doc/usr/_site/intro-jool.html b/doc/usr/_site/intro-jool.html deleted file mode 100644 index 7cfda817f..000000000 --- a/doc/usr/_site/intro-jool.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - Redirect - - - Redirecting to en/intro-jool.html... - - diff --git a/doc/usr/_site/intro-nat64.html b/doc/usr/_site/intro-nat64.html deleted file mode 100644 index 4d245bae5..000000000 --- a/doc/usr/_site/intro-nat64.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - Redirect - - - Redirecting to en/intro-nat64.html... - - diff --git a/doc/usr/_site/misc-bib.html b/doc/usr/_site/misc-bib.html deleted file mode 100644 index 840ba71db..000000000 --- a/doc/usr/_site/misc-bib.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - Redirect - - - Redirecting to en/bib.html... - - diff --git a/doc/usr/_site/misc-eamt.html b/doc/usr/_site/misc-eamt.html deleted file mode 100644 index 7d194dbeb..000000000 --- a/doc/usr/_site/misc-eamt.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - Redirect - - - Redirecting to en/eamt.html... - - diff --git a/doc/usr/_site/misc-faq.html b/doc/usr/_site/misc-faq.html deleted file mode 100644 index 9394396b6..000000000 --- a/doc/usr/_site/misc-faq.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - Redirect - - - Redirecting to en/faq.html... - - diff --git a/doc/usr/_site/misc-mtu.html b/doc/usr/_site/misc-mtu.html deleted file mode 100644 index 36cac7c5b..000000000 --- a/doc/usr/_site/misc-mtu.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - Redirect - - - Redirecting to en/mtu.html... - - diff --git a/doc/usr/_site/misc-offloading.html b/doc/usr/_site/misc-offloading.html deleted file mode 100644 index 254abfb16..000000000 --- a/doc/usr/_site/misc-offloading.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - Redirect - - - Redirecting to en/offloading.html... - - diff --git a/doc/usr/_site/misc-rfc6791.html b/doc/usr/_site/misc-rfc6791.html deleted file mode 100644 index d3b09bd8c..000000000 --- a/doc/usr/_site/misc-rfc6791.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - Redirect - - - Redirecting to en/rfc6791.html... - - diff --git a/doc/usr/_site/mod-install.html b/doc/usr/_site/mod-install.html deleted file mode 100644 index 6f5ac121c..000000000 --- a/doc/usr/_site/mod-install.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - Redirect - - - Redirecting to en/mod-install.html... - - diff --git a/doc/usr/_site/mod-run-464xlat.html b/doc/usr/_site/mod-run-464xlat.html deleted file mode 100644 index 880b95de7..000000000 --- a/doc/usr/_site/mod-run-464xlat.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - Redirect - - - Redirecting to en/mod-run-464xlat.html... - - diff --git a/doc/usr/_site/mod-run-alternate.html b/doc/usr/_site/mod-run-alternate.html deleted file mode 100644 index 4c4979bd4..000000000 --- a/doc/usr/_site/mod-run-alternate.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - Redirect - - - Redirecting to en/mod-run-alternate.html... - - diff --git a/doc/usr/_site/mod-run-eam.html b/doc/usr/_site/mod-run-eam.html deleted file mode 100644 index 60b5d8146..000000000 --- a/doc/usr/_site/mod-run-eam.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - Redirect - - - Redirecting to en/mod-run-eam.html... - - diff --git a/doc/usr/_site/mod-run-stateful.html b/doc/usr/_site/mod-run-stateful.html deleted file mode 100644 index de0e62424..000000000 --- a/doc/usr/_site/mod-run-stateful.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - Redirect - - - Redirecting to en/mod-run-stateful.html... - - diff --git a/doc/usr/_site/mod-run-vanilla.html b/doc/usr/_site/mod-run-vanilla.html deleted file mode 100644 index 3ed473dbe..000000000 --- a/doc/usr/_site/mod-run-vanilla.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - Redirect - - - Redirecting to en/mod-run-vanilla.html... - - diff --git a/doc/usr/_site/obj/464xlat/ipv4-n4.pcapng b/doc/usr/_site/obj/464xlat/ipv4-n4.pcapng deleted file mode 100644 index 9ae0def24e61f39b95cf44f87145a5d4f8e3d0cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 548 zcmd<$<>ks@U|{gI(UxKa(*L1=nL(VvCo`|KLcv(i&{)qv*T_USJvA@2C^MOXg+Y_S zr8Ku7Ik7;&P|wgn&rCt149Z9=%Fk8EO)M@+Ez$)EX#&jz0gxRa^If3y|NjgOOhA)T zOEL^Nfii4BaUMK&0;R!vLF!sS93YSuU}d-x7a)`bWP>mVgZlnuc|h_~{3#9wR|bX< zzH$ZzJH~Hfrx^;FfLMZq;go;xMh3<++#f?gCWxNm15peDfJh7d@t cS6H7QGnDQ9uv&-($ObwK3|N6|WB{@Q0LIQ}jQ{`u diff --git a/doc/usr/_site/obj/464xlat/ipv4-n6.pcapng b/doc/usr/_site/obj/464xlat/ipv4-n6.pcapng deleted file mode 100644 index 9de815a8a6dfb19d8f891e26c2812d2b1caa8cbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 552 zcmd<$<>ks@U|{gI(UxKa(*L1=nL(VvCo`|KLcv(i&{)qv*ThseJvA@2C^MOXg+Y_S zr8Ku7Ik7;&P|wgn&rCt149Z9=%Fk8EO)M@+Ez$)EX#&jz0gxRa^F5&S|NjgOObi?h zWl8xJd8s7^oIqJNpd1e#dx6qm{UCKMAPx{n3$QXMga!yD0ofqT!JyuJ(}9aY9n5xR zUkT422RL3>s$orx_T}aDNN|Dq;{l#RsAo1O$bIMMTBKB_yS! zWn|^#6%>_}RaDi~H8i!fb#(Rg4GfKpO-#+qA$Fs?!8{e=2AJ(2mvAtE+)#O*fx(WE zO%P;1$Q=v}22^kZE6~-Ta0LNSIDFl@T!@iDhQT?%G!Gd5#R>&Q`DK|YsVNFcl?o}4 i2m^&VNNxW;86jpUn-Qpw1;}QB7{$N}av%}_*#Q8wL1aV# diff --git a/doc/usr/_site/obj/464xlat/ipv4-plat.pcapng b/doc/usr/_site/obj/464xlat/ipv4-plat.pcapng deleted file mode 100644 index 23366847feb7a4f346ae0b640ce07556309fb2f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 528 zcmca|c+)~A1{MYw`2U}Qp%BP9!~HSD>KY$I1&|HGK)}er#=)R|jM0OEq3v!0NW{U) zUV)K!2Lls`0|hDnXTzAM844vD7+jz0pJreLnFkUVJ;eu>77!E?77-N_mync_mXVc{ zS5Q<^R#8<`*U;3`*3s3|H!w6ZHZe6b2kEQ2&c~1f)CIyor$XFuDgG1#0|$dE149U3 zIRk?o<2Ny&eM}%bIT%j)_im)j&fm9@?1cG!|FS%ooip2j-e=5Y2iXU*mx19D#dhAj bgB0E{e-;*aA%`~uTKJ-ee_mJ diff --git a/doc/usr/_site/obj/464xlat/ipv4-r.pcapng b/doc/usr/_site/obj/464xlat/ipv4-r.pcapng deleted file mode 100644 index af7bb73cf75bfce9a6957350bdd47f27cd96a09e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 528 zcmca|c+)~A1{MYw`2U}Qp%BP9!~HQtqlu3p1;_?rAYf!*<6=+;GdUPs85lyMgd7+g z7$2WKu!4c(G(({T2ZM&0{%HnAkY127(Nlb2)dGS-!Xlz#;u4Zl(lWAg@(PMd$||aA z>Kd9_+B&*=`UZwZ#wMm_<{*8an)w(ifVw~!=q#X}91QBm7(Eym+U_QR#2l>b6&QJU zFff5QP>}L}HjD{!M+1ZFb4uNDq8G^>V7~+1QCQ%G><$Jrd(qw1$lyY;JAU*b#Q`il enr}KVFhJs<@;n2B9V43{$lsuNU|=wyC=LMRa$Wxb diff --git a/doc/usr/_site/obj/464xlat/ipv6-n4.pcapng b/doc/usr/_site/obj/464xlat/ipv6-n4.pcapng deleted file mode 100644 index 43845aa57f99871990d91457bbb1e8633c0adb9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 548 zcmd<$<>ks@U|{gI(UxKa(*L1=nL(VvCo`|KLcv(i&{)qv*T_USJvA@2C^MOXg+Y_S zr8Ku7Ik7;&P|wgn&rCt149Z9=%Fk8EO)M@+Ez$)EX#&jz0gxRa^If3y|NjgOOhA)T zOEL^Nfii4BaUMK&0;R!vLF!sS93YSuU}ac-*ia$~$Od5!2KD{R@_^)}_){DVt_%zz zKY`ZTF>))OW+-F=VhIk0KZ2KS85s3>K8AoyaH!@4Q49itLc$`VV&W2#QqnTAa`Fm_ zO3Es#YU&!ATG~3gdin;2M#d(lX66vP(cR#B1jP+t+aWFixnX8I&>qH2Hjw=wcQ7!p z2vP0^R-mgvVG07EaF}o;OM;O>hQT?%G!Gc|#R>&Q`DK|YsVNFcl?o}4$YKJ95J;_Z bwWl~Ul)dm!mIMos4RjV5umai00AvRMGIC`} diff --git a/doc/usr/_site/obj/464xlat/ipv6-n6.pcapng b/doc/usr/_site/obj/464xlat/ipv6-n6.pcapng deleted file mode 100644 index 03d77992e05ba2e9a1d02e1aee214bb73d051fed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 592 zcmd<$<>ks@U|{gI(UxKa(*L1=nL(VvCo`|KLcv(i&{)qv*ThseJvA@2C^MOXg+Y_S zr8Ku7Ik7;&P|wgn&rCt149Z9=%Fk8EO)M@+Ez$)EX#&jz0gxRa^F5&S|NjgOObi?h zWl8xJd8s7^oIqJNpd1e#dx6qm{UCKSKpY^D7GP!IUuq~(24sUU2ZMU^O$ROpbs)R# zZUT^GaIkVvVC3BawjRU>DN6Z28^UB@IL%Nf(ZI0hg@GUgqdw2a5RkY-H78hFKu}0n zL{v;%LQ+avMpjNazfqnsnKL~)r%e|mqf{{Un!8yM)4;W9y3I#>^Wtl0dDGEuI3Mr6? h1;q_WZ3kbvI5U*(lHV`E0%SwNhJk?<$VLVrI{=;dXKnxh diff --git a/doc/usr/_site/obj/464xlat/ipv6-plat.pcapng b/doc/usr/_site/obj/464xlat/ipv6-plat.pcapng deleted file mode 100644 index 321bb53d76f2c22fa1a4f73d165750db3961f02c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 528 zcmca|c+)~A1{MYw`2U}Qp%BQ?=lK|-IGvNB0>}noAYf!*<6uxf#^}Mo&~`TgB;sIY zufWK=11JLn91JP{XTvzB844vD81}p{5M*EknFkVgsOAJq3kV7ci-?MeOGrvd%gD;f zD<~={tEj4}YiMd|>*(s~8yFfHo0yuJgY=cn;ABVv>H=Y)Qz7oS6n~0=frG)7fg$8) z4g-T7Bex>ZJ|>Wz91MR1FWXXPXT=gEJ7Ip`zbp@C=gfAXUl=plK=y&`1v*TKQae8` aMG9}2KMM=Iki#22e9^}noAYf!*<6=+;Gu!SafM^FR2L(pn z9Y7fv;9yAkKO4q5%}^-Oz_90qfgl4T$UKm^Lp3K@T0l@pSVUAzTtZSxT1Hk*UO`bw zSw&S%T|-k#TSr$<-@wqw*u>P#9Hg(;7|9(hAa`&us2^kWU|@i|!=4`Qa0)|m2RJ-{ m?kFtqLUsqb|Iyvm$grE@@K8)catACtnr}KFxxks@U|{gI(UxKa(*L1=nL(VvCo`|KLcv(i&{)qv*ThUWJvA@2C^MOXg+Y_S zr8Ku7Ik7;&P|wgn&rCt149Z9=%Fk8EO)M@+Ez$)EX#&jz0gxRa^F5&S|NjgOObi?h zWl8xJd8s7^oIqJNpd1e#dx6q${W#1qBE=k#eMeY9rUL!V&&qJWy4PnBkPpHf4C)UY z`M4O=fpQ!St_-YG%6S+V92kY<4=^yX9y3m1uE6^z^N z9e&Xtd1B{Wr_@ZlqRVDAwVF?pd86kUXMX*?Y-MBBx6d1Tq9)9X@8*<{I$Oh=_`|sQ z@~lhm^6ll?PA|J^^LL}ZwX_!RgK)zqtJgSiOj{~9x8uUXzgZg64)6S8XLGE2WN=%q z@NI5d!b`d7GsV8<>h(%{zv|(?e09m6n2RQzxf;P?TQhUhE-yRIb6D%p#q%eaqs1JL zG~9U6#&emi=#$$;iPG7>ldSBRr)4h@);c0kn>G1tK~Hk)xd3A)`#tFrpDNSrRMp+m zwPqgYzbmUebAIRt->7qs3(7qt<5mhb&Mh@rE2bEzuRVcrX%>so#An|a-gLjyo~IVa zY91f^hU2?e<<$ZXZ9Oil{te2VAB@v1%efMpj@!VB+ zc1l&elgZA_lWx}6C8?s4)`%aKIxaMQU$I#J*PP!x_d+&)?vl2AGP@4^1hm-j9Ycin#f>5b>J%wFeQUH^J(wL;M^R>x?+z=T;y%?D$=4lgUfWrTx-oyb$oTv9mNLnA(QADSzZPtW&4^kzgJ;Q|Ng*LG!=I!biM!H^Srti>= zd$(|>@QVEti?<#=D)gVlT>I{!R-?nK7-VjiovBLL`_FFm`j0Dr%1J6rs+n=3z9&-_@cW=a21})v&wy)rC+~rj1SOCN6U+t^A=f?Ja}uiAedYizhYA znO^fDMOZEI^7qw~que#@4=B2apG|h~7G_#5{B?bdfqibQYpLu5x0r3qz84GrKFIxY z9)r*G*Dku>Y~D65I}*Cy^R~?gzHaH1Thmj0)EC^jlDFZT;)4Lqd6O30k+~kbuVlJq za#rAWg9~pPPA=QaoYr{geu$3O;cM44B9i{hSJD*ZWUT6J-ua2|RP~ROS&~OnI(hvP zUxjuZj<}*wzxsl1q2wk0OCgGynr{RspL-!I+J2Cd=_8vDLre zUod6O+iSnKcr7%%7j(7XWY1%nPbwL+rrq^y%CYVV90;i|6hNi~CwIZ@1dVc3`Wqs9)KL@ToA>bGGCT{kdH_;nP1uujjzaeSAiK(R^CXC@LFp z?eFrsS&*_DRE8S>%WH7m1uVlC*Y*1F0r?;dF1?w6CHb9T#vbnF!vd3OMr zU;rx1k@=uU({@0mVQVv%F+DKumebasgCc4&8bL6dvgHh&wP`VD$*327!bQtRAs)K(9BD`Jj4* zg+V?I7^oTvK!UY{a5#?EH>3TE(SF5fzhbcWDOb<2Gqv_WHW&b0s>Yb8ySGc UjbL`c>a1lH+65}>K>(Xw0MMOg?EnA( diff --git a/doc/usr/_site/obj/bib.csv b/doc/usr/_site/obj/bib.csv deleted file mode 100644 index d2f767df9..000000000 --- a/doc/usr/_site/obj/bib.csv +++ /dev/null @@ -1,5 +0,0 @@ -Protocol,IPv6 Address,IPv6 L4-ID,IPv4 Address,IPv4 L4-ID,Static? -TCP,6::6,6,4.4.4.4,4,1 -TCP,6::6,66,4.4.4.4,44,1 -TCP,6::6,1234,4.4.4.4,1234,0 -UDP,6::6,6666,4.4.4.4,4444,1 diff --git a/doc/usr/_site/obj/eamt.csv b/doc/usr/_site/obj/eamt.csv deleted file mode 100644 index ebb326345..000000000 --- a/doc/usr/_site/obj/eamt.csv +++ /dev/null @@ -1,6 +0,0 @@ -IPv6 Prefix,IPv4 Prefix -64:ff9b::/127,192.0.2.192/31 -2001:db8:dddd::/64,192.0.2.128/26 -2001:db8:cccc::/124,192.0.2.16/28 -2001:db8:bbbb::b/128,192.0.2.2/32 -2001:db8:aaaa::/128,192.0.2.1/32 diff --git a/doc/usr/_site/obj/session.csv b/doc/usr/_site/obj/session.csv deleted file mode 100644 index 9f0dbe33a..000000000 --- a/doc/usr/_site/obj/session.csv +++ /dev/null @@ -1,4 +0,0 @@ -Protocol,IPv6 Remote Address,IPv6 Remote L4-ID,IPv6 Local Address,IPv6 Local L4-ID,IPv4 Local Address,IPv4 Local L4-ID,IPv4 Remote Address,IPv4 Remote L4-ID,Expires in,State -TCP,2001:db8::2,58239,64:ff9b::5db8:d877,80,192.0.2.1,60477,93.184.216.119,80,00:02:57.44,V4_FIN_V6_FIN_RCV -TCP,2001:db8::2,58237,64:ff9b::5db8:d877,80,192.0.2.1,6617,93.184.216.119,80,00:03:52.236,V4_FIN_V6_FIN_RCV -ICMP,2001:db8::2,13371,64:ff9b::5db8:d877,13371,192.0.2.1,1402,93.184.216.119,1402,00:00:50.236, diff --git a/doc/usr/_site/obj/tut2.1-wireshark.wsk b/doc/usr/_site/obj/tut2.1-wireshark.wsk deleted file mode 100644 index c7d435cdd309e705634be9bfc509ee43900592ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1814 zcmca|c+)~A1{MYw`2U}Qp%BP|{fPsmrf#J9{-!cZqjX?82;wh=DQOv5Ie7&| zC1n*=HFXV5Eo~iLJ$(a1BV!X&GjotTHrufFt{=>gfK8T zFxWG0`+Hyo6C=n@4u*xHbB<7EXWL#RJ0X5oxmLU36UKu##ds zAMayfXaIT - - - - - Redirect - - - Redirecting to en/dns64.html... - - diff --git a/doc/usr/_site/op-pool4.html b/doc/usr/_site/op-pool4.html deleted file mode 100644 index dbfa4f0f6..000000000 --- a/doc/usr/_site/op-pool4.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - Redirect - - - Redirecting to en/pool4.html... - - diff --git a/doc/usr/_site/op-static-bindings.html b/doc/usr/_site/op-static-bindings.html deleted file mode 100644 index 67cf7015e..000000000 --- a/doc/usr/_site/op-static-bindings.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - Redirect - - - Redirecting to en/static-bindings.html... - - diff --git a/doc/usr/_site/usr-flags-atomic.html b/doc/usr/_site/usr-flags-atomic.html deleted file mode 100644 index aa12df3be..000000000 --- a/doc/usr/_site/usr-flags-atomic.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - Redirect - - - Redirecting to en/usr-flags-atomic.html... - - diff --git a/doc/usr/_site/usr-flags-bib.html b/doc/usr/_site/usr-flags-bib.html deleted file mode 100644 index 6a39e91db..000000000 --- a/doc/usr/_site/usr-flags-bib.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - Redirect - - - Redirecting to en/usr-flags-bib.html... - - diff --git a/doc/usr/_site/usr-flags-blacklist.html b/doc/usr/_site/usr-flags-blacklist.html deleted file mode 100644 index a0650b17c..000000000 --- a/doc/usr/_site/usr-flags-blacklist.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - Redirect - - - Redirecting to en/usr-flags-blacklist.html... - - diff --git a/doc/usr/_site/usr-flags-eamt.html b/doc/usr/_site/usr-flags-eamt.html deleted file mode 100644 index 67e71813a..000000000 --- a/doc/usr/_site/usr-flags-eamt.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - Redirect - - - Redirecting to en/usr-flags-eamt.html... - - diff --git a/doc/usr/_site/usr-flags-global.html b/doc/usr/_site/usr-flags-global.html deleted file mode 100644 index 4d560d03e..000000000 --- a/doc/usr/_site/usr-flags-global.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - Redirect - - - Redirecting to en/usr-flags-global.html... - - diff --git a/doc/usr/_site/usr-flags-help.html b/doc/usr/_site/usr-flags-help.html deleted file mode 100644 index 39248dec6..000000000 --- a/doc/usr/_site/usr-flags-help.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - Redirect - - - Redirecting to en/usr-flags-help.html... - - diff --git a/doc/usr/_site/usr-flags-plateaus.html b/doc/usr/_site/usr-flags-plateaus.html deleted file mode 100644 index 443a6cf21..000000000 --- a/doc/usr/_site/usr-flags-plateaus.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - Redirect - - - Redirecting to en/usr-flags-plateaus.html... - - diff --git a/doc/usr/_site/usr-flags-pool4.html b/doc/usr/_site/usr-flags-pool4.html deleted file mode 100644 index ac5ac6bf4..000000000 --- a/doc/usr/_site/usr-flags-pool4.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - Redirect - - - Redirecting to en/usr-flags-pool4.html... - - diff --git a/doc/usr/_site/usr-flags-pool6.html b/doc/usr/_site/usr-flags-pool6.html deleted file mode 100644 index 7e9d2df1b..000000000 --- a/doc/usr/_site/usr-flags-pool6.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - Redirect - - - Redirecting to en/usr-flags-pool6.html... - - diff --git a/doc/usr/_site/usr-flags-pool6791.html b/doc/usr/_site/usr-flags-pool6791.html deleted file mode 100644 index 1c8eaad69..000000000 --- a/doc/usr/_site/usr-flags-pool6791.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - Redirect - - - Redirecting to en/usr-flags-pool6791.html... - - diff --git a/doc/usr/_site/usr-flags-quick.html b/doc/usr/_site/usr-flags-quick.html deleted file mode 100644 index a798fd308..000000000 --- a/doc/usr/_site/usr-flags-quick.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - Redirect - - - Redirecting to en/usr-flags-quick.html... - - diff --git a/doc/usr/_site/usr-flags-session.html b/doc/usr/_site/usr-flags-session.html deleted file mode 100644 index c10299aeb..000000000 --- a/doc/usr/_site/usr-flags-session.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - Redirect - - - Redirecting to en/usr-flags-session.html... - - diff --git a/doc/usr/_site/usr-flags.html b/doc/usr/_site/usr-flags.html deleted file mode 100644 index db420b4b9..000000000 --- a/doc/usr/_site/usr-flags.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - Redirect - - - Redirecting to en/usr-flags.html... - - diff --git a/doc/usr/_site/usr-install.html b/doc/usr/_site/usr-install.html deleted file mode 100644 index 7182886c5..000000000 --- a/doc/usr/_site/usr-install.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - Redirect - - - Redirecting to en/usr-install.html... - - From aeeb4137851eb8fa9d9acbb3e2773c289a4156f7 Mon Sep 17 00:00:00 2001 From: Alberto Leiva Popper Date: Tue, 8 Sep 2015 12:34:48 -0500 Subject: [PATCH 14/15] Random updates and adjustments to the documentation. --- doc/usr/en/contact.md | 1 - doc/usr/en/dns64.md | 28 +++++----- doc/usr/en/intro-nat64.md | 10 ++-- doc/usr/en/pool4.md | 10 ++-- doc/usr/es/about.md | 2 +- doc/usr/es/contact.md | 27 ++++------ doc/usr/es/dns64.md | 61 ++++++++++----------- doc/usr/es/documentation.md | 24 ++++----- doc/usr/es/download.md | 39 +++++++++----- doc/usr/es/eamt.md | 50 +++++++---------- doc/usr/es/faq.md | 80 +++++++++------------------- doc/usr/es/index.md | 26 ++++----- doc/usr/es/intro-jool.md | 17 +++--- doc/usr/es/intro-nat64.md | 103 ++++++++++++++++-------------------- doc/usr/es/pool4.md | 86 +++++++----------------------- 15 files changed, 228 insertions(+), 336 deletions(-) diff --git a/doc/usr/en/contact.md b/doc/usr/en/contact.md index 00f4d3074..219b6dde9 100644 --- a/doc/usr/en/contact.md +++ b/doc/usr/en/contact.md @@ -8,7 +8,6 @@ title: Contact # Contact - jool-list@nic.mx is a mail list intended for general public discussion and news. Questions, requests and comments welcomed. - A misplaced security gimmic currently prevents the archives from being public, but they are actually being built and will become available as soon as the TODO reaches one of our admins. You can register to this list [here](https://mail-lists.nic.mx/listas/listinfo/jool-list). - jool-news@nic.mx is a mail list intended to inform news to its recipients. At this point, it is only used to signal new releases being published at this site. Anyone can listen, but only the dev team can place mails here, so you don't have to worry about spam. diff --git a/doc/usr/en/dns64.md b/doc/usr/en/dns64.md index de81e2f6b..846bf1d13 100644 --- a/doc/usr/en/dns64.md +++ b/doc/usr/en/dns64.md @@ -80,22 +80,20 @@ user@B:~# apt-get install bind9 The most basic configuration is very minimalistic. In order to turn on DNS64, the options section from the named.conf file (in my case, `/etc/bind/named.conf.options`) is the only one in which statements must be updated: -{% highlight bash %} -options { - (...) - - # Listening on IPv6 is off by default. - listen-on-v6 { any; }; - - # This is the key. Note that you can write multiple of these if you need - # more IPv6 prefixes. - # "64:ff9b::/96" has to be the same as Jool's `pool6`. - dns64 64:ff9b::/96 { - # Options per prefix (if you need them) here. - # More info here: https://kb.isc.org/article/AA-01031 + options { + (...) + + # Listening on IPv6 is off by default. + listen-on-v6 { any; }; + + # This is the key. Note that you can write multiple of these if you need + # more IPv6 prefixes. + # "64:ff9b::/96" has to be the same as Jool's `pool6`. + dns64 64:ff9b::/96 { + # Options per prefix (if you need them) here. + # More info here: https://kb.isc.org/article/AA-01031 + }; }; -}; -{% endhighlight %} And remember to reload. diff --git a/doc/usr/en/intro-nat64.md b/doc/usr/en/intro-nat64.md index c97dc1443..a97ed0dc9 100644 --- a/doc/usr/en/intro-nat64.md +++ b/doc/usr/en/intro-nat64.md @@ -25,15 +25,13 @@ This document provides a general introduction to SIIT and NAT64. SIIT (_Stateless IP/ICMP Translation_) and NAT64 ("NAT six four", not "NAT sixty-four") are technologies meant to communicate networking nodes which only speak [IPv4](http://en.wikipedia.org/wiki/IPv4) with nodes that only speak [IPv6](http://en.wikipedia.org/wiki/IPv6). -The idea is basically that of an "upgraded" [NAT](http://en.wikipedia.org/wiki/Network_address_translation); an "IPv4/IPv6 translator" not only replaces addresses and/or ports within packets, but also layer 3 headers. +- SIIT mangles packets, simply replacing IPv4 headers with IPv6 headers and viceversa. +- _Stateful NAT64_ (or "NAT64" for short) is a combination between an SIIT and a (theoretical) IPv6 NAT; the point is to mask several IPv6 nodes behind a few IPv4 addresses. -- SIIT is the simpler form, and allows preconfigured 1-to-1 mappings between IPv4 addresses and IPv6 addresses. -- A _Stateful NAT64_ (or NAT64 for short) allows several IPv6 nodes to dynamically share few IPv4 addresses (useful when you're a victim of [IPv4 address exhaustion](http://en.wikipedia.org/wiki/IPv4_address_exhaustion)). +In their basic forms, SIIT only helps communicating nodes speaking different protocols, while NAT64 also helps with [IPv4 address exhaustion](http://en.wikipedia.org/wiki/IPv4_address_exhaustion) (at the cost of being more computationally expensive). For historic reasons, sometimes we mess up and label SIIT as "Stateless NAT64". Because this expression does not seem to appear in any relevant standards, we consider it imprecise, despite the fact it makes some degree of sense. If possible, please try to suppress it. -An SIIT implementation mangles network headers and sometimes transport checksums. A Stateful NAT64 also mangles transport identifiers. - That's all, really. Keep reading for more detail and examples. ## SIIT with EAM @@ -50,8 +48,6 @@ Assuming everyone's default gateway is _T_, how do you communicate _A_ (IPv6) wi - You tell _A_, "_V_'s address is 2001:db8:4::16". - You tell _V_, "_A_'s address is 198.51.100.8". -The first one is accomplished by SIIT. The latter can be done via DNS. - This will happen: ![Fig.2 - EAM flow](../images/flow/eam-en.svg) diff --git a/doc/usr/en/pool4.md b/doc/usr/en/pool4.md index f0591ff88..8b6455fe3 100644 --- a/doc/usr/en/pool4.md +++ b/doc/usr/en/pool4.md @@ -26,21 +26,21 @@ We call this "transport address domain" the "IPv4 pool". ("pool4" for short.) To illustrate: -![TODO](../images/flow/pool4-simple1-en.svg) +![Fig. 1 - n6's request](../images/flow/pool4-simple1-en.svg "Fig. 1 - n6's request") In Jool, we write transport addresses in the form `#` (as opposed to `:`). The packet above has source IP address `2001:db8::8`, source port (TCP or UDP) 5123, destination address `64:ff9b::192.0.2.24`, and destination port 80. Assuming pool4 holds transport addresses 203.0.113.1#5000 through 203.0.113.1#6000, one possible translation of the packet is this: -![TODO](../images/flow/pool4-simple2-en.svg) +![Fig. 2 - T's translation - version 1](../images/flow/pool4-simple2-en.svg "Fig. 2 - T's translation - version 1") Another one, equally valid, is this: -![TODO](../images/flow/pool4-simple3-en.svg) +![Fig. 3 - T's translation - version 2](../images/flow/pool4-simple3-en.svg "Fig. 3 - T's translation - version 2") NAT64s are not overly concerned with retaining source ports. In fact, for security reasons, [recommendations exist to drive NAT64s as unpredictable as possible]({{ site.draft-nat64-port-allocation }}). -What you need to be aware of is that your NAT64 machine needs to reserve transport addresses for translation purposes. If _T_ tries to open a connection from transport address `192.0.2.1#5000` and at the same time a translation yields source transport address `192.0.2.1#5000`, evil things will happen. [iptables's NAT also suffers from this quirk](https://github.com/NICMx/NAT64/wiki/issue67:-Linux's-MASQUERADING-does-not-care-about-the-source-natting-overriding-existing-connections.). +When defining the addresses and ports that will belong to your pool4, you need to be aware that they must not collide with other services or clients within the same machine. If _T_ tries to open a connection from transport address `192.0.2.1#5000` and at the same time a translation yields source transport address `192.0.2.1#5000`, Jool will end up combining the the information transmitted in both connections. -Linux's ephemeral port range defaults to 32768-61000. Therefore, Jool's port range for any given address defaults to 61001-65535. You can change the former by tweaking sysctl `sys.net.ipv4.ip_local_port_range`, and the latter by means of [`--pool4 --add` userspace application commands](usr-flags-pool4.html). +Linux's ephemeral port range defaults to 32768-61000. Therefore, Jool's port range for any given address defaults to 61001-65535. [You can change the former by tweaking sysctl `sys.net.ipv4.ip_local_port_range`, and the latter by means of `--pool4 --add` userspace application commands](usr-flags-pool4.html#notes). diff --git a/doc/usr/es/about.md b/doc/usr/es/about.md index 0104dd6c2..cb1c921e7 100644 --- a/doc/usr/es/about.md +++ b/doc/usr/es/about.md @@ -8,7 +8,7 @@ title: Acerca de ... # Acerca de ... -JOOL es un [Traductor IPv4/IPv6](intro-nat64.html) de código abierto. Jool nació como un Stateful NAT64 pero ha sido ampliado para soportar también SIIT & SIIT EAM. +Jool es un [Traductor IPv4/IPv6](intro-nat64.html) de código abierto. Nació como un Stateful NAT64 pero ha sido ampliado para soportar también SIIT. Jool es financiado y desarrollado por [NIC Mexico](http://nicmexico.mx/) en colaboración con el [ITESM](http://www.itesm.mx/). diff --git a/doc/usr/es/contact.md b/doc/usr/es/contact.md index 7481faf83..89fd07e50 100644 --- a/doc/usr/es/contact.md +++ b/doc/usr/es/contact.md @@ -11,33 +11,28 @@ Ponte en contacto con nosotros mediante: ## Lista de Discusión --- jool-list@nic.mx es una lista de correo general para la discusión pública del proyecto y la difusión de noticias. +-- jool-list@nic.mx es una lista de correo general para la discusión pública del proyecto y difusión de noticias. -![email](../images/email.png) Sus preguntas, solicitudes y comentarios son bienvenidos. Registrate [aquí](https://mail-lists.nic.mx/listas/listinfo/jool-list). - -Actualmente, existe un problema de "exceso" de seguridad que está siendo corregido. +![email](../images/email.png) Preguntas, solicitudes y comentarios son bienvenidos. El registro es [aquí](https://mail-lists.nic.mx/listas/listinfo/jool-list). ## Lista de Noticias --- jool-news@nic.mx es una lista de correos para informar solo noticias. +-- jool-news@nic.mx es una lista de correos para difundir noticias. -![mailbox_with_mail](../images/mailbox_with_mail.png) Es utilizada para notificar sobre las nuevas versiones que están siendo liberadas en este sitio. Suscribete [aquí](https://mail-lists.nic.mx/listas/listinfo/jool-news). +![mailbox_with_mail](../images/mailbox_with_mail.png) Es utilizada para notificar a usuarios sobre las nuevas versiones de Jool conforme se liberan. El registro es [aquí](https://mail-lists.nic.mx/listas/listinfo/jool-news). -Solo el equipo de desarrollo puede enviar mails en esta lista, así que no tienes que preocuparte de recibir *spam*.
-Debido a este próposito, esta lista raramente genera más de un e-mail por mes. +Solo el equipo de desarrollo puede enviar mails en esta lista, de modo que no tiene riesgo de spam. +Debido a su próposito, esta lista raramente genera más de un correo por mes. -## Lista Oficial de Errores +## Bug Tracker --- [Github corner](https://github.com/NICMx/NAT64/issues) es nuestra lista oficial de errores. +-- [La lista de issues de Github](https://github.com/NICMx/NAT64/issues) es nuestro sistema de seguimiento de errores. ![pencil](../images/pencil.png) Este también es un buen lugar para solicitar nuevas características. ## Mail a los Desarrolladores --- [jool@nic.mx](mailto:jool@nic.mx) es una cuenta de correo que puedes utilizar para dirigirte - solo a nosotros los desarrolladores. - -Aunque te podríamos dar algún consejo a través de este medio, nosotros agradeceremos que uses la cuenta de
-jool-list@nic.mx para este propósito, con el fin de quedar registrado y que pueda ser de beneficio para algún
-otro usuario en el futuro. +-- [jool@nic.mx](mailto:jool@nic.mx) es una cuenta de correo que se puede usar para alcanzar solamente a los desarrolladores. + +A pesar de que podemos proveer soporte mediante este medio, agredeceríamos que se prefiera jool-list@nic.mx para este propósito para beneficiar futuras búsquedas. diff --git a/doc/usr/es/dns64.md b/doc/usr/es/dns64.md index 792b3cf9c..cf1b24178 100644 --- a/doc/usr/es/dns64.md +++ b/doc/usr/es/dns64.md @@ -20,23 +20,23 @@ title: DNS64 ## Introducción -Este documento se enfoca en DNS64, la última llave para tener una instalación de NAT64 completamente coherente. +Este documento se enfoca en DNS64, el último componente para tener una instalación de NAT64 completamente coherente. -Cualquier implementación correcta de DNS64 se supone debería funcionar; BIND será utilizado para efecto de ilustrar. Espero que estes familiarizado con DNS y que tengas una idea por lo menos de como luce la configuración de BIND. +Cualquier implementación correcta de DNS64 debe funcionar; BIND será utilizado para ilustrar la idea. Este tutorial asume familiarización con DNS y archivos de configuración de BIND. ## Red ![Fig.1 - Setup](../images/tut4-setup.svg) -Aunque Jool y el DNS64 son ilustrados como nodos separados, no hay nada que te prevenga de unirlos en una sola máquina (a menos de que Jool esté monopolizando todas las direcciones IPv4 de sus nodos, por supuesto). +Aunque Jool y el DNS64 son ilustrados como nodos separados, nada (además de [colisión de puertos](pool4.html#notas)) previene unirlos en una sola máquina. ## Configuración ### BIND -Primero, voy a dejar en claro lo que queremos lograr. +Primero voy a explicar lo que deseamos lograr. -`example.com` es un dominio que esta disponible ambas la Internet IPv4 y la IPv6, y por lo tanto tiene ambos tipos de registros: +`example.com` es un dominio que esta disponible tanto en IPv4 como en IPv6, y por lo tanto tiene ambos tipos de registros: {% highlight bash %} $ dig example.com A @@ -68,37 +68,32 @@ nat64-tutorial.mx. 240 IN SOA potato.mx. hostmaster.jool.mx. 2013070801 3600 900 (...) {% endhighlight %} -No hay necesidad de que un nodo IPv6 accese `example.com` mediante el NAT64. Por otra parte, `nat64-tutorial.mx` no puede ser accesado desde IPv6 si uno. +No hay necesidad de que un nodo de IPv6 acceda a `example.com` mediante un NAT64. En contraste, no tiene manera de acceder a `nat64-tutorial.mx` sin un traductor. -En otras palabras, queremos que el servicio de DNS64 devuelva `2606:2800:220:6d:26bf:1447:1097:aa7` cuando le sea solicitado el registro AAAA de `example.com` (que es lo que normalmente hace), y `64:ff9b::200.94.182.36` (ej. el prefijo NAT64 mas la direccion IPv4) cuando le sea solicitado el registro AAAA de `nat64-tutorial.mx` (el cual es el hack NAT64 completo). +En otras palabras, queremos que el servicio de DNS devuelva `2606:2800:220:6d:26bf:1447:1097:aa7` cuando le sea solicitado el registro AAAA de `example.com` (que es lo que normalmente hace), y `64:ff9b::200.94.182.36` (ej. el prefijo de traducción mas la direccion IPv4) cuando le sea solicitado el registro AAAA de `nat64-tutorial.mx`. - -Primero, ten funcionando un servidor BIND. En Ubuntu, lo único que teines que hacer (assumiendo que todavia no tienes uno) es ejecutar +Lo primero es tener un servidor BIND instalado. En Ubuntu, lo único que tengo que hacer para llegar a esto es {% highlight bash %} user@B:~# apt-get install bind9 {% endhighlight %} -La configuración mas básica es muy minimalista. +La configuración mas básica es muy minimalista. Para activar DNS64, la sección de opciones del archivo `named.conf` (en mi caso, `/etc/bind/named.conf.options`) es la única que debe ser actualizada: -The most basic configuration is very minimalistic. Para activar DNS64, la sección de opciones del archivo named.conf (en mi caso, `/etc/bind/named.conf.options`) es la única que debe ser actualizada: + options { + (...) -{% highlight bash %} -options { - (...) - - # Listening on IPv6 is off by default. - listen-on-v6 { any; }; - - # This is the key. Note that you can write multiple of these if you need - # more IPv6 prefixes. - # "64:ff9b::/96" has to be the same as Jool's `pool6`. - dns64 64:ff9b::/96 { - # Options per prefix (if you need them) here. - # More info here: https://kb.isc.org/article/AA-01031 + # Escuchar por IPv6 está desactivado por defecto. + listen-on-v6 { any; }; + + # Esto es la llave. Nótese que es posible tener varios de estos si se necesitan + # múltiples prefijos de traducción. + # "64:ff9b::/96" tiene que ser lo mismo que Jool conoce como "pool6". + dns64 64:ff9b::/96 { + # Opciones por prefijo (si se necesitan) aquí. + # Más información aquí: https://kb.isc.org/article/AA-01031 + }; }; -}; -{% endhighlight %} Y recuerda recargar. @@ -106,26 +101,26 @@ Y recuerda recargar. user@B:~# sudo service bind9 restart {% endhighlight %} -Eso es todo! +Eso es toda la configuración que requiere el nodo que va a servir DNS. ### Todo lo demás -Las redes mas externas cambiaron, y eso deberia ser reflejado probablemente en las tablas de ruteo de todos: +Las redes mas externas cambiaron, y eso probablemente debe ser reflejado en las tablas de ruteo de todos: {% highlight bash %} user@J:~# /sbin/ip -6 route del 2001:db8:1::/64 user@J:~# /sbin/ip -6 route add default via 2001:db8:2::1 dev eth0 {% endhighlight %} -(Instrucciones similares deberían ser replicadas en los routers y los nodos) +(Instrucciones similares deberían ser replicadas en los routers y los nodos.) -Jool o J no necesita estar consciente del DNS64 por que los nombres de dominio son completamente transparentes a NAT64, asi que no necesitas hacer nadamas en J. +_J_ no necesita configuración adicional porque DNS es completamente transparente para NAT64. -En cuanto a los nodos hoja, cualquier nodo IPv6 que necesita acceder solo a contenido IPv4 _debe_ utilizar el DNS64 como su servidor de nombres por default (a menos de que quieras especificarlo manualmente en tus comandos dig, supongo). +En cuanto a los nodos hoja, cualquier nodo IPv6 que necesita acceder a contenido IPv4 _debe_ utilizar el DNS64 como su servidor de nombres por defecto (a menos de que quieras especificarlo manualmente en tus comandos dig, supongo). ## Resultado -Desde uno de esos nodos IPv6: +Desde uno de los nodos IPv6: {% highlight bash %} $ dig example.com AAAA @@ -141,7 +136,7 @@ nat64-tutorial.mx. 86040 IN AAAA 64:ff9b::c85e:b624 (...) {% endhighlight %} -Si monitoreas el trafico, deberias ver paqueter hacia `example.com` en R, y paquetes hacia `nat64-tutorial.mx` mediante S: +Si se monitorea el tráfico se debería observar que paquetes hacia `example.com` se van a través de _R_, y paquetes hacia `nat64-tutorial.mx` mediante _J_/_S_: ![Fig.2 - Arrows](../images/tut4-arrows.svg) diff --git a/doc/usr/es/documentation.md b/doc/usr/es/documentation.md index 782e1336f..221717178 100644 --- a/doc/usr/es/documentation.md +++ b/doc/usr/es/documentation.md @@ -11,24 +11,24 @@ Bienvenido al índice de la documentación de Jool. ## Introducción -1. [Qué es SIIT/NAT64?](intro-nat64.html) -2. [Qué es Jool?](intro-jool.html) +1. [¿Qué es SIIT/NAT64?](intro-nat64.html) +2. [¿Qué es Jool?](intro-jool.html) -Consulta el [RFC 6586](https://tools.ietf.org/html/rfc6586) para experiencias de desarrollo usando NAT64 Stateful. +Consulta el [RFC 6586](https://tools.ietf.org/html/rfc6586) para experiencias de despliegue usando Stateful NAT64. ## Instalación -1. [Servidor Jool](mod-install.html) +1. [Módulo del kernel](mod-install.html) 2. [Herramienta de Configuración](usr-install.html) ## Ejemplos de uso -1. [SIIT](mod-run-vanilla.html)
- a) [RFC 6791](rfc6791.html) -2. [SIIT + EAM](mod-run-eam.html)
- a) [EAMT](eamt.html) -3. [NAT64 Stateful](mod-run-stateful.html)
- a) [Pool IPv4](pool4.html)
- b) [BIB](bib.html)
- c) [Mapeos Estáticos](static-bindings.html) +1. [SIIT](mod-run-vanilla.html) + 1. [RFC 6791](rfc6791.html) +2. [SIIT + EAM](mod-run-eam.html) + 1. [EAMT](eamt.html) +3. [NAT64 Stateful](mod-run-stateful.html) + 1. [Pool IPv4](pool4.html) + 2. [BIB](bib.html) + 3. [Mapeos Estáticos](static-bindings.html) 4. [DNS64](dns64.html) 5. [464XLAT - SIIIT/DC Modo de traducción dual](mod-run-464xlat.html) diff --git a/doc/usr/es/download.md b/doc/usr/es/download.md index b1ae0dcfc..a0dfd3221 100644 --- a/doc/usr/es/download.md +++ b/doc/usr/es/download.md @@ -12,34 +12,47 @@ title: Descarga Si fueran relativos,se quebrantarian cuando la documentación sea generada manualmente. --> -* Las versión resaltada en **negritas** es la última actualización y es la más recomendable a instalar. -* Las versiones no resaltadas son versiones estables pero anteriores. Éstas se podrían requerir en caso de que alguna opción, en la más nueva, falle. [¡Los reportes son bienvenidos!](https://github.com/NICMx/NAT64/issues) -* Las versiones tachadas no son recomedables, pues son muy antiguas o tienen errores críticos ya bien identificados. +* La versión resaltada en **negritas** es la más recomendada. +* Las versiones no resaltadas son a las cuales se recomienda retroceder si la recomendada falla. [¡Reportes de bugs son bienvenidos!](https://github.com/NICMx/NAT64/issues) +* Las versiones tachadas no son recomendadas debido a su antiguedad o defectos críticos conocidos. + +## 3.4.x + +Jool 3.4 es una completa re-escritura de pool4, que agrega rangos de puertos y marcas y mejora el desempeño. + +La versión 3.4.0 es la más actual. + +| Descarga | SHA512 | MD5| Commit de Git | +|----------|--------|----|------------| +| [3.4.0](https://www.jool.mx/download/Jool-3.4.0.zip) | [SHA512](https://www.jool.mx/download/Jool-3.4.0.sha) | [MD5](https://www.jool.mx/download/Jool-3.4.0.md5) | [Enlace](https://github.com/NICMx/NAT64/tree/v3.4.0) | ## 3.3.x -Jool 3.3 es un [SIIT y Stateful NAT64 bastante apegado al estándar](intro-jool.html#cumplimiento). +Jool 3.3 es un [SIIT y Stateful NAT64 razonablemente apegado al estándar](intro-jool.html#cumplimiento). + +La versión 3.3.4 es la más actual, y es considerada la más madura. -La versión 3.3.3 es la más actual, y es considerada la más madura. +La documentación en este sitio corresponde a la serie 3.4. Se puede descargar una imagen de la documentación de la serie 3.3 [aquí](https://www.jool.mx/download/Jool-3.3-doc.zip) (**Nota:** está en inglés). -| Descarga | SHA512 | MD5| Git commit | +| Descarga | SHA512 | MD5| Commit de Git | |----------|--------|----|------------| -|**[3.3.3](https://www.jool.mx/download/Jool-3.3.3.zip)** | [SHA512](https://www.jool.mx/download/Jool-3.3.3.sha) | [MD5](https://www.jool.mx/download/Jool-3.3.3.md5) | [Enlace](https://github.com/NICMx/NAT64/tree/v3.3.3) | +| **[3.3.4](https://www.jool.mx/download/Jool-3.3.4.zip)** | [SHA512](https://www.jool.mx/download/Jool-3.3.4.sha) | [MD5](https://www.jool.mx/download/Jool-3.3.4.md5) | [Enlace](https://github.com/NICMx/NAT64/tree/v3.3.4) | +| [3.3.3](https://www.jool.mx/download/Jool-3.3.3.zip) | [SHA512](https://www.jool.mx/download/Jool-3.3.3.sha) | [MD5](https://www.jool.mx/download/Jool-3.3.3.md5) | [Enlace](https://github.com/NICMx/NAT64/tree/v3.3.3) | | [3.3.2](https://www.jool.mx/download/Jool-3.3.2.zip) | [SHA512](https://www.jool.mx/download/Jool-3.3.2.sha) | [MD5](https://www.jool.mx/download/Jool-3.3.2.md5) | [Enlace](https://github.com/NICMx/NAT64/tree/v3.3.2) | | [3.3.1](https://www.jool.mx/download/Jool-3.3.1.zip) | [SHA512](https://www.jool.mx/download/Jool-3.3.1.sha) | [MD5](https://www.jool.mx/download/Jool-3.3.1.md5) | [Enlace](https://github.com/NICMx/NAT64/tree/v3.3.1) | | [3.3.0](https://www.jool.mx/download/Jool-3.3.0.zip) | [SHA512](https://www.jool.mx/download/Jool-3.3.0.sha) | [MD5](https://www.jool.mx/download/Jool-3.3.0.md5) | [Enlace](https://github.com/NICMx/NAT64/tree/v3.3.0) | ## 3.2.x -La serie de versiones 3.2 mejora la 3.1 implementando _Apertura simultánea de Conexiones TCP_. Además, se incluyó una opción para limpiar sus pools y se realizaron muchos otros ajustes internos. +La serie de versiones 3.2 mejora la 3.1 implementando _Apertura simultánea de Conexiones TCP_. Además, se incluyó una opción para limpiar sus pools y se realizaron muchos otros ajustes internos. 3.2.3 es la última actualización de esta serie de versiones. -La documentación en este sitio pertenece a la serie de versiones 3.3. Se puede descargar una imágen de la documentación de la serie 3.2 [aquí](https://www.jool.mx/download/Jool-3.2-doc.zip) (**Nota:** está en inglés). +La documentación en este sitio corresponde a la serie 3.4. Se puede descargar una imagen de la documentación de la serie 3.2 [aquí](https://www.jool.mx/download/Jool-3.2-doc.zip) (**Nota:** está en inglés). -| Descarga | SHA512 | MD5| Git commit | +| Descarga | SHA512 | MD5| Commit de Git | |----------|--------|----|------------| -| **[3.2.3](https://www.jool.mx/download/Jool-3.2.3.zip)** | [SHA512](https://www.jool.mx/download/Jool-3.2.3.sha) | [MD5](https://www.jool.mx/download/Jool-3.2.3.md5) | [Enlace](https://github.com/NICMx/NAT64/tree/v3.2.3) | +| [3.2.3](https://www.jool.mx/download/Jool-3.2.3.zip) | [SHA512](https://www.jool.mx/download/Jool-3.2.3.sha) | [MD5](https://www.jool.mx/download/Jool-3.2.3.md5) | [Enlace](https://github.com/NICMx/NAT64/tree/v3.2.3) | | [3.2.2](https://www.jool.mx/download/Jool-3.2.2.zip) | [SHA512](https://www.jool.mx/download/Jool-3.2.2.sha) | [MD5](https://www.jool.mx/download/Jool-3.2.2.md5) | [Enlace](https://github.com/NICMx/NAT64/tree/v3.2.2) | | [3.2.1](https://www.jool.mx/download/Jool-3.2.1.zip) | [SHA512](https://www.jool.mx/download/Jool-3.2.1.sha) | [MD5](https://www.jool.mx/download/Jool-3.2.1.md5) | [Enlace](https://github.com/NICMx/NAT64/tree/v3.2.1) | | [3.2.0](https://www.jool.mx/download/Jool-3.2.0.zip) | [SHA512](https://www.jool.mx/download/Jool-3.2.0.sha) | [MD5](https://www.jool.mx/download/Jool-3.2.0.md5) | [Enlace](https://github.com/NICMx/NAT64/tree/v3.2.0) | @@ -53,9 +66,9 @@ La serie de versiones 3.1 esta bastante apegada al estándar stateful NAT64. Sus La última actualización de esta serie de versiones es la 3.1.6. -La documentación en este sitio pertenece a la serie de versiones 3.3. Se puede descargar una imágen de la documentación de la serie 3.1 [aquí](https://www.jool.mx/download/Jool-3.1-doc.zip) (**Nota:** está en inglés). +La documentación en este sitio pertenece a la serie de versiones 3.4. Se puede descargar una imagen de la documentación de la serie 3.1 [aquí](https://www.jool.mx/download/Jool-3.1-doc.zip) (**Nota:** está en inglés). -| Download | SHA512 | MD5| Git commit | +| Download | SHA512 | MD5| Commit de Git | |----------|--------|----|------------| | [3.1.6](https://www.jool.mx/download/Jool-3.1.6.zip) | [SHA512](https://www.jool.mx/download/Jool-3.1.6.sha) | [MD5](https://www.jool.mx/download/Jool-3.1.6.md5) | [Enlace](https://github.com/NICMx/NAT64/tree/v3.1.6) | | [3.1.5](https://www.jool.mx/download/Jool-3.1.5.zip) | [SHA512](https://www.jool.mx/download/Jool-3.1.5.sha) | [MD5](https://www.jool.mx/download/Jool-3.1.5.md5) | [Enlace](https://github.com/NICMx/NAT64/tree/v3.1.5) | diff --git a/doc/usr/es/eamt.md b/doc/usr/es/eamt.md index 8f492715f..ef6422552 100644 --- a/doc/usr/es/eamt.md +++ b/doc/usr/es/eamt.md @@ -12,17 +12,17 @@ title: EAMT ## Ãndice 1. [Definición](#definicin) -2. [Ejemplos](#ejemplos)
- a) [Registro 01](#registro-01)
- b) [Registro 02](#registro-02)
- c) [Registro 03](#registro-03) -3. [Resumen y Notas Adicionales](#resumen-y-notas-adicionales) - +2. [Ejemplos](#ejemplos) + 1. [Registro 01](#registro-01) + 2. [Registro 02](#registro-02) + 3. [Registro 03](#registro-03) +3. [Notas Adicionales](#notas-adicionales) + ## Definición -La tabla EAMT (_Explicit Address Mappings Table_) por sus siglas en inglés, es una colección de registros en un servidor SIIT y en ella se guarda la relación de cómo las diferentes direcciones deben de ser traducidas. +La EAMT (_Explicit Address Mappings Table_) es una colección de registros en un servidor SIIT que dictan cómo diferentes direcciones deben ser traducidas. -Lo que distingue este tipo de mapeo con los otros mecanismos es, en que la dirección IPv4 no forma parte de la dirección IPv6 a usar. +Un registro EAMT está compuesto en pares, un prefijo IPv4 y un prefijo IPv6. Cuando una dirección esta siendo traducida, su prefijo es literalmente reemplazado de acuerdo a la tabla. En la implementación de Jool, todos los registros son bidireccionales. ## Ejemplos @@ -34,23 +34,17 @@ Aquí se encuentra un ejemplo de una tabla EAMT: | 02 | 198.51.100.0/24 | 2001:db8:bbbb::/120 | | 03 | 203.0.113.8/29 | 2001:db8:cccc::/125 | -Un registro EAMT está compuesto en pares, un prefijo IPv4 y un prefijo IPv6. Cuando una dirección esta siendo traducida, su prefijo es literalmente reemplazado de acuerdo a la tabla. - - NOTA IMPORTANTE: En la implementación de Jool, todos los registros son bidireccionales. - ### Registro 01 -Este es el caso más sencillo, porque no tiene prefijo. El registro literalmente dice: "La dirección `192.0.2.1` debe de ser siempre traducida como `2001:db8:aaaa::5`, y a la inversa". - -Ya sea que la dirección sea origen, destino o esté dentro del paquete interno de un error ICMP, no importa. +Debido a que no tiene longitudes de prefijo, este es el caso más sencillo. El registro simplemente dice: "La dirección `192.0.2.1` debe de ser siempre traducida como `2001:db8:aaaa::5`, y viceversa". -La representación IPv6 de `192.0.2.1` es `2001:db8:aaaa::5`, y la representación IPv4 de `2001:db8:aaaa::5` es `192.0.2.1`. +Ya sea que la dirección sea origen, destino o esté dentro del paquete interno de un error ICMP, no importa. La representación IPv6 de `192.0.2.1` es `2001:db8:aaaa::5`, y la representación IPv4 de `2001:db8:aaaa::5` es `192.0.2.1`. ### Registro 02 -La segunda entrada es más interesante, porque hay un byte de sufijo. El registro esta diciendo: "El grupo de direcciones `198.51.100.x` debera ser tradicido como `2001:db8:bbbb::x`, y viceversa. Donde _x_ está en el intervalo de 0-255." +La segunda entrada es más interesante, porque ambas columnas tienen un byte de sufijo. El registro está diciendo: "El grupo de direcciones `198.51.100.x` deberá ser traducido como `2001:db8:bbbb::x`, y viceversa. Donde _x_ está en el intervalo de 0-255". -Como en: +Desglosado queda de la siguiente manera: - `198.51.100.0` <-> `2001:db8:bbbb::0` - `198.51.100.1` <-> `2001:db8:bbbb::1` @@ -59,13 +53,13 @@ Como en: - `198.51.100.254` <-> `2001:db8:bbbb::fe` - `198.51.100.255` <-> `2001:db8:bbbb::ff` -Esta forma puede ayudarte a simplificar la configuración cuando tienes muchas direcciones a traducir; el sufijo siempre es preservado. La ventaja, que es evidente, es que un solo registro EAMT puede describir la traducción de una red entera. +Esta forma puede ayudar a simplificar la configuración cuando se tienen muchas direcciones a traducir; el sufijo siempre es preservado. El punto es que un solo registro EAM puede describir la traducción de una red entera. -Por mencionar otro ejemplo, un registro EAMT con /16 será mucho más eficiente que los 65536 registros atómicos equivalentes. +La forma también es más eficiente; un registro EAMT con longitud /16 es mucho más transitable que los 65536 registros atómicos equivalentes. ### Registro 03 -El reemplazo de prefijo puede ser hecho a nivel de bits. El tercer registro ejemplifica esto, porque son 3 bits de sufijo. El registro esta diciendo: "El grupo de direcciones `203.0.113.x` debera ser tradicido como `2001:db8:cccc::y`, y a la inversa. Donde _x_ = [8,15], _y_ = [0,7]." +El reemplazo de prefijo puede ser hecho a nivel de bits. El tercer registro ejemplifica esto, porque son 3 bits de sufijo. El registro está diciendo: "El grupo de direcciones `203.0.113.x` deberá ser traducido como `2001:db8:cccc::y`, y viceversa. Donde _x_ = [8,15], _y_ = [0,7]." La dirección `203.0.113.8` se convierte en `2001:db8:cccc::`, no en `2001:db8:cccc::8`. Esto es porque la forma binaria de `.8` es `00001000`, y la máscara es de 29 por lo que el uno se encuentra en el lado del prefijo. @@ -78,16 +72,8 @@ La dirección `203.0.113.8` se convierte en `2001:db8:cccc::`, no en `2001:db8:c - `203.0.113.14` <-> `2001:db8:cccc::6` - `203.0.113.15` <-> `2001:db8:cccc::7` -## Resumen y Notas Adicionales: +## Notas Adicionales -* En el mecanisimo de transición SIIT-EAM se emplea y se mantiene la tabla de direcciones de mapeo explicito. -* En dicha tabla existen duplas con prefijos de IPv4 e IPv6 válidos. -* El prefijo es remplazado a nivel de bits. -* La dirección IPv4 no forma parte de la dirección IPv6 a usar. -* Los registros son bidireccionales. -* Los registros EAMT no se pueden intersectar. -* Los paquetes que empleen dichas direcciones se tratarán como tales, es decir, con ese tipo de traducción. -* Si Jool no encuentra una coincidencia en la tabla para una dirección, intenta traducir basado en el prefijo [`pool6`](usr-flags-pool6.html). -* Si eso también falla, el paquete es devuelto al kernel. Se asume que el paquete no debe ser traducido. +* El mecanismo de traducción EAMT tiene más prioridad que [`pool6`](usr-flags-pool6.html). En otras palabras, Jool trata de traducir toda dirección usando la EAMT, y si no es posible, lo intenta usando pool6. +* Ver la [demostración](mod-run-eam.html) o el [material de referencia](usr-flags-eamt.html) para obtener información de cómo crear y destruir registros manualmente. -Ve la [demostración](mod-run-eam.html) o el [material de referencia](usr-flags-eamt.html) para obtener información de cómo crear y destruir registros manualmente. diff --git a/doc/usr/es/faq.md b/doc/usr/es/faq.md index 15db98477..b034807eb 100644 --- a/doc/usr/es/faq.md +++ b/doc/usr/es/faq.md @@ -9,12 +9,12 @@ title: FAQ/Solución de problemas # FAQ/Solución de problemas -Esto resume problemas en los cuales hemos visto que los usuarios se meten. +Esto resume problemas con los cuales algunos usuarios se han topado. ## Instalé el módulo de Jool pero no parece estar haciendo nada. -Instalar el módulo del Jool sin argumentos suficientes es legal. Asumirá que intentas terminar de configurar utilizando la Aplicación de espacio de usuario, y se mantendra inactivo hasta que lo hayas hecho. +Instalar el módulo del Jool sin argumentos suficientes es legal. Asumirá que intentas terminar de configurar utilizando la Aplicación de espacio de usuario, y se mantendrá inactivo hasta que lo hayas hecho. Utiliza el parámetro [`--global`](usr-flags-global.html#description) para saber el estado en el que se encuentra Jool: @@ -28,60 +28,27 @@ $ jool --global Status: Disabled {% endhighlight %} -Los requerimientos minimos de configuracion del SIIT de Jool son: +Los requerimientos mínimos de configuración de SIIT Jool son: - Un prefijo en el [pool IPv6](usr-flags-pool6.html) **o** por lo menos un registro en la [tabla EAM](usr-flags-eamt.html). - No debes de haberlo [deshabilitado manualmente](usr-flags-global.html#enable---disable). -Los requerimientos minimos de configuración de Stateful Jool son: +Los requerimientos mínimos de configuración de NAT64 Jool son: -- Por lo menos un prefijo en el [pool IPv6](usr-flags-pool6.html). -- Por lo menosd un(a) prefijo/dirección en el [pool IPv4](usr-flags-pool4.html). +- Por lo menos un prefijo en [pool6](usr-flags-pool6.html). +- Por lo menos un(a) prefijo/dirección en [pool4](usr-flags-pool4.html). - No debes de haberlo [deshabilitado manualmente](usr-flags-global.html#enable---disable). -Si ese no es el problema, intenta habilitar la depuración mientras compilas. +Si eso no parece ser el problema, trata ver los [logs](#logging.html). - user@node:~/Jool-/mod$ make debug +## ¿Qué hago con este mensaje de error? Es horriblemente ambiguo. -Reinstalalo. Jool sera mas descriptivo en `dmesg`: +Esto sucede si tu terminal no está escuchando mensajes del kernel de severidad "error". - $ dmesg | tail -5 - [ 3465.639622] =============================================== - [ 3465.639655] Catching IPv4 packet: 192.0.2.16->198.51.100.8 - [ 3465.639724] Translating the Packet. - [ 3465.639756] Address 192.0.2.16 lacks an EAMT entry and there's no pool6 prefix. - [ 3465.639806] Returning the packet to the kernel. +El chiste es que, si se le pide algo a Jool mediante la aplicación de usuario y hay un problema, Jool no regresa la versión amigable del error a la aplicación ([reporte](https://github.com/NICMx/NAT64/issues/169)); en lugar de eso la imprime en los logs. Lo único que recibe la aplicación es un código genérico de Unix, y eso es lo que reporta al usuario. -Si no esta imprimiendo nada a pesar de que estas habilitando la depuración, quizá es por que tu nivel de lo es muy alto. Ve [esto](http://elinux.org/Debugging_by_printing#Log_Levels). - -Los mensajes de depuración se vuelven rápidamente gigabytes de log, asi que recuerda revertor esto antes de ponerlo en producción. - - -## Que hacer con este mensaje de error? Está horriblemente ambigüo. - -Así es, los mensajes de respuesta del modulo del kernel hacia el espacio de usuario son muy primitivos. Podriamos mejorar realmente la comunicación con la Aplicación de espacio de usuario, pero no tenemos control sobre la comunicación de `modprobe`. - -De cualquier forma, tendras mejor suerte leyendo los logs de Jool. Como con cualquier otro componente del kernel, los mensajes de Jool estan mezclados junto con otros y se pueden ver ejecutando `dmesg` En general, la mayor parte de los kernels son muy silenciosos una vez que han terminado la fase de arranque, asi que el mensaje mas reciente de Jool deberia encontrarse hasta el final. - - -{% highlight bash %} -$ sudo modprobe jool_siit pool6=2001:db8::/96 pool4=192.0a.2.0/24 -ERROR: could not insert module jool_siit.ko: Invalid parameters -$ dmesg | tail -1 -[28495.042365] SIIT Jool ERROR (parse_prefix4): IPv4 address or prefix is malformed: -192.0a.2.0/24. -{% endhighlight %} - -{% highlight bash %} -$ sudo jool --bib --add --tcp 2001:db8::1#2000 192.0.2.5#2000 -TCP: -Invalid input data or parameter (System error -7) -$ dmesg | tail -1 -[29982.832343] NAT64 Jool ERROR (add_static_route): The IPv4 address and port could not be -reserved from the pool. Maybe the IPv4 address you provided does not belong to the pool. -Or maybe they're being used by some other BIB entry? -{% endhighlight %} +[Corre `dmesg` o una de sus variantes para consultar los logs](#logging.html), como se muestra en el [reporte](https://github.com/NICMx/NAT64/issues/169). ## Jool es intermitentemente incapaz de traducir tráfico. @@ -93,9 +60,9 @@ ip addr flush dev eth1 ? -Entonces quizá hayas eliminado las [direcciones de enlace](http://es.wikipedia.org/wiki/Direcci%C3%B3n_de_Enlace-Local) de la interfáz. +Entonces quizá hayas eliminado las [direcciones de enlace](http://es.wikipedia.org/wiki/Direcci%C3%B3n_de_Enlace-Local) de la interfaz. -Las direcciónes de enlace son utilizadas por muchos portocolos IPv6 relevantes. En particular, son utilizadas por el *Protocolo de Descubrimiento de Vecinos*, lo que significa que si no las tienes, la máquina de traducción tendrá problemas para encontrar a sus vecinos IPv6. +Las direcciones de enlace son utilizadas por muchos protocolos de IPv6 relevantes. En particular, son utilizadas por el *Protocolo de Descubrimiento de Vecinos*, lo que significa que si no las tienes, la máquina de traducción tendrá problemas para encontrar a sus vecinos IPv6. Observa la salida de `ip addr`. @@ -117,7 +84,7 @@ Observa la salida de `ip addr`. valid_lft forever preferred_lft forever -La primera interfaz está correctamente configurada; tiene ambas una dirección de "alcance global" (utilizada para un tráfico típico) y una direccion de "alcance de enlace"(utilizada para administración interna). La interfáz _eth1_ carece de una dirección de enlace, y como resultado tiende a inducir dolores de cabeza. +La interfaz _eth0_ está correctamente configurada; tiene tanto una dirección de "alcance global" (utilizada para un tráfico típico) y una dirección de "alcance de enlace" (utilizada para administración interna). La interfaz _eth1_ carece de una dirección de enlace, y como resultado tiende a inducir dolores de cabeza. La manera más facil de restaurar las "direcciones de "alcance de enlace", que hemos encontrado, es reiniciar la interfaz: @@ -126,7 +93,7 @@ ip link set eth1 down ip link set eth1 up {% endhighlight %} -Si, hablo encerio: +Si, hablo en serio:
user@T:~$ /sbin/ip address
 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
@@ -146,28 +113,29 @@ Si, hablo encerio:
        valid_lft forever preferred_lft forever
 
-(Toma en cuenta que, necesitas agregar la dirección global de nuevo) +(Toma en cuenta que necesitas agregar la dirección global de nuevo.) -Tambien, como referencia futura, ten en mente que la manera "correcta" de vaciar una interfaz es +Como referencia futura, ten en mente que la manera "correcta" de vaciar una interfaz es {% highlight bash %} ip addr flush dev eth1 scope global {% endhighlight %} -IPv4 no necesita direcciones de enlace. +IPv4 es menos problemático con direcciones de enlace. ## El rendimiento es terrible! -[deshabilita los offloads!](offloading.html) +[Deshabilita offloads!](offloading.html) -Si estas ejecutando Jool en una máquina virtual huesped, algo importante que debes mantener en mente es que quizá prefieras o tambien tengas que deshabilitar los offloads en el enlace ascendente de la [máquina virtual](http://en.wikipedia.org/wiki/Hypervisor) +Si estás ejecutando Jool en una máquina virtual huésped, algo importante que debes considerar es que quizá tengas que deshabilitar los offloads en el enlace ascendente de la [máquina virtual](http://en.wikipedia.org/wiki/Hypervisor). ## No puedo hacer ping a la dirección IPv4 del pool. -De hecho, esto es normal en Jool 3.2.x y versiones anteriores. La dirección de destino del paquete ping es traducible, asi que Jool se esta robando el paquete. Desafortunadamente, no tiene ningun registro relevante en el BIB (por que el ping no fue iniciado desde IPv6), asi que la traducción falla( y el paquete es desechado). +En realidad, esto es normal en Jool 3.2.x y versiones anteriores. La dirección destino del ping es traducible, de modo que Jool se está robando el paquete. Desafortunadamente, no tiene ningún registro relevante en la BIB (porque el ping no fue iniciado desde IPv6), así que la traducción falla (y el paquete es desechado). + +Simplemente trata pingueando a la dirección del nodo. -Dejando de lado este aspecto extraño, no causa ninguna otra catastrofe; solo haz ping a la dirección del nodo. +Jool 3.3+ maneja mejor esto, de modo que el ping debería ser exitoso. -Jool 3.3+ maneja mejor esto asi que el ping deberia de ser exitoso. diff --git a/doc/usr/es/index.md b/doc/usr/es/index.md index 9c45f691a..d34fea6f2 100644 --- a/doc/usr/es/index.md +++ b/doc/usr/es/index.md @@ -11,7 +11,7 @@ title: Home ## Introducción -Jool es un [SIIT y NAT64](intro-nat64.html) para Linux. Desarrollado sobre Ubuntu. Probado en Debian, CentOS, SuSE, RedHat y recientemente en [Raspbian](http://namsep.blogspot.nl/2015/07/raspberry-pi-debian-nat64-dns64-joolmx.html). +Jool es un [SIIT y NAT64](intro-nat64.html) de código abierto para Linux. * [Haz click aquí](documentation.html) para empezar a familiarizarte con el software. * [Haz click aquí](download.html) para descargar Jool. @@ -20,18 +20,14 @@ Jool es un [SIIT y NAT64](intro-nat64.html) para Linux. Desarrollado sobre Ubunt ## Estatus -Nuestra meta actual es que Jool sea un SIIT y un Stateful NAT64 [apegado a los estándares de la IEEE](intro-jool.html#cumplimiento). Nuestro agenda al 2015-04-13 es: +Nuestra meta actual es terminar de alinear a Jool a los [requerimientos de la IETF](intro-jool.html#cumplimiento). Nuestro agenda al 2015-09-04 es: -1. La [Versión 3.4.0](https://github.com/NICMx/NAT64/issues?q=milestone%3A3.4.0) será una refactorización para [remover de Jool Stateful NAT64 la necesidad de una segunda dirección IPv4](https://github.com/NICMx/NAT64/wiki/issue67:-Linux%27s-MASQUERADING-does-not-care-about-the-source-natting-overriding-existing-connections.), y [optimizar el pool4](https://github.com/NICMx/NAT64/issues/36). (De hecho, son practicamente el mismo bug.) +1. La [Versión 4.0.0](https://github.com/NICMx/NAT64/issues?q=milestone%3A4.0.0) va a ser una [migración de framework](https://github.com/NICMx/NAT64/issues/140). Se está considerando convertir a Jool en un device driver o en un daemon. Se estima que esto lo hará más conforme a los RFCs relevantes y más intuitivo de configurar. +2. La [Versión 4.1.0](https://github.com/NICMx/NAT64/issues?q=milestone%3A4.1.0) añadirá funcionalidad nueva. -2. La [Versión 4.0.0](https://github.com/NICMx/NAT64/issues?q=milestone%3A4.0.0) implicará una [una reprogramación completa ](https://github.com/NICMx/NAT64/issues/140). Se está evaluando las alternativas de programarlo como un pseudo device o servicio (daemon) en el userspace. Se estima que esto lo hará más protable y simple de configurar, pero con algo de demérito en su performance. +Es posible que existan versiones intermedias dependiendo de cómo evoluciona el [bug tracker](https://github.com/NICMx/NAT64/issues). Retroalimentación de usuarios puede persuadirnos a modificar prioridades. Si tienes alguna recomedación que darnos, presiona [aquí](contact.html). -3. La [Versión 4.1.0](https://github.com/NICMx/NAT64/issues?q=milestone%3A4.1.0) añadirá muchas caracteristicas nuevas. - - -Es posible que existan versiones intermedias dependiendo de los problemas reportados. Sus sugerencias puede persuadirnos para cambiar prioridades. Si tienes alguna recomedación que darnos, presiona [aquí](contact.html). - -Nuestra versión más reciente es la [3.3.3](https://github.com/NICMx/NAT64/issues?q=milestone%3A3.3.3). +Nuestra versión más reciente es la [3.4.0](https://github.com/NICMx/NAT64/issues?q=milestone%3A3.4.0). ------------------- @@ -46,7 +42,7 @@ Versión 3.3.3 liberada. Además en esta versión: 1. [Se añadió el soporte para el framework DKMS!](https://github.com/NICMx/NAT64/pull/165) -2. Se corrigieron los errores [#150](https://github.com/NICMx/NAT64/issues/150) y [#151] (https://github.com/NICMx/NAT64/issues/151) al usar la Herramienta de Configuración de Jool en el despliege de las tablas (bib, sessions y pools) cuando están vacías. +2. Se corrigieron los errores [#150](https://github.com/NICMx/NAT64/issues/150) y [#151](https://github.com/NICMx/NAT64/issues/151). ### 2015-04-14 @@ -66,22 +62,22 @@ Se dieron de alta dos listas de correo: [jool@nic.mx](mailto:jool@nic.mx) aún puede ser utilizado para accesar a los desrrolladores. -![small_red_triangle_down](../images/small_red_triangle_down.png) También nos gustaria disculparnos por el [inconveniente que tuvimos recientemente con el certificado](https://github.com/NICMx/NAT64/issues/149). Aunque están siendo generados, los archivos de la lista de correos no están disponibles todavia, y esto está en la lista de pendientes de nuestros administradores. +![small_red_triangle_down](../images/small_red_triangle_down.png) También nos gustaria disculparnos por el [inconveniente que tuvimos recientemente con el certificado del sitio](https://github.com/NICMx/NAT64/issues/149). Aunque están siendo generados, los archivos de la lista de correos no están disponibles todavia, y esto está en la lista de pendientes de nuestros administradores. ### 2015-03-11 [Error importante #137 descubierto](https://github.com/NICMx/NAT64/issues/137) ![heavy_exclamation_mark](../images/heavy_exclamation_mark.png) -Precisamente, ya liberamos Jool 3.3.1 para resolver dicho problema. +Ya liberamos Jool 3.3.1, que resuelve dicho problema. ### 2015-03-09 Se ha concluido Jool 3.3.0. -![small_red_triangle_down](../images/small_red_triangle_down.png) [Las polítcas de Filtrado aún no son soportadas en esta versión](https://github.com/NICMx/NAT64/issues/41#issuecomment-76861510), pero las traducciones tipo Stateless para IP/ICMP (SIIT) son ahora soportadas. +![small_red_triangle_down](../images/small_red_triangle_down.png) [Las polítcas de Filtrado aún no son soportadas en esta versión](https://github.com/NICMx/NAT64/issues/41#issuecomment-76861510), pero la traducción Stateless (SIIT) es ahora parte del proyecto. -Lee la [introducción a SIIT/NAT64](intro-nat64.html) para conocer este nuevo paradigma. [Aqui encontras un tutorial](mod-run-vanilla.html). Para su mejor comprensión, ve a [464XLAT](mod-run-464xlat.html). +Lee la [introducción a SIIT/NAT64](intro-nat64.html) para conocer este paradigma. [Aqui encontrás un tutorial](mod-run-vanilla.html). También manténgase [464XLAT](mod-run-464xlat.html) en la mira. Se reorganizó la herramienta de configuración de Jool, por favor actualiza tus scripts: diff --git a/doc/usr/es/intro-jool.md b/doc/usr/es/intro-jool.md index a7d19e8fb..d1b333c28 100644 --- a/doc/usr/es/intro-jool.md +++ b/doc/usr/es/intro-jool.md @@ -17,7 +17,7 @@ title: Introducción a Jool ## Descripción -Jool es una implementación de varios mecanismos de transición en IPv6. Todos en la categoría de traducción: [Stateful NAT64, SIIT y SIIT con EAM.](intro-nat64.html) Jool es una aplicación de código abierto (open source) en Linux, desarrollado sobre Ubuntu, y probado en otros Linux (Debian, CentOS, Raspbian, RedHat, SuSE). +Jool es una implementación de código abierto de dos mecanismos de transición a IPv6: [SIIT y Stateful NAT64](intro-nat64.html). De Jool 1.0 a Jool 3.2.3 -> Stateful NAT64
De Jool 3.3.0 en delante -> Stateful NAT64, SIIT y SIIT con EAM @@ -30,14 +30,14 @@ Este es el estatus actual de cumplimiento de Jool 3.3: |-----------|---------|--------| | [RFC 6052](https://tools.ietf.org/html/rfc6052) | Traducción de dirección IP | Cumple Totalmente. | | [RFC 6144](https://tools.ietf.org/html/rfc6144) | Marco de traducción IPv4/IPv6 | Cumple Totalmente. | -| [RFC 6145](https://tools.ietf.org/html/rfc6145) | SIIT | Cumple Totalmente. [Esta en desuso el empleo de los fragmentos atómicos](usr-flags-atomic.html#overview). . | -| [RFC 6146](https://tools.ietf.org/html/rfc6146) | Stateful NAT64 | Por Completar.
(Problemas por la implementación del RFC 6145)
[(Políticas de Filtrado)](https://github.com/NICMx/NAT64/issues/41). | +| [RFC 6145](https://tools.ietf.org/html/rfc6145) | SIIT | Cumple, pero [la implementación de fragmentos atómicos está descuidada](usr-flags-atomic.html#overview). | +| [RFC 6146](https://tools.ietf.org/html/rfc6146) | Stateful NAT64 | Falta implementar [Políticas de Filtrado](https://github.com/NICMx/NAT64/issues/41). | | [RFC 6384](http://tools.ietf.org/html/rfc6384) | FTP sobre NAT64 | [Por Completar](https://github.com/NICMx/NAT64/issues/114). | -| [RFC 6791](https://tools.ietf.org/html/rfc6791) | Peculiaridades de ICMP | Por Implementar.
(Unificar Pool de direcciones en IPv4)
(Extensión del encabezado de ICMP) | -| [RFC 6877](http://tools.ietf.org/html/rfc6877) | 464XLAT | Implementado como SIIT-DC; vea abajo. | +| [RFC 6791](https://tools.ietf.org/html/rfc6791) | Peculiaridades de ICMP | El RFC quiere dos cosas: [pool6791](usr-flags-pool6791.html) (implementado) y extensión de encabezado de ICMP (no implementado). | +| [RFC 6877](http://tools.ietf.org/html/rfc6877) | 464XLAT | Implementado como SIIT-DC; ver abajo. | | [draft-ietf-v6ops-siit-dc]({{ site.draft-siit-dc }}) | SIIT-DC | Cumple Totalmente. | -| [draft-ietf-v6ops-siit-dc-2xlat]({{ site.draft-siit-dc-2xlat }}) | SIIT-DC Edge Translator | [Modo basado en Host.]({{ site.draft-siit-dc-2xlat }}#section-3.1) No Implementado. | -| [draft-ietf-6man-deprecate-atomfrag-generation]({{ site.draft-deprecate-atomfrag-generation }}) | Deprecación de los Fragmentos Atómicos | Los continuamos soportando, pero [no recomendamos su uso](usr-flags-atomic.html#overview). | +| [draft-ietf-v6ops-siit-dc-2xlat]({{ site.draft-siit-dc-2xlat }}) | SIIT-DC Edge Translator | [Modo basado en Host]({{ site.draft-siit-dc-2xlat }}#section-3.1) No Implementado. | +| [draft-ietf-6man-deprecate-atomfrag-generation]({{ site.draft-deprecate-atomfrag-generation }}) | Deprecación de los Fragmentos Atómicos | Jool contiene código que maneja fragmentos atómicos, pero [va de salida](usr-flags-atomic.html#overview). | | [draft-anderson-v6ops-siit-eam]({{ site.draft-siit-eam }}) | EAM | Cumple totalmente. | ![email](../images/email.png) Por favor, [haznos saber](https://github.com/NICMx/NAT64/issues) si encuentras problemas de cumplimiento adicionales o RFCs/drafts que no hayamos considerado. @@ -63,4 +63,5 @@ Este es el estatus actual de cumplimiento de Jool 3.3: | Ubuntu 14.04 | 3.12.22-031222-generic, 3.13.11-03131103-generic | | Ubuntu 14.10 | 3.14.8-031408-generic, 3.15.1-031501-generic | -![small_red_triangle_down](../images/small_red_triangle_down.png) Red Hat y CentOS muestran un warning debido a un error entre el kernel de base usado en Red Hat y el de Debian.
Estamos buscando aún cómo eliminarlo, pero este mensaje no es crítico porque no nos ha ocasionado problemas durante las pruebas. +![small_red_triangle_down](../images/small_red_triangle_down.png) Compilación en Red Hat y CentOS muestran warnings debido a diferencias entre el API de los kernels de Red Hat y Debian. Todavía estamos buscando maneras de solucionarlos, pero no han causado problemas en pruebas. + diff --git a/doc/usr/es/intro-nat64.md b/doc/usr/es/intro-nat64.md index bafbcd45a..bc88a492a 100644 --- a/doc/usr/es/intro-nat64.md +++ b/doc/usr/es/intro-nat64.md @@ -7,7 +7,7 @@ title: Documentación - Introducción a los Mecanismos de Transición [Documentación](documentation.html) > [Introducción](documentation.html#introduccin) > Mecanismos de Transición -## Mecanismos de Transición de IPv6 soportados por Jool +## Introducción a Traducción IP/ICMP ## Ãndice @@ -20,6 +20,8 @@ title: Documentación - Introducción a los Mecanismos de Transición ## Introducción Este documento proporciona una introducción general a los tres mecanismos de traducción implementados en Jool. +TODO Paty - esta sección no es una introducción en lo absoluto; es solo historia... (y siento que va a ahuyentar a los lectores) + El algoritmo para SIIT fue definido formalmente a inicios del 2000 por Erik Nordmark de SUN Microsystems en el [RFC 2765](https://tools.ietf.org/html/rfc2765). Este ha sido actualizado en varias ocasiones: [(RFC 6145, 2011)](https://tools.ietf.org/html/rfc6145), [(RFC6791, 2012)](https://tools.ietf.org/html/rfc6791) e inclusive [hasta nuestros días](https://tools.ietf.org/id/siit?maxhits=100&key=date&dir=desc). De éstos, ya están incluidos en Jool el [(draft-ietf-v6ops-siit-dc, 2015)]({{ site.draft-siit-dc }}), el [(draft-ietf-v6ops-siit-dc-2xlat, 2015)]({{ site.draft-siit-dc-2xlat }}) y el [(draft-anderson-v6ops-siit-eam, 2015)]({{ site.draft-siit-eam }}). Estas tres adiciones a SIIT han sido propuestas y promovidas por [Tore Anderson](http://www.redpill-linpro.com/tore-anderson#overlay-context=about-us/our-consultants) de la compañía Redpill Linpro en Noruega. La metodología del Stateful NAT64 fue uno de los resultados del [**Proyecto Trilogy**](http://trilogy-project.org/trilogy-and-the-ietf.html), organizado por [la Unión Europea](http://europa.eu/rapid/press-release_IP-11-1294_es.htm), con una inversión aprox. de 9 millones de Euros, por un período de 3 años (2008 al 2010) donde participaron 5 Universidades, 4 compañías de telecomunicación y 2 centros de investigación. El estándar para el NAT64 que es el [RFC 6146](https://tools.ietf.org/html/rfc6146) fue publicado en el 2011 por el mismo coordinador del projecto, el [Dr. Marcelo Bagnulo Braun](http://www.it.uc3m.es/marcelo/) de la Universidad Carlos III y otros dos colaboradores del proyecto. @@ -28,122 +30,111 @@ La metodología del Stateful NAT64 fue uno de los resultados del [**Proyecto Tri ## Ejemplos de Traducción - SIIT (_Stateless IP/ICMP Translation_) y NAT64 ("NAT seis cuatro", no "NAT sesenta y cuatro") son tecnologías orientadas a comunicar nodos de red que únicamente hablan [IPv4](http://es.wikipedia.org/wiki/IPv4) con nodos que solo hablan [IPv6](http://es.wikipedia.org/wiki/IPv6). - La idea es básicamente la de un [NAT](http://es.wikipedia.org/wiki/Traducci%C3%B3n_de_direcciones_de_red) mejorado; es decir que, un "Traductor IPv4/IPv6" no solo reemplaza direcciones y/o puertos en los paquetes, sino también encabezados de capa 3. - - - **SIIT**, es la manera sencilla, permitiendo MAPEOS 1-a-1 preconfigurados entre IPv4 e IPv6.
- Es decir, que en SIIT tú establecerás lo siguiente:
- a) Para cada uno de tus nodos en IPv6 existirá una dirección alterna en IPv4.
- b) Para cada uno de tus nodos en IPv4 existirá una dirección alterna en IPv6. - - - **Stateful NAT64**, o simplemente NAT64, permite que VARIOS NODOS IPv6 compartan UN RANGO PEQUEÑO de direcciones IPv4.
- Es decir, que en NAT64 tú establecerás lo siguiente:
- a) Para cada uno de tus nodos en IPv4 existirá una dirección alterna en IPv6, pero esa nueva dirección estará formada de un prefijo de IPv6 + dir. en IPv4.
- b) Los nodos en IPv6 será identificados por una o varias IP válidas en _T_ (Jool), aparentando ser una "Red Privada de IPv4" (red local). - -NAT64 es definitivamente útil cuando se dispone de un [número restringido de direcciones de IPv4](http://es.wikipedia.org/wiki/Agotamiento_de_las_direcciones_IPv4). +SIIT (_Stateless IP/ICMP Translation_) y NAT64 ("NAT seis cuatro", no "NAT sesenta y cuatro") son tecnologías orientadas a comunicar nodos de red que únicamente hablan [IPv4](http://es.wikipedia.org/wiki/IPv4) con nodos que solo hablan [IPv6](http://es.wikipedia.org/wiki/IPv6). + + - **SIIT** modifica paquetes, simplemente reemplazando encabezados de IPv4 por encabezados de IPv6 y viceversa. + - **Stateful NAT64**, o simplemente NAT64, es una combinación entre un SIIT y un (teórico) NAT de IPv6; la idea es enmascarar cualquier número de nodos de IPv6 detrás de unas pocas direcciones de IPv4. + +SIIT solamente comunica nodos. NAT64 requiere más recursos, pero ayuda adicionalmente con el problema del [agotamiento de las direcciones de IPv4](http://es.wikipedia.org/wiki/Agotamiento_de_las_direcciones_IPv4). -Por razones históricas, algunas veces etiquetamos a SIIT como "Stateless NAT64". Ya que esta expresión no parece estar incluida en ningún estándar relevante, la consideramos imprecisa, a pesar de que tiene cierto grado de sentido. Si es possible, por favor trata de no usarla. +Por razones históricas, algunas veces etiquetamos erróneamente a SIIT como "Stateless NAT64". Ya que esta expresión no está incluida en ningún estándar relevante, la consideramos imprecisa, a pesar de que tiene cierto grado de sentido. Si es posible, por favor trate de evitarla. -En una implementación SIIT siempre se modifican los encabezados de red y en algunas veces los checksums. En un Stateful NAT64 también se manipulan los identificadores de transporte. - ### SIIT con EAM -Esta parte es la más fácil de explicar. Considera la siguiente configuración: +Esta es la modalidad más sencilla de explicar. Considere la siguiente configuración: ![Fig.1 - Red de ejemplo EAM](../images/network/eam.svg "Fig.1 - Red de ejemplo EAM") -(_T_ representa "Translating box". En español "Caja de traducción".) - -Asumiendo que la puerta de enlace por default de todos es _T_, comó comunicarías _A_ (IPv6) con _V_ (IPv4)? +(_T_ representa "traductor".) -Para lograr la comunicación entre _A_ y _V_ bastaría con establecer lo siguiente: +Asumiendo que la puerta de enlace por default de todos es _T_, comó se podría comunicar _A_ (IPv6) con _V_ (IPv4)? -- Le dices a _A_, "la dirección de _V_ es 2001:db8:4::16". -- Le dices a _V_, "la dirección de _A_ es 198.51.100.8 ". -- Le dices a _T_, "La dirección IPv4 de _A_ debe de ser 198.51.100.8,
+1. Se le indica a _T_, "La dirección IPv4 de _A_ debe de ser 198.51.100.8,
y la dirección IPv6 de _V_ debe de ser 2001:db8:4::16". +2. Se le indica a _A_, "la dirección de _V_ es 2001:db8:4::16". +3. Se le indica a _V_, "la dirección de _A_ es 198.51.100.8 ". -La primera es resuelta por SIIT, las demás pueden ser realizadas vía DNS. - -Veamos: +Esto es lo que va a suceder: ![Fig.2 - Flujo EAM](../images/flow/eam-es.svg "Fig.2 - Flujo EAM") -El traductor esta "engañando" a ambos nodos haciéndoles pensar que el otro puede hablar el mismo lenguaje. +El traductor esta "engañando" a ambos nodos, haciéndoles pensar que el otro puede hablar su mismo protocolo. -"EAM" significa por sus siglas en inglés "Explicit Address Mapping", mapeo de direcciones explícitas. Es más versátil que un simple mapeo de direcciones aribtrarias a otras direcciones arbitrarias. +"EAM" es abreviación de "Explicit Address Mapping" (Mapeo Explícito de Direcciones), y es más versátil que simples asociaciones entre diferentes direcciones arbitrarias. -![bulb](../images/bulb.png) Revisa [nuestro resumen](eamt.html) o repasa sus especificaciones en el [draft EAM]({{ site.draft-siit-eam }}). +![bulb](../images/bulb.png) Más detalles sobre EAM pueden encontrarse en el [borrador]({{ site.draft-siit-eam }}) o [nuestro resumen de él](eamt.html). ### SIIT (tradicional) -El modo básico es un poco más complejo. Las direcciones no son remplazadas completamente por otras, sino una parte será usada en su dirección asociada con el otro protocolo. Considera la siguiente configuración: +El modo básico es más constrictivo. Por lo tanto, es necesario modificar la red: ![Fig.3 - Red de ejemplo Vanilla](../images/network/vanilla.svg "Fig.3 - Red de ejemplo Vanilla") Para lograr la comunicación entre _A_ y _V_ bastaría con establecer lo siguiente: -- Le dices a _A_, "la dirección de _V_ es 2001:db8:192.0.2.16". -- Le dices a _V_, "la dirección de _A_ es 198.51.100.8 ". -- Le dices a _T_, "La dirección IPv4 de _A_ debe de ser 198.51.100.8,
- y la dirección IPv6 de _V_ debe de ser 2001:db8:192.0.2.16". +- Se le indica a _T_, "Tu prefijo de traducción es 2001:db8::/96". +- Se le indica a _A_, "la dirección de _V_ es 2001:db8::192.0.2.16". +- Se le indica a _V_, "la dirección de _A_ es 198.51.100.8". -La idea es, simplemente remover _el prefijo_ durante el mapeo de IPv6 a IPv4, y adjuntarlo en el otro sentido. Como lo puedes apreciar en la siguiente figura: +La idea es simplemente remover el prefijo de traducción en la dirección IPv6 a IPv4, y adjuntarlo en el otro sentido. Este sería el flujo: ![Fig.4 - Flujo Vanilla](../images/flow/vanilla-es.svg "Fig.4 - Flujo Vanilla") -Por supuesto, esto significa que la dirección IPv4 de cada nodo en IPv6 tiene que ser codificada dentro de su dirección, lo cual es un poco engorroso. +Por supuesto, esto significa que la dirección IPv4 de cada nodo en IPv6 tiene que ser codificada dentro de su dirección IPv6, lo cual es un poco engorroso. -Podría parecerte que SIIT con "EAM" y SIIT "tradicional" son cosas diferentes, pero pueden trabajar a la par. En implementaciones de este tipo, primeramente se intentará mapear las direcciones IP consultando la tabla EAM (según SIIT con EAM), y si NO están registradas, se retrocede y se añade o se remueve el prefijo (según SIIT). +Podría parecer que "SIIT con EAM" y "SIIT tradicional" son cosas diferentes, pero en realidad son suscriptores de la misma idea básica (mapeo de direcciones 1 a 1). Es posible tener un prefijo de traducción y una EAMT al mismo tiempo; en despliegues de este tipo, el traductor intenta primeramente convertir direcciones consultando la tabla EAM, y si no lo logra, retrocede y usa el prefijo en su lugar. -Puedes encontrar un ejemplo concreto de como SIIT "tradicional" y "EAM" pueden ser combinados eficientemente para cumplir un caso de uso en la siguiente propuesta de solución para Centros de Datos: [draft-v6ops-siit-dc]({{ site.draft-siit-dc }}). +Puedes encontrar un ejemplo concreto de cómo SIIT "tradicional" y SIIT "EAM" pueden ser combinados para cumplir un caso de uso en [draft-v6ops-siit-dc]({{ site.draft-siit-dc }}). -Dependiendo de la longitud del prefijo, la dirección IPv4 se incorporará en diferentes posiciones dentro de nuestro rango de 128 bits según se establece en el [RFC 6052](http://tools.ietf.org/html/rfc6052). +Dependiendo de la longitud del prefijo, la dirección IPv4 se incorporará en diferentes posiciones dentro de la dirección de IPv6. Puede encontrarse más información en el [RFC 6052](http://tools.ietf.org/html/rfc6052). -![warning](../images/warning.png) Siempre que el RFC 6052 esté involucrado, es muy conveniente dar de alta también un [DNS64](dns64.html) para que
- los usuarios no necesiten estar al tanto del prefijo, y resuelva por nombre. +![bulb](../images/bulb.png) Siempre que el RFC 6052 esté involucrado, es conveniente dar de alta también un [DNS64](dns64.html) para que los usuarios no necesiten estar al tanto del prefijo, y resuelva por nombre. ### Stateful NAT64 -Este modo es el más parecido a lo que la gente entiende como **NAT**, por sus siglas en inglés de _IP Network Address Translator_. Recordemos, un NAT opera de la siguiente manera: +Este modo es más parecido a lo que la gente entiende como **NAT** (_Network Address Translator_). Por lo tanto, es conveniente recordar cómo opera un NAT: ![Fig.5 - Red de ejemplo NAT](../images/network/nat-es.svg "Fig.5 - Red de ejemplo NAT") -Note que, la red de la izquierda es llamada "Privada" por que usa [Direcciones no disponibles en la Internet Global](http://es.wikipedia.org/wiki/Red_privada). _NAT_ modifica las direcciones de los paquetes para que los nodos externos piensen que el tráfico proveniente de los nodos internos fue en realidad iniciado por el _NAT_: +Note que la red de la izquierda es llamada "Privada" porque usa [direcciones no disponibles en la Internet Global](http://es.wikipedia.org/wiki/Red_privada). _NAT_ modifica las direcciones de los paquetes para que los nodos externos piensen que el tráfico proveniente de los nodos internos fue en realidad iniciado por él mismo: ![Fig.6 - Flujo NAT](../images/flow/nat-es.svg "Fig.6 - Flujo NAT") -Es decir que para propósitos externos, los nodos desde _A_ hasta _E_ están "compartiendo" la misma dirección global de _NAT_ (o grupo de direcciones). +Desde el punto de vista del operador, los nodos _A_, _B_, _C_, _D_, _E_ y _NAT_ están "compartiendo" la(s) dirección(es) global(es) de _NAT_. -Aunque NAT ayuda a reducir el empleo de direcciones globales en Internet de IPv4, esto tiene un precio: _NAT_ tiene que recordar cual nodo privado emitió el paquete a _V_, porque la dirección de _A_ fue suprimida dentro de la respuesta de _V_. Por eso, es que es llamado ***stateful***, porque guarda el estado de las sesiones, pues crea mapeos de direcciones y los recuerda por un tiempo. +NAT ayuda a reducir el empleo de direcciones globales en Internet de IPv4, pero tiene un precio: _NAT_ es **stateful**; tiene que recordar por cierto tiempo qué nodo privado emitió el paquete a _V_, porque la dirección de _A_ fue completamente borrada durante el enmascarado. Si _NAT_ se olvida de _A_, no tiene cómo saber a quién va dirigida la respuesta de _V_. Dos cosas que hay que tomar en cuenta es: - Cada mapeo require memoria. - _V_ no puede **iniciar** la comunicación con _A_, porque primeramente el _NAT_ **debe** aprender el mapeo en el sentido de la Red_Privada-a-Red_Externa (de izquierda a derecha). -Si quieres saber más sobre NAT y sus diferentes tipos, consulta los siguientes documentos: [RFC 2663](https://tools.ietf.org/html/rfc2663#section-3), [RFC 2766](https://tools.ietf.org/html/rfc2766) y [RFC 3022](https://tools.ietf.org/html/rfc3022). + + +Si quieres saber más sobre NAT, consulta los RFCs [2663](https://tools.ietf.org/html/rfc2663#section-3) y [3022](https://tools.ietf.org/html/rfc3022). -**Stateful NAT64** es muy similar a un NAT-PT (_Protocol Translation_). La única diferencia es que la "Red Privada" es de hecho una red IPv6: +**Stateful NAT64** es muy similar a NAT. Conceptualmente, la única diferencia es que la "Red Privada" es de hecho una red (pública) de IPv6: ![Fig.7 - Red de ejemplo Stateful NAT64](../images/network/stateful.svg "Fig.7 - Red de ejemplo Stateful NAT64") Para lograr la comunicación entre _A_ y _V_ bastaría con establecer lo siguiente: -- Le dices a _A_, "la dirección de _V_ es 2001:db8:203.0.113.16". -- Le dices a _V_, "la dirección de _A_ es 203.0.113.2 (_T_)". -- Le dices a _T_, "La dirección IPv4 de _A_ debe de ser 203.0.113.2 (_T_),
- y la dirección IPv6 de _V_ debe de ser 2001:db8:203.0.113.16". +- Se le indica a _A_, "la dirección de _V_ es 2001:db8::203.0.113.16". +- A _V_ no se le indica nada; él cree que está hablando con _T_. +- Se le indica a _T_, "Usa tu dirección para enmascarar a _A_". -La idea es, enmascarar _A_ y remover el prefijo a _V_ durante el mapeo de IPv6 a IPv4, y adjuntar el prefijo en _V_ y quitar la máscara a _A_ cuando va de IPV4 a IPv6. Como lo puedes apreciar en la siguiente figura: +La idea es reemplazar la dirección de _A_ y remover el prefijo a _V_ durante la traducción de IPv6 a IPv4, y adjuntar el prefijo en _V_ y quitar la máscara en el sentido contrario. ![Fig.8 - Flujo Stateful](../images/flow/stateful-es.svg "Fig.8 - Flujo Stateful") -NAT64 maneja otros escenarios y es aquí donde termina la similitud con NAT. Debido a que en IPv6 la capacidad de identificación de los nodos es sumamente enorme, se contempla que cada dispositivo cuente con una dirección pública de IPv6. En otras palabras se prevé o planea que TODOS los dispositivos en IPv6 tenga acceso a Internet. Considerando esto, una conectividad posible sería: +El punto de NAT64 es que los nodos de IPv6 no se ocultan detrás de un único gateway hacia IPv4; por el contrario, _T_ solamente desemboca hacia la "subred" que es el Internet de IPv4. El Internet de IPv6 es alcanzable desde otro gateway: ![Fig.9 - Internet Stateful NAT64](../images/network/full-es.svg "Fig.9 - Internet Stateful NAT64") diff --git a/doc/usr/es/pool4.md b/doc/usr/es/pool4.md index 685a50fd6..3d0955f93 100644 --- a/doc/usr/es/pool4.md +++ b/doc/usr/es/pool4.md @@ -5,88 +5,42 @@ category: Documentation title: Pool IPv4 Stateful --- -[Documentación](documentation.html) > [Ejemplos de uso](documentation.html#ejemplos-de-uso) > [NAT64 Stateful](mod-run-stateful.html) > Pool IPv4 +[Documentación](documentation.html) > [Ejemplos de uso](documentation.html#ejemplos-de-uso) > [Stateful NAT64](mod-run-stateful.html) > Pool de direcciones IPv4 -# Pool IPv4 Stateful +# Pool de direcciones IPv4 -![Fig.1 - Red del Caso 3](../images/tut2.3-network.svg) +Si estás familiarizado/a con iptables y masquerade, probablemente todo lo que necesitas saber es que -Aquí hay un paquete teorético que podría viajar desde C hasta E: + jool --pool4 --add --tcp 192.0.2.1 5000-6000 - Origen: Dirección 2001:db8:2::10, puerto 1234 (aleatorio) - Destino: Dirección 64::192.0.2.10, puerto 80 (ej. intentando llegar a un sitio web) +Es espiritualmente equivalente a -Respecto al campo del puerto de origen: Es bien sabido que un puerto es un valor de dos bytes, lo que significa que se te pueden acabar. Esto no es normalmene un problema, ya que 65536 puertos por nodo es una cantidad bastante razonable. + ip addr add 192.0.2.1 dev (...) + iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE --to-ports 5000-6000 -El paquete de arriba podria ser traducido por J en algo como esto: +----------------------------- - Origen: 192.0.2.2#1234 - Destino: 192.0.2.10#80 +Al igual que NAT, Stateful NAT64 permite a un número indeterminado de clientes compartir un número limitado de direcciones IPv4 distribuyendo estratégicamente su tráfico a través de sus propias direcciones de transporte disponibles. -Y Jool va a memorizar que 2001:db8:2::10#1234 tiene relación con 192.0.2.2#1234. E respondera +Llamamos a las "direcciones de transporte disponibles" la "Pool de IPv4" ("pool4" en corto). - Origen: 192.0.2.10#80 - Destino: 192.0.2.2#1234 +Para ilustrar: -Y por virtud de su memoria, Jool sabrá que tiene que traducir eso en +![Fig. 1 - petición de n6](../images/flow/pool4-simple1-en.svg "Fig. 1 - petición de n6") - Origen: 64::192.0.2.10#80 - Destino: 2001:db8:2::10#1234 +En Jool, escribimos las direcciones de transporte en la forma `#` (en lugar de "`:`"). El paquete mostrado arriba tiene dirección fuente `2001:db8::8`, puerto fuente 5123, dirección destino `64:ff9b::192.0.2.24`, y puerto destino 80. -Pero que sucede si D genera el siguiente paquete? +Asumiendo que pool4 contiene las direcciones `203.0.113.1#5000` hasta la `203.0.113.1#6000`, una posible traducción del paquete es - Origen: 2001:db8:2::11#1234 - Destino: 64::192.0.2.10#80 +![Fig. 2 - paquete traducido, versión 1](../images/flow/pool4-simple2-en.svg "Fig. 2 - paquete traducido, versión 1") -Jool no puede traducirlo en +Otra, igualmente válida, es - Source: 192.0.2.2#1234 - Destination: 192.0.2.10#80 +![Fig. 3 - paquete traducido, versión 2](../images/flow/pool4-simple3-en.svg "Fig. 3 - paquete traducido, versión 2") -Por que entonces tendría dos mapeos contradictorios. Cual usara cuando la respuesta de E muestre su cara? +Los NAT64s no se preocupan mucho por conservar puertos fuente durante traducciones. De hecho, por seguridad, [existen recomendaciones para que tiendan a ser impredecibles]({{ site.draft-nat64-port-allocation }}). -1. 2001:db8:2::10#1234 <-> **192.0.2.2#1234** -2. 2001:db8:2::11#1234 <-> **192.0.2.2#1234** +Al definir las direcciones y puertos que van a entrar en pool4, es necesario considerar que no deben colisionar con otros servicios o clientes que puedan estar en el mismo nodo traductor. Si _T_ trata de abrir una coneción desde la dirección de transporte `192.0.2.1#5000`, y a la vez una traducción resulta en la misma dirección de transporte, la información transmitida en las dos conexiones se va a mezclar. -La solucion enmascarar no solo direcciones, sino puertos también. En lugar de generar el paquete mencionado anteriormente, Jool generara esto: +Por defecto, el rango de puertos efímeros en Linux es 32768-61000. Por lo tanto, el rango de puertos en Jool para cualquier dirección es (por defecto) 61001-65535. [Es posible modificar el primero a través del sysctl `sys.net.ipv4.ip_local_port_range`, y el segundo mediante comandos `--pool4 --add` de la aplicación de usuario](usr-flags-pool4.html#notas). - Origen: 192.0.2.2#6326 - Destino: 192.0.2.10#80 - -Y el [BIB](bib.html) lucirá como esto: - -1. 2001:db8:2::10#1234 <-> 192.0.2.2#1234 -2. 2001:db8:2::11#1234 <-> 192.0.2.2#6326 - -A lo que quiero llegar es, todos los nodos IPv6 comparten la misma dirección IPv4(a diferencia de SIIT). Esto es bueno por que no necesitas una dirección IPv4 por nodo IPv6, pero al mismo tiempo necesitas estar consciente de que Jool podria quedarse sin puertos. - -C y D utilizaron un puerto cada uno (y resulto ser el mismo), pero Jool tuvo que utilzar 2 de todas maneras. Cada nodo IPv6 tiene 65536 puertos con los que puede trabajar, pero como todos comparten la misma dirección IPv4, como grupo, pueden utilizar hasta 65536 puertos mediante le traductor. Entre más nodos IPv6 tengas, J se quedará más rápido sin puertos. - -Como encuentras una solución para esto?. Le puedes dar a Jool mas direcciones. Obtendrás 64k de puertos frescos por cada dirección IPv4 que ingreses. Si el lado IPv4 es de hecho proveedor de servicios de internet, recuerda que el será quien proporcionará las direcciones. - -Puedes especificar hasta 5 direcciones durante la inserción del módulo: - - user@J:~# modprobe jool pool4="192.0.2.2, 192.0.2.3, 192.0.2.4, 192.0.2.5, 192.0.2.6" - -Si necesitas mas, las puedes agregar utilizando la [aplicación de espacio de usuario](usr-flags-pool4.html): - - user@J:~# jool --pool4 --add 192.0.2.7 - user@J:~# jool --pool4 --add 192.0.2.8 - user@J:~# # etc. - -Puedes resumir muchas direcciones usaando el formato con prefijo. Lo siguiente ingresa direcciones desde 192.0.2.8 hasta 192.0.2.15: - - user@J:~# modprobe pool4=192.0.2.8/28 - or - user@J:~# jool --pool4 --add 192.0.2.8/28 - -Ten en cuenta que la implementacion de pool4 actual de Stateful Jool es [lenta cuando se trata de agregar direcciones](https://github.com/NICMx/NAT64/issues/117#issuecomment-66942415). Cada dirección tambien solicita mucha RAM (~0.5 MB son considerar los registros BIB, quizá más si la paginación no esta de tu lado). - - -Y recuerda que Linux quizá tenga que responder solicitudes ARP para ellas: - - user@J:~# /sbin/ip address add 192.0.2.2/24 dev eth1 - user@J:~# /sbin/ip address add 192.0.2.3/24 dev eth1 - user@J:~# /sbin/ip address add 192.0.2.4/24 dev eth1 - user@J:~# /sbin/ip address add 192.0.2.5/24 dev eth1 - user@J:~# # etc. From edad738db82d679ac3f7d2d369313b98b31516eb Mon Sep 17 00:00:00 2001 From: Alberto Leiva Popper Date: Wed, 9 Sep 2015 09:40:48 -0500 Subject: [PATCH 15/15] More documentation revision. I need to fuse the branches, so checkpoint. --- doc/usr/en/logging.md | 6 +- doc/usr/en/mod-install.md | 2 +- doc/usr/en/pool4.md | 2 +- doc/usr/es/logging.md | 41 +++++- doc/usr/es/mod-install.md | 159 +++++++++-------------- doc/usr/es/mtu.md | 41 +++--- doc/usr/es/pool4.md | 4 +- doc/usr/images/flow/mtu-frag-fail-es.svg | 36 ++--- 8 files changed, 141 insertions(+), 150 deletions(-) diff --git a/doc/usr/en/logging.md b/doc/usr/en/logging.md index fc72f875f..411d81ae0 100644 --- a/doc/usr/en/logging.md +++ b/doc/usr/en/logging.md @@ -24,15 +24,15 @@ Jool uses four levels in the severity spectrum (see `dmesg --help`): Debug messages are normally compiled out of Jool's binaries because they are lots and can slow things down. If you are testing or troubleshooting however, they can be of help. -If you want Jool to print debug messages, go back to the kernel module's compilation step and run `make debug` instead of just `make`. Reinstall and remodprobe as you usually do, and you should see a lot of mumbling as a result of network traffic translation, which should give you ideas as to what might be wrong: +If you want Jool to print debug messages, go back to the kernel module's compilation step and include the `-DDEBUG` flag. After reinstalling and remodprobing normally, you should see a lot of mumbling as a result of network traffic translation, which should give you ideas as to what might be wrong: $ cd Jool/mod - $ make debug + $ make JOOL_FLAGS=-DDEBUG -- This is the key -- $ sudo make modules_install $ sudo depmod $ $ sudo modprobe -r jool_siit - $ sudo modprobe jool_siit + $ sudo modprobe jool_siit pool6=... $ $ dmesg | tail -5 [ 3465.639622] =============================================== diff --git a/doc/usr/en/mod-install.md b/doc/usr/en/mod-install.md index d54d6e964..511cea268 100644 --- a/doc/usr/en/mod-install.md +++ b/doc/usr/en/mod-install.md @@ -38,7 +38,7 @@ $ /bin/uname -r $ # OK, fine. {% endhighlight %} -If you're just getting acquainted with IPv4/IPv6 Translation, some people have an easier time picturing the ordeal when the translator has two separate network interfaces (one to interact with IPv6 networks, one for IPv4 networks). This is not a requirement; you can get away with only one interface (by dual stacking on it), and you can also have more than one per protocol. This is possible because figuring out which interface should a packet be dispatched through is routing's problem, which is already well implemented in the kernel. +If you're just getting acquainted with IPv4/IPv6 Translation, some people have an easier time picturing the ordeal when the translator has two separate network interfaces (one to interact with IPv6 networks, one for IPv4 networks). This is not a requirement; you can get away with only one interface (by [dual stacking](mod-run-alternate.html) on it), and you can also have more than one per protocol. This is possible because figuring out which interface should a packet be dispatched through is routing's problem, which is already well implemented in the kernel. Because the tutorials are first and foremost a tool to get newcomers on the right mindset, most of the deployment discussion will assume two separate interfaces (exemplified below: eth0 and eth1). diff --git a/doc/usr/en/pool4.md b/doc/usr/en/pool4.md index 8b6455fe3..15c1a42be 100644 --- a/doc/usr/en/pool4.md +++ b/doc/usr/en/pool4.md @@ -30,7 +30,7 @@ To illustrate: In Jool, we write transport addresses in the form `#` (as opposed to `:`). The packet above has source IP address `2001:db8::8`, source port (TCP or UDP) 5123, destination address `64:ff9b::192.0.2.24`, and destination port 80. -Assuming pool4 holds transport addresses 203.0.113.1#5000 through 203.0.113.1#6000, one possible translation of the packet is this: +Assuming pool4 holds transport addresses 192.0.2.1#5000 through 192.0.2.1#6000, one possible translation of the packet is this: ![Fig. 2 - T's translation - version 1](../images/flow/pool4-simple2-en.svg "Fig. 2 - T's translation - version 1") diff --git a/doc/usr/es/logging.md b/doc/usr/es/logging.md index 1e45a53a5..ab2199921 100644 --- a/doc/usr/es/logging.md +++ b/doc/usr/es/logging.md @@ -5,4 +5,43 @@ category: Documentation title: Logging --- -TODO +# Logging + +Si Jool tiene algo que decir, lo hará en las bitácoras del kernel (al igual que cualquier otro componente del kernel). Típicamente, estas se pueden consultar de las siguientes maneras: + +- Corriendo `dmesg`. +- Leyendo el archivo `/var/log/syslog`. +- En la consola, [siempre y cuando esté escuchando mensajes del kernel](http://unix.stackexchange.com/a/13023). + +Afortunadamente, Linux es generalmente callado después de iniciar, de modo que los últimos mensajes de Jool deberían encontrarse al final. + +Jool usa cuatro niveles en el espectro de severidad (ver `dmesg --help`): + +1. err: "La petición no se puede atender, usuario". Esto solo sucede al insertar o remover el módulo, y como respuesta a comandos de la aplicación de usuario. +2. warn: "Cuidado; voy a seguir haciendo esto, pero la configuración es sospechosa". Solamente sucede durante traducciones de paquetes. +3. info: "El módulo fue insertado", "el módulo fue removido". También los mensajes impresos por [`--logging-bib`](usr-flags-global.html#logging-bib) y [`--logging-session`](usr-flags-global.html#logging-session). +4. debug: "Y ahora estoy haciendo esto". "No pude traducir el paquete porque X, y creo que es normal". + +Los mensajes debug son normalmente excluidos de los binarios de Jool durante compilación porque son demasiados y pueden alentar la operación. Sin embargo, cuando la causa de algún problema no está clara, pueden ser de ayuda. + +Si se desea que Jool imprima mensajes de debug, es necesario volver al paso de la compilación e incluir la bandera `-DDEBUG`. Después de reinstalar y reinsertar normalmente, Jool debería imprimir mensajes al ver tráfico, que deberían ser de ayuda al buscar problemas con la configuración: + + $ cd Jool/mod + $ make JOOL_FLAGS=-DDEBUG # -- Esta es la clave -- + $ sudo make modules_install + $ sudo depmod + $ + $ sudo modprobe -r jool_siit + $ sudo modprobe jool_siit pool6=... + $ + $ dmesg | tail -5 + [ 3465.639622] =============================================== + [ 3465.639655] Catching IPv4 packet: 192.0.2.16->198.51.100.8 + [ 3465.639724] Translating the Packet. + [ 3465.639756] Address 192.0.2.16 lacks an EAMT entry and there's no pool6 prefix. + [ 3465.639806] Returning the packet to the kernel. + +Estos mensajes rápidamente se acumulan. Si la máquina guarda estas bitácoras, es recomendable revertir los binarios una vez el problema está encontrado y resuelto. + +Si `dmesg` se niega a imprimir los mensajes, puede ser necesario modificar su `--console-level`. Ver `man dmesg` para encontrar detalles. + diff --git a/doc/usr/es/mod-install.md b/doc/usr/es/mod-install.md index b38ef0889..de9268093 100644 --- a/doc/usr/es/mod-install.md +++ b/doc/usr/es/mod-install.md @@ -12,38 +12,39 @@ title: Instalación del Servidor Jool ## Ãndice 1. [Introducción](#introduccin) -2. [Requerimientos](#requerimientos)
- a) [Kernels Válidos](#kernels-vlidos)
- b) [Encabezados del Kernel](#encabezados-del-kernel)
- c) [Interfaces de Red](#interfaces-de-red)
- d) [Ethtool](#ethtool) -3. [Baja, Compila e Instala](#baja-compila-e-instala)
- a) [De la Web Oficial](#de-la-web-oficial)
- b) [Del Repositorio GIT](#del-repositorio-git) -4. [Genera Archivo de Dependencias](#genera-archivo-de-dependencias) +2. [Requerimientos](#requerimientos) + 1. [Kernels Válidos](#kernels-vlidos) + 2. [Encabezados del Kernel](#encabezados-del-kernel) + 3. [Interfaces de Red](#interfaces-de-red) + 4. [DKMS](#dkms) + 5. [Ethtool](#ethtool) +3. [Obtención del Código](#obtencin-del-cdigo) +3. [Compilación e Instalación](#compilacin-e-instalacin) + 1. [DKMS](#instalacin-mediante-dkms) + 2. [Kbuild](#instalacin-mediante-kbuild) ## Introducción -Jool tiene cuatro componentes, es decir, cuatro ejecutables: +Jool es cuatro binarios: -1. Dos [Módulos de Kernel](https://es.wikipedia.org/wiki/M%C3%B3dulo_de_n%C3%BAcleo), uno donde se implementa el Stateful NAT64, nombrado como `jool`, y el otro donde se implementa SIIT y SIIT-EAM, nombrado como `jool-siit`. -2. Dos aplicaciones en el [Espacio de Usuario](http://es.wikipedia.org/wiki/Espacio_de_usuario), una para Stateful NAT64 y la otra para SIIT y SIIT-EAM, nombrados de igual manera: `jool y jool-siit` respectivamente. +1. Dos [Módulos de Kernel](https://es.wikipedia.org/wiki/M%C3%B3dulo_de_n%C3%BAcleo) que se ligan a Linux. Uno de ellos (`jool`) implementa Stateful NAT64, el otro (`jool_siit`) implementa SIIT. +Son los encargados de traducir paquetes. +2. Una aplicación de [Espacio de Usuario](http://es.wikipedia.org/wiki/Espacio_de_usuario) por módulo. +Sirven para configurar a sus respectivos módulos. -En este documento nos enfocaremos a los primeros dos módulos del kernel, o sea, a las aplicaciones principales para habilitar uno u otro servicio. Para activar la traducción de paquetes se requiere insertar los módulos en el kernel. Continúe leyendo este documento, si quiere conocer cuáles son los requisitos y su procedmiento. +Este documento se enfocará en la instalación de los módulos del kernel. La instalación de las aplicaciones de usuario tienen su [propio procedimiento](usr-install.html). -La instalación de los Módulos del Kernel es convencional, pero para los usuarios que no tienen experiencia previa en instalar aplicaciones que son extensiones al kernel, les podrá ser de gran utilidad. +## Requerimientos -Las aplicaciones en el espacio de usuario son para configuración de Jool, la explicación de cómo instalarlas se encuentra en una [página aparte](usr-install.html). +Debido a la variedad de kernels que existen, no es factible distribuir binarios de módulos de kernel, de modo que es necesario que se compilen localmente. -## Requerimientos +(En segmentos de código venideros, `$` indica que el comando no requiere privilegios; `#` indica necesidad de permisos.) ### Kernels Válidos -Jool fue desarrollado sobre ambiente linux y lenguaje de programación "C". Para conocer la lista actualizada de kernels soportados y probados en las diferentes distribuciones de Linux [haz click aquí](intro-jool.html#compatibilidad). Es factible que no vaya a haber problema alguno, al compilar Jool en versiones más recientes de kernel. ¡Ãnimo, prueba y compartenos tu experiencia! +Jool soporta kernels de Linux a partir de la versión 3.0, y ha sido probado en varios [incrementos](intro-jool.html#compatibilidad). -NOTA: No recomendamos usar el kernel 3.12 porque [el sistema se inhibe cuando se invoca la función icmpv6_send](https://github.com/NICMx/NAT64/issues/90). - -Para verificar la versión de tu kernel, usa el siguiente comando: +El siguiente comando puede ser usado para consultar la versión del kernel actual: {% highlight bash %} $ /bin/uname -r @@ -51,15 +52,17 @@ $ /bin/uname -r ### Encabezados del Kernel -Para que Jool se compile y lige sin problemas es necesario que tu equipo cuente con los encabezados de kernel para la versión en la que te dispones a trabajar. Para ello, ejecuta con permisos de administrador lo siguiente: +Son dependencia de cualquier módulo y le indican a Jool los parámetros bajo los cuales fue compilado Linux. La mayoría de las distribuciones hostean estos archivos en sus repositorios. Ejecutar con permisos de administrador lo siguiente: {% highlight bash %} -user@node# apt-get install linux-headers-$(uname -r) +# apt-get install linux-headers-$(uname -r) {% endhighlight %} ### Interfaces de Red -Jool requiere al menos de una interfaz de red para poder comunicarse con los nodos via IPv6 e IPv4. Esto es posible, al habilitar una sola interfaz de red, con doble pila y varios protocolos, pues el kernel lo permite; sin embargo, por consideración a las personas que están incursionando en este tipo de aplicaciones se usarán `dos interfaces de red separadas: una para IPv6 y otra para IPv4`. Y de esta manera, poder identificar más facilmente los paquetes al usar las aplicaciones de debugeo como WireShark y otros. Entonces, para validar cuáles y cuántas interfaces de red están disponibles ejecuta lo siguiente: +[Es posible traducir paquetes a través de una sola interfaz de red](mod-run-alternate.html), pero es más intuitivo comprender SIIT y NAT64 cuando se tienen dos: Una para IPv4 y otra para IPv6. + +Por lo tanto, si se están utilizando estos documentos con fines educativos, se recomienda tener al menos dos interfaces: {% highlight bash %} $ ip link show @@ -70,107 +73,63 @@ $ ip link show link/ether 08:00:27:ca:18:c8 brd ff:ff:ff:ff:ff:ff {% endhighlight %} -### Ethtool - -Ethtool es una utilería para configurar las tarjetas Ethernet, con ella se pueden visualizar y modificar sus parámetros. Para instalarla ejecuta con permisos de administrador: - -{% highlight bash %} -user@node# apt-get install ethtool -{% endhighlight %} - -## Baja, Compila e Instala - -Por simplicidad, solo se distribuyen los fuentes. Para descargar Jool, hay dos opciones: - -* Las versiones oficiales de Jool en nuestro Sitio Web. Éstas se encuentran en la [Página de Descarga](download.html). -* Las versiones en desarrollo en nuestro Repositorio de GitHub. Éstas se encuentran en [Proyecto NAT64](https://github.com/NICMx/NAT64). - -Existen algunas pequeñas variantes al bajarlo de un portal u otro, no tan solo de nombre, sino de contenido. - -Quizá estes acostumbrado a un procedimiento estándar de tres pasos para compilar e instalar programas: `./configure && make && make install`. Los módulos de kernel no vienen con un script `configure`, para generar el Makefile, sino ya está hecho, por lo que solo se requiere ejecutar los últimos dos pasos. - -### De la Web Oficial - -Si buscas la versión más estable o versiónes anteriores de Jool, entonces descárgalo desde este mismo portal, dirigiendote a la [página de Descarga](download.html). Sigue estos pasos: +### DKMS -1) Elige la versión - -2) Elige el formato (zip, sha, md5) - -3) Descarga el archivo comprimido - -4) Descomprime - -![small_orange_diamond](../images/small_orange_diamond.png) Asumiendo que lo bajastes en formato ZIP, en la carpeta de _Downloads_ y lo quieres colocar en _Desktop_, ejecuta los siguientes comandos: +DKMS es un framework que se encarga de administrar módulos. Es opcional pero recomendado (la razón se discute abajo, en la sección [Compilación e Instalación](#compilacin-e-instalacin)). {% highlight bash %} -user@node:$ cd Downloads -user@node:~/Downloads$ unzip Jool-.zip -d ../Desktop +# apt-get install dkms {% endhighlight %} - -5) Compila ambos módulos SIIT y NAT64 -{% highlight bash %} -user@node:~$ cd ../Desktop/Jool-/mod -user@node:~/Desktop/Jool-/mod$ make -{% endhighlight %} - -6) Instala +### Ethtool -El proceso de instalación consiste en copiar `los binarios generados` a `tu pool de módulos del sistema`. Empleando permisos de administrador ejecuta: +Ethtool es una utilería para configurar las tarjetas Ethernet, con ella se pueden visualizar y modificar sus parámetros. {% highlight bash %} -user@node:~/Jool-/mod# make modules_install +# apt-get install ethtool {% endhighlight %} -### Del Repositorio GIT +## Obtención del código -Si descargas Jool del [Repositorio de Github](https://github.com/NICMx/NAT64), te sugerimos acceder el último commit de la rama principal, porque las otras ramas son para desarrollo, y están en constante cambio y no hay garantía. Sigue estos pasos: +Existen dos opciones: -1) Elige la rama "master" +* Releases oficiales en la [página de descarga](download.html). +Su ventaja es que hacen más sencilla la instalación de las aplicaciones de usuario. +* Está el [repositorio de GitHub](https://github.com/NICMx/NAT64). +Tiene la ventaja de que el último commit del branch master puede tener correcciones de errores menores que aún no están presentes en el último oficial. -2) Selecciona el icono `Download ZIP` +## Compilación e Instalación -3) Descarga +Existen dos medios para instalar a Jool: Kbuild y DKMS. -4) Descomprime +Kbuild es un modo básico que simplemente se dedica a compilar e instalar el módulo para la versión actual del kernel. El Dynamic Kernel Module Support (DKMS) framework [añade la posibilidad de que el módulo se adapte a actualizaciones de Linux](https://en.wikipedia.org/wiki/Dynamic_Kernel_Module_Support) (un módulo instalado con Kbuild requiere recompilación y reinstalación cada vez que se actualiza Linux). -![small_orange_diamond](../images/small_orange_diamond.png) Asumiendo que se descargó en _Downloads_ y lo quieres colocar en _Desktop_, ejecuta los siguientes comandos: +Para todo propósito es recomendado preferir DKMS. -{% highlight bash %} -user@node:$ cd Downloads -user@node:~/Downloads$ unzip NAT64-.zip -d ../Desktop -{% endhighlight %} - -5) Compila ambos módulos SIIT y NAT64 - -{% highlight bash %} -user@node:~$ cd ../Desktop/NAT64-/mod -user@node:~/Desktop/NAT64-/mod$ make -{% endhighlight %} - -6) Instala +### Instalación mediante DKMS -El proceso de instalación consiste en copiar `los binarios generados` a `tu pool de módulos del sistema`. Empleando permisos de administrador ejecuta: + {% highlight bash %} -user@node:~/NAT64-/mod# make modules_install +$ unzip Jool-.zip +# dkms install Jool- {% endhighlight %} -## Genera Archivo de Dependencias - -El hecho de que residan en la pool no significa que ya hayan sido indizados, entonces, para finalizar, también necesitarás indexar los nuevos módulos. Ejecuta aqui también con permisos de administrador el comando: +### Instalación mediante Kbuild {% highlight bash %} -user@node:~# depmod +$ unzip Jool-.zip +$ cd Jool-/mod +$ make # compila +# make modules_install # instala +# depmod # indexa {% endhighlight %} -Mediante el comando **depmod** se genera el archivo de dependencias *Makefile* que usará **modprobe** para cargar los módulos, aprende cómo hacerlo consultando [el ejemplo básico de SIIT](mod-run-vanilla.html). - -![thumbsup](../images/thumbsup.png) Jool puede ser inicializado ahora. +> **Nota** +> +> Por razones de seguridad, kernels 3.7 en adelante buscan que módulos instalados estén firmados. +> +> Si el kernel no fue configurado para _requerir_ esta característica, `make modules_install` imprimirá el mensaje "Can't read private key", lo cual es una advertencia, no un error. La instalación puede proseguir sin cambios. +> +> Si el kernel _fue_ compilado para solicitar firmado de módulos, más burocracia (omitida aquí) es requerida. -> **ADVERTENCIA :**
-> -> A partir del **kernel 3.7** en Ubuntu puedes autentificar tus módulos, lo cual es una buena práctica. Te recomendamos, firmar tus modulos de kernel para asegurarte de que los estás agregando de manera responsable. -> Si tu kernel NO fue configurado para _solicitar_ esta característica no tendrás problema. Los kernels de muchas distribuciones no lo hacen. Solo ten en cuenta que cuando corras el comando `make modules_install`, se mostrará el siguiente mensaje: **"Can't read private key"**; esto puede parecer un error, pero de hecho es una advertencia, [así que puedes continuar la instalación](https://github.com/NICMx/NAT64/issues/94#issuecomment-45248942). -> Si tu kernel _fue_ compilado para solicitar el firmado de módulos, probablemente ya sepas como llevarlo a cabo. **Nota:** Lo omitiremos aquí. diff --git a/doc/usr/es/mtu.md b/doc/usr/es/mtu.md index 8b5107b50..842faa75e 100644 --- a/doc/usr/es/mtu.md +++ b/doc/usr/es/mtu.md @@ -9,33 +9,27 @@ title: MTU y Fragmentación # MTU y Fragmentación -TODO - Pendiente hacer revisión - ## Enunciación del problema -Hay una diferencia principal entre IPv4 e IPv6 la cual un traductor IP no puede compensar. - -La cabecera de un paquete IPv4 con tiene un "parámetro" llamado **No Fragmentar** o en inglés [_Don't fragment_](http://en.wikipedia.org/wiki/IPv4#Packet_structure)(DF). Determina si la fuente le permite a los routers fragmentar el paquete. - -En IPv6, los paquetes nunca pueden ser fragmentados por los routers. Es como si el parámetro **No Fragmentar** siempre estuviera encendido. +Hay una diferencia entre IPv4 e IPv6 por la cual un traductor IP no puede compensar. -Cuando hay un traductor en el medio, un paquete IPv4 el cual puede ser fragmentado se convierte en un paquete IPv6 que no debe de ser fragmentado. +La cabecera IPv4 contiene un parámetro llamado [_Don't fragment_](http://en.wikipedia.org/wiki/IPv4#Packet_structure) (DF/No Fragmentar), que determina si el nodo fuente desea permitir a routers fragmentar en caso de que el paquete alcance un enlace por el cual no puede pasar debido a su tamaño. -Asi que, que pasa si el paquete es muy grande? +En IPv6, los paquetes nunca pueden ser fragmentados por routers. Es como si DF siempre estuviera encendido. -(Los tamaños actuales de los paquetes son diferentes debido a cambios en los headers, pero entiendes el punto.) +Por lo tanto, cuando hay un traductor enmedio, un paquete IPv4 que puede ser fragmentado siempre se convierte en un paquete IPv6 que no debe ser fragmentado. -![Fig.1 - flujo MTU fallido](../images/flow/mtu-frag-fail-es.svg) +¿Qué pasa si el paquete es muy grande? -Esta definido por implementación. Si _n4_ es inteligente, tratará de decrementar la longitud del paquete. Si no, el paquete nunca llegará a _n6_. +(En realidad, los tamaños reales de los paquetes cambian debido a encabezados reemplazados, pero este detalle no afecta al ejemplo.) -Implementaciones apropiadas de hecho utilizan [Path MTU discovery](http://en.wikipedia.org/wiki/Path_MTU_Discovery) y por lo tanto jamas desactivan el parámetro de **No Fragmentar**. +![Fig.1 - flujo MTU fallido](../images/flow/mtu-frag-fail-es.svg "Fig.1 - flujo MTU fallido") -It's implementation defined. If _n4_ is smart, it will try to decrease the lenght of the packet. If it's not, the packet will never reach _n6_. +El resultado es definido por implementación. Si _n4_ es inteligente, tratará de reducir el tamaño del paquete paquete. Si no, el paquete nunca llegará a _n6_. -Proper implementations today actually use [Path MTU discovery](http://en.wikipedia.org/wiki/Path_MTU_Discovery) and therefore never unset the DF flag. Still, stubborn or legacy code is not unheard of. +En la vida real, una implementación puesta al día no enfrenta este problema dado que utiliza [Path MTU discovery](http://en.wikipedia.org/wiki/Path_MTU_Discovery), y por lo tanto jamás desactiva DF. Sin embargo, software terco o legado no es demasiado difícil de encontrar. -Por cierto: cuando quieras saber el MTU de un link, preguntale a Linux: +Por cierto: El comando `ip` puede ser usado para conocer el MTU de un enlace:
$ ip link
 (...)
@@ -45,20 +39,19 @@ Por cierto: cuando quieras saber el MTU de un link, preguntale a Linux:
 
 ## Solución
 
-Si conoces el MTU más pequeño a lo largo de todas tus redes IPv6, dile a _T_ sobre el:
+Si el MTU más pequeño a lo largo de todas las redes IPv6 es conocido, una solución es informárselo a _T_:
 
-![Fig.2 - Proper Network](../images/network/mtu-frag.svg)
+{% highlight bash %}
+user@T:~/# ip link set dev eth0 mtu 1300
+{% endhighlight %}
 
-_T_ sabe que está traduciendo, asi que sabe que **tiene** que fragmentar aunque es una especie de router IPv6.
+![Fig.2 - Reducido el MTU de T-R](../images/network/mtu-frag.svg "Fig.2 - Reducido el MTU de T-R")
 
-Jool solia tener un parámetro llamado `--minMTU6` para hacer esto. Ya que confiar la fragmentación al kernel es considerada una mejor práctica, ahora lo configuras en Linux desde la versión de Jool 3.3.
-
-	ip link set dev eth0 mtu 1300
+_T_ sabe que está traduciendo, de modo que sabe que **tiene** que fragmentar a pesar de ser un pseudo-router de IPv6.
 
 Y voilà:
 
 ![Fig.3 - MTU flow succeeds](../images/flow/mtu-frag-success-es.svg)
 
-Si no sabes el MTU mínimo de tus redes IPv6, asigna 1280. Todo nodo IPv6 debe de ser capáz de manejar por lo menos 1280 bytes por paquete de forma estandarizada.
-
+Si el MTU mínimo de las redes IPv6 no es conocido, es buena idea asignar 1280. Por estándar, todo nodo IPv6 debe ser capaz de manejar por lo menos 1280 bytes por paquete.
 
diff --git a/doc/usr/es/pool4.md b/doc/usr/es/pool4.md
index 3d0955f93..ba7990c24 100644
--- a/doc/usr/es/pool4.md
+++ b/doc/usr/es/pool4.md
@@ -30,7 +30,7 @@ Para ilustrar:
 
 En Jool, escribimos las direcciones de transporte en la forma `#` (en lugar de "`:`"). El paquete mostrado arriba tiene dirección fuente `2001:db8::8`, puerto fuente 5123, dirección destino `64:ff9b::192.0.2.24`, y puerto destino 80.
 
-Asumiendo que pool4 contiene las direcciones `203.0.113.1#5000` hasta la `203.0.113.1#6000`, una posible traducción del paquete es
+Asumiendo que pool4 contiene las direcciones `192.0.2.1#5000` hasta la `192.0.2.1#6000`, una posible traducción del paquete es
 
 ![Fig. 2 - paquete traducido, versión 1](../images/flow/pool4-simple2-en.svg "Fig. 2 - paquete traducido, versión 1")
 
@@ -38,7 +38,7 @@ Otra, igualmente válida, es
 
 ![Fig. 3 - paquete traducido, versión 2](../images/flow/pool4-simple3-en.svg "Fig. 3 - paquete traducido, versión 2")
 
-Los NAT64s no se preocupan mucho por conservar puertos fuente durante traducciones. De hecho, por seguridad, [existen recomendaciones para que tiendan a ser impredecibles]({{ site.draft-nat64-port-allocation }}).
+Los NAT64s no se preocupan por conservar puertos fuente durante traducciones. De hecho, por seguridad, [existen recomendaciones para que tiendan a ser impredecibles]({{ site.draft-nat64-port-allocation }}).
 
 Al definir las direcciones y puertos que van a entrar en pool4, es necesario considerar que no deben colisionar con otros servicios o clientes que puedan estar en el mismo nodo traductor. Si _T_ trata de abrir una coneción desde la dirección de transporte `192.0.2.1#5000`, y a la vez una traducción resulta en la misma dirección de transporte, la información transmitida en las dos conexiones se va a mezclar.
 
diff --git a/doc/usr/images/flow/mtu-frag-fail-es.svg b/doc/usr/images/flow/mtu-frag-fail-es.svg
index 4310dcbbb..6fc38e225 100644
--- a/doc/usr/images/flow/mtu-frag-fail-es.svg
+++ b/doc/usr/images/flow/mtu-frag-fail-es.svg
@@ -14,8 +14,8 @@
    height="448"
    id="svg2"
    version="1.1"
-   inkscape:version="0.91 r13725"
-   sodipodi:docname="mtu-frag-fail.svg">
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="mtu-frag-fail-es.svg">
   
     
     
     
@@ -295,7 +295,7 @@
          style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline" />
       
       n4
     ¿Sobre que medio estás?¿Por qué me estás diciendo que necesitas permiso para fragmentar?¡Permitiré la fragmentación!
+         id="tspan5055">¡Yo permití fragmentación!