コマンドラインで Oracle Solaris 11 Express の IP アドレスを変更する
Oracle Solaris 11 Express や Openindiana のインストールが終了した後、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 アドレスを設定するインターフェースとを分離して管理できるよう新しいネットワークスタックが実装されています。
参考資料
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 のネットワークスタック概要図 |