Настройка сети в Solaris 11

В отпуске наконец-то появилось время детальнее покопаться в новых фичах Solaris 11. В частности в том как устроена сетевая подсистема.
Сетевая подсистема претерпела большие изменения еще в 10 версии, но в 11 они приобрели законченный вид. Об изменениях на уроне ядра я постараюсь написать попозже. Сейчас же, коротко об изменениях в утилитах.
Если кто-либо считает, что настроить сеть в Solaris 10 было сложно, то он явно не делал этого в 11 версии.
В Solaris 10 для настройки сети использовалось несколько файлов и пара утилит. В крайнем случае, все можно было изменить динамически с помощью ifconfig. Оказывается, это было очень сложно. Чтобы упростить этот непростой процесс в Solaris 11, появились команды netadm, netcfg и ipadm и некоторые другие, а также пару демонов: netcfgd, nwamd.
Теперь по умолчанию для настройки сети используется новая фича NWAM ( Network Auto-Magic ), которая, в идеале, настроит сеть на сервере за Ва. А также автоматически перенастроит в случае каких-либо изменений. Здорово звучит не правда ли? Давайте разбираться

настройка NWAM Профиля

Посмотреть список профилей и локаций можно с помощью команды :

 netcfg list

Профиль описывает необходимые настройки сетевых адаптеров, сетевых интерфейсов и туннелей. Будьте внимательны: в 10 версии различие между адаптером и интерфейсом были столь незначительными, что многие объединяли эти понятия.
Профиль по умолчанию (Automatic) пытается получить адрес по dhcp по всем поднятым интерфейсам. Не очень типичная конфигурация для сервера. Давайте создадим профиль со статически настроенным адресом.
Сначала надо создать сам профиль и добавить в него физический интерфейс.

antony@sol11:~$ netcfg
netcfg> create ncp user
netcfg:ncp:user> create ncu phys net1
Created ncu 'net1'. Walking properties ...
activation-mode (manual) [manual|prioritized]> manual
link-mac-addr> 
link-autopush> 
link-mtu>
netcfg:ncp:user:ncu:net1> end
Committed changes

И только после того как в профиле есть интерфейс добавить в профиль ip адрес :

netcfg:ncp:user> create ncu ip net1
Created ncu 'net1'. Walking properties ...
ip-version (ipv4,ipv6) [ipv4|ipv6]> ipv4
ipv4-addrsrc (dhcp) [dhcp|static]> static
ipv4-addr> 192.168.56.2
ipv4-default-route>
netcfg:ncp:user:ncu:net1> list
 ncu:net1
 type interface
 class ip
 parent "user"
 enabled true
 ip-version ipv4
 ipv4-addrsrc static
 ipv4-addr "192.168.56.2"
 ipv6-addrsrc dhcp,autoconf
netcfg:ncp:user:ncu:net1> commit
Committed changes
netcfg:ncp:user:ncu:net1> end
netcfg:ncp:user> exit

Каждый профиль (NCP, Network configuration Profile ) должен содержать минимум 2 связанных NCU ( Network Configuration Unit ) :
– phys Описывающий настройки сетевого адаптера
– ip. Описывающий настройки интерфейса
Какую политику использовать задается в параметрах сервиса network/physical:default
Посмотреть, какая политика настроена сейчас :

svccfg -s network/physical:default listprop netcfg/active_ncp

Изменить :

svccfg -s network/physical:default setprop netcfg/active_ncp = user
svccfg -s network/physical:default refresh

При этом те интерфейсы, что были настроены профилем Automatic, не опустятся. Чтобы полностью перенастроить конфигурацию необходимо:

svcadm restart network/physical:default

И если все сделано правильно – то сеть поднимется. Очень просто, не правда ли? 😉
Все это описываю для того, чтобы было понимание, как именно настраивается сеть через NWAM. На самом деле, чтобы применить созданный Profile, достаточно одной команды:

netadm enable -p ncp user

Активный профиль можно также посмотреть в выводе этой команды:

antony@sol11:~$ netadm list
TYPE PROFILE STATE
ncp Automatic disabled
ncp user online
 ncu:phys net1 online
ncu:ip net1 online
loc Automatic offline
loc NoNet offline

С ключом -x можно посмотреть детальную информацию:

antony@sol11:~$ netadm list -x
 TYPE PROFILE STATE AUXILIARY STATE
ncp Automatic disabled disabled by administrator
ncp user online active
ncu:phys net1 online interface/link is up
 ncu:ip net1 online interface/link is up
loc Automatic online active
loc NoNet offline conditions for activation are unmet
NWAM Location

Надеюсь, с профилями более-менее разобрались. Теперь о Location’ах.
Если через профиль (NCP) настраивается ip адрес – то Location определяет остальные сетевые параметры, такие как: домен сервера, адреса DNS серверов, настройки IP filter и IPsec.
Вносить эти изменения через /etc/nsswitch.conf и прочие файлы теперь нельзя, так как содержимое этого файла автоматически генерируется из свойств сервиса. Сам же файл оставлен только для обратно совместимости.
Просмотреть настройки Locftion’а можно уже знакомой утилитой netcfg

antony@sol11:~$ netcfg list loc Automatic
loc:Automatic
 activation-mode system
 enabled false
 nameservices dns
 nameservices-config-file "/etc/nsswitch.dns"
 dns-nameservice-configsrc dhcp

Так как в данном location’е список dns сервров получается по dhcp, то в свойствах сервиса ничего нет.

antony@sol11:~$ svccfg -s svc:/network/dns/client listprop config
config application 
config/value_authorization astring solaris.smf.value.name-service.dns.client
antony@sol11:~$

Я не часто встречаю сервера, где все сетевые настройки получаются через dhcp.
Давайте создадим location, где dns сервера задаются статически :

antony@sol11:~$ netcfg 
netcfg> create loc user1
Created loc 'user1'. Walking properties ...
 activation-mode (manual) [manual|conditional-any|conditional-all]> manual
nameservices (dns) [dns|files|nis|ldap]> 
nameservices-config-file ("/etc/nsswitch.dns")> 
dns-nameservice-configsrc (dhcp) [manual|dhcp]> manual
 dns-nameservice-domain> pavlenko.net
dns-nameservice-servers> 8.8.8.8
dns-nameservice-search> 
dns-nameservice-sortlist> 
dns-nameservice-options> 
nfsv4-domain> 
 ipfilter-config-file> 
ipfilter-v6-config-file> 
ipnat-config-file> 
ippool-config-file> 
ike-config-file> 
ipsecpolicy-config-file> 
netcfg:loc:user1> list
loc:user1
 activation-mode manual
 enabled false
 nameservices dns
 nameservices-config-file "/etc/nsswitch.dns"
 dns-nameservice-configsrc manual
 dns-nameservice-domain "pavlenko.net"
 dns-nameservice-servers "8.8.8.8"
netcfg:loc:user1> commit
Committed changes
netcfg:loc:user1> quit
antony@sol11:~$

Теперь применяем данный location :

antony@sol11:~$ netadm enable -p loc user1
 Enabling loc 'user1'
antony@sol11:~$

В свойствах сервиса network/dns/client мы видим указанные в location’е настройки dns.

antony@sol11:~$ svccfg -s svc:/network/dns/client listprop config
 config application 
config/value_authorization astring solaris.smf.value.name-service.dns.client
config/domain astring pavlenko.net
 config/nameserver net_address 8.8.8.8
antony@sol11:~$

Location может быть активирован не только администратором, но и автоматически, при совпадении нужных условий. Например, можно настроить, чтобы при поднятии “внешнего” ip адреса автоматически включался ip filter с правильными параметрами.
Как настраивать сеть в Solaris 11 с помощью нового механизма NWAM – я вкратце описал.

Отключаем NWAM и делаем все по человечески

А теперь приз для тех, кто дочитал до этого места. Весь этот очень удобный механизм NWAM можно отключить.
Естественно, после этого вписать настройки в файлы, как и раньше в Solaris 10 все равно не получится.
Но настроить статическую конфигурацию можно достаточно быстро.
Существует специальный профиль: DefaultFixed. Применение данного профиля отключает NWAM. Конечно, документация советует отключать NWAM только в случае “если вы используете расширенные сетевые фичи, которые пока не поддерживаются NWAM”, но, на мой взгляд, все ровно наоборот. NWAM имеет смысл включать только в том случае, если вам действительно нужны эти фичи.
Итак отключаем NWAM :

netadm enable -p ncp DefaultFixed

Как проверить какой профиль используется – я писал выше. Еще не забыли?
Смотрим

svccfg -s network/physical:default listprop netcfg/active_ncp

После этого уже полюбившаяся нам команда netadm перестает наконец работать:

# netadm list
netadm: DefaultFixed NCP is enabled;
automatic network management is not available.
'netadm list' is only supported when automatic network management is active.

Ура!
Теперь смотрим, какие в системе есть сетевые интерфейсы и выбираем тот, что вам нужен.

antony@sol11:~$ dladm show-phys
LINK MEDIA STATE SPEED DUPLEX DEVICE
net0 Ethernet up 1000 full e1000g0
 net1 Ethernet up 1000 full e1000g1

Состояние интерфейсов можно посмотреть :

antony@sol11:~$ ipadm  show-if
IFNAME     CLASS    STATE    ACTIVE OVER
lo0        loopback ok       yes    --
net0       ip       down     no     --
net1       ip       ok       yes    --
antony@sol11:~$

Если нужный вам интерфейс в dladm есть, а в ipadm нет, то добавляем его командой

 ipadm create-ip net1

В моем случае интерфейс есть.
Чтобы посмотреть, что уже настроен:

antony@sol11:~$ ipadm show-addr
ADDROBJ TYPE STATE ADDR
lo0/v4 static ok 127.0.0.1/8
lo0/v6 static ok ::1/128
antony@sol11:~$

И наконец, добавляем нужный нам адрес на выбранном интерфейсе :

ipadm create-addr -T static -a 192.168.56.102 met1/v4

Если все сделано правильно, то адрес станет доступен и появится в выводе ipadm :

 antony@sol11:~$ ipadm show-addr
ADDROBJ TYPE STATE ADDR
lo0/v4 static ok 127.0.0.1/8
net1/v4 static ok 192.168.56.102/24
 lo0/v6 static ok ::1/128
antony@sol11:~$

Как настраивать default route’ер, я надеюсь, все знают. Команда routeadm в Solaris 11 не изменилась.
Вместо правки /etc/nsswitch.conf, теперь настраиваем name service switch через сервис

antony@sol11:~$ svccfg -s name-service/switch
svc:/system/name-service/switch> setprop config/host = "files dns"

Если используется ldap то

svc:/system/name-service/switch> setprop config/password = "files ldap"

И так далее – настраиваем все необходимые опции. После того как все необходимые опции настроены :

svc:/system/name-service/switch> end
antony@sol11:~$ svcadm refresh name-service/switch
antony@sol11:~$ svcadm restart name-service/switch

Для обратной совместимости внесенные изменения также попадают в файл /etc/nsswitch.conf
Привыкнуть к свойствам сервиса получается не сразу. По этому, советую после внесения проверять, что все правильно настроено уже через файл. И при необходимости дальше менять свойства сервиса.
Вместо правки /etc/resolv.conf настраиваем dns тоже через сервис:

antony@sol11:~$ svccfg -s dns/client
svc:/network/dns/client> listprop config
config                      application
config/value_authorization astring     solaris.smf.value.name-service.dns.client
config/domain              astring     ie.oracle.com
 svc:/network/dns/client> setprop config/nameserver = (8.8.8.8 217.118.66.243)
svc:/network/dns/client> setprop config/domain = pavlenko.net
svc:/network/dns/client> listprop config
 config application 
config/value_authorization astring solaris.smf.value.name-service.dns.client
config/nameserver net_address 8.8.8.8 217.118.66.243
config/domain astring pavlenko.net
 svc:/network/dns/client> exit
antony@sol11:~$ svcadm refresh dns/client
antony@sol11:~$ svcadm restart dns/client

После этого /etc/resolv.conf также изменится.
Ну, вот и все. Просто – не правда ли?

Leave a Reply

Your email address will not be published. Required fields are marked *