Что делать, если зона запущена, а в ней нужно добавить ещё одну сеть? Можно добавить через zonecfg и ребутнуть зону. Но что делать, если ребут невозможен по каким-то причинам? Оказывается, выход есть.
Примечание.
Начиная с 11.2 появилась возможность сделать apply конфига при запущенной зоне. Делаем необходимые изменения через zonecfg и потом просто выполняем:
# zoneadm -z zonename apply
IP-TYPE=SHARED
Ниже будет предложено 2 варианта (подходят только для ip-type = shared): один чисто классический (спасибо за этот метод одному из наших постоянных читателей) для версии 11.Х, а второй метод работает как под 10, так и под 11 (а так же 11.1) версией Solaris.
1) Метод 1.
Кратко суть метода (все действия делаем в global-зоне): создаём адрес и меняем ему свойство zone с указанием нужной зоны
# ipadm create-addr -t -T static -a 192.168.56.245/24 vboxnet0/v4b # ipadm show-addrprop -p zone vboxnet0/v4b ADDROBJ PROPERTY PERM CURRENT PERSISTENT DEFAULT POSSIBLE vboxnet0/v4b zone rw global -- global -- # ipadm set-addrprop -t -p zone=skeletor.dev vboxnet0/v4b # ipadm show-addrprop -p zone vboxnet0/v4b ADDROBJ PROPERTY PERM CURRENT PERSISTENT DEFAULT POSSIBLE vboxnet0/v4b zone rw skeletor.dev -- global -- # zlogin skeletor.dev "ipadm show-addr | grep vboxnet0" vboxnet0/? from-gz ok 192.168.56.245/24
Если не поставить -t (temporary), то получим ругань:
ipadm: set-addrprop: zone: Persistent operation on temporary object
2) Метод 2.
И так, в global-zone нужно выполнить команду. Общий вид этой команды:
# ifconfig <PHYSICALNIC> addif <NEWIPADDRESS> netmask <NEWNETMASK> zone <ZONENAME> up
Пример:
# ifconfig vboxnet0 addif 192.168.56.10 netmask 255.255.255.0 zone prod-zone up
Created new logical interface vboxnet0:2
В старых версиях возможно нужно указывать сетевой интерфейс вместе с алиасом:
# ifconfig vboxnet0:2 addif 192.168.56.10 netmask 255.255.255.0 zone prod-zone up
Но у меня он вызвал ошибку.
IP-TYPE=EXCLUSIVE
Работает как для vnic’a, так и для физического интерфейса. Разберём пример с vnic’ом. Создаём vnic в global zone:
# dladm create-vnic -l aggr0 nfs0
Указываем ему, что теперь он принадлежит зоне (обязательно указываем параметр ‘-t’ – временно, так как для перманентного изменения мы просто отредактируем зону через zonecfg):
# dladm set-linkprop -t -p zone=upload nfs0
Теперь в зоне можно увидеть этот интерфейс:
(upload)# dladm LINK CLASS MTU STATE OVER st0 vnic 1500 up ? nfs0 vnic 9000 up ?
Дальше уже как обычно:
(upload)# ipadm create-ip nfs0
(upload)# ipadm create-addr -T static -a 10.1.1.1/24 nfs0/v4
Осталось не забыть добавить это в zonecfg:
# zonecfg -z upload "add net; set physical=nfs0; end"