Solaris11 IPMP

きょうはIPMPでもやってみますか。

まず2本NICを刺しておきます。起動したら両方ともDHCPでIPアドレスが振られてました。

root@solaris:~# dladm
LINK                CLASS     MTU    STATE    OVER
net0                phys      1500   up       --
net1                phys      1500   up       --
root@solaris:~# ipadm show-addr
ADDROBJ           TYPE     STATE        ADDR
lo0/v4            static   ok           127.0.0.1/8
net0/v4           dhcp     ok           192.168.0.7/24
net1/v4           dhcp     ok           192.168.0.8/24
lo0/v6            static   ok           ::1/128
net0/v6           addrconf ok           fe80::20c:29ff:fe19:3f14/10
net0/v6           addrconf ok           2001:c90:8224:afe:20c:29ff:fe19:3f14/64
net1/v6           addrconf ok           fe80::20c:29ff:fe19:3f1e/10
net1/v6           addrconf ok           2001:c90:8224:afe:20c:29ff:fe19:3f1e/64
root@solaris:~# 

これらを link-based IPMP にして、IPアドレスを1つ付けるように変えてみます。

まずいま付いているIPアドレスを削除。

root@solaris:~# ipadm delete-addr net0/v4
root@solaris:~# ipadm delete-addr net1/v4
root@solaris:~# ipadm delete-addr net0/v6
root@solaris:~# ipadm delete-addr net1/v6
root@solaris:~# ipadm
NAME              CLASS/TYPE STATE        UNDER      ADDR
lo0               loopback   ok           --         --
   lo0/v4         static     ok           --         127.0.0.1/8
   lo0/v6         static     ok           --         ::1/128
net0              ip         down         --         --
net1              ip         down         --         --

次にIPMPインタフェースを作成します。

root@solaris:~# ipadm enable-if -t net0
root@solaris:~# ipadm enable-if -t net1
root@solaris:~# ipadm create-ipmp ipmp0
root@solaris:~# ipadm add-ipmp -i net0 -i net1 ipmp0
root@solaris:~# ipmpstat -g
GROUP       GROUPNAME   STATE     FDT       INTERFACES
ipmp0       ipmp0       ok        --        net1 net0
root@solaris:~# ipadm
NAME              CLASS/TYPE STATE        UNDER      ADDR
ipmp0             ipmp       down         --         --
lo0               loopback   ok           --         --
   lo0/v4         static     ok           --         127.0.0.1/8
   lo0/v6         static     ok           --         ::1/128
net0              ip         ok           ipmp0      --
net1              ip         ok           ipmp0      --

IPMPに対してIPアドレスを振ります。ここでは 192.168.0.220 にしました。

root@solaris:~# ipadm create-addr -T static -a 192.168.0.220/24 ipmp0/v4
root@solaris:~# ipadm
NAME              CLASS/TYPE STATE        UNDER      ADDR
ipmp0             ipmp       ok           --         --
   ipmp0/v4       static     ok           --         192.168.0.220/24
lo0               loopback   ok           --         --
   lo0/v4         static     ok           --         127.0.0.1/8
   lo0/v6         static     ok           --         ::1/128
net0              ip         ok           ipmp0      --
net1              ip         ok           ipmp0      --

いまは inbound に net0、outbound に net0 と net1 の両方が使われていることがわかります。

root@solaris:~# ipmpstat -a
ADDRESS                   STATE  GROUP       INBOUND     OUTBOUND
::                        down   ipmp0       --          --
192.168.0.220             up     ipmp0       net0        net1 net0

VMware で net0 を止めてみます。

IPMP

ssh で接続していたのですが、セッションが切れずに net1 だけが使われるようになりました。

root@solaris:~# ipmpstat -a
ADDRESS                   STATE  GROUP       INBOUND     OUTBOUND
::                        down   ipmp0       --          --
192.168.0.220             up     ipmp0       net1        net1

syslog には次のように記録されます。

Jan  7 15:56:27 solaris mac: [ID 486395 kern.info] NOTICE: e1000g0 link down
Jan  7 15:56:27 solaris in.mpathd[84]: [ID 215189 daemon.error] The link has gone down on net0
Jan  7 15:56:27 solaris in.mpathd[84]: [ID 968981 daemon.error] IP interface failure detected on net0 of group ipmp0

戻しておきます。接続復旧時の syslog はこんな感じ。

Jan  7 16:00:17 solaris mac: [ID 435574 kern.info] NOTICE: e1000g0 link up, 1000 Mbps, full duplex
Jan  7 16:00:17 solaris in.mpathd[84]: [ID 820239 daemon.error] The link has come up on net0

(参考文献)

 

(補足)

そのままでは外に出ないようになっていました。

root@solaris:~# netstat -r

Routing Table: IPv4
  Destination           Gateway           Flags  Ref     Use     Interface 
-------------------- -------------------- ----- ----- ---------- --------- 
solaris              solaris              UH        2       2868 lo0       
192.168.0.0          192.168.0.220        U         3       1818 ipmp0     

Routing Table: IPv6
(略)

デフォルトゲートウェイを追加しておきます。

root@solaris:~# route -p add default 192.168.0.1
add net default: gateway 192.168.0.1
add persistent net default: gateway 192.168.0.1
root@solaris:~# netstat -r

Routing Table: IPv4
  Destination           Gateway           Flags  Ref     Use     Interface 
-------------------- -------------------- ----- ----- ---------- --------- 
default              192.168.0.1          UG        1          0           
solaris              solaris              UH        2       2892 lo0       
192.168.0.0          192.168.0.220        U         3       2079 ipmp0 

外には出ることができるようになりましたが、名前が引けないので設定しておきます。

root@solaris:~# svccfg -s svc:/network/dns/client setprop \
> config/nameserver=net_address: '(192.168.0.1)'
root@solaris:~#
root@solaris:~# svccfg -s svc:/network/dns/client listprop config
config                      application        
config/value_authorization astring     solaris.smf.value.name-service.dns.client
config/nameserver          net_address 192.168.0.1
root@solaris:~# svcadm refresh svc:/network/dns/client
root@solaris:~#

これで名前も引けるようになりました。

root@solaris:~# ping sugimura.cc
sugimura.cc is alive