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

Autor: Kujaku | El lunes 18 de febrero del 2008 @ 14:47.

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.

Comentarios