連載 / 遠隔オフィスとの接続ー② 図 1 netstat - i " の実行列 ( 1 ) $ netstat —i Name Mtu Net/Dest 8232 loopback 100 hmeO 1500 backbone 図 2 ifconfig の実彳デ列 $ ifconfig -a Address localhost dukekun I pkt s 12206149 722558 lerrs Opkt s Oerrs 0 0 C011is Queue 0 0 12206149 846295 0 5891 0 0 100 : fIags=849 く UP , LOOPBACK ,RUNNING , MULTICAST> mtu 8232 inet 127 . 0 . 0 . 1 netmask ff000000 inet 172. 16 . 1 . 1 netmask ffffff00 broadcast 172. 16 . 1 .255 hmeO : f1ags=863 く UP , BROADCAST , NOTRAILERS ,RUNNING, MULTICAST> mtu 1500 したら、 「さっきはメールをダウンロードできたのに、今度は失敗 「メールサーバーに接続できませんよお」 が、非力なサーバーにユーサーからのアクセスが集中し、 トコルでメールを読み込めるようにしていました。ところ あるメールサーバーでは、 POP や IMAP などのプロ いはたしたために接続カ坏安定になるケースもあります。 また、接続数は制限していなくても、実質的に資源を使 そのものを拒否することもあります。 制限しているサイトも多く、メッセージを表示せすに接続 たとえは、 Web サーバーのなかには明示的に接続数を のような場合が、まさに、、なぜか接続できない " トラブル ともユーザーにはみえる ) ケースももちろんあります。 もメッセージを出さすに接続もしてくれない ( とすくなく ことがあります。この FTP サー ーは親切な例で、何 というメッセージが表示され、コネクションを切られた ね " 、、いまはたくさんの人がログインしているから、また今度 「こっちでは接続できるし、読めるよ」 UNIX MAGAZINE 2000.3 バーだと、プロセス数をみれは分かるけどね」 「コネクションごとにプロセスが f 。 rk されて増えるサー ないすれは調べられるんや ? 」 「ところで、コネクション数を疑ごうてみるにしても、ど 集中していました。 機に対して、一日判勺に 500 コネクションを超える接続が に 100 コネクション程度を提供できる予定だったサー という事態になりました。このときは、謌・ヾてみると同時 「うーん、でも、このサーバーはそのパターンとちゃい まっせ。接続してもプロセスはべつに増えよらんで」 「それなら仕方ない。もうすこし難しい道具を使いましよ」 netstat コマンド netstat は、使い方がそこそこ面倒で、表示された内容 を読み取るのがもっと面倒なコマンドですが、ネットワー クの状態に関するさまざまな情報を提供してくれます。 たとえは、ある言 t 算機のネットワーク・インターフェイ ス名、 ・ eth0 ・ ie0 ・ le0 などを知りたいときには、 netstat ー i " コマンドで簡単 に詩ヾられます ( 図 1 ) 。 図の、、 Name " の欄がインターフェイス名です。これは netstat -i" の本来の使い方からすれ ( 訝に道ですが、上交 的簡単な調べ方です。 なお、インターフェイス名を調べる際の王道は、 if- config コマンドです。図 2 のように実行すると、すべ てのインターフェイス名を表示します。 話か横道に逸れました。ます、当初の目的の接続数を調 べる方法を説明し、続けて netstat コマンドからさまざま な↑帯長を引き出してみます。 接続数を調べる netstat -a" コマンドは、 netstat カ甘巴握しているすべ てのネットワーク情報を表示します。さまざまなサービ 91
連載 / 遠隔オフィスとの接続ー② 図 4 POP3 の ( 抜粋 ) Swind Send-Q Rwind Recv—Q $ netstat —a TCP Loca1 Address *. pop3 す。また、 dukekun. pop3 dukekun. pop3 * ・ pop3 Remot e Addre s s host17.4446 host18. 1896 0 8228 8589 0 0 0 0 8760 8760 State 0 LISTEN 0 TIME_WAIT 0 ESTABLISHED は、 100 インターフェイスの SMTP ポートを表していま UNIX MAGAZINE 2000.3 絖態です。 1 C のプログラムでいえば、 listen() システムコールて寸Æを侍っている ・一側とは異なり、特定の番号である必要はありません。通信 host17 と host18 のポート番号は、サーピスを提供するサー い番号になっている理由が分からないかもしれません。図 4 の 17 や h 。 st18 のポート番号が、 pop3 のポートでもなんでもな ソケット通信のフログラムを書いたことがない方は、 host とになります。 4 の例の場合、 POP3 サーバーへの接続数は 2 というこ 接続中 (ESTABLISHED) の状態です。したがって、図 トを介して dukekun の POP3 サーバーに接続しており、 る (TIME-WAIT) 状態です。 host17 は 4446 番のポー POP3 サー ーに接続しており、接続の終了を待ってい host18 は 1896 番のポートを経由して dukekun の ントのホスト名とポート番号カ俵示されます。 の 2 行のように、 Remote Address に接続したクライア Local Address が、、 dukekun. pop3" となっている図 4 pop3 のポートに対してクライアントが接続すると、 場合、つねにこの行か表示されます。 す。サーバーが TCP/IP の特定のポートて起動している ートて新たな接続を待ち受けている状態 1 を意味していま となっています。これは、 POP3 サーバーが p 。 p3 のポ LISTEN は Local Address が、、 *. pop3 の行の State の表示は、 で、 POP3 窈妾続は TCP のパートに現れます。図 4 で POP3 はプロトコルとして TCP/IP を使っているの ポートを表しています。 は、すべてのインターフェイス (100 と hme0) の POP3 のためにとにかくボートがあればよいので、通常は自動的に割 り当てられたポート番号を利用します。そのため、この例のよ うに不統一な番号になります。 netstat ー a " か表示するリストがあまり長くなく、かと コマンドを実行して pop3 に関係する行だけ抜き出せはよ いって目で 1 行すっ追えるはどの量ではない場合は、次の $ netstat —a ー grep —i pop3 いでしよう。 * ・ pop3 dukekun ・ pop3 dukekun. pop3 host18. 1896 host17.4446 ただし、サービスとして登録されていないサーピスの場 合は、 $ netstat —a ー grep —i Set cen€「 07 e は利用できませんし、 $ netstat —a ー grep P07 、 t ル社 mber ドを実行した例を示します。 Linux の場合には、 UDP と って異なります。図 5 に Linux で netstat ー a " コマン netstat コマンドの実行結果の表示は、 OS の不頁によ Linux の netstat い では期待どおりの結果は得られないので注意してくださ TCP の情報は一括して表示さ A. ctive lllternet connections " の行から始ま る TCP と UDP コネクションに関する情報 Active UNIX domain sockets " の行から始 まる UNIX ドメインのコネクションに関する情報 の 2 つのパートに分かれています。なお、最初のパートに は、 ICMP (lnternet ControI Message Protocol) の ような IP の清報も含まれています。 93
連載 / 遠隔オフィスとの接続ー② 図 7 netstat —r コマンドの実行結果 $ netstat —r Routing Tab1e : Destination default localhost cafeshop backbone 200 BASE—ADDRESS . MCAST . NET dukekun Gateway pengt-lln dukekun cafe localhost F1ags UG UG Re f 0 8 8 8 Use 16172 31239 51727 0 0 261020 8 523123 lnterface hme0 hmel hme 0 100 hme0 ところが、ルーティンク 1 青報の初期設定を調べても不審 器のトラブルなどを疑ってみるのがよいでしよう。 、、 C 。Ⅲ s " はコリジョンの発生回数を示します。図 6 の例 の、、 hme() " ではコリジョンが 1 % 以下なので、ネットワー クの通信は良好な状態です。しかし、 hmel にはかなりの コリジョンが発生しています。コリジョン数を発信バケッ ト数て割ってコリジョン率を求めると、 8 , 299 , 323 十 73 , 492 , 712 # 11.3 % です。 どのようなネットワークにどのような機器て接続してい るかにもよりますが、コリジョン自体は lerrs や Oerrs にくらべるとそれなりに発生します。目の届くところにコ リジョン・インジケータ付きのハプを置いている方は、コ リジョンランプがそこそこ頻繁に光るのを見たことがある かもしれません。 コリジョンの割合は、 1 % 程度なら気にすることはない と思いますが、 5 ~ 6 % を超えるようならすこし注意した ほうがよいでしよう。ー朝己の例のように 10 % を超える場 合には、ネットワーク・トラブルや、ネットワーク構成に 問題がある可能性を疑うことをお勧めします。 ネットワーク機器も正常なのに、なぜカ畤定のネットワー めったにないトラブルですか、 バケットの配送誤り 、、ネットワークの状態も UNIX MAGAZIN E 2000.3 になっているようです。 ルーティング情報か誤っていて、リプライバケットが迷子 いません。どうも、バケットが充れる道筋 ( 経路 ) を表す サーバーカすリプライバケットはクライアントへ届いて リクエスト・バケットはサーバーへ届いているのですが、 ネットワークをモニターすると、クライアントからの ります。 クからの接続だけが失敗する " という状態になることがあ な点はみつかりません。おそらく、自重加勺に学習した情報 に間題があって、誤ったルーティンク 3 青報を記億してし まったのでしよう。 言 t 算機に蓄えられているルーティング情報を調べるに ー r " オフションを指定して実行 は、 netstat コマンドに などの情報カ俵示されます。 ・使用するインターフェイス ・目的の宛先へ到達するために通るゲートウェイ・ホスト ・バケットの宛先のホストまたはネットワーク します。 95 レクトリが同しパーティションに同居しています。これが solaris の標準の設正では、スワップ領域と /tmp ディ スワップの罠 とポート番号で表示されます。 した場合の例です。ホスト名とサーピス名が IP アドレス 表示した例です。また、図 9 は、、一 n " オプションを指定 図 8 は、、、 netstat -P tcp" で TCP に関する情報を ださい。 netstat コマンドをン n " オフションとともに実行してく ていましたが、 IP アドレスで表示することもできます。 こまでの netstat コマンドの例はホスト名で表示し ネットワーク・アドレスで表示 す。 lnterface " は使用するインターフェイスを示していま way " は宛先へ送るためのゲートウェイです。そして、 Destination" はノヾケットの宛先のアドレス、、、 Gate- 図 7 は、 SoIaris 7 で、、 netstat —r" を実行した例です。
連載 / 遠隔オフィスとの接続ー② 図 3 netstat —a コマンドの実行結果 (SoIaris 7 ) Swind Send—Q Rwind Recv—Q $ netstat —a UDP Loca1 Address * . name * . lockd * . route TCP Loca1 Address ・ pop3 * ・ pop3 * . telnet * . ftp dukekun ・ pop3 dukekun Remote Address Remote Address State ldle Unbound ldle ldle 0 8589 8228 0 0 0 0 State host18. 1896 host17.4446 sockets Vno de -ord 300011a62a8 00000000 —ord —ord 00000000 —ord 3000667b928 0 0 0 0 0 0 0 0 0 0 0 8760 8760 0 IDLE 0 LISTEN 0 LISTEN 0 LISTEN 0 TIME_WAIT 0 ESTABLISHED IDLE 0 0 Remote Addr Active UNIX Address 3000187a338 3000187a1a0 3000187aCC8 3000187b988 domalll Type stream stream stream stream Conn Loca1 Addr 00000000 /tmp/. ki2-unix/host13-O—ja-JP 00000000 /tmp/jd_sockV6 300013b62d0 00000000 /dev/kkcv /tmp/jd—sockV6 スか動いている場合にはかなり長いリストが表示されます が、そのなかには、 ・特定のサーピス ( ポート ) に対して ・どのホストから接続されており ・その接続がどのような状態にあるか という情報が含まれています。これをみれは、あるサービ スにどれだけのクライアントカ材妾続しているかを調べるこ 、 TCP " の行から始まる TCP コネクションに関する 、、 UDP " の行から始まる UDP コネクションに関する 実行した場合の表示列です。本は、 図 3 は、 SoIaris 7 (SoIaris 2.7 ) で、 netstat —a" を まずは実行結果を見てみましよう。 とができます。 UNIX ドメインのコネクションに関する情報 Active UNIX domain sockets" の行から始まる 92 の 3 つのパートに分かれていて、それぞれのプロトコルご とにアクテイプな接続の状態を表示しています。 例として、メールをサーバーから読み取る POP3 プロ トコルについて、接続数を数えてみましよう。 TCP のノヾートの Local Address ・と Remote Address" は、計算機のどのポートがリモートホストの どのポートと接続しているかを表します。また State の部分を見れは、接続の状態が分かります。これらの情報 から、 POP3 サーピスへの接続数を調べることができま す。 Local Address と Remote Address は、接続してい るインターフェイスに対応するホスト名とポート番号の組 合て表します。たとえは、 netstat を実行する計算機の、 loO インターフェイスに対応するホスト名は localhost hme() インターフェイスに対応するホスト名は dukekun だとします。このとき、 localhost. smtp UNIX MAGAZINE 2000.3
図 8 netstat —P tcp TCP Loca1 Address localhost . 10051 localhost . 10067 localhost . 10069 dukekun . nfsd dukekun . netbios—ssn dukekun. telnet 図 9 netstat —P tcp ーⅡコマンドの実行結果 TCP Loca1 Address 10Ca1 ost .7939 localhost .7939 localhost .7939 Remote Address Remote Address host14. 1803 host35. 1037 penguin. 955 連載 / 遠隔オフィスとの接続ー② Swind Send-Q Rwind Recv-Q Swind Send—Q Rwind Recv—Q コマンドの実行結果 State 127.0.0. 1 .10051 127.0.0. 1 . 10067 127.0.0. 1 . 10069 172. 16 . 1 . 1 .2049 172. 16 . 1 . 1 . 139 172. 16 . 1 . 1 .23 127.0.0. 1 .7939 127.0.0. 1 .7939 127.0.0. 1 .7939 172. 16 . 3 . 1 .955 172. 16 . 1 .35.1037 172. 16 . 1 . 14.1803 32768 32768 32768 8167 8401 8760 32768 32768 32768 8167 8401 8760 0 32768 0 32768 0 32768 8760 8760 9112 0 0 0 0 0 0 9112 8760 8760 0 32768 0 32768 0 32768 0 ESTABLISHED 0 ESTABLISHED 0 ESTABLISHED 0 ESTABLISHED 0 ESTABLISHED 0 ESTABLISHED State 0 ESTABLISHED 0 ESTABL I SHED 0 ESTABLISHED 0 ESTABLISHED 0 ESTABL I SHED 0 ESTABL I SHED トラブルの原因となることもあります。もっと正直に言え トラブルを起こしたことがあります。 めたメモリ領域全体か不足してしまい、新たなプロセスが あまりに巨大なファイルを置いたために、スワップを含 たら、スワッフ。領域が足りなくなるやん」 「あはなことしても一た。 /tmp にこんなでつかいの置い りました。 すがに変です。ェラーメッセージを見て、ハタと思いあた きないのはともかく、 ps コマンドが実行できないのはさ 、新しく口グインで いだと信していました。しかし・・ ないのは、ファイルの書込みで計算機か遅くなっているせ そも間違いでした。実行したコマンドがなかなか戻ってこ ルの保易所として、なにげなく /tmp を使ったのがそも バックアップ・テープからリストアした巨大なファイ 起動できなくなったのでした。 い実行できません。たまたま言算機のコンソールに向かっ し、 Web サーバーの接続にも失敗し、コマンドもいっさ もちろん、周囲では先騒ぎ。メールの酉当当こは失敗する ていた人は、 96 0 陥っていたとか・ というエラーメッセージがどんどん表示さパニックに 、、メモリか不足して、プロセスを実行できない " スワッフフく足といえは、 Windows のスワップもなかな UNIX MAGAZINE 2000.3 機能を以下にまとめておきます。 こまでに紹介した netstat コマンドのオプションと netstat のまとめ ファイルか 1 司居しているシステムにはとくに注意しましょ システム管理にかかわる皆さんは、スワップと普通の ったということもよくあります。 と呼び出されて調べてみると、じつはディスク容量不足だ ているんしゃないでしようか ? 」 「ときどきプログラムか落ちるんです。私の PC は壊れ ったり、実行中のプログラムが異常終了したりします。 も ) メモリ不足になり、アプリケーションを起動できなか プに十分な領域か確保できません。結果として、 ( ここで ところが、ディスク領域の残り容量が少ないと、スワッ います。 必要に応じてある程度自重加勺に増えるような状態になって す。スワッフ。領域のサイズは設定にもよりますが、通常は テム上の凾のファイルにスワッフ領域カ蔀寉保されていま ものも残っています。 Windows の場合は、ファイルシス なりましたが、すこし旧めの PC では IGB や 2GB の か曲者です。山も丘は 6GB 以 - ヒのハードディスクか主流に
連載 / 遠隔オフィスとの接続ー② 図 5 netstat —a コマンドの実彳テ結果 (Linux) Active lnternet connections (servers and established) Loca1 Address Foreign Address Proto Recv-Q Send-Q 0 2 penguin: login dukekun : 1023 tcp 0 * : 7100 0 tcp 0 0 tcp * : WWW * :linuxconf 0 0 tcp 0 * : auth 0 tcp 0 * :finger 0 tcp 0 0 * : who udp 0 * : 1025 udp 0 0 0 udp * : snmp 0 0 penguin : ntp udp 0 10Ca1 五 ost :ntp udp 0 0 udp 0 * :ntp 0 0 * : icmp 0 0 * :tcp sockets (servers and established) Active UNIX domain Path Type State I—Node Proto RefCnt F1ags 450 @0000001e STREAM C ONNECTED 1 t1111X /tmp/. font—unix/fs7100 [ ACC 771 STREAM LISTENING 0 unxx @00000089 STREAM C ONNECTED 16360 1 unIX STREAM C ONNECTED 121 @00000012 0 u111X State ESTABLISHED LISTEN LISTEN LISTEN LISTEN LISTEN 7 7 netstat ー i " の実彳デ列 ( 2 ) 図 6 $ netstat —i Name Mtu Net/Dest 100 8232 loopback hme0 1500 backbone hmel 1600 cafeshop 各行の表示も SoIaris 7 の場合とは若十異なりますが、 ・ PrOtO ・ Local Address ・ Foreign Address ・ State lerrs Addr e s s lpkts 1206149 0 localhost dukekun 722558 0 cafe 94133420 4 Opkts COIIis Queue 1220619 0 0 0 589 ユ 0 846295 0 5 8299323 0 73492712 インターフェイス名を知る去として、、 netstat -i" を 紹介しましたが、このコマンドは通信工ラーやバケットの 衝突を調べるときに本領を発揮します ( 図 6 ) 。 図 6 の、、 lpkts" と、、 Opkts" は、それぞれ受信バケッ ト数と発信バケット数を示します。 lpkts と Opkts の値 は、トラフィックが少ないインターフェイスの場合は小さ く、トラフィックが多いものの場合は大きいので、この値 あたりの情報を見川ま、接続状態は分かるでしよう。 を見れはよく利用されているインターフェイス ( の先につ ミ甬イ言工ラー ? ながっているネットワーク ) が分かります。図 6 の例で は、、、 hmel" ( ホスト名、、 cafe") のインターフェイスの 接続数か制限内であっても、通信工ラーが発生していた 通信がもっとも多いことが分かります。 り、バケットのコリジョン ( 衝突 ) が多発して正常な通信 lerrs" と、、 Oerrs" はそれぞれ、入力工ラーと出力工ラ がおこなえないときには、、、なぜか接続できない " という ーの数を示します。正常に重川乍している場合、これらの値 現象が生しる可能性があります。通信工ラーは、ネット は送受信バケット数にくらべてきわめて小さい値 ( 0.1 % ワーク機器の拠章のはか、設定ミスなどで同じ IP アドレ 以 - ド ) になっているはすです。もし、気になるほど大きな スをもっ引機か 1 司しネットワーク内にあったときにも発 値を示すようなら、ハードウェアの嵂章やネットワーク機 生します。 94 UNIX MAGAZINE 2000.3
連載 / 遠隔オフィスとの接続ーの 工ラーか発生した場合のログ メール酉当工ラーは root ユーサーに通知されます。 ァイルのなかで root ューサーに置き換えられているので、 通常、 postmaster は sendmail が参照する aliases フ owner=postmaster ••sendmail [ 4607 ] : DAA04607 : clone DAA04606 , , ラーを postmaster に通知しようとします。 sendmail は子プロセスを起動して、メールの酉当の工 Us er unknown jp>, delay = 00 : 00 : 01 , mailer=local, stat==> to=NoSuchUser, ctladdr= く rudy@mydomain. CO. - かります。 (stat=User unknown) メール酉占に失敗したことが分 き換えて配送しようとしたが、ユーサーがみつからすに main. co. jp タ皀のメールは NOSuchUser ユーサーに書 8 行目の送信ログの後半部分を見ると、、、 rudy@mydo 7 行目の受信ログは 1 通目と同様てす。 に通知した例です。 ーがをし、それを postmaster ( 実際の受信者は root) 最後の 3 通目のメッセージの醪医ログは、酉占医中にエラ 10 11 ・ sendmail [ 4607 ] : DAA04607 : DSN : User unknown ・ sendmail [ 4607 ] : DAB04607 : DAB04607 : tO = て 00t , de1ay=OO: 00 : 00 , xdelay = 00 : 00 : 00 , - mai1er=10ca1 , stat=Sent sendmail [ 4607 ] : DAA04607 : 12 DAC04607 : 13 mai1er=10ca1, stat=Sent delay = 00 : 00 : 00 , xdelay = 00 : 00 : 00 , , ・ ・ sendmail [ 4607 ] : DAC04607 : t0 = て 00t , postmaster notify : User unknown ー通知メールが root 宛に発送されていることが分かりま この言当求から、 1 回の酉占工ラーに対して、 2 通のエラ 1. 単純なメールの酉占処理 して、 sendmail カ咄力するメール酉当ログの 3 大パターンと sendmail のログのまとめ す。 100 3. 工ラーが発生した際の処理 2. 複数のユーサーへの醋医とプログラムを起動ける処理 の例をとりあげて、解釈方法をかいつまんで説明しまし このはかにも、紹介したパターンとは多少異なるログが 出力される場合がありますが、次の 3 つのポイントを頼り に角斤してください。 1. 受信と送信はそれぞれ別の行として言求される。 2. 受信と送信はかならすしも連続して言当求されるわけでは 3. aliases ファイルや ~/. forward ファイルと見くらべる と解釈しやすい。 4. ログの各行の関連はキュー ID をもとにみつける。 ☆ 前半では、ネットワーク状態をヾるための netstat コ マンドを紹介しました。 netstat コマンドはさまざまな情 報を表示できますが、そのなかでもネットワークのトラブ ル・シューティングに役立ちそうなものを中心にとりあげ ました。 後半はメールの配送トラブルを調査する手段として、 sendmail の配送ログを解釈する方法を紹介しました。 sendmail は 1 通のメールに対して複数行のログを不連続 に出力しますし、メールアドレスの書換えや転送、エラー 時の通知メールなどがログファイルの解釈をさらに困難な ものにしています。キュ—ID を頼りに順番にログを追い UNIX MAGAZINE 2000.3 ( あらい・みちこ ASTEC) かけてみてください。