Конфигурация сети 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 ("password123" - нет, просто шучу).
Изменена корневая оболочка на 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...
Мои вопросы в основном:
Можно ли вообще назначить DHCP IP-адреса для зоны Solaris 10/09, не предоставляя ему отдельную физическую сетевую карту?
Я поступаю об этом неправильно? Должен ли я вместо этого иметь частные IP-адреса для зон и позволить хост-компьютеру делать NAT? Это возможно?
The end goal for me, is to have different network-connected services running in each their zone.
There will be some network communication accross the zones, and
they are also going to be running network accessible services which will be used by other hosts on our network.
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
,