コマンドラインで Oracle Solaris 11 Express の IP アドレスを変更する

Oracle Solaris 11 ExpressOpenindiana のインストールが終了した後、DHCP で設定されたネットワークインターフェースをコマンドラインを使って固定IPアドレスに変更しようとしたら予想外に苦労したので、同じところで悩んでいる人向けに簡単な設定例を書いておきます。

はじめに

Oracle Solaris 11 では Solaris 10 になかった以下のような新機能が追加されています

Network Auto-Magic
Network Auto-Magic (NWAM) はシステムの基本的なネットワーク設定を自動的に行う機能です。設定内容はGUIツールや nwamcfg コマンドを使ってプロファイルとして記録し、nwamd デーモンがプロファイルに従って自動的に設定を行います。このエントリでは無効にします。
ipadm, dladm
ipadm(1M), dladm(1M) はこれまでの ifconfig(1M) コマンドや ndd(1M) コマンドに置き換わるネットワークインターフェースの設定を行うコマンドです。ipadm や dladm はマニュアルでのファイルの変更を行わずにネットワークインターフェースの永続設定を可能にして SMF (Solaris Service Management Facility) との親和性が高くなっています。

gnome などのウィンドウマネージャが動作していて GUI ツールでの設定でもいいよーという方は、あまり気にせずに「システム->システム管理->Network」(/usr/sbin/nwam-manager-properties) で GUI ツールを起動して設定しましょう。 恐らく説明無くても迷わずに設定できると思います(笑)

ここでは NWAM を無効化してコマンドラインで設定する方法について書いています。

前提条件

Oracle Solaris 11 Express や Openindiana b148 をインストール直後でネットワークインターフェースがインストーラによって DHCP で設定されている状態を想定しています。

NWAMによる自動設定を無効にして手動設定を有効にする。

以下の要領で nwam サービスを無効化して代わりに default サービスを有効にします。

# /usr/sbin/svcadm disable svc:/network/physical:nwam
# /usr/sbin/svcadm enable svc:/network/physical:default 

とにかく Solaris 10 以前の方法で設定したい! という方はここまでで終了です。
あとはこれまでどおり /etc/hostname.e1000g0 を作ったりして設定しましょう!

ipadm コマンドでインターフェースにIPアドレスを設定する

当面は /etc/hostname. ファイルも使えるようですが、今後は ipadm(1M) コマンドにシフトしていくと思われるので ipadm コマンドの設定にも慣れておきましょう。(^_^;)

以下では e1000g0 という名前のインターフェースの設定をしていますが、お使いのシステムで利用可能なインターフェースは dladm(1M) というコマンドで確認できます。

OI # /usr/sbin/dladm show-link
LINK        CLASS     MTU    STATE    BRIDGE     OVER
e1000g0     phys      1500   up       --         --

Solaris 11 でも同名のコマンドで確認できます. (こちらはオプション無しでOKです)

OSOL # /usr/sbin/dladm
LINK                CLASS     MTU    STATE    OVER
net0                phys      1500   up       
例) e1000g0 に 192.168.1.7/24 を設定する場合
# /usr/sbin/ipadm create-addr -T static -a 192.168.1.7/24 e1000g0/v4wire
create-addr
インターフェースにアドレスを追加することを指定
-T static
スタティックアドレスを追加することを指定。
-a 192.168.1.5/24
IPアドレスとサブネットのネットマスク長(24ビット)を指定
e1000g0/v4wire
e1000g0 はインターフェース名。「v4wire」は任意の文字列。ipadm の表示用コマンドやプロパティ変更コマンドなどでこのアドレス設定を指定するときの識別子として使う。分り易い名前をつけましょう。

設定確認

設定後 ipadm show-addr で設定したアドレスを確認できます。

# /usr/sbin/ipadm show-addr e1000g0/v4wire
ADDROBJ           TYPE     STATE        ADDR
e1000g0/v4wire    static   ok           192.168.1.7/24  

ちなみに ifconfig(1M) ではこう見えます

# /usr/sbin/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 5
        inet 192.168.1.7 netmask ffffff00 broadcast 192.168.1.255
        ether 0:c:29:5f:ab:19 
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 5
        inet6 ::/0 
        ether 0:c:29:5f:ab:19 

ありがちなエラー

ipadm: Could not create address: Persistent operation on temporary object
# /usr/sbin/ipadm create-addr -T static -a 192.168.1.7/24 e1000g0/v4wire
ipadm: Could not create address: Persistent operation on temporary object

これは現在設定されている e1000g0 インターフェースが一時設定として作成されているのに、そのインターフェースの上にIPアドレスを永続設定として(-t の指定無しで)設定しているよーという意味のようです。つまり、IP アドレスを永続設定するためには インターフェースも永続設定しないとイカンよ、ということ。
現在設定されているテンポラリーのインターフェースを削除してあらためてアドレスを設定しましょう。

# /usr/sbin/ipadm delete-if e1000g0
# /usr/sbin/ipadm create-addr -T static -a 192.168.1.7/24 e1000g0/v4wire

新しいネットワークスタックについて

Oracle Solaris 11 Express では物理 NIC と IP アドレスを設定するインターフェースとを分離して管理できるよう新しいネットワークスタックが実装されています。

何がうれしいのか?

この新しい実装の肝はデータリンク層に物理NICのインターフェース名(ce0)とは別の名前(sales2)を設定できるようになったことかなと思います。IP で使うネットワークインターフェース名として物理NIC名によらず管理者が決めた名前を使えるようになったので NIC の入替とかデータリンク層以下の変更があっても IP 層の既存設定に影響しなくなりますね。

ネットワーク系のコマンドもこの新しいネットワークスタックを反映したものになっているので、新しいコマンドを使うにあたってこのスタックのイメージを持っておくと分り易いかもしれません。

Chapter 6 Overview of the Networking Stack より

参考資料

Getting Started With Oracle Solaris 11 Express Oracle Solaris 11 Express のインストールと初期設定マニュアル
Network Interfaces and Network Virtualization Solaris 11 ネットワーク管理マニュアル
ifconfig Command Options and ipadm Command Options ifconfig コマンドと ipadm コマンドのオプショの比較表
ndd Command Options and ipadm Command Options ndd コマンドと ipadm コマンドのオプションの比較表
Overview of the Networking Stack Solaris 11 のネットワークスタック概要図