インターネットのどっかのサーバから社内LANのDMZ領域にある


外向きDNSサーバに向かって、何やらtcpで接続中断してるよ。
ってエラーログを頻繁に吐いてる(´・ω・`)


と、そのDNSサーバの/var/log/messagesのerror文を監視してるスクリプトから報告があったので、


一応調べてみる事に。

このサーバではbindではDNS固有のログを記録せず、全部/var/log/messagesに吐くように設定して


あるので、 (どういう意図か知らんけど。普通そうなの?笑)

cat /var/log/messages | grep named | grep 当該時間

とかで、エラー吐いた時間あたりのログを見てみる。


すると、



月 日 時:分:秒 [サーバ名] named[pid]: dispatch: error: dispatch XxXXXXXXXX: shutting down due to TCP receive error: connection reset



なんじゃこりゃ(´・ω・`)




色々調べてみたり、ベンダーに聞いてみたりしたんだけど、


『TCPの接続に失敗したから、中断したよん。』ぐらいの事しかわからない。



ベンダー曰く、ネットワークにしろ相手側のサーバにしろ、考えられる原因が多岐に渡り、


切り分けは難しいだろうとの事。 まぁそうだろうね・・・



もちろん、自分のトコのDNSサーバの設定に不備が無い事が前提で。

いやいや、そこが一番不安なんだけどさwwwww





とまぁそんな事を上司に報告したら、
『とりあえず再発なければ様子見でいいけど、接続してきてる相手先だけは特定しておこう』

ってんで、当該DNSサーバのNICの53番ポートへの接続に対してtcpdumpを仕掛けておく事に。

# tcpdump dst port 53 -w [filename] &
(53番のプロトコル(DNS)使ってる通信をfilenameに記録してね。あと動かしっ放しにするからバックグラウンドでね。)



んー、こんなんでいいかにゃーと思ってしばらく放置。



一時間後。



とりあえず仕掛けたtcpdumpが正常にfileに記録されてるかなーと様子を見に行ったら、


ファイルがあるものの、容量が0バイト・・・

アルェー?(´・3・)



しょうがないからmanページを見て試行錯誤。

どうも、tcpdump



『オプションでインターフェースを指定しなかった場合、
有効設定になっているインターフェイスのうち、


一番最初のインターフェイスのみdumpを取得する』



っていう仕様になっているらしい。

ほほー


どれどれ。。。

# ifconfig -a

eth 0 がなんたら
eth 1 がかんたら
bond 0 がどうたらこうたら

・・・このサーバはNIC2枚でbondingしており、2つの物理IPアドレスを、


バーチャルIP1つでまとめてあるようです。


ふんふん


つまり、インターフェイスを指定してないから、どうやらeth0のdumpを取ろうとしちゃってたみたいだ。
bondingしてるって事は、このサーバ宛ての通信はバーチャルIPに向かって来てるわけだから、、、


tcpdump dst port 53 -i bond0 -w [filename] &
bond0のインターフェースの、53番ポートに向かってくるTCPの通信を取得してfilenameに書き込んでね。


 このプロセスはバックグラウンドでやってね)


としたら、おお、ちゃんと取れてる!!(*´Д`*)




晴れてtcpdumpを仕掛ける事に成功したわけですが、


数日間に渡ってあんなに頻繁に吐いてたエラーが


tcpdumpを仕掛けた途端にピタリと起こらなくなり、


結局、相手先のサーバを突き止める事は出来ませんでした



ってオチなんですけどね(´∀`)アハハン





へぇーと思ったらポチっとお願いします( ´∀`)つ → 人気ブログランキングへ

スタートメニュー→コマンドプロンプト→regeditと入力してレジストリエディタを開く


HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces


ここに16進数で{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}と書かれたものがいくつか見つかるので、色々クリックすると、ウィンドウの右側にIPアドレスやサブネットマスクなどのネットワークの設定が見つかる。


ここでリンクアップを確認したいNICのIPアドレスが記載されているのを発見したら、

その16進数をコピーする。


マイコンピュータを右クリック→管理で『コンピュータの管理』を開く


システムツール→イベントビューア→システム を開く


この状態で、[表示]→[検索]→さっきコピーした16進数のやつをペースト→検索


で、どんどん検索ボタンを押していくと、ソースTcpipで以下の説明を持つイベントが見つかる。



ネットワーク アダプタ \DEVICE\TCPIP_{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} がネットワークに接続されており、ネットワーク アダプタ上での通常の運用が開始されたことを、 システムが検出しました。

詳細な情報は、http://go.microsoft.com/fwlink/events.asp の [ヘルプとサポート センター] を参照してください。



この説明を持ったイベントの日時が、NICがリンクアップした時間です。

更に[検索]ボタンを押して行くことで、どんどん過去に遡れます。


これを使ってリンクアップ時間を調べる事になった経緯は、多分明日ぐらいに書きます(´∀`)




【2009/5/15追記】


というわけで上の経緯です。


何やら、設定した覚えのないNICのネットワーク設定のせいで、

通信が上手く行かず、バックアップのジョブが失敗する!!

っていうお客様の申告があり、設計ミスかとヒヤヒヤしたのですが(笑


実際に構築した人間に確認を取っても、そんな設定してないとのこと。


とりあえず、お客さんに、その設定で振られてるプライベートIPアドレスのセグメントは、

他で一切使ってない事は確認してもらったので、後は過去に遡ってリンクアップしてなければ、

それって使ってないから、NICを無効にしちゃおうかってなもんで、

イベントログを見て、リンクアップの有無を確認しました。


これは自分で、『多分こういう方法で調べられるんじゃね?』と思ったら出来ちゃったって事なので、

他にもっとスマートな方法があるんじゃないかと思います。

あ、今ネットワーク機器の方は管轄外なんで、スイッチのログ見ろってのはナシの方向で(´・ω・`)


他の確認方法があったら、是非どなたかご教示下さいませ m(_ _)m

筆者がLinuxの勉強を始める時に買った、通称あずき本と呼ばれるLPI試験対策テキスト


Linux教科書 LPICレベル1 第4版 (CD-ROM付)/リナックスアカデミー 中島 能和
¥3,990
Amazon.co.jp

とか


LPI認定試験LPICレベル1“101/102”リリース2新出題範囲対応最短合格テキスト&問題集/橋本 智裕
¥2,625
Amazon.co.jp

とか。



まぁ、どの本見ても、また、ググっても最初に出てくる

『サーバのホスト名を表示せよ』ってコマンドは、


hostname


と書いてあります。

っていうか実際LPICの試験にも問題として出ました。



この仕事に就いて間もない頃、稼動中のサーバ全部の

ホスト名をFQDNで調べて来いって先輩に言われまして、

 (例によってパラメータシートがない(笑))


ふーん、じゃあ


hostname -f  ※ホスト名をFQDNで表示してね


でいいかな。と思って、リモートでお客さんの稼動中の

サーバにログインして、調べる事にしました。


しかし、、、



# hostname 0f   ※ホスト名を『 0f 』に変更してね(ぇ


思いっきり打ち間違えた!!!!!!


しかもrootでログインしてたので・・・・


ホスト名が『 0f 』に変更されてしまいました・・・



お客様稼動中のメールサーバだったので、

めっさ青くなりましたよ(´∀`)アハハハ


まぁすぐに気づいて直したので、サービスへの

影響は無しで済んだから良かったものの。




--それ以来、ホスト名を確認する時は、必ず


uname -a #システムの情報を全て表示してね


を使うようになりましたとさ。




特に用もないのにrootでコマンド発行すんなとか、


uname使うの当たり前だろとか、


・・・今になって思えばツッコミどころ満載ですが。


こんな危ないコマンドを初心者向けのテキストで

教えるなって思いました(;´Д`)

【duコマンドのちょっと嬉しかった使い方】


du -h


これ便利です(´∀`)

カレントディレクトリから配下のディレクトリに向かって、

格ディレクトリの使用サイズを表示するコマンドです。


試しにルート( / )から打ってみると・・・・


[root@centos /]# du -h
8.0K ./mnt
8.0K ./tmp/.ICE-unix
12K ./tmp/.font-unix
12K ./tmp/ssh-Erlnih8314
1.1M ./tmp
36K ./usr/kerberos/man/man1
28K ./usr/kerberos/man/man5
72K ./usr/kerberos/man
32K ./usr/kerberos/share/examples/krb5
40K ./usr/kerberos/share/examples
16K ./usr/kerberos/share/gnats
64K ./usr/kerberos/share
144K ./usr/kerberos
15M ./usr/sbin
8.0K ./usr/games
8.0K ./usr/include/X11
76K ./usr/include/efi/protocol
56K ./usr/include/efi/ia32
468K ./usr/include/efi
596K ./usr/include
16K ./usr/X11R6/bin
24K ./usr/X11R6
24K ./usr/lib/dovecot/pop3
28K ./usr/lib/dovecot/lda
104K ./usr/lib/dovecot/imap

.

.

.


ズラーっと全部出てきちゃいます。

なので、ある程度ディレクトリを移動してからやりましょう。


ここで一工夫すると、更に便利なコマンドになります。



du -h | grep [0-9]G



こうすると、ディスクの容量がどこだかわからないけど圧迫されてる!

という時に、ギガ以上使用しているフォルダのみ、勝手に探しに行って

表示してくれます。


まぁ大抵、ディスクが圧迫される恐れのあるサーバだと、

cronで監視スクリプトなんかを動かして、どこのフォルダがいっぱいだよ

とか管理してるもんですけど、自力で探す時はオススメです(*´Д`*)

サーバー管理者になって一番多い悩みのタネが、
ログの肥大化によってディスク容量が足りなくなる事。


いや、構築時点での設計ミスなのはわかっているんです(笑)
でも既に前任構築者は退職しており、更にかなり大規模な
メールサーバなので、保守切れのリプレースを迎えるまでは
再構築もままならないのです(TへT;


果ては構築者が残したパラメーターシートも間違いだらけ・・・。
パーティションからネットワーク設計から、実際にトラブルが起こってから
初めて判明した設計ミスが数知れず。
そんな事ありますよね!?


あるあr・・・・ねーよwwwwww


まぁそう言わず。


とりあえず他人が構築したサーバで、どんなパーティションの切り方してて、
今どれだけディスクが使われているか。


とりあえず確認してみようってな時に使うのはdfやduだと思いますが、

オプションやパイプを使う事で格段に見やすくなります。


筆者の練習用のCentOSで色々試してみました。



【dfコマンド】

①ただdfコマンドを打った場合

[root@centos ~]# df
Filesystem 1K-ブロック 使用 使用可 使用% マウント位置
/dev/mapper/VolGroup00-LogVol00
15616984 930940 13879952 7% /
/dev/hda1 101086 11819 84048 13% /boot
tmpfs 127796 0 127796 0% /dev/shm


・・・dfコマンドはデフォルトでは容量をキロバイトで表示するようです。

  とりあえずパーティションの分け方はわかったけど、容量などが見づらい・・・



②df -m と打った場合
[root@centos ~]# df -m
Filesystem 1M-ブロック 使用 使用可 使用% マウント位置
/dev/mapper/VolGroup00-LogVol00
15251 910 13555 7% /
/dev/hda1 99 12 83 13% /boot
tmpfs 125 0 125 0% /dev/shm

・・・df -m と打つと、容量の表示がメガ単位になります。

  ちょっとすっきりしました。



③df -h と打った場合
[root@centos ~]# df -h
Filesystem サイズ 使用 残り 使用% マウント位置
/dev/mapper/VolGroup00-LogVol00
15G 910M 14G 7% /
/dev/hda1 99M 12M 83M 13% /boot
tmpfs 125M 0 125M 0% /dev/shm


・・・容量に合わせて、表示される単位を変えてくれました。

  これが一番見やすいのではないかと思います(*´Д`*)