Configuração de rede da zona Solaris 10

Configuração de rede da zona Solaris 10

Estou testando zonas no Solaris 10, versão 10/09 (s10x_u8wos_08a) com kernel Generic_142901-04.

O servidor host possui duas NICs físicas (bnx0 e bnx1) e, como pretendo executar várias (três ou mais) zonas, dedicar uma NIC a uma zona está fora de questão. Atualmente, não tenho nenhum endereço IP "dedicado" atribuído a essas zonas, por isso estou obtendo concessões do DHCP.

Minhas perguntas, às quais voltaremos assim que mostrar minha configuração atual, giram principalmente em torno dessa configuração de rede.

Aqui estão as etapas (com algumas informações adicionais) que executei para configurar a 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

Eu continuei a instalar a 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.

Então alguns pacotes geraram erros, mas isso não me preocupa muito já que não preciso deles dentro desta zona de qualquer maneira.

A instalação terminou com zero de qualquer maneira.

erikn@global:~ $ echo $?
0

Eu inicializei a zona

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

E conectado ao "console".

erikn@global:~ $ pfexec zlogin -C test

Acompanhei a instalação; selecionando um idioma (inglês), definindo a localidade (EUA (en_US.ISO8859-1)), tipo de terminal (DEC VT100), fornecendo um nome de host (teste), definindo o fuso horário (Europa/Oslo), definindo uma senha de root ( "password123" - não, estou brincando).

Mudou o shell root para bash:

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

Saiu e entrou novamente.

Como havia muitos serviços habilitados (incluindo telnet e finger), imaginei que seria mais fácil desabilitar tudo e depois reativar os serviços até que eu tivesse um sistema funcionando.

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

Isso resultou, como esperado, na zona entrando no modo de manutenção do sistema.

Reativei todos os serviços milstone:

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

Habilitado sshd e syslogd.

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

Loop sobre serviços de dependência, permitindo-lhes:

-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.

Habilitou o login do console e verificou o status.

-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.

Reiniciei a zona.

-bash-3.00# reboot

Foi recebido pelo prompt de login do console. Conectado. Status do serviço verificado:

-bash-3.00# svcs -xv

Nenhuma saída é uma boa saída.

Interrompeu a zona e tirou um instantâneo da zona global para garantir.

-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

Depois disso, inicializei a zona novamente, descobri a ordem de dependência dos pacotes que foram instalados (usando o script "pkgdep"encontrado aqui) e removi algumas das coisas que eu não precisava.

Em seguida, chegou a hora de configurar a rede, é disso que trata esta questão.

A partir da zona global, criei uma interface lógica e atribuí-la à zona “teste”.

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

Podemos verificar se isso foi atribuído à 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

Agora, como a zona está configurada com IP do tipo "compartilhado", não será possível enviar solicitações DHCP na interface. Portanto, fazemos isso a partir da zona global:

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

Isso não correu muito bem, pois não?

erikn@global:~ $ echo $?
4

De volta à 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

Bem, temos um endereço IP... (Aqui substituí a rede por 10.0.4.0/22, mas a máscara de rede é a mesma).

Modificamos nosso /etc/nsswitch.conf e /etc/resolv.conf para usar nossos servidores de nomes.

Como estamos usando um proxy HTTP em nossa rede, devemos lembrar de exportá-lo (normalmente coloco em ~/.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]

Embora as coisas pareçam estar funcionando, não é perfeito. Voltemos à zona global.

Primeiro temos a interface bnx1 real, que também 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)

Então temos nossa interface lógica:

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

Vamos criar outra interface lógica, mas não daremos esta para nenhuma zona, portanto ela pertencerá à 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)

Então isso funcionou perfeitamente. Infelizmente, isso não nos ajuda muito.

Tentei entregar essa interface para a zona "teste":

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

Não ficou muito feliz com isso:

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

E liberar e reiniciar o cliente DHCP na interface leva ao mesmo resultado que vimos da ú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 última e desesperada tentativa, tentei:

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

Não tive essa sorte.

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

Minhas perguntas são basicamente:

  • É possível atribuir IPs DHCP para uma zona Solaris 10/09 sem fornecer uma NIC física própria?

  • Estou fazendo isso da maneira errada? Em vez disso, devo ter IPs privados para as zonas e deixar o computador host fazer NAT? Isso é possível?

O objetivo final para mim é ter diferentes serviços conectados à rede em execução em cada zona.

  • Haverá alguma comunicação de rede entre as zonas, e

  • eles também executarão serviços acessíveis à rede que serão usados ​​por outros hosts em nossa rede.

Responder1

A interface virtual da zona tem alguns recursos limitados... alguns estados não podem ser configurados, o filtro de pacotes também não funciona na zona. Se bem me lembro, a interface da zona não pode enviar transmissões Ethernet, então não há DHCP.

A propósito, por que você está fazendo tanto barulho sobre como configurar a interface da zona? E quanto a isso?

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

Ele herdará a máscara de rede da interface da zona global. Claro que você pode configurar mais interfaces ou colocar a zona apenas na interface 'interna' (sem IP público) e deixar ipffornecer NAT.

informação relacionada