Назад | Перейти на главную страницу

Конфигурация сети зон Solaris 10

Я тестирую зоны на Solaris 10, выпуск 10/09 (s10x_u8wos_08a) с ядром Generic_142901-04.

Хост-сервер имеет два физических сетевых адаптера (bnx0 и bnx1), и, поскольку я намереваюсь запустить несколько (три или более) зон, о выделении сетевого адаптера для зоны не может быть и речи. В настоящее время у меня нет «выделенных» IP-адресов, назначенных этим зонам, поэтому я получаю аренду от DHCP.

Мои вопросы, к которым мы вернемся, когда я покажу вам свою текущую настройку, в основном связаны с этой сетевой конфигурацией.

Вот шаги (с некоторой дополнительной информацией), которые я предпринял для настройки зоны:

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

Я приступил к установке зоны

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.

Итак, некоторые пакеты генерировали ошибки, но меня это не особо беспокоит, так как они мне все равно не нужны внутри этой зоны.

В любом случае установка завершилась с нулевым значением.

erikn@global:~ $ echo $?
0

Я загрузил зону

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

И подключил к "консоли".

erikn@global:~ $ pfexec zlogin -C test

Я следил за установкой; выбор языка (английский), установка локали (США (en_US.ISO8859-1)), типа терминала (DEC VT100), присвоение ему имени хоста (тест), установка часового пояса (Европа / Осло), установка пароля root ( «пароль123» - нет, шучу).

Изменил корневую оболочку на bash:

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

Вышел из системы и снова зашел.

Поскольку было много включенных служб (включая telnet и finger), я подумал, что будет проще отключить все, а затем снова включить службы, пока у меня не будет работающая система.

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

В результате этого, как и ожидалось, зона перешла в режим обслуживания системы.

Я снова включил все службы milstone:

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

Включены sshd и syslogd.

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

Зацикленные службы зависимостей, позволяющие им:

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

Включил консольный вход и проверил статус.

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

Перезагрузил зону.

-bash-3.00# reboot

Был встречен приглашением на вход в консоль. Авторизован. Проверено состояние сервиса:

-bash-3.00# svcs -xv

Нет вывода - это хороший результат.

Остановил зону и на всякий случай сделал снимок из глобальной зоны.

-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

После этого я снова загрузил зону, выяснил порядок зависимости пакетов, которые были установлены (с помощью этого скрипта "pkgdep" найдено здесь), и удалил некоторые ненужные мне вещи.

Затем пришло время настроить сеть, о чем и идет речь.

Из глобальной зоны я создал логический интерфейс и назначил его зоне «тест».

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

Мы можем проверить, что это было назначено зоне:

-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

Теперь, поскольку зона настроена с IP-типом «общий», она не сможет отправлять запросы DHCP на интерфейс. Поэтому делаем это из глобальной зоны:

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

Это было не очень хорошо, не так ли?

erikn@global:~ $ echo $?
4

Вернуться в зону.

-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

Итак, у нас есть IP-адрес ... (Здесь я заменил сеть на 10.0.4.0/22, но сетевая маска та же).

Мы модифицируем наши /etc/nsswitch.conf и /etc/resolv.conf для использования наших серверов имен.

Поскольку мы используем HTTP-прокси в нашей сети, мы должны не забыть экспортировать его (я обычно помещаю его в ~ / .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]

Хотя кажется, что все работает, это не идеально. Вернемся в глобальную зону.

Сначала у нас есть реальный интерфейс bnx1, который также использует 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)

Тогда у нас есть логический интерфейс:

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

Давайте создадим еще один логический интерфейс, но мы не будем отдавать его ни в какую зону, поэтому он будет принадлежать глобальной зоне:

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)

Так что это сработало безупречно. Увы, это нам мало помогает.

Я попытался передать этот интерфейс в зону «test»:

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

Его это не особо радовало:

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

А освобождение и запуск DHCP-клиента заново на интерфейсе приводит к тому же результату, который мы видели в прошлый раз:

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

В качестве последней отчаянной попытки я попробовал:

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

Нет такой удачи.

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

Мои вопросы в основном таковы:

Конечная цель для меня - иметь разные сетевые службы, работающие в каждой своей зоне.

Виртуальный интерфейс зоны имеет некоторые ограниченные функции ... некоторые состояния не могут быть настроены, фильтр пакетов также не работает в зоне. Если я правильно помню, интерфейс зоны не может отправлять широковещательные сообщения Ethernet, поэтому нет DHCP.

Кстати, зачем вы так раздумываете над настройкой интерфейса зоны? Как насчет этого?

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

Он унаследует сетевую маску от интерфейса глобальной зоны. Конечно, вы можете настроить больше интерфейсов или поместить зону только на «внутренний» интерфейс (без общедоступного IP-адреса) и позволить ipf предоставлять NAT.