[Solaris] ipadm

Solaris 11ではIPインターフェースの管理のための新しいコマンド、ipadmが導入されています。ipadmはifconfigを発展させたものですが、ifconfigとは違い、ipadmで設定すると再起動しても設定が消えないようになります。もはや構成ファイルで混乱することはありません。

ifconfigがなくなるわけではありませんが、新しいipadmコマンドになれるため今はifconfigを使わないようにしています。ipadmはサブコマンドを紹介するすっきりしたインターフェースで使い方を紹介しています。
bleonard@solaris:~$ ipadm
usage:  ipadm <subcommand> <args> ...
    create-if    [-t] <interface>
    disable-if    -t <interface>
    enable-if    -t <interface>
    delete-if    <interface>
    show-if        [[-p] -o <field>,...] [<interface>]

    set-ifprop    [-t] -p <prop>=<value[,...]> -m <protocol> <interface>
    reset-ifprop    [-t] -p <prop> -m <protocol> <interface>
    show-ifprop    [[-c] -o <field>,...] [-p <prop>,...]
            [-m <protocol>] [interface]

    create-addr    [-t] {-T static <static_args> | -T dhcp <dhcp_args> |
            -T addrconf <addrconf_args>} <addrobj>
            static_args = <[-d] -a {local|remote}=addr[/prefixlen]>
            dhcp_args = <[-w <seconds> | forever]>
            addrconf_args = <[-i interface-id]
                    [-p {stateful|stateless}={yes|no}]>
    down-addr    [-t] <addrobj>
    up-addr        [-t] <addrobj>
    disable-addr    -t <addrobj>
    enable-addr    -t <addrobj>
    refresh-addr    [-i] <addrobj>
    delete-addr    [-r] <addrobj>
    show-addr    [[-p] -o <field>,...] [<addrobj>]

    set-addrprop    [-t] -p <prop>=<value[,...]> <addrobj>
    reset-addrprop    [-t] -p <prop> <addrobj>
    show-addrprop    [[-c] -o <field>,...] [-p <prop>,...] <addrobj>

    set-prop    [-t] -p <prop>[+|-]=<value[,...]> <protocol>
    reset-prop    [-t] -p <prop> <protocol>
    show-prop    [[-c] -o <field>,...] [-p <prop>,...] [protocol]
ifconfigと比較してみましょう…
bleonard@solaris:~$ ifconfig
usage: ifconfig <interface> | -a[ 4 | 6 | D ][ u | d ][ Z ]
    [ <addr_family> ]
    [ <address>[/<prefix_length>] [ <dest_address> ] ]
    [ set [ <address>][/<prefix_length>] ] [ <address>/<prefix_length>] ]
    [ destination <dest_address> ]
    [ addif <address>[/<prefix_length>]  [ <dest_address> ] ]
    [ removeif <address>[/<prefix_length>] ]
    [ arp | -arp ]
    [ auto-revarp ]
    [ broadcast <broad_addr> ]
    [ index <if_index> ]
    [ metric <n> ] [ mtu <n> ]
    [ netmask <mask> ]
    [ plumb ] [ unplumb ]
    [ preferred | -preferred ]
    [ private | -private ]
    [ local | -local ]
    [ router | -router ]
    [ subnet <subnet_address>]
    [ trailers | -trailers ]
    [ token <address>/<prefix_length> ]
    [ tsrc <tunnel_src_address> ]
    [ tdst <tunnel_dest_address> ]
    [ auth_algs <tunnel_AH_authentication_algorithm> ]
    [ encr_algs <tunnel_ESP_encryption_algorithm> ]
    [ encr_auth_algs <tunnel_ESP_authentication_algorithm> ]
    [ up ] [ down ]
    [ xmit | -xmit ]
    [ modlist ]
    [ modinsert <module_name@position> ]
    [ modremove <module_name@position> ]
    [ ipmp ]
    [ group <groupname>] | [ group ""]
    [ deprecated | -deprecated ]
    [ standby | -standby ]
    [ failover | -failover ]
    [ zone <zonename> | -zone ]
    [ usesrc <interface> ]
    [ all-zones ]
or
    ifconfig <interface> |  -a[ 4 | 6 | D ] [ u | d ]
    auto-dhcp | dhcp
    [ wait <time> | forever ]
    [ primary ]
    start | drop | ping | release | status | inform
最初にはまったのはaddrobjでした。addrobjは、ネットワークインターフェース上に構成されたアドレスに対してユーザが付与する名前で、後でアドレスを参照する際に利用できるというものです。2個のパートから構成されていて、アドレス構成済みのネットワークインターフェースと、好みの文字列をスラッシュで分けています。アドレスを表現する文字列を使うことが一般的です(v4dhcp、v6static、など)。
addrobj = <network interface>/<any string>
例えば、
addrobj = e1000g0/v4static
このaddrobjはアドレスの参照に使います。addrobjを用いるipadmのサブコマンドの名前にはすべてaddrという文字が入っています。同様に、インターフェースを用いるipadmのサブコマンドの名前にはすべてifという文字が入っています。
一般に、ifconfigでやることと言えば、インターフェースへアドレスを構成することと、それらのアドレスを表示することです。ifconfigでやっていることをipadmでやってみたいと思います。注意頂きたいのは、ネットワークインターフェースを構成するためにipadmを使おうと考えている場合には、network/nwamenablenetwork/physical:default:を以下のように無効にしてください。
bleonard@solaris:~$ svcs nwam physical:default
STATE          STIME    FMRI
disabled       11:32:38 svc:/network/physical:nwam
online         11:32:55 svc:/network/physical:default

インターフェースの構成
ifconfigの場合
インターフェースを立ち上げるためには少なくとも2度コマンドを発行する必要があります。しかも再起動するとその設定は失われてしまいます。
bleonard@solaris:~$ sudo ifconfig e1000g0 plumb
bleonard@solaris:~$ sudo ifconfig e1000g0 10.0.2.15/24 up
ipadmの場合
コマンド1回ですみます。しかも設定が永続化されます。
bleonard@solaris:~$ sudo ipadm create-addr -T static -a 10.0.2.15/24 e1000g0/v4static
ipadmはifconfigよりも長い設定ですが、これはアドレスに名前を割り当てているからです。

インターフェースの表示
ifconfigの場合
IPアドレスを確認するときは…
bleonard@solaris:~$ ifconfig -a
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
    inet 127.0.0.1 netmask ff000000
e1000g0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 4
    inet 10.0.2.15 netmask ffffff00 broadcast 10.0.2.255
lo0: flags=2002000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv6,VIRTUAL> mtu 8252 index 1
    inet6 ::1/128
e1000g0: flags=20002000840<RUNNING,MULTICAST,IPv6> mtu 1500 index 4
    inet6 ::/0
ちょっとごちゃごちゃしていますが、慣れてしまいました。

ipadmの場合
こんな感じです。
bleonard@solaris:~$ ipadm show-addr
ADDROBJ           TYPE     STATE        ADDR
lo0/v4            static   ok           127.0.0.1/8
e1000g0/v4static  static   ok           10.0.2.15/24
lo0/v6            static   ok           ::1/128
<interface>/?の形でaddrobjを表示させる場合、libipadm APIを使用していないアプリケーションにより、インターフェース上にアドレスを構成していることに注意が必要です。

こちらにifconfigとipadmのコマンドオプションの比較表があります。

Comparison Tables: ipadm Command and Other Networking Commands
http://download.oracle.com/docs/cd/E19963-01/html/821-1458/gkjdw.html#gjtrh#scrolltoc

ipadmは設定を/etc/ipadm/ipadm.confに永続化しています。
bleonard@solaris:~$ cat /etc/ipadm/ipadm.conf
#
# CDDL License...
#
# DO NOT EDIT OR PARSE THIS FILE!
#
# Use the ipadm(1m) command to change the contents of this file.
_ifname=e1000g0;_family=2;
_ifname=e1000g0;_family=26;
_ifname=e1000g0;_aobjname=e1000g0/v4static;_ipv4addr=10.0.2.15,;up=yes;
_ifname=e1000g0;_aobjname=e1000g0/v4static;prefixlen=24;
その他、参考資料はこちらにあります。


原文はこちら。
http://blogs.oracle.com/observatory/entry/ipadm

0 件のコメント:

コメントを投稿