Go to main content
Oracle® Solaris 11.3 での TCP/IP ネットワーク、IPMP、および IP トンネルの管理

印刷ビューの終了

更新: 2016 年 11 月
 
 

IP 層デバイスを使用したパケットモニタリング

IP 層の可観測性を高めるため、IP 層デバイスが Oracle Solaris に導入されています。これらのデバイスを使用すると、システムのネットワークインタフェースに関連付けられたアドレスを持つすべてのパケットにアクセスできます。アドレスには、ローカルアドレスのほか、非ループバックインタフェースまたは論理インタフェースにホストされたアドレスも含まれます。監視可能なトラフィックには、IPv4、IPv6 のどちらのアドレスが含まれていてもかまいません。したがって、システムに向かうすべてのトラフィックをモニターできます。トラフィックには、ループバック IP トラフィック、リモートマシンからのパケット、システムから送信されるパケット、またはすべての転送トラフィックが含まれる場合があります。

Oracle Solaris の大域ゾーンの管理者は IP 層デバイスを使用することで、ゾーン間のトラフィックやゾーン内のトラフィックをモニターできます。非大域ゾーンの管理者も、そのゾーンによって送受信されるトラフィックを監視できます。

IP 層のトラフィックをモニターするには、snoop コマンドに新しい –I オプションを指定して使用します。このオプションは、コマンドが、ベースとなるリンク層デバイスではなく新しい IP 層デバイスを使用してトラフィックデータを表示することを指定します。

IP 層でパケットをチェックする方法

  1. (オプション) 必要であれば、システムに接続されているインタフェースについての情報を出力します。
    # ipadm show-if
  2. 特定のインタフェースの IP トラフィックを取得します。
    # snoop -I interface [-V | -v]

パケットをチェックする方法

以降のすべての例は次のシステム構成に基づいています。

# ipadm show-addr

ADDROBJ           TYPE     STATE        ADDR
lo0/v4            static   ok           127.0.0.1/8
net0/v4           dhcp     ok           10.153.123.225/24
lo0/v6            static   ok           ::1/128
net0/v6           addrconf ok           fe80::214:4fff:2731:b1a9/10
net0/v6           addrconf ok           2001:0db8:212:60bb:214:4fff:2731:b1a9/64
net0/v6           addrconf ok           2001:0db8:56::214:4fff:2731:b1a9/64

    2 つのゾーン sandboxtoybox が次の IP アドレスを使用しているとします。

  • sandbox172.0.0.3

  • toybox172.0.0.1

snoop –I コマンドは、システム上のさまざまなインタフェースに対して使用できます。表示されるパケット情報は、ユーザーが大域ゾーン、非大域ゾーンのいずれの管理者であるかに依存します。

使用例 10  ループバックインタフェース上のトラフィックの監視

次に、ループバックインタフェースに対する netstat コマンドの出力例を示します。

# snoop -I lo0
Using device ipnet/lo0 (promiscuous mode)
localhost -> localhost    ICMP Echo request (ID: 5550 Sequence number: 0)
localhost -> localhost    ICMP Echo reply (ID: 5550 Sequence number: 0)

詳細な出力を生成するには、–v オプションを使用します。

# snoop -v -I lo0
Using device ipnet/lo0 (promiscuous mode)
IPNET:  ----- IPNET Header -----
IPNET:
IPNET:  Packet 1 arrived at 10:40:33.68506
IPNET:  Packet size = 108 bytes
IPNET:  dli_version = 1
IPNET:  dli_type = 4
IPNET:  dli_srczone = 0
IPNET:  dli_dstzone = 0
IPNET:
IP:   ----- IP Header -----
IP:
IP:   Version = 4
IP:   Header length = 20 bytes
...

IP 層でのパケット監視を支援するために、監視対象パケットの前に付く新しいヘッダー ipnet が導入されています。発信元 ID と着信先 ID の両方が示されます。ID が 0 の場合は、トラフィックが大域ゾーンから生成されていることを示します。

使用例 11  ローカルゾーン内の net0 デバイスにおけるパケットフローの監視

次の例は、システム内の異なるゾーン内で発生したトラフィックを示しています。ローカルでほかのゾーンに配信されるパケットも含め、net0 の IP アドレスに関連するすべてのパケットを表示できます。詳細出力を生成すれば、パケットのフローに関連するゾーンを確認することもできます。

# snoop -I net0
Using device ipnet/net0 (promiscuous mode)
toybox -> sandbox TCP D=22 S=62117 Syn Seq=195630514 Len=0 Win=49152 Options=<mss
sandbox -> toybox TCP D=62117 S=22 Syn Ack=195630515 Seq=195794440 Len=0 Win=49152
toybox -> sandbox TCP D=22 S=62117 Ack=195794441 Seq=195630515 Len=0 Win=49152
sandbox -> toybox TCP D=62117 S=22 Push Ack=195630515 Seq=195794441 Len=20 Win=491
# snoop -I net0 -v port 22
IPNET:  ----- IPNET Header -----
IPNET:
IPNET:  Packet 5 arrived at 15:16:50.85262
IPNET:  Packet size = 64 bytes
IPNET:  dli_version = 1
IPNET:  dli_type = 0
IPNET:  dli_srczone = 0
IPNET:  dli_dstzone = 1
IPNET:
IP:   ----- IP Header -----
IP:
IP:   Version = 4
IP:   Header length = 20 bytes
IP:   Type of service = 0x00
IP:         xxx. .... = 0 (precedence)
IP:         ...0 .... = normal delay
IP:         .... 0... = normal throughput
IP:         .... .0.. = normal reliability
IP:         .... ..0. = not ECN capable transport
IP:         .... ...0 = no ECN congestion experienced
IP:   Total length = 40 bytes
IP:   Identification = 22629
IP:   Flags = 0x4
IP:         .1.. .... = do not fragment
IP:         ..0. .... = last fragment
IP:   Fragment offset = 0 bytes
IP:   Time to live = 64 seconds/hops
IP:   Protocol = 6 (TCP)
IP:   Header checksum = 0000
IP:   Source address = 172.0.0.1, 172.0.0.1
IP:   Destination address = 172.0.0.3, 172.0.0.3
IP:   No options
IP:
TCP:  ----- TCP Header -----
TCP:
TCP:  Source port = 46919
TCP:  Destination port = 22
TCP:  Sequence number = 3295338550
TCP:  Acknowledgement number = 3295417957
TCP:  Data offset = 20 bytes
TCP:  Flags = 0x10
TCP:        0... .... = No ECN congestion window reduced
TCP:        .0.. .... = No ECN echo
TCP:        ..0. .... = No urgent pointer
TCP:        ...1 .... = Acknowledgement
TCP         .... 0... = No push
TCP         .... .0.. = No reset
TCP:        .... ..0. = No Syn
TCP:        .... ...0 = No Fin
TCP:  Window = 49152
TCP:  Checksum = 0x0014
TCP:  Urgent pointer = 0
TCP:  No options
TCP:

上記の出力で、ipnet ヘッダーは、パケットが大域ゾーン (ID 0) から sandbox (ID 1) に送信されていることを示しています。

使用例 12  ゾーンを特定したネットワークトラフィックの監視

次の例は、ゾーンを特定してネットワークトラフィックを監視する方法 (複数のゾーンを持つシステムにはきわめて有用) を示しています。現在のところ、ゾーンを特定するには、ゾーン ID を使用するしかありません。ゾーン名を指定して snoop コマンドを使用することはできません。

# snoop -I hme0 sandboxsnoop -I net0 sandbox
Using device ipnet/hme0 (promiscuous mode)
toybox -> sandbox TCP D=22 S=61658 Syn Seq=374055417 Len=0 Win=49152 Options=<mss
sandbox -> toybox TCP D=61658 S=22 Syn Ack=374055418 Seq=374124525 Len=0 Win=49152
toybox -> sandbox TCP D=22 S=61658 Ack=374124526 Seq=374055418 Len=0 Win=49152