CTC 教育サービス
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes
こんにちは。加賀結衣(かが ゆい)と申します。
このコラムでは、株式会社リックテレコムの「Windows/Linuxのトラブル追跡実践ノウハウ」をもとに、私が実際にPCに触りながら学んだことをまとめていきます。
コラム内のページ表記は、この書籍のページを示します(Pはページです)。
日々発生するコンピュータのトラブルに対し、どのようなツールを使い、どのような情報を収集すればよいか知りたいと思われている初心者の方に、このコラムが少しでもお役に立てば嬉しいです。
前回から、第5章 「ネットワークのトラブルシューティング」を学んでおりますが、今回は、nslookupなど、ネットワーク設定を確認する方法を学びましょう。
---------------------------------------------------------------------
第5章 ネットワークのトラブルシューティング
5.2 ネットワーク設定の確認
5.2.1 名前解決の問題について(p.269)
5.2.2 ターゲットホストに接続してみる(p.272)
5.2.3 ターゲットホストのポートの状態を確認する(p.275)
5.2.4 ファイアウォールの状態を確認する(p.280)
----------------------------------------------------------------------
5.2 ネットワーク設定の確認
5.2.1 名前解決の問題について(p.269)
nslookup(エヌエスルックアップ)とは named server lookup の略で、DNSサーバの設定状態を確認したり、また、DNSを参照してドメイン名からIPアドレスを割り出したり、その逆を割り出したり(逆引き)することができるコマンドです。
どのDNSサーバに問い合わせるかを明示的に指定することができるため、ネットワーク通信でができない場合など、名前解決が正常に行われているかを確認したい場合に利用することで、問題解決に利用できます。
nslookupはUNIX系のOSで標準的に用いられますが、Windowsでも利用することができます。
なお、Linuxなどではdigやhostなど、より高機能のコマンドが用意されています。
nslookupは[nslookup ホスト名]という構文で、そのホスト名のPCをDNSサーバに問い合わせることができます。また、[nslookup IPアドレス]という構文で、IPアドレスから元のホスト名を調べることもできます。
さらに[nslookup ホスト名 DNSサーバのIPアドレス]という構文で指定のDNSサーバからそのホスト名のPCに関する名前解決に関する情報を確認することができます。
nslookupコマンドは、対話型で実行することもできます。
set type=AでAレコードを、set type=MXでMXレコードを、また、
set type=CNAMEでCNAMEレコードを問い合わせることができます。
なお、Linuxのdigコマンドでは、実際の設定データが加工されずにほぼそのまま出力されます。
digコマンドは、[dig @DNSサーバのIPアドレス ホスト名 レコード種別]という構文で指定したDNSサーバに対象のホスト名の対象レコードを問い合わせることができます。
nslookupの基本的な使い方(イントラネット編)
http://www.atmarkit.co.jp/ait/articles/0307/19/news003.html
digコマンド
http://itpro.nikkeibp.co.jp/article/COLUMN/20070701/276386/?rt=nocnt
・hostsファイル
hosts(ホスツ)ファイルとは、IPアドレスとホスト名の対応について記述したファイルを指します。
Windows OS では C:\Windows\System32\drivers\etc\hosts、Unix系 OSでは /etc/hostsがこのhostsファイルに該当します。
DNS設定は正しいのに通信が正常に行えない場合、まずはこのファイルの記述を確認してみましょう。
Linuxの名前解決に関するトラブルシューティングでは上記の/etc/hostsや/etc/nsswitch.conf、/etc/resolv.confファイルなどを確認します。
このうち、/etc/nsswitch.confは名前解決の参照順が記載され、/etc/resolv.confにはDNSサーバのアドレスが記述されていますので、これらを確認することで情報を集め切り分けを進めることができます。
5.2.2 ターゲットホストに接続してみる(p.272)
netcatコマンドは、Unix系OSのコマンドで、TCPパケットとUDPパケットの読み書きやローカルソースポートの指定など、さまざまな事象に利用できます。
通常、Webページをブラウザ上で表示するためにはブラウザとWebサーバ間でHTTPプロトコルを利用して情報のやりとりがされています。
そこで、例えば、[printf "HEAD / GTTO/1.0 \r\n\r\n" | netcat -v IPアドレス 80]と入力すると、対象のwebサーバに接続し、標準入力からHTTPリクエストを送ることで接続に問題がなければ HTTP/1.1 200 OK が返され、サーバからのレスポンスを確認することができます。
一方、Webサーバ側に問題があると、接続は完了してもHTTP/1.1 200 OK は返されないことになります。
また、サービスが起動していないなどの場合で、接続が拒否されると、HTTP/1.1 200 OK が返されないのみならず、Connection refusedが表示されます。
Connection time out が表示される場合は、タイムアウトで接続できないことが推察されます。
5.2.3 ターゲットホストのポートの状態を確認する(p.275)
Webサーバに接続できないなど、より踏み込んだ詳細な調査をしたい場合には、netcatやtcpdumpコマンドなどを実行してパケットを取得し、データを確認します。
パケットの取得方法については、次回5.3.1や5.3.2にて改めて取り扱います。
例えば、[netcat -v -z 接続先のIPアドレス ポート番号]という構文で80番ポートをターゲットとしてWebサーバとの通信を確認することができます。
また、tcpdumpコマンドでは-wオプションにて、キャプチャしたパケットをファイルに保存して調査に用いることができます。詳細はP.275以下をご参照ください。
5.2.4 ファイアウォールの状態を確認する(p.280)
netsh(ネットシェル)コマンドは、PCのネットワーク設定情報を書き換えるコマンドで、オプションによってファイアウォールの状態を確認することができます。
名前解決や経路の設定には問題がなく対象のホストにも通信ができるはずなのにネットワーク通信が正常に行えない場合には、ファイアウォールが原因で通信が遮断されていることがあるので、ファイアウォールの状態を確認してみましょう。
Windows ではadvfirewall show currentprofileオプションを利用することで、以下のように現在の状況を確認できます。
この、Firewall PolicyのBlockInboundとは、受信接続を拒否することを指し、また、AllowOutboundとは送信接続を許可することを意味します。
上記は既定の設定ですが、 [netsh advfirewall set currentprofile 設定したい受信接続動作、設定したい送信接続動作]の構文で、希望の設定に変更することができます。
(設定変更をするには管理者権限での実行が必要となります。)
変更後は再び、netsh advfirewall show currentprofile で設定変更が意図したものになったか確認しましょう。
また、Linuxでは、iptablesコマンドを利用します。
ここでは、[iptables -nL]オプションを利用してみましょう。
iptablesコマンドではーLもしくは --listオプションで、チェインのすべてのルールを一覧表示することができます。また、-nオプションでは、TCPポートやホスト名などの解決を抑制し、迅速に表示させることができます。
設定の変更は管理者権限で、iptables -Pオプションを利用してP.282の記載のように行うことができます。
How to use the "netsh advfirewall firewall" context instead of the "netsh firewall" context to control Windows Firewall behavior in Windows Server 2008 and in Windows Vista
https://support.microsoft.com/en-us/help/947709/how-to-use-the-netsh-advfirewall-firewall-context-instead-of-the-netsh
【iptables】パケットフィルタリングを設定する
http://itpro.nikkeibp.co.jp/article/COLUMN/20140512/556022/
★nslookupコマンドでは、DNSサーバの設定状態を確認したり、DNSを参照してドメイン名からIPアドレスを割り出したりすることができます。
また、Linuxではdigコマンドでより詳細な情報を表示させることができます。
★netsh(ネットシェル)コマンドは、PCのネットワーク設定情報を書き換えるコマンドですが、netsh advfirewall show currentprofile オプションでファイアウォールの設定を表示させることができます。
また、Linuxではiptablesコマンドで同様に表示が可能です。
なお、サーバ(OS)・ネットワーク分野における原因究明の仕方や切り分けなどを行う方法を基礎から学びたい方には、CTC教育サービスのオリジナルコースである
「システムトラブルシュート(ファーストステップ)」
「システムトラブルシュート(ネクストステップ)」がお勧めです。
詳細は、以下のリンクをご参照くださいませ。
http://www.school.ctc-g.co.jp/course/SSE01.html
http://www.school.ctc-g.co.jp/course/SSE02.html
最後まで読んでくださってどうもありがとうございました。次回もどうぞお楽しみに。
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes