Gravatar de Kujaku

Montando un equipo Hercules y z/OS para emulación de un entorno real (y III)

En el anterior artículo, hemos explicado cómo se arranca un PC con Hercules, cómo hemos conseguido una sesión TSO en nuestro emulador de terminal 3270 y hemos establecido una sesión TSO no-SNA con el hercules bajo una pila TCP/IP proporcionada por el propio Hercules pero que emula un terminal 3278 conectada a una Unidad de Control IBM 3174.

Es decir, que ni tenemos red real, ni SNA, ni TCP/IP, ni nada. Por lo que un acceso de otro PC de la LAN a nuestro mainframe es imposible. De hecho, si desde otro PC hacemos un Telnet 3270 a la IP de nuestro equipo que corre Hercules, se establecerá otra sesión TSO, pero del pool de terminales de Hercules que está emulando una red real, y cogerá la dirección 0702, es decir, una sesión VTAM local no-SNA. Pero… ¿Que hacemos para que el z/OS se comunique directamente por TCP/IP y así conseguir que se pueda conectar desde cualquier PC a un DB2 por un puerto?.

Lo que hay que hacer es crear una tarjeta de red en el Hercules, para que el z/OS crea que tiene una tarjeta de red real (OSA) por la que puede correr tráfico TCP/IP y por el cual el CICS, DB2, y hasta las propias sesiones TSO puedan comunicarse.

Para definir un enlace de este tipo, primero debemos saber como funciona: Bajo GNU/Linux, se utiliza un dispositivo virtual TUN/TAP, ya que hercules no funciona con dispositivos de red reales. Para ello, se crea un enlace CTC virtual que comunicará el Hercules con la pila TCP/IP de GNU/Linux. Recordemos que Hercules ya hace uso del TCP/IP, pero solo para emular dispositivos de terminales VTAM locales no-SNA. El gráfico siguiente muestra la configuración que se desea realizar:

        +--------------------------------+
        |     GNU/Linux Debian           |
        |                                |
        +-------------+                  |
        |  Hercules   |                  +-------------+
        |-------------|                  |    eth0     |
        |  z/OS 1.6   |      TCP/IP ------------------> Red LAN
        |   TCP/IP    |                  |192.168.101.7|
        |-------------|         |        +-------------+
        |    CTCA     |         |        |
        |192.168.101.8|         |        |
        +------|------+     10.0.0.2     |
        |  /dev/tun           tun0       |
        |      |                |        |
        |      +----------------+        |
        |       Virtual CTC link         |
        |                                |
        +--------------------------------+

Usando el sistema TUN/TAP, podemos crear un enlace de red virtual que luego podremos conectarlo a la tarjeta de red real. Por un lado del TUN, el z/OS verá la dirección IP 192.168.101.8, que es la que utilizaremos para conectarnos desde el exterior y a la que daremos al z/OS para que todo tráfico que vaya a esa IP, sea respondida por z/OS. En el otro lado del enlace CTC, tendremos una dirección intermedia ficticia con la IP 10.0.0.2 que es el otro lado del dispositivo TUN, y este sistema enlaza ambas direcciones.

Luego, se le definiría en Linux una ruta desde la 10.0.0.2 a la 192.168.101.7 que es la IP real de nuestra máquina GNU/Linux y la cual tiene el dispositivo eth0, que haría el enrutado.

Es decir, cuando todo esté configurado, si accedemos a 192.168.101.8 desde cualquier punto de la red, en realidad accederemos a la 192.168.101.7 y luego nos enrutará directamente al Hercules, con lo que tendríamos una conexión TCP/IP directa con el z/OS.

Sin más, definiremos en enlace en hercules añadiendo la siguiente linea en el fichero de configuración hercules.cnf:

0E20.2  CTCI    192.168.101.8 10.0.0.2

Se deben definir dos direcciones: Una para la transmisión y otra para la recepción, de ahí el 0E20.2, porque las direcciones IODEVICEs correspondientes serán 0E20 y 0E21. La razón por la que hemos elegido estas direcciones, es porque en el IODF del z/OS hay definidos esos dispositivos del tipo 3088 que se utilizan para enlaces CTCI y/o OSA, como he explicado en la pasada entrega y que está documentado en las instrucciones del AD/CD.

Los siguientes dos parámetros nos definirán las direcciones IP de los extremos del TUN/TAP: 192.168.101.8, que es la dirección de red que verá el z/OS y que hemos obtenido del administrador de red, y la 10.0.0.2, una dirección interna inventada que verá GNU/Linux y por la cual el driver TUN/TAP poseerá.

Con esto, la definición para el fichero de configuración de Hercules está realizada.

Creación del enlace TUN/TAP en GNU/Linux

Si no encontramos nada en /dev/net/tun, significa que el sistema TUN/TAP no está instalado o configurado. Si tenemos un kernel mayor que 2.4, el sistema tun/tap viene con el kernel, pero si no, habrá que recompilar con esa opción habilitada.

Los siguientes comandos (como root) crearán un dispositivo TUN:

mkdir /dev/net 
mknod /dev/net/tun c 10 200 
chgrp root /dev/net/tun 
chmod g+w /dev/net/tun 
chmod o-r /dev/net/tun 

Luego, editar el fichero /etc/modules.conf añadiendo la siguiente línea:

alias char-major-10-200 tun

Esto hará que el módulo se cargue cada vez que Hercules reclame la apertura de ese enlace. Esto se hace mediante a ejecución de hercules del fichero /usr/local/bin/hercifc quien es quien controla el enlace virtual. Para ello también deberemos configurar este fichero con los permisos adecuados, en nuestro caso con los comandos siguientes:

chgrp root /usr/local/bin/hercifc
chmod 4750 /usr/local/bin/hercifc 

Como se deberá usar el IP-Forwarding para el enrutado entre el dispositivo TUN y la red real, ejecutando lo siguiente:

echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/conf/tun0/proxy_arp

El siguiente comando habilita el forwarding IP de la tarjeta de red virtual a la real:

echo "1" > /proc/sys/net/ipv4/conf/eth0/proxy_arp

Y, por último, definiremos una ruta en GNU/Linux para que sepa que todo lo que sea de 192.168.1.8 se vaya directamente a nuestro recién creado dispositivo TUN:

route add 192.168.101.8 dev tun0

Enrutado en los PCs Clientes

Este paso es opcional, pero no está de más ejecutarlo en todo PC de la red el cual queramos que entre en la máquina hercules, pero por el enlace CTC:

route add 192.168.101.8 mask 255.255.255.255 192.168.101.7 metric 1

Configuración final de TCP/IP en z/OS

Ya tenemos todo listo: Tenemos el camino desde fuera hacia hercules creado. Ahora, debemos “customizar” algunos datasets del z/OS para que escuchen al interfaz correcto con la IP correcta.

TCPIP.PROFILE.TCPIP

Se deben comentar algunas líneas que hacen referencia a los DEVICEs, los LINKs, los HOMEs y los GATEWAY, e introducir los siguientes valores:

DEVICE CTCDEV1 CTC E20
LINK CTCLINK1 CTC 0 CTCDEV1
HOME 192.168.101.8 CTCLINK1
GATEWAY
; Network   First Hop     Link Name Size   Subnet Mask  Subnet Value
10.0.0.2       =          CTCLINK1  1500   HOST
DEFAULTNET     10.0.0.2 CTCLINK1  1500   0
START CTCDEV1

Como habréis deducido, la primera línea define el dispositivo de red, en la dirección E20. Importante también que el GATEWAY refleje el dispositivo TUN, ya que es por el que va a salir hacia afuera.

TCPIP.TCPIP.DATA

Se cambian los valores de:

DOMAINORIGIN  midominio.com

Y:

NSINTERADDR  195.235.113.3

Siempre y cuando Internet lo tengas desde Telefónica, ya que su DNS es esa IP. Para el resto, introducir el DNS que utilicéis en la red.

TCPIP.HOSTS.LOCAL

Se cambian los valores de:

HOST : 192.168.101.8   : hercules.midominio.com, p390:

Y

NSINTERADDR  195.235.113.3

Con esto, ya está todo configurado. Al hacer IPL de nuevo, Hercules levantará el interfaz TUN y a partir de ahi, la IP 192.168.1.8 estará disponible. Si podéis acceder a una sesión TSO por esa IP (y no por la 192.168.1.7), desde cualquier PC de la red, lo habéis conseguido.

NOTA: Es posible que no podáis abrir en modo edición los datasets TCPIP.TCPIP.DATA y el PROFILE. Si se da el caso, desde la master console, introducir el comando STOP TCPIP para parar el proceso. Entonces, si os dejará editarlo sin problemas.

6 Comentarios (feed)

  1. Gravatar de micol micol nos comenta:

    Wow. excelente explicacion. Si es posible me gustaria ver una explicacion similar sobre Hercules corriendo VM/ESA 2.4 y bajo VM como correr OS/390 2.1, VSE/ESA 2.4 y Linux/390.

    En este link explican como correr Debian para IBM System/390 directamente bajo hercules.

    http://www.josefsipek.net/docs/s390-linux/

    Miércoles, 20 de Febrero/2008 @ 3:23

  2. Gravatar de Gonso Gonso nos comenta:

    Hola,
    Magníficos los tutoriales de ZOS sobre Hercules. Una vez funcionando me gustaría añadir un volumen (disco 3390), he visto información sobre DASD, creo el fichero con DASDINIT pero soy incapaz de montarlo bajo ZOS ya que no sé cómo informar a Hercules ni a ZOS de su existencia ni como formatearlo. Te agradecería ayuda al respecto.

    Muchas gracias.

    Domingo, 24 de Febrero/2008 @ 8:06

  3. Gravatar de Kujaku Kujaku nos comenta:

    Si quieres crear un volumen 3390 para uso temporal, desde la consola de hercules puedes introducir el comando attach dir 3390 mivolumen.dasd, siendo dir la direccion del disco y mivolumen.dasd el fichero que ahs creado con dasdinit. Ojo con la direccion, ya que si no esta en el rango de IODF no te lo reconocera el z/OS, por lo que si tu Z/OS empieza por las direcciones de disco de la A80 a la A8F, es posible que el IODF te deje montar el disco bajo la direccion A90, ya que creo que el IODF del z/OS 1.4 tiene 32 direcciones de disco en ese rango.

    Si el volumen lo quieres hacer permanente, edita el fichero de configuracion de hercules y añade una linea con la referencia a ese disco.

    Una vez hecho el attach en el hercules, si ves que en la consola del z/OS te aparece “DEVICE 0A90 NOW AVAILABLE FOR USE”, es que has tenido suerte.

    Sin hacer un VARY 0A90, ONLINE, antes tienes que inicializarlo con un JCL que llame a la utility ICKDSF, en ADCD.LIB.JCL tienes mil ejemplos. Una vez inicializado (vamos, con la VTOC creada), ahora ya puedes ahcer desde consola un VARY 0A90, ONLINE y empezar a usarlo.

    Lunes, 25 de Febrero/2008 @ 13:35

  4. Gravatar de corsaria corsaria nos comenta:

    Kujaku: http://tinyurl.com/4wxfwd

    ;)

    Jueves, 17 de Abril/2008 @ 10:18

  5. Gravatar de juan jose juan jose nos comenta:

    me es imposible instalar en s.o en mi pc,

    Jueves, 19 de Junio/2008 @ 10:42

  6. Gravatar de Ramon German Ramon German nos comenta:

    Valla eres un espectaculo explicando esto de los mainframes. soy un tio que no sabe ni ostias de esto de los mainframes y con las explicaciones que he conseguido en tu blog ya me estoi encaminando … mil gracias. es que tengo un proyecto de la uni, conectar dos redes lan pero una de ella tiene un mainframe y no tengo idea de como hacerlo..

    Miércoles, 9 de Julio/2008 @ 1:36

No seas tímido, da tu opinión

Sé respetuoso con los demás, la diferencia de opiniones enriquece la discusión, los comentarios bajo ciertas circunstancias pueden ser moderados y requerir aprobación.