Я тестирую зоны на 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 («password123» — нет, шучу).
Изменил оболочку root на 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")найдено здесь) и удалил часть ненужных мне вещей.
Далее пришло время настроить сеть, о чем и идет речь в этом вопросе.
Из глобальной зоны я создал логический интерфейс и назначил его зоне «test».
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-типом "shared", она не сможет отправлять 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)
Так что это сработало довольно безупречно. Увы, нам это не очень помогает.
Я попытался передать этот интерфейс зоне «тест»:
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...
Мои вопросы в основном таковы:
Возможно ли вообще назначать IP-адреса DHCP для зоны Solaris 10/09, не выделяя ей собственную физическую сетевую карту?
Я делаю это не в том направлении? Мне вместо этого нужно иметь частные IP для зон и позволить хостовому компьютеру выполнять NAT? Это возможно?
Конечной целью для меня является запуск различных сетевых служб в каждой зоне.
Между зонами будет осуществляться некоторая сетевая коммуникация, и
они также будут запускать сетевые службы, которые будут использоваться другими хостами в нашей сети.
решение1
Зональный виртуальный интерфейс имеет некоторые ограниченные возможности... некоторые состояния не могут быть настроены, пакетный фильтр также не работает в зоне. Если я правильно помню, зональный интерфейс не может отправлять широковещательные сообщения 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
.