「ほっ」と。キャンペーン
カテゴリ:Unix( 7 )
Solaris10のスタティックルートとICMPリダイレクト
Solaris10で静的ルートを追加する方法です。


一時的(再起動するまで)に追加する方法は以下のとおりです。

# route add 10.0.12.0/24 192.168.0.24
add net 10.0.12.0/24: gateway 192.168.0.24


永続的に追加する場合、以下のように -p オプションを付けます。

# route -p add 10.0.12.0/24 192.168.0.24
add net 10.0.12.0/24: gateway 192.168.0.24
add persistent net 10.0.12.0/24: gateway 192.168.0.24


-pオプションをつけると、/etc/inet/static_routes ファイルに設定が追加されます。
ただ、このファイルは手で直接触ってはいけないようです。

# cat /etc/inet/static_routes
# File generated by route(1M) - do not edit.
10.0.12.0/24 192.168.0.24


ルートを確認するには Solaris の場合、netstat -rn を使います。

# netstat -rn

Routing Table: IPv4
Destination Gateway Flags Ref Use Interface
-------------------- -------------------- ----- ----- ---------- ---------
192.168.0.0 192.168.0.1 U 1 2 e1000g0
10.0.12.0 192.168.0.24 UG 1 0
224.0.0.0 192.168.0.101 U 1 0 e1000g0
127.0.0.1 127.0.0.1 UH 1 28 lo0


スタティックルートを削除するには以下コマンドを使います。

# route delete 10.0.12.0/24 192.168.0.24
delete net 10.0.12.0/24: gateway 192.168.0.24


永続的にスタティックルートを削除するには、-pをつけます。

# route -p delete 10.0.12.0/24 192.168.0.24
delete net 10.0.12.0/24: gateway 192.168.0.24
delete persistent net 10.0.12.0/24: gateway 192.168.0.24


さて、あるSolarisサーバにスタティックルートを設定し運用してましたが、ネットワーク構成の変更に伴い静的ルーティングを削除しました。
しかし、netstat -rnするとなぜか勝手にルーティングが増殖します。
再起動してもダメでした。その時のルーティングは以下のような状態でした。

bash-3.00# netstat -rn

Routing Table: IPv4
Destination Gateway Flags Ref Use Interface
-------------------- -------------------- ----- ----- ---------- ---------
default 192.168.0.1 UG 1 3094
192.168.0.0 192.168.0.11 U 1 8 e1000g0
192.168.1.5 192.168.0.2 UGHD 1 1
192.168.1.6 192.168.0.2 UGHD 1 1
192.168.1.7 192.168.0.2 UGHD 1 1
192.168.1.10 192.168.0.2 UGHD 1 1
192.168.1.11 192.168.0.2 UGHD 1 1
192.168.1.12 192.168.0.2 UGHD 1 1
192.168.1.13 192.168.0.2 UGHD 1 1
...(省略)...
127.0.0.1 127.0.0.1 UH 18 642 lo0


こちらで意図して設定してないルーティングはのフラグは UGHD になっています。
フラグの意味については、FreeBSDの資料になりますが、静的ルーティングを見ると、以下の意味でした。

U:使用可能
H:ホスト単位の設定
G:ゲートウェイ
D:ICMP redirectによって経路が自動的に変更された
S:手動で経路追加された

ここで怪しいと思ったのは Flags のDである ICMP リダイレクトというものです。
恥ずかしながら、今までICMP Redirectというものを知りませんでした。


ICMPリダイレクトについては、ICMP(Internet Control Message Protocol)その5
@IT:基礎から学ぶWindowsネットワーク 2.ICMPメッセージ(2)@IT:ICMPリダイレクト使用時のファイアウォール設定に注意などでどういうものか詳しく説明されています。

要は、同じセグメントに複数のルータがある場合、デフォルトゲートウェイとなっているルータがクライアントに「このルートは別のルータ通したほうがよいよ」ということを教え、クライアントは自身のルーティングテーブルのその情報を追加するわけですね。

Solarisだと上記のフラグでICMPリダイレクトによって追加されたルートということがわかりますが、WindowsOSの場合、route print コマンドでサブネットマスクが 255.255.255.255 になっているものがICMPリダイレクトによって追加されたルートになるようです。
また、Windowsの場合、以下のコマンドでどれくらいICMP Redirectパケットを受け取ったかがわかります。

netstat -s -p icmp
ICMPv4 Statistics
Received Sent
Messages 3498388 3477291
Errors 848 0
Destination Unreachable 30481 187
Time Exceeded 2 131
Parameter Problems 0 0
Source Quenches 0 0
Redirects 438 0 ←ここの数
Echos 3185110 291863
Echo Replies 281510 3185110
Timestamps 0 0
Timestamp Replies 0 0
Address Masks 0 0
Address Mask Replies 0 0


Solarisの場合、以下コマンドでICMPリダイレクトを無視するかどうかがわかります。

bash-3.00# ndd -get /dev/ip ip_ignore_redirect
0

0ならICMP redirectを無視しない、1なら無視ということでしょう。
以下のようにするとICMPリダイレクトを無視する設定に出来ます。

bash-3.00# ndd -set /dev/ip ip_ignore_redirect 1


また、ICMPリダイレクトによって作られた経路情報の保持期間は以下のコマンドでわかります。

bash-3.00# ndd -get /dev/ip ip_ire_redirect_interval
60000

ただ時間の単位がわからなかったんですよね。
おそらくミリ秒じゃないかなと思うんですが。。


このあたりのパラメータが、/dev/ip ドライバの設定パラメーター[nddコマンド][NICドライバ、TCP/IPパラメータ関連] - Solaris Userが参考になります。
nddコマンドについては、Solarisネットワークチューニングが参考になります。


今回は、同じセグメント内にルータ一つとL3スイッチが1つ有り、デフォルトゲートウェイになっているL3スイッチが気をきかせすぎてもう一つのルータ向けの通信を検知するとICMPリダイレクトパケットを流していたようです。
こう考えると、一つのセグメントには一つのゲートウェイだけ持たすのがシンプルでいいですね。

参考:
ルーティング設定 | hajichan.net technical version
私的備忘録兼つぶやき:Solaris10 静的ルートの追加と削除
富士通:ネットワークの設定/表示:ルーティング情報の設定
[PR]
by Jehoshaphat | 2013-03-30 22:57 | Unix | Trackback | Comments(0)
(Solaris)NICが2つある場合のIP設定
VMware ESXi でNICが2つあるSolarisの仮想サーバを作成したんですが、どうやらSolarisのセットアップ中では一つのNICしか有効にならなかったようです。

ifconfig叩くとこうなっていました。

# ifconfig -a
lo0: flags=2001000849 mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
e1000g0: flags=1000843 mtu 1500 index 2
inet 192.168.125.67 netmask ffffff80 broadcast 192.168.125.127
ether 0:c:29:44:aa:e6


さて、もう一つのNICを別セグメント用として使いたいんですが、その設定をメモしておきます。
まず、もう一つのNICの名前を確認する方法ですが、dladm show-dev で確認できます。

# dladm show-dev
e1000g0 リンク: up 速度: 1000 Mbps デュプレックス: full
e1000g1 リンク: unknown 速度: 0 Mbps デュプレックス: half

不明だったNICが e1000g1 という名前ということがわかりました。
無効化されているので、リンク状態が unknown になっています。

このデバイスを有効化してやります。有効化は ifcofnig の plumb オプションを使います。

# ifconfig e1000g1 plumb


改めて ifconfig と dladm show-dev で見てみると以下のように表示されるようになりました。

# ifconfig -a
lo0: flags=2001000849 mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
e1000g0: flags=1000843 mtu 1500 index 2
inet 192.168.125.67 netmask ffffff80 broadcast 192.168.125.127
ether 0:c:29:44:aa:e6
e1000g1: flags=1000842 mtu 1500 index 5
inet 0.0.0.0 netmask 0
ether 0:c:29:44:aa:f0

# dladm show-dev
e1000g0 リンク: up 速度: 1000 Mbps デュプレックス: full
e1000g1 リンク: up 速度: 1000 Mbps デュプレックス: full




次にIPアドレスの設定をしていきます。

まず、/etc/inet/ipnodes でホスト名とIPアドレスの対応に追加します。
(ホスト名はNIC毎にユニークにしないといけません)

# vi /etc/inet/ipnodes

#
# Internet host table
#
::1 localhost
127.0.0.1 localhost
192.168.125.67 SunRaySRV3 loghost
192.168.135.3 SunRaySRV3-e1000g1   ←追加



サブネットを設定します。

# vi /etc/inet/netmasks

# The netmasks file associates Internet Protocol (IP) address
# masks with IP network numbers.
#
# network-number netmask
#
# The term network-number refers to a number obtained from the Internet Network
# Information Center.
#
# Both the network-number and the netmasks are specified in
# "decimal dot" notation, e.g:
#
# 128.32.0.0 255.255.255.0
#
192.168.125.0 255.255.255.128
192.168.135.0 255.255.255.0   ←追加


そして、インターフェイスとホスト名を結びつけます。
/etc/hostname.インターフェイス名 のファイル内に、ホスト名を記述します。
例えば最初から認識していたNICの場合、以下のようになっていました。

# vi /etc/hostname.e1000g0
SunRaySRV3

今回、e1000g1 というインターフェイスが増えたので、/etc/hostname/e1000g1 というファイルを作成し、以下のように記述します。

# vi /etc/hostname.e1000g1
SunRaySRV3-e1000g1


これで再起動します。

デフォルトゲートウェイやDNSサーバのアドレスの設定はSolaris10でIPを変更する方法で書いているとおりです。


補足:
なお、今回はサーバの物理NIC(Gbps対応)を、100MbpsのL2につないでいたんですが、VMWareネットワーク上では仮想スイッチを経由して繋ぎにいっているため、仮想OS(Solaris)側からは1Gbpsで接続されているように見えるようです。(仮想スイッチ~L2スイッチ間のリンク状態はvShere Clientの"構成"→"ネットワーク"で確認できます。どうもVMWareのオートネゴシエーションは稀に100Mbps半二重とかにしてしまうようなので、固定にしたほうが安全かもしれません)

参考:
ネットワークを調査する 50 の方法
Solaris10:未構成NICをOSインストール後に構成する方法
UNIXサーバ Solaris Technical Park Solaris 逆引きコマンド一覧 ネットワークの設定/表示 ネットワークインターフェイスの設定 : 富士通
[PR]
by Jehoshaphat | 2013-03-18 21:29 | Unix | Trackback | Comments(0)
(Solaris)インストールしているパッケージの一覧や詳細を確認する方法
Solarisでは pkginfo コマンドでパッケージの管理ができるようです。

システムにインストールされているパッケージを一覧表示するには、単にpkginfoコマンドを叩きます。

# pkginfo | grep "Sun Ray Core"
system SUNWlibusbut Sun Ray Core Services support for libusb API (opt)
system SUNWuta Sun Ray Core Services Administration Software (opt)
system SUNWutesa Sun Ray Core Services module for SunMC agent (opt)
system SUNWutesc Sun Ray Core Services module for SunMC (opt)
system SUNWutfw Sun Ray Core Services Firmware Files (opt)
system SUNWutgsm Sun Ray Core Services AMGH (opt)
system SUNWutk Sun Ray Core Services Drivers (usr)
system SUNWutm Sun Ray Core Services Man Pages (opt)
system SUNWuto Sun Ray Core Services Core Software (opt)
system SUNWutps Sun Ray Core Services Auth Manager PAM Module (opt)
system SUNWutr Sun Ray Core Services Configuration (root)
system SUNWutref Sun Ray Core Services Reference Software (opt)
system SUNWutscr Sun Ray Core Services Smartcard Reader Driver components (opt)
system SUNWutstk Sun Ray Core Services mass storage drivers (usr)
system SUNWutsto Sun Ray Core Services mass storage software (opt)
system SUNWutstr Sun Ray Core Services mass storage configuration (root)
system SUNWutu Sun Ray Core Services Configuration (usr)

パッケージの詳細を見るには -l オプションを付けます。

# pkginfo -l SUNWuto
PKGINST: SUNWuto
NAME: Sun Ray Core Services Core Software (opt)
CATEGORY: system,sunray
ARCH: i386
VERSION: 4.0_48,REV=2007.08.01.15.08
BASEDIR: /opt
VENDOR: Sun Microsystems, Inc.
DESC: core services and resources, management and user commands
PSTAMP: SunOS_5.10_20070801154126
INSTDATE: 10月 16 2012 17:43
HOTLINE: Please contact your local service provider
STATUS: 完全にインストールされました。
FILES: 160 のインストールされたパス名
10 の共有パス名
25 のディレクトリ
116 の実行可能ファイル
2 の setuid/setgid 実行可能ファイル
15885 ブロック (概算値) が使われました

[PR]
by Jehoshaphat | 2012-11-10 21:36 | Unix | Trackback | Comments(0)
Solarisでの現在のネットワークトラフィックの測り方
Windowsだとタスクマネージャー等で、現在のNICごとのネットワークトラフィックがある程度分かるんですが、それをSolaris10でも知る方法です。


ちょうど、Solaris: ネットワークの解析コマンド入門に希望していたことが載っていました。
(この資料はSolarisのネットワーク関連の操作が大抵網羅されており、非常に有用です)

以下のコマンドでスループットがわかるようです。

# dladm show-dev -s -i 1 e1000g0(←NIC名)



結果はこんな感じです。

ipackets rbytes ierrors opackets obytes oerrors
e1000g0 857 738987 0 7649 9574282 0

それぞれの項目の意味は以下のようです。
e1000g0:NIC名
ipackets:受信パケット数
rbytes:受信バイト数
ierrors:受信エラー数
opackets:送信パケット数
obytes:送信バイト数
oerrors:送信エラー数

この送受信バイト数に8を乗ずることで bps が出せますね。
上の例だと、受信5.9Mbps、送信76Mbpsになります。
[PR]
by Jehoshaphat | 2012-10-30 21:37 | Unix | Trackback | Comments(0)
Solaris10でIPを変更する方法
Solaris10でIPやデフォルトゲートウェイ等の基本的ネットワークの設定ですが、つい忘れるのでメモします。


IPは以下ファイルで定義します。(コマンドでも出来るようだけど、再起動したらもとに戻るので最初からファイルに書いたほうが良いです)

# vi /etc/inet/ipnodes (←/etc/inet/hostsへのシンボリックリンクになっていた)
192.168.13.6 hogehost loghost

↑のファイルはReadOnlyになっているので、viで編集した場合、:w! で強制上書き保存します。


次にネットマスクを設定します。

# vi /etc/inet/netmasks
192.168.13.0 255.255.255.0

↑のファイルもReadOnlyになっているので、viで編集した場合、:w! で強制上書き保存します。


デフォルトゲートウェイの設定をします。

# vi /etc/defaultrouter
192.168.13.1



ドメイン名とDNSサーバのアドレスを指定します。

# cat /etc/resolv.conf
domain jehupc.com
nameserver 192.168.13.2


参考:
Solarisのネットワーク設定


追記(2013/3/14):
Solarisではホスト名とIPの対応表を定義し、次に、ホスト名とインターフェイスとの対応表を定義することでIPの設定を行なっているようです。

インターフェイスとホスト名を結びつけます。

# vi /etc/hostname.e1000g0 (hostname.インターフェイス名のファイル)
hogehost  ←ホスト名を記述

NICが2つ以上ある場合のIPの設定は、(Solaris)NICが2つある場合のIP設定を参照。
[PR]
by Jehoshaphat | 2012-10-30 21:35 | Unix | Trackback | Comments(0)
(Solaris)telnetでrootユーザがログインできるようにする
telnetでSolaris10に接続し、rootでログインしようとすると接続できません。
設定を変更しないとダメなようです。

/etc/default/login ファイルで設定する必要があるんですが、デフォルトだとこいつのパーミッションは444になっています。
とりあえず編集させるため以下のようにパーティションを変更してから、/etc/default/login ファイルの CONSOLE をコメントアウトします。

chmod 644 /etc/default/login

vi /etc/default/login

CONSOLE=/dev/console
 ↓
#CONSOLE=/dev/console

これでファイルを保存し、telnetで接続し、rootでログインが出来るようになりました。
[PR]
by Jehoshaphat | 2012-10-30 21:30 | Unix | Trackback | Comments(0)
(Solaris)SunOSバージョン情報の表示
Solaris でのシステム情報表示ですが、Linuxと同じように uname -a も使えます。

bash-3.00# uname -a
SunOS SunRaySRV1 5.10 Generic_137112-03 i86pc i386 i86pc



また、showrev というコマンドでもより詳しく見れます。

bash-3.00# showrev
Hostname: SunRaySRV1
Hostid: 11d53ca5
Release: 5.10
Kernel architecture: i86pc
Application architecture: i386
Hardware provider:
Domain:
Kernel version: SunOS 5.10 Generic_137112-03


64bitが使えるかどうかや搭載メモリサイズなども含め、コマンドを使用したシステム情報の表示 (Solaris のシステム管理 (第 2 巻)) - Sun Microsystemsが参考になります。



余談ですが、軽くSolarisのパッチの話を。。

Solarisはパッチ適用するのに登録が必要なんですね。
基本的にはSolarisサーバは導入メーカーが保守してるので、有償サポートには入ってるんじゃないかと思います。

Solarisのパッチはsmpatchコマンドで管理できるようです。

Solarisで適用できるパッチがあるかどうかを確認するには下記コマンドでできるようです。
下記だと2件しかでないので大抵適用されてるということでしょうかね。

bash-3.00# smpatch analyze

新着メッセージがあります。メッセージを取り出すには次のようにします: smpatch messages [-a]

必須パッチ。
121119-15 SunOS 5.10_x86: Sun Update Connection System Client 1.0.10
119255-59 SunOS 5.10_x86: Install and Patch Utilities Patch


また、適用したパッチを表示するには下記コマンドになるようです。(今回は大量に出てきました。)

bash-3.00# patchadd -p
Patch: 127785-01 Obsoletes: Requires: Incompatibles: Packages: SUNWsfman
Patch: 121668-02 Obsoletes: Requires: Incompatibles: Packages: SUNWsfwhea
Patch: 125538-01 Obsoletes: Requires: Incompatibles: Packages: SUNWgnome-ps-viewer
Patch: 122209-01 Obsoletes: Requires: Incompatibles: Packages: SUNWgnome-removable-media
Patch: 120275-02 Obsoletes: Requires: Incompatibles: Packages: SUNWsmmgr
........


アップデートを適用するには下記コマンドになるようです。

bash-3.00# smpatch update



参考:
Solaris 10 へのパッチ適用方法
負け組アーキテクトの憂鬱:smpatchでSolaris10を最新の状態にする
Solaris 10 で適用されているパッチを確認する
[PR]
by jehoshaphat | 2010-11-01 21:18 | Unix | Trackback | Comments(0)