Configuração de rede da zona Solaris 10

1

Estou testando as zonas no Solaris 10, release 10/09 (s10x_u8wos_08a) com o 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, eu não tenho nenhum endereço IP "dedicado" atribuído a essas zonas, então estou obtendo concessões do DHCP.

Minhas perguntas, às quais nós retornaremos uma vez que mostramos a minha configuração atual, envolvem principalmente essa configuração de rede.

Aqui estão os passos (com algumas informações adicionais) que eu levei 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 para 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 eu não preciso deles dentro dessa zona.

A instalação saiu 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

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

Alterou o shell de raiz para o bash:

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

Efetuado logout e novamente.

Como havia muitos serviços habilitados (incluindo telnet e finger), achei que seria mais fácil desativar tudo e reativar os serviços até que eu tivesse um sistema em funcionamento.

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

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

Eu reativei todos os serviços milstone:

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

Ativado sshd e syslogd.

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

Serviços de dependência em loop, 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.

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

Reiniciou a zona.

-bash-3.00# reboot

Foi recebido pelo prompt de login do console. Conectado. Verificado o status do serviço:

-bash-3.00# svcs -xv

Nenhuma saída é boa saída.

Parou a zona e tirou um instantâneo da zona global para uma boa medida.

-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, eu inicializei a zona novamente, descobri a ordem de dependência dos pacotes que foram instalados (usando este script "pkgdep" encontrado aqui ), e removi algumas das coisas que eu não precisava.

Em seguida, chegou a hora de configurar a rede, sobre o que é essa questão.

Da região global, criei uma interface lógica e a atribui à zona "test".

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 o tipo IP "compartilhado", ela não poderá enviar solicitações DHCP na interface. Portanto, fazemos isso da região global:

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

Isso não foi muito bem, agora foi?

erikn@global:~ $ echo $?
4

Voltar para a 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, nós temos um endereço IP ... (Aqui, eu 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 nos lembrar de exportá-lo (geralmente eu o 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. Vamos voltar para a zona global.

Primeiro, temos a interface bnx1 real, que também usa o 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 essa a qualquer zona, então ela pertencerá à região 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 muito bem. Infelizmente, isso não nos ajuda muito.

Eu tentei entregar essa interface para a zona "test":

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 iniciar novamente o cliente DHCP na interface leva ao mesmo resultado que vimos na ú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 tentativa desesperada, tentei:

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

Não tenha 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 ter IPs atribuídos por DHCP para uma zona do Solaris 10/09 sem fornecer um NIC físico próprio?

  • Eu estou indo sobre isso da maneira errada? Eu deveria ter IP's 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 nas zonas e

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

por erikano 27.08.2012 / 13:46

1 resposta

0

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, interface de zona não pode enviar difusões ethernet, então não há DHCP.

Por que você está fazendo isso inchar sobre a criação de interface de zona? O que sobre 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 região global. É claro que você pode configurar mais interfaces ou colocar a zona apenas na interface "interna" (sem IP público) e o let ipf fornecer NAT .

    
por 28.08.2012 / 22:41