Configuración de red de 10 zonas de Solaris

Configuración de red de 10 zonas de Solaris

Estoy probando zonas en Solaris 10, versión 10/09 (s10x_u8wos_08a) con el kernel Generic_142901-04.

El servidor host tiene dos NIC físicas (bnx0 y bnx1) y, dado que tengo la intención de ejecutar varias (tres o más) zonas, dedicar una NIC a una zona está fuera de discusión. Actualmente, no tengo ninguna dirección IP "dedicada" asignada a estas zonas, por lo que estoy obteniendo concesiones de DHCP.

Mis preguntas, a las que volveremos una vez que les haya mostrado mi configuración actual, giran principalmente en torno a esta configuración de red.

Estos son los pasos (con información adicional) que seguí para configurar la zona:

erikn@global:~ $ zpool status zpool1
  pool: zpool1
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        zpool1      ONLINE       0     0     0
          c1t1d0    ONLINE       0     0     0

errors: No known data errors

erikn@global:~ $ zfs list zpool1
NAME     USED  AVAIL  REFER  MOUNTPOINT
zpool1  84.1G   183G  6.14G  /zpool1

erikn@global:~ $ pfexec zfs create zpool1/zones

erikn@global:~ $ pfexec zfs set mountpoint=/zones zpool1/zones

erikn@global:~ $ pfexec zonecfg -z test \
> 'create -b ;
> set zonepath=/zones/test ;
> verify ;
> commit'

erikn@global:~ $ zoneadm list -vic
  ID NAME             STATUS     PATH                           BRAND    IP
   0 global           running    /                              native   shared
   - test             configured /zones/test                    native   shared

Procedí a instalar la zona.

erikn@global:~ $ pfexec zoneadm -z test install
A ZFS file system has been created for this zone.
Preparing to install zone <test>.
Creating list of files to copy from the global zone.
Copying <196614> files to the zone.
Initializing zone product registry.
Determining zone package initialization order.
Preparing to initialize <1595> packages on the zone.
Initialized <1595> packages on zone.
Zone <test> is initialized.
Installation of these packages generated errors: <SUNWvbox SUNWpostgr-83-server-data-root CSWcacertificates CSKmysql32 SUNWpostgr-82-libs SUNWpostgr-82-server SUNWpostgr-82-client SUNWpostgr-82-devel CSKphp5 SUNWpostgr-82-contrib CSKapache2 SUNWpostgr-82-server-data-root>
Installation of <1> packages was skipped.
The file </zones/test/root/var/sadm/system/logs/install_log> contains a log of the zone installation.

Algunos paquetes generaron errores, pero eso no me preocupa mucho ya que de todos modos no los necesito dentro de esta zona.

La instalación finalizó con cero de todos modos.

erikn@global:~ $ echo $?
0

Arranqué la zona

erikn@global:~ $ pfexec zoneadm -z test boot

Y conectado a la "consola".

erikn@global:~ $ pfexec zlogin -C test

Seguí la instalación; seleccionar un idioma (inglés), configurar la configuración regional (EE. UU. (en_US.ISO8859-1)), tipo de terminal (DEC VT100), asignarle un nombre de host (prueba), configurar la zona horaria (Europa/Oslo), configurar una contraseña de root ( "contraseña123" - no, es broma).

Cambió el shell raíz a bash:

# usermod -s /usr/bin/bash root
UX: usermod: root is currently logged in, some changes may not take effect until next login.

Cerré la sesión y volví a iniciarla.

Como había muchos servicios habilitados (incluidos telnet y finger), pensé que sería más fácil deshabilitar todo y luego volver a habilitar los servicios hasta que tuviera un sistema que funcionara.

-bash-3.00# svcs | grep " svc:" | sed "s/ \{1,\}/ /g" | cut -d' ' -f3 | \
> xargs svcadm disable

Al hacer esto, como se esperaba, la zona entró en el modo de mantenimiento del sistema.

Volví a habilitar todos los servicios de Milstone:

-bash-3.00# svcs -a | grep " svc:/milestone/" | sed "s/ \{1,\}/ /g" | \
> cut -d' ' -f3 | xargs svcadm enable

Sshd y syslogd habilitados.

-bash-3.00# svcadm enable svc:/network/ssh:default
-bash-3.00# svcadm enable svc:/system/system-log:default

Se conecta a los servicios de dependencia, permitiéndoles:

-bash-3.00# while [ $( svcs -xv | wc -l ) -gt 0 ] ; do
> svcs -xv | grep "^svc" | cut -d' ' -f1 | xargs svcadm enable
> done
Hostname: test
Reading ZFS config: done.

Habilité el inicio de sesión en la consola y verifiqué el estado.

-bash-3.00# svcadm enable svc:/system/console-login:default

-bash-3.00# svcs -xv
svc:/system/console-login:default (Console login)
 State: offline since August 27, 2012 11:38:04 AM CEST
Reason: Unknown.
   See: http://sun.com/msg/SMF-8000-AR
   See: man -M /usr/share/man -s 1M ttymon
Impact: This service is not running.

Reinicié la zona.

-bash-3.00# reboot

Fue recibido por el mensaje de inicio de sesión de la consola. Iniciado sesión. Estado del servicio comprobado:

-bash-3.00# svcs -xv

Ningún resultado es un buen resultado.

Detuve la zona y tomé una instantánea de la zona global por si acaso.

-bash-3.00# halt
Aug 27 12:10:08 test halt: halted by root
Aug 27 12:10:09 test syslogd: going down on signal 15

[NOTICE: Zone halted]
~.
[Connection to zone 'test' console closed]

erikn@global:~ $ pfexec zfs snapshot zpool1/zones/test@neat

Después de esto, reinicié la zona nuevamente, descubrí el orden de dependencia de los paquetes que se instalaron (usando el script "pkgdep"encontrado aquí), y eliminé algunas de las cosas que no necesitaba.

A continuación llegó el momento de configurar la red, que es de lo que trata esta pregunta.

Desde la zona global, creé una interfaz lógica y la asigné a la zona "prueba".

erikn@global:~ $ pfexec ifconfig bnx1:1 plumb zone test

Podemos verificar que esto fue asignado a la zona:

-bash-3.00# ifconfig bnx1:1
bnx1:1: flags=1100842<BROADCAST,RUNNING,MULTICAST,ROUTER,IPv4> mtu 1500 index 5
        inet 0.0.0.0 netmask 0

Ahora, dado que la zona está configurada con el tipo de IP "compartida", no podrá enviar solicitudes DHCP en la interfaz. Por tanto, lo hacemos desde la zona global:

erikn@global:~ $ pfexec ifconfig bnx1:1 dhcp start
ifconfig: bnx1:1: wait timed out, operation still pending...

Eso no salió muy bien, ¿verdad?

erikn@global:~ $ echo $?
4

De vuelta a la zona.

-bash-3.00# ifconfig bnx1:1
bnx1:1: flags=1104843<UP,BROADCAST,RUNNING,MULTICAST,DHCP,ROUTER,IPv4> mtu 1500 index 5
        inet 10.0.6.92 netmask fffffc00 broadcast 10.0.7.255

Bueno, tenemos una dirección IP... (Aquí he reemplazado la red con 10.0.4.0/22, pero la máscara de red es la misma).

Modificamos nuestro /etc/nsswitch.conf y /etc/resolv.conf para usar nuestros servidores de nombres.

Dado que estamos usando un proxy HTTP en nuestra red, debemos recordar exportarlo (normalmente lo pongo en ~/.bash_profile)

-bash-3.00# export http_proxy=http://proxy.example.com:8080

-bash-3.00# /usr/sfw/bin/wget http://www.google.com
--2012-08-27 13:03:30--  http://www.google.com/
Resolving proxy.example.com... 10.0.7.17
Connecting to proxy.example.com|10.0.7.17|:8080... connected.
Proxy request sent, awaiting response... 302 Found
Location: http://www.google.no/ [following]
--2012-08-27 13:03:40--  http://www.google.no/
Connecting to proxy.example.com|10.0.7.17|:8080... connected.
Proxy request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: `index.html'

    [ <=>                                   ] 11,343      --.-K/s   in 0s

2012-08-27 13:03:40 (65.3 MB/s) - `index.html' saved [11343]

Aunque las cosas parecen estar funcionando, no es perfecto. Volvamos a la zona global.

Primero tenemos la interfaz bnx1 real, que también usa DHCP.

erikn@global:~ $ ifconfig bnx1 dhcp status
Interface  State         Sent  Recv  Declined  Flags
bnx1       BOUND         2357  1558       778
(Began, Expires, Renew) = (08/27/2012 12:09, 08/31/2012 12:09, 08/29/2012 12:09)

Luego tenemos nuestra interfaz lógica:

erikn@global:~ $ ifconfig bnx1:1 dhcp status
Interface  State         Sent  Recv  Declined  Flags
bnx1:1     PRE_BOUND       20    14         6

Creemos otra interfaz lógica, pero esta no se la daremos a ninguna zona, por lo que pertenecerá a la zona global:

erikn@global:~ $ pfexec ifconfig bnx1:2 plumb

erikn@global:~ $ pfexec ifconfig bnx1:2 dhcp start

erikn@global:~ $ echo $?
0

erikn@global:~ $ ifconfig bnx1:2
bnx1:2: flags=1104843<UP,BROADCAST,RUNNING,MULTICAST,DHCP,ROUTER,IPv4> mtu 1500 index 5
        inet 10.0.6.123 netmask fffffc00 broadcast 10.0.7.255

erikn@global:~ $ ifconfig bnx1:2 dhcp status
Interface  State         Sent  Recv  Declined  Flags
bnx1:2     BOUND            5     4         1
(Began, Expires, Renew) = (08/27/2012 13:11, 08/31/2012 13:11, 08/29/2012 13:11)

Así que funcionó bastante bien. Por desgracia, no nos ayuda mucho.

Intenté entregar esa interfaz a la zona "prueba":

erikn@global:~ $ pfexec ifconfig bnx1:2 zone test
erikn@global:~ $ echo $?
0

No estaba muy contento con eso:

erikn@global:~ $ ifconfig bnx1:2 dhcp status
Interface  State         Sent  Recv  Declined  Flags
bnx1:2     DECLINING        6     4         2

Y liberar e iniciar el cliente DHCP nuevamente en la interfaz conduce al mismo resultado que vimos la última vez:

erikn@global:~ $ pfexec ifconfig bnx1:2 dhcp release

erikn@global:~ $ pfexec ifconfig bnx1:2 dhcp start
ifconfig: bnx1:2: wait timed out, operation still pending...

Como último y desesperado intento, intenté:

erikn@global:~ $ pfexec ifconfig bnx1:2 plumb \
> netmask 0xfffffc00 \
> broadcast 10.0.7.255 \
> zone test \
> up

No hubo tanta suerte.

erikn@global:~ $ pfexec ifconfig bnx1:2 dhcp start
ifconfig: bnx1:2: wait timed out, operation still pending...

Mis preguntas son básicamente:

  • ¿Es posible tener IP asignadas por DHCP para una zona Solaris 10/09 sin darle una NIC física propia?

  • ¿Estoy haciendo esto de manera incorrecta? ¿Debería tener IP privadas para las zonas y dejar que la computadora host realice NAT? ¿Es eso posible?

El objetivo final para mí es tener diferentes servicios conectados a la red ejecutándose en cada zona.

  • Habrá cierta comunicación de red entre las zonas y

  • También ejecutarán servicios accesibles a la red que serán utilizados por otros hosts de nuestra red.

Respuesta1

La interfaz virtual de zona tiene algunas características limitadas... algunos estados no se pueden configurar, el filtro de paquetes tampoco funciona en la zona. Si no recuerdo mal, la interfaz de zona no puede enviar transmisiones de Ethernet, por lo que no hay DHCP.

Por cierto, ¿por qué estás haciendo tanto ruido sobre la configuración de la interfaz de zona? ¿Qué pasa con esto?

pfexec zonecfg -z test
> 'create -b ;
> set zonepath=/zones/test ;
> add net ;
> set physica=bnx1 ;
> set address=10.0.6.92 ;
> end ;
> verify ;
> commit'

Heredará la máscara de red de la interfaz de la zona global. Por supuesto, puede configurar más interfaces o colocar la zona solo en la interfaz 'interna' (sin IP pública) y dejar que ipfse proporcione NAT.

información relacionada