IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

Windows/Linuxの実践トラブルシューティング

CTC 教育サービス

 [IT研修]注目キーワード   OpenStack  OpenFlow/SDN  情報セキュリティ  Python  システムトラブルシュート 

第17回 ネットワークのトラブルシューティング その5 (加賀結衣) 2017年12月

こんにちは。加賀結衣(かが ゆい)と申します。

このコラムでは、株式会社リックテレコムの「Windows/Linuxのトラブル追跡実践ノウハウ」をもとに、私が実際にPCに触りながら学んだことをまとめていきます。
コラム内のページ表記は、この書籍のページを示します(Pはページです)。
日々発生するコンピュータのトラブルに対し、どのようなツールを使い、どのような情報を収集すればよいか知りたいと思われている初心者の方に、このコラムが少しでもお役に立てば嬉しいです。

今回は、通信の制御について学びましょう。

---------------------------------------------------------------------

第5章 ネットワークのトラブルシューティング

5.4 通信の制御
 5.4.1 特定の通信データを破棄する(p.320)
 5.4.2 通信帯域を絞る(p.321)
 5.4.3 通信のリダイレクトを行う(p.326)
 5.4.4 SSHを使用して通信のトンネルを作る(p.328)
 5.4.5 LinuxからWindowsの共有フォルダにアクセスする(p.330)
 5.4.6 並列実行、ダウンロード速度などの条件を指定したWebからのファイルダウンロードを行う(p.332)
 5.4.7 Webサイトを検査する、情報を抽出する(p.334)

----------------------------------------------------------------------

 

5.4 通信の制御

 5.4.1 特定の通信データを破棄する(p.320)

あるサーバにプライマリサーバとセカンダリサーバがあり、あるマシンがそのサーバと通信をしてサービスを利用するとします。プライマリサーバがサービスダウンした際にセカンダリサーバに切り替わることが想定されているような場合、iptablesコマンドを利用して通信を意図的に破棄することで、実際にプライマリサーバをダウンさせることなく、疑似的にダウンしたような状況を作ることができます。

例えば、クライアントからの80番ポートへの接続を破棄させたいとします。

sudo iptables -t filter -A INPUT -p tcp --dport ポート番号 -j DROP

ここではiptablesコマンドを利用します。
iptablesコマンドに-Aをオプションをつけることで対象チェインに対してルールを追加することができます。

なお、iptableにはfilter、nat、mangleという3つのテーブルがあり、既定のテーブルはfilterテーブルであるため、テーブルを指定しない場合filterテーブルが使用されます。

どのテーブルを選択するかにより、どのルールが使えるかが変わり、このルールのことをチェインと呼びますが、filterテーブルにおいては、INPUT、OUTPUT、FORWARDの3つのチェインがあります。

また、natテーブルにおいては、PREROUTING、POSTROUTING、OUTPUTの3つのチェインが、mangleテーブルにおいては、PREROUTINGとOUTPUTの2チェインあります。

前記の実行例では上記のチェインのうちINPUTを選択しています。

また、iptablesコマンドでは-pでプロトコルを指定できます。
-p tcp、-p udp、-p icmpなどと指定できますが、今回の例ではtcpを指定しています。

また、--dportで宛先ポートを指定できますので、--dport 80 などと指定します。

オプション -j はルールに合致した場合の移動先をターゲットに指定しますが、-j DROPはDROPターゲット、つまり、該当するパケットを破棄することができます。

iptables -t filter -A INPUT -p tcp --dport 80 -j DROP としますと、TCPの宛先80番ポートであるパケットが破棄されます。

なお、-Dはdeleteを意味しますので、テストが終了したら、-D INPUT 1 でINPUTチェインの最初にあるルールを削除することができます。

[参考情報]
【iptables】パケットフィルタリングを設定する
http://itpro.nikkeibp.co.jp/article/COLUMN/20140512/556022/?rt=nocnt

 

 5.4.2 通信帯域を絞る(p.321)

ネットワークのスピードが十分でない環境で事象が発生する場合に、事象の詳細調査のためには事象の再現を試み、再現中の情報採取や解析をすることが有用なことがあります。
そのような場合、以下の方法で意図的に通信速度を低下させることが可能です。

■Windowsの場合

スタート - プログラムとファイルの検索に gpedit.mscと入力し表示されるgpedit.mscを選択し、Enterをクリックしてローカル グループ ポリシー エディターを開きます。
(ご利用のOSのエディションによっては既定で利用できない場合もあります。Professional、Enterprise等をご使用の場合には利用できます。)

fig01

ローカル グループ ポリシー エディターが開いたら、コンピューターの構成 - Windows の設定 ‐ ポリシーベースのQoSと展開し、ポリシーベースのQoSを選択し右クリックして[新規ポリシーの作成...]をクリックします。

fig02

QoSポリシーの作成画面が表示されますので、以下で任意のポリシー名を入力し、出力報告のスロットル率を指定することができます。この例では128KBpsを指定しています。

fig03

また、次の画面ではどのアプリケーションを対象にこのポリシーを適用するかや、IPアドレス、プロトコル、ポート番号などを指定することができます。

fig04

fig05

fig06

設定後、管理者権限でコマンドプロンプトを起動し、gpupdate /forceで設定を反映させます。

[参考情報]
サービスの品質 (QoS) の概要
https://technet.microsoft.com/ja-jp/library/hh831679.aspx

■Linuxの場合

Linuxではtcコマンド(traffic controlコマンド)を利用して送信方向の帯域制限を実現することができます。

例えば、sudo tc qdisc add dev eth0 root netem delay 300msといった形で遅延を定義することができます。

設定には、root権限が必要となります。
sudo tc qdisc del dev eth0 rootで設定を解除することができます。
また、sudo tc qdisc change dev eth0 root netem delay 500msでeth0を通るパケットの遅延を500msに変更することができたり、sudo tc qdisc change dev eth0 root netem delay 500ms 50msで500ms±50msの遅延に変更したりすることができます。

なお、本書では、以下の書式を利用しています。

sudo tc qdisc add dev デバイス名 root tbf rate 帯域幅 burst バースト値 limit 制限値

このバースト値を設定することで、たまっているトークン分のパケットについて連続して処理することができます。また、制限値は処理できる容量を超えたデータが到着した場合に処理待ちできる容量です。
いずれの値も、少しずつ変更して適切な値を確認して設定します。

[参考情報]
Linux TC (帯域制御、帯域保証) 設定ガイドライン
http://labs.gree.jp/blog/2014/10/11288/

よくわかるLinux帯域制限
http://labs.gree.jp/blog/2014/10/11266/

 

 5.4.3 通信のリダイレクトを行う(p.326)

iptablesコマンドのnatテーブルを利用すると、通信をリダイレクトすることが可能です。

natテーブルのチェインのうち、PREROUTING及びPOSTROUTINGを利用します。

 
sudo iptables -t nat PREROUTING -p tcp --dport ポート番号 -j DNAT --to-destination 宛先IPアドレス
sudo iptables -t nat POSTROUTING -p tcp --dport ポート番号 -j DNAT --to-source 送信元IPアドレス

詳細は、本書P.326 以降をご参照ください。

 

 5.4.4 SSHを使用して通信のトンネルを作る(p.328)

SSHコマンドを利用することで、SSHプロトコルを使用してリモート・ホストのコマンドを安全に実行することができます。

例えば、ファイアウオール等で、ネットワーク間の通信がポート22番しか許可されていないような場合に、このコマンドを利用して通信することが可能です。

sshで接続した先の任意のポートへのアクセスを、接続元のネットワークの任意のアドレス/ポートにリダイレクトする場合、-Rオプションを利用します。

sudo ssh -f -N -R 接続元アドレス:接続元ポート番号:接続先アドレス:接続先ポート番号 ユーザ名@sshサーバ

また、sshで接続した際の、接続元の任意のポートへのアクセスを、接続先のネットワークの任意のアドレス/ポートにリダイレクトする場合には、-Lオプションを利用します。

sudo ssh -f -N -L 接続元アドレス:接続元ポート番号:接続先アドレス:接続先ポート番号 ユーザ名@sshサーバ

[参考情報]
【 ssh 】 SSHでリモート・マシンのコマンドを実行する
http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230889/?rt=nocnt

 

今日のまとめ

★iptablesコマンドを利用することで、通信を意図的に破棄させたり、通信をリダイレクトしたりすることができます。

iptableにはfilter、nat、mangleという3つのテーブルがあり、どのテーブルを選択するかにより、どのルールが使えるかが変わります。
このルールのことをチェインと呼びます。

★Windowsでは、QoSポリシーを作成することで意図的に通信速度を低下させることができます。また、Linuxにて帯域制限を実現したい場合にはtcコマンドを利用することができます。

なお、サーバ(OS)・ネットワーク分野における原因究明の仕方や切り分けなどを行う方法を基礎から学びたい方には、CTC教育サービスのオリジナルコースである
「システムトラブルシュート(ファーストステップ)」
「システムトラブルシュート(ネクストステップ)」がお勧めです。

詳細は、以下のリンクをご参照くださいませ。
http://www.school.ctc-g.co.jp/course/SSE01.htmll
http://www.school.ctc-g.co.jp/course/SSE02.html

最後まで読んでくださってどうもありがとうございました。次回もどうぞお楽しみに。

 


 

 [IT研修]注目キーワード   OpenStack  OpenFlow/SDN  情報セキュリティ  Python  システムトラブルシュート