nslookup の TIPS
nslookupとは
DNSのトラブルシューティングコマンド
Windowsの実行ファイル名は、nslookup.exe
DNSサーバ側の設定状態の確認や、DNSクライアント側でのDNS関連設定の調査で用いる。
nslookupが必要な理由
Windows OSではデフォでDNS Clientサービスが動作しており、キャッシュ情報を検索したり、複数DNSサーバに問い合わせたり高度な処理を実施している。権威DNSサーバに登録された最新レコードと情報が食い違っている可能性がある。
だが、nslookupを使えば、DNSサーバを指定し、直接DNS要求を送信し、結果を得る事ができる。プライマリの他セカンダリDNSサーバや、キャッシュDNSサーバなど、色々なサーバを指定可能。それぞれからのDNS応答が正しいか検証できる。
nslookupの使い方
超基本は、引数にFQDN名を指定してnslookupを起動すること。
FQDNではなく、ホスト名を指定した場合は、現在のクライアント状況におけるデフォルトドメイン名が末尾に補足されDNS要求が行われる。
補足されるドメイン名は、DNSサフィックスの情報から取得。ipconfig /allで確認可能。
結果の先頭2行は、問合せ対象のDNSサーバ名とIPアドレスである。デフォでは、TCP/IPプロパティで設定されているDNS情報から取得される。複数定義の場合は、最初のDNSサーバ。
その後に、問合せ結果である、FQDN(問合せた名前の復唱)とIPアドレスが表示される。
もし、DNSサーバそのものが存在しない、または応答が得られなかった場合は、「*** UnKnown への要求がタイムアウトしました」といったエラーメッセージが表示される。
もし、問合せた名前が存在しない場合は、「*** server1.example.jp が pc99 を見つけられません: Non-existent domain」などと表示される。
DNS要求で、末尾にピリオドを付けた場合
例えば、nslookup pc01.example.jp. と最後にピリオドを付けた場合と付けない場合で結果は同じだが、途中の経過が異なる。
最後にピリオドがついてると、それはFQDNとみなされ自動的なドメイン名補完は行われない。
ピリオドが無いと、自動補完がされ、検索が行われる。それが失敗すると、デフォドメイン名を一つ分短くして、次々とテストされる。
nslookupで指定する名前 | 実際に問い合わせが試行されるFQDN |
---|---|
pc01 | (1) pc01.example.jp. |
pc01.example.jp | (1) pc01.example.jp.example.jp. (2) pc01.example.jp. |
pc01.example.jp. | (1) pc01.example.jp. |
nslookupに対する引数と検索されるFQDNの例
最後にピリオドが指定されていない場合は、(デフォルトのnslookupの検索設定では)デフォルトのドメイン名を補って検索し、失敗すると、デフォルトドメイン名を短くしながら、順番に名前解決を試行する。背景が黄色い部分が、自動的に補われる部分だ。なお、詳細は省略するが「pc01.example.jp.jp」は試行しない
nslookup に -debug (-d)を付けると上記の実際の動作を確認できる。
逆引きをする場合
逆引きとは、IPアドレスから名前を調べること
単に引数として、IPアドレスを指定すればOK。
DNSサーバに逆引きレコード(PTR)が存在しないと、逆引きは失敗する。
問合せ先のDNSサーバの指定
デフォルト以外のDNSサーバを利用するには、nslookup の引数の最後(第2引数)に、DNSサーバのFQDNもしくはIPアドレスを付加する。
例:nslookup pc01.example.jp 8.8.8.8
nslookup のオプション一覧の表示
まず引数を付けずに nslooupを実行。
対話モードに入るので、?を入力してEnter
DNSクライアント側のキャッシュ制御
Windowsでは、DNSクエリとその結果をクライアント側にキャッシュする機能(DNS Client)を持っている。
■キャッシュ内容の表示
DNSのクライアント側のキャッシュの内容を表示させるには、コマンド・プロンプト上で「ipconfig /displaydns」を実行する。これにより、現在DNSキャッシュに入っているDNSのクエリーの内容とその応答が表示される。1度キャッシュされた結果は、元のDNSレコードのTTL(Time To Live、生存時間)が有効な間、保持されている。
■キャッシュ内容の破棄
クライアント・キャッシュの内容は一時的に保持されているが、これが不要な場合(手動でDNSレコードを変更したので、強制的にキャッシュを更新させたい、という場合など)には、手動でキャッシュの内容をすべて破棄させることができる。このためには、コマンド・プロンプト上で「ipconfig /flushdns」を実行する。これにより、現在のDNSキャッシュの内容がすべて破棄される。
netstat をちゃんと使えるようになろうの回
netstat について、WindosOSでセッションが確認できる。。ぐらいの理解で止まっていたので、改めて学習しなおして、ちゃんと使えるようになろう!ということで、学習した内容を以下にまとめてく。
こういうやつって後回しにしがちなんですけど、後々使い方わからず困る事が明白なんですよね。。。
まず netstat とは
WindosOS標準のコマンド
実行ファイル名は、netstat.exe
ActiveなTCPコネクションの状態を表示できる
TCPの定義を振り返っておくと
2つのアプリケーション間で、信頼性のある通信路(コネクション)を開設し、お互いにデータ等をやり取りするための機能
netstatコマンドの引数について
・netstat のみ(引数無し)
TCPコネクションのみ表示、LISTENINGは表示無し
・-a 引数を付けた場合
UDPも表示。(※UDPにはコネクションの概念はない)
LISTENING(待受け状態のTCPポート)も表示
・-n 引数を付けた場合
IPアドレスとTCP/UDPポート番号が全て数値で表示。
-n 無しだと文字列で表示されてしまう。
※通常は -n付で、素早く表示させる。必要に応じて -n無しを利用する。-n無しだと名前解決処理(逆引き)をするので時間が掛かるが、通信相手が分かりやすい。
・-f 引数を付けた場合
リモートのコンピュータ名をFQDNで表示。
例えば、「a1234.sys.example.jp」というFQDN名を持つコンピュータと通信している場合、-fオプションがないと単にa1234としか表示されないが、-fを付けると完全なDNS名で表示される。表示が長くなって見づらくなるが、どのコンピュータと通信しているかが分かりやすくなる。
・-o 引数を付けた場合
そのコネクションを保有してるプロセスIDを表示。タスクマネージャからプロセス名の調査が可能。
-b 引数を付けると、実際のプロセス名が表示。
用途不明のTCP通信が行われたり、リッスン状態になってたりした場合に特定が可能。必要に応じて、FWでそのポートをブロックしたり、プログラム、サービスそのものを停止させ、セキュリティを確保する。
・数値を引数として付けた場合
その時間間隔(単位は秒)でnetstatを繰返し実行。定常的にモニターが可能。
LISTENING(待受け状態)の表示について
外部アドレスの
IPv4では、0.0.0.0 : 0
IPv6では、[ :: ] : 0
(※ [::] は、IPv6で全て0を表すアドレス表記)
IPv4では、0.0.0.0 : 135等
IPv6では、[ :: ] : 135等
UDPの場合、
状態表示は無し(TCPの場合は、LISTENING)
外部アドレスは、* : *
その他のマニアックなnetstatの使い方
使うことがあるかもなので、念のため下記しておく
・-s 引数 : 各種プロトコル別の統計情報
・-e 引数 :インターフェース送受信カウンタの表示
・-p 引数 :プロトコルを絞って表示可能。例えば、「-p ip」とか
「-p icmp」「-p tcp」「-p udp」などとする。
・-r 引数 :ルーティングテーブルを表示
DNSについて学習しなおしてみる
先日案件の中で、DNSについて触れる機会があったのだが、自身のDNSに対しての知識の無さに愕然としたので、DNSの基礎について以下にまとめたいと思うw
近いうちにDNSサーバの構築もやり方を調べてやってみる。
DNSとは
まず、DNSとは、IPアドレスとドメイン名を相互変換するアプリケーション層プロトコルである。
IPアドレスだけだと、数字の羅列で人間が記憶するには限界があるので、ドメイン名という形で人間にわかりやすい形で通信を行えるようにした仕組み。
まあ、DNSって何?と聞かれたら、
ドメイン名とIPアドレスを変換する仕組みと理解しておけば問題ない。
ドメイン名について
ドメイン名の構成を下記する。
www.example.co.jp.
www →ホスト名
example →第3レベルドメイン
co →第2レベルドメイン
jp →トップレベルドメイン(第1じゃないんかい。。。)
. →一番右のドットはルートを表し表記上は省略する
www がホスト名で、それ以降のラベルの集合体をドメイン名と呼ぶ
ホスト名+ドメイン名をドメイン名と呼ぶことが多いが、正式にはFQDN(完全修飾ドメイン名)と言う。
DNSが提供する2つの仕組み
名前解決 と ゾーン転送 の2つの仕組みを提供する。
名前解決は、その名の通り、IPアドレスとドメイン名の変換を行う仕組み。
権威サーバ、キャッシュサーバ、DNSクライアント の3つの要素が、相互連携することでこの仕組みは成り立っている。
権威サーバとは、自身のドメインの情報を保持しており、キャッシュサーバからの反復クエリを受け付け、最終的にIPアドレスを回答するサーバ。
キャッシュサーバとは、DNSクライアントからの再帰クエリを受け付け、インターネット上にある権威サーバに反復クエリを送信するサーバ。受け取ったDNS応答の結果を一定時間キャッシュし、再利用することでDNSトラフィックの抑制を図っている。
DNSクライアントは、DNSサーバに名前解決を要求をする端末のこと。
ブラウザ、メールソフト、Windows OS等がこれにあたる。こいつもDNS応答結果を一定時間キャッシュするので、DNSトラフィックの抑制を図ることができている。
ドメイン名の構造
ルートをトップとして、ツリー上の階層構造になっている。
名前解決は上から問合せていくことで、最終的な権威サーバに到達できるようになっている。このドメインの構成をドメインツリーという。
名前解決は失敗すると、Webアクセスやメール送信ができなくなるため、基本、冗長構成にする。
キャッシュサーバと権限サーバで冗長方式が異なるため、それぞれ説明を下記する。
キャッシュサーバ冗長は、クライアント側で複数DNS要求先を設定するだけ。
キャッシュサーバはDNS応答結果をキャッシュしているだけなので、サーバ間同期は不要。
権威サーバ冗長は、サーバ間で同じゾーン情報を常に保持する必要があるため、ゾーン情報を同期する処理を行う必要があり、それをゾーン転送という。
ゾーン転送周知はスケジューリングと手動の2パターンが可能。
上位DNSサーバ(ISPのDNSサーバになる)は、プライマリ、セカンダリ両方のDNSサーバ情報を登録しておく必要があり、どちらに名前解決要求を送っても同じ結果が返ってくるようにする必要がある。
■DNSパケットのポート番号
名前解決では、UDP53ポートを使用
ゾーン転送では、TCP53ポートを使用する。
トランスポート層について
■トランスポート層とは
ネットワーク層(L3)の上で、アプリケーションデータを効率的に伝送する仕組みを提供する。
■具体的には・・・
・アプリケーションの通信制御
・アプリケーションの識別
の2つを行っている。
どんな通信制御を必要としているのかを、「TCP」か「UDP」のどちらかのプロトコルで表し、ヘッダを付与しネットワーク層に渡す。
どのサービスを使用したアプリケーションなのかはヘッダ内の「ポート番号」で表す。
即時性を求めるなら・・・UDP(VoIP、時刻同期、DNS、DHCP)
信頼性を求めるなら・・・TCP(メール、ファイル転送、Webブラウザ)
■UDP
・ほとんどIPを生で使うのと同じ
・到達保証、順序保証無し
#パケットロスを判定する方法が無いため、アプリケーション側で判定する必要がある。途中で経路が変わっても順序保証は無し。途中経路でパケットロスが発生しても再送要求はしない。
■TCP
・信頼性のある全二重のフロー制御付の通信路提供
・データの抜け重複、誤り無し
・到達順序の保証
#データ転送前にコネクションを張る必要がある。(最初にコストが掛かる)
コネクション接続時に、1往復のパケットのやり取り。終了時に2往復必要。
TCPのすごい機能
確認応答無しでパケットを連投する機能。
Window Size で指定した値分まで確認応答無しでパケットを連投可。
#Window Sizeを指定しないと無限に連投し続けて、受信側のバッファが溢れ機能停止を起こしてしまう。
Window を管理する為に各パケットにシーケンス番号を振る。
ACKが帰ってきたらWindowをずらす。
・TCP再送
再送タイマがタイムアウトしてもACKが帰ってこない場合にパケットを再送。
RTTを測定して、再送タイマは決まる。
RTT(Round Trip Time)とは、パケットが1往復する時間。伝送路の状況により変化。
初回はSYN/ACKでRTT測定。順次測っていき、RTTの平滑化を図っている。
複数のTCPバージョン
・TCP Tahoe
・TCP Reno
・TCP NewReno
どんどんVerUPしてる。
TCPに対する攻撃
・TCP SYN Attack(シーケンス番号同期、ハーフオープン)
・IP Spoofing(アドレス詐称、詐称は簡単(証明が無い))
上記二つを組み合わせて攻撃
・TCP SYN flooding Attack
SYNは送るが、ACKは送らない。
約3分でSYN_RCVD状態は解除されるが、それより早く次のAttckを行う。
サーバに多数のSYN_RCVD(コネクション)が生成。
➡ポート番号65365個分のコネクションを張り、新規コネクション不可。
メモリを使われて、システムクラッシュする。
#今はだいぶ対応策が取られているが、TCPの持っている本質的な問題。
■TCP/IP とは
インターネットプロトコルスイートとも呼ばれる。
World wide web と共にコンピュータネットワークに革命をもたらしたことがきっかけで世界標準的に利用されている通信プロトコル。
ネットワーク上のコンテンツを相互に閲覧するために規格化された仕組み。
Webやインターネットとよく表現される。
<TCPコネクション>
TCP通信でデータを送る前に作る、仮想的な通信路のこと
OSI参照モデルについて
■そもそもコンピュータネットワーキングとは
シンプルに言うと、、、
コンピュータはネットワークでつながれ、その間で様々な種類のデータ通信が行われている。はい、それだけ。
■だけど・・・
これを実現するには異種間のデータ通信を実現するための、ネットワーク構造の基本的な設計方針が決められている必要がある。
■そしてOSIができた。
1982年頃にメーカーごとに異なるネットワークアーキテクチャを1つに統一しようと、ISO(国際標準化機構)とITU(国際電気通信連合)によりOSI(Open Systems Interconnection:開放型システム間相互接続)と呼ばれるネットワーク標準規格の策定が始められ、このOSIで用いられる通信のモデルがOSI参照モデルとなる。
■OSI参照モデルとは
コンピュータネットワークに求められる機能(通信機能)を7階層の構造に分割し定義したもの
機器選定、スペックについて
■機種選定の主な要素
・使用する機能
・コスト
・接続数
・実績
「スループット」と「接続数」は絶対的な指標になる。
既存機器の置換の場合は、予めSNMPによりこの二つに関する値を取得しておき、機種選定に活用する。
スループット、接続数は平均値を参考にしても意味がない。ある一定期間のアクセスパターンを分析し、最も大きな値を使用して機種選定をする。
ネットワーク機器はサーバのようにスケールアップ、スケールアウトが難しいので、十分にゆとりを持った性能設計をする。
<スループット>
「アプリケーション(L7)が実際にデータを転送するときの速度」
アプリケーションに関する色々な処理遅延が含まれるので、規格上の理論値である伝送速度より必ず小さくなる。(スループット < 伝送速度)
<最大スループット>
「ネットワーク機器メーカが公表するビットロスなくデータ転送できる値」
機器によっては使用する機能によって最大スループットが低下する場合がある。
例:FWでIPS機能を有効にした時など
<接続数>
「どれくらいのコネクションを処理できるか」
FW、負荷分散装置の選定で重要
「新規接続数」と「同時接続数」の2種がある。
どちらの値を超えても、サービス遅延が発生する。
必要な接続数は最大ユーザ数と使用するアプリケーションにより異なる。
(HTTP=短い時間に大量のコネクションを張る)
(FTP=長い時間、少量のコネクションを張る)
<新規接続数(CPS)>
「1秒間にどれくらいのコネクションを処理できるか」
<同時接続数>
「同時にどれくらいのコネクションを保持できるか」
■コネクション と セッション
前提として、各プロトコルにより意味が異なるため一般的な違いは説明できないということを認識しておく。
TCPの場合
・TCPでは「コネクション」が定義される。TCPセッションという概念は存在しない。
・TCPコネクションは、TCP3wayHandshake から TCPFin もしくはTCP Resetまでが1コネクションとなる。
・TCPコネクションはホスト同士で確立するので、L3ネットワーク機器は関与しない。経路が変わってもコネクションは切れない。
HTTPの場合
コネクションもセッションも存在しない。ただし慣用的にクッキーによるセッションがHTTPセッションと呼ばれたりする。
FWの場合
「TCPコネクション」と「UDP/ICMPの往復通信」(PingやDNSのクエリ/レスポンス、NTPの往復通信等)を併せて「セッション」として定義している。
「TCPセッション」という言葉が誤用されるのは、このFW独自の数え方とごっちゃになっているから。(TCPセッションという概念は存在しない)