Lesson 11
ネットワークの管理をする
Lesson 11
Chapter 1
はじめに
Lesson 11
Chapter 2
ネットワーク構成の確認
このチャプターでは自身のコンピューターに接続されている機器の情報を参照したり、通信方式の設定を行うコマンドについて学習していきます。
ここで紹介するコマンドは以下の通りです。
- ifconfig
- iptables
それでは順番に学習していきましょう。
ifconfig(アイエフコンフィグ)
ifconfig
コマンドは、自身のコンピューターに接続されているネットワークインターフェース(ネットに繋がる機器)の情報を一覧で表示することが出来ます。
$ ifconfig
上記コマンドを実行すると以下のような結果が表示されます。
$ ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>
inet 127.0.0.1 netmask 0xff000000
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
nd6 options=201<PERFORMNUD,DAD>
stf0: flags=0 mtu 1280
en5: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether ac:de:48:00:11:22
inet6 fe80::aede:48ff:fe00:1122%en5 prefixlen 64 scopeid 0x4
nd6 options=201<PERFORMNUD,DAD>
media: autoselect (100baseTX <full-duplex>)
status: active
〜〜〜 以下省略 〜〜〜
出力結果を大まかに説明すると、lo0, stf0, en5
などがネットワークインターフェース名となり、
:(セミコロン)
で区切られた右側の情報が各インターフェースの概要や通信状態を表す情報となっています。
ネットワークインターフェースとは主に、有線,無線,Bluetooth(ブルートゥース)などで接続された機器を指します。
また、ネットワークインターフェースにはいくつか種類があり、インターフェース名の英字の部分(lo, enなど)で判断ができます。
代表的なネットワークインターフェース名は以下のものがあります。
インターフェース名 | 説明 |
---|---|
lo | 自身のコンピュータのIPアドレス(localhost) |
en | 無線LANや有線LAN機器(Ethernet) |
gif | IPv4とIPv6を繋ぐトンネルインターフェース(Generic tunnel interface) |
stf | IPv6からIPv4に変換(Six to Four) |
実際に表示されている情報には、インターフェース名の横に数字も表示されていますが、これは各インターフェースごとの接続した順番で決定されます。
また、以下のようにifconfig
コマンドにインターフェース名を直接指定することで、特定のインターフェースについての情報のみを表示することができます。
$ ifconfig [インターフェース名]
以下コマンドはen5
というインターフェースの情報取得の例です。
$ ifconfig en5
en5: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether ac:de:48:00:11:22
inet6 fe80::aede:48ff:fe00:1122%en5 prefixlen 64 scopeid 0x4
nd6 options=201<PERFORMNUD,DAD>
media: autoselect (100baseTX <full-duplex>)
status: active
また、オプションコマンドを使用することで、指定したインターフェースの各種設定値を変更することが出来ます。
オプション名 | 説明 | コマンド例 |
---|---|---|
up | インターフェースの起動(有効化) | $ ifconfig en5 up |
down | インターフェースの停止(無効化) | $ ifconfig en5 down |
add [IPアドレス] | IPv6の[IPアドレス]を追加 | $ ifconfig en5 add 1111:ad8:0:0:3456:: |
del [IPアドレス] | IPv6の[IPアドレス]を削除 | $ ifconfig en5 del 1111:ad8:0:0:3456:: |
これらのコマンドを使用し、自身のコンピュータに接続されているネットワークインターフェース機器の確認と管理をすることが出来るようになります。
iptables(アイピーテーブルズ)
パケットフィルタリングとは、コンピュータネットワークで、とある通信方法を特定のルールに基づいて遮断するものです。これは、コンピュータがインターネットに接続されている場合に、不要なトラフィックや危険なパケットを防ぐことができるため、セキュリティー上の役割を持っています。
パケットとは
パケットとはネットワーク上でデータ送信をする際に使用されるデータの単位です。 基本的にデータ送信をする際はデータを細かく分割して送受信しますが、その分割されたデータをパケットといいます。 パケットが持つ情報には、「送信元のアドレス」「送信先のアドレス」「データ本体」などが含まれます。
コマンドの基本的な使い方としては、以下のような形で実行します。
$ iptables -A [チェイン] -p [プロトコル] --dport [ポート番号] -j [ターゲット]
各項目について説明していきます。
チェイン
チェインはパケットの経路を表すもので、主に以下の3つがあります。
- INPUT(外部から入ってくるパケットを表す)
- OUTPUT(自身から送るパケットを表す)
- FORWARD(自身を経由するパケットを表す)
プロトコル
プロトコルは通信方式を表すもので、コンピュータでデータをやりとりするために定められた手順や規約などです。iptables
コマンドで使用されるプロトコルには以下のものがあります。
-
tcp(ティーシーピー)
tcp
はデータを送信する前に送信元と受信側のコネクション(接続)を確立します。その後データを分割して送信し、受信側で再構成することでデータの送信を保証します。 また、データを分割して送信するため、通信速度が少し遅くなるという欠点があります。 -
udp(ユーディーピー)
udp
はデータ送信前にコネクションを確立の必要がなく、データを分割せずにデータ送信を行うため通信速度が早い特徴があります。しかし、データの再送信などを 行わないためデータ送信の保証はありません。 -
icmp(アイシーエムピー)
icmp
は送信元と受信側の通信状態の制御や調査に関するデータをやりとりする際に使用されるものです。これにより受信側に障害が発生した際に、その状態を送信元で 知ることが出来ます。 -
all(オール)
上記のプロトコル全てが対象になります。
ポート番号
ポート番号は複数ある通信の中で、各通信を識別するための番号です。
標準的なものを例に上げると、Webページのデータをやり取りする際に使用されるHTTP
というプロトコルは80番ポートに割り振られています。
0番~65535番まで割り振る事が可能ですが、HTTPのように一般的に使用されるプロトコルなどには、既に標準のポート番号が割り振られていることがあります。
プロトコル | プロトコル / ポート番号 |
---|---|
HTTP | TCP / 80 |
HTTPS(SSL) | TCP / 443 |
POP3 | TCP / 110 |
IMAP | TCP / 143 |
SMTP | TCP / 25 |
FTP | TCP / 20, 21 |
SSH, SFTP | TCP / 22 |
上記の図では、右列も左列もプロトコルという表記になっていて少し分かりづらいと思いますので、もう少し詳しく説明していきます。
HTTP
を例に簡単に説明すると、HTTP
という通信方式で内部的に実際に使用しているプロトコルが
TCP
であるという事です。
ユーザーに近い上層階で使用されている"表向きのプロトコル"はHTTP
ですが、もう一段下の階層(内部)では
TCP
を使用して通信が行われています。
ターゲット
ターゲットは、これまでに指定した「チェイン」「プロトコル」「ポート番号」で決めた通信方式を実際にどうするかを指定します。
- ACCEPT(パケットを通す)
- DROP(パケットを破棄する)
- QUEUE(パケットをユーザ空間に渡す)
- RETURN(指定したチェインを辿ることを中断し、呼び出し元のチェインの次のルールから再開する)
ここまでの説明を踏まえて、以下のコマンドを見てみましょう。
$ iptables -A INPUT -p tcp --dport 443 -j ACCEPT
このコマンドから次のようなルールが読み取れます。
-A INPUT
は受信するパケットを指定し、-p tcp
は
TCP
というプロトコルを指定しています。また、ポート番号は
--dport 443
で 443番ポートを指定し、最終的にこれらの通信を
-j ACCEPT
で「許可」しています。
ちなみにTCPの443ポートというのは一般的にHTTPS(HTTPを暗号化した通信方式)のことを表します。
このようにiptables
コマンドを使用することで、自身のコンピュータに様々な通信ルールを設定出来るようになります。

Lesson 11
Chapter 3
ネットワーク通信と応答結果の出力
このチャプターでは実際にネットワーク通信を利用して、ネットワークの疎通を確認したり、通信相手の状態確認やデータの送受信を行うコマンドについて学習していきます。
ここで紹介するコマンドは以下の通りです。
- ping
- traceroute
- nc
- dig
- nslookup
- curl
- tcpdump
それでは順番に学習していきましょう。
ping(ピング)
ping
コマンドは指定した送信先とのネットワークが接続されているかどうかを確認するコマンドです。送信先の指定方法としては、IPアドレスやドメイン名を指定して確認ができます。
ドメインとは、英数字などで表記されるIPアドレスを分かりやすくするために付けた名前のようなものです。
インターネット上に存在するWebサイトのURLを見てみると、そのWebサイトで使用しているドメインを確認することが出来ます。(例:
GoogleホームページのURLはhttps://google.com
であり、ドメインはgoogle.com
となる)
それでは実際にping
コマンドの使い方を説明します。コマンドは以下の通りです。
$ ping [対象のIPアドレス]
$ ping [対象のドメイン]
試しにGoogleのドメインを指定して疎通確認をしてみると、以下のようにレスポンス(応答結果)が表示されます。
$ ping google.com
PING google.com (142.250.207.46): 56 data bytes
64 bytes from 142.250.207.46: icmp_seq=0 ttl=116 time=5.768 ms
64 bytes from 142.250.207.46: icmp_seq=1 ttl=116 time=13.649 ms
64 bytes from 142.250.207.46: icmp_seq=2 ttl=116 time=8.985 ms
〜 以下省略 〜
出力結果に記載されている項目には以下のものがあります。
項目名 | 説明 |
---|---|
time | 指定したアドレスにICMPエコーリクエストを送信し、応答を受け取るまでの時間 |
bytes | 送信されるデータの容量(バイト数) |
icmp_seq | 応答のあった通信の連番 |
ttl | そのパケットが経由できるルーターの最大数 |
ttl(Time To Live)
とはパケットのライフポイントの様なもので、ルーターを経由するごとに1ずつ減少する値です。つまり、そのパケットが経由できる最大のルーターの数を示しています。
これは、パケットがループ(ネットワーク上を永遠に移動)しないようにするために使用されます。もしも、送信したパケットが返ってくるまでにttl
の値が0になった場合は、送信元にエラーメッセージとしてttlが0になったことが知らされます。
以上がping
コマンドを使用した、ネットワーク接続確認方法になります。
traceroute(トレースルート)
traceroute
コマンドは、指定した送信先への通信経路を調査するコマンドで、ping
と同様に送信先をIPアドレスかドメイン名にて指定します。
$ traceroute [対象のIPアドレス]
$ traceroute [対象のドメイン]
実際の通信の中で送信先へ行くまでに経由するルーターやサーバーで応答があったIPアドレスを順番に表示します。
こちらも試しにgoogle.com
ドメインを指定して通信経路を見ていきます。実際のコマンドと実行結果は以下の通りです。
$ traceroute google.com
traceroute to google.com (142.251.42.174), 64 hops max, 52 byte packets
1 172.20.10.1 (172.20.10.1) 3.840 ms 3.995 ms 2.641 ms
2 * * *
3 10.60.84.121 (10.60.84.121) 59.509 ms 49.115 ms 43.133 ms
〜 途中省略 〜
16 64.233.175.11 (64.233.175.11) 46.181 ms 67.585 ms
nrt12s46-in-f14.1e100.net (142.251.42.174) 29.833 ms
パケットのデータサイズ(byte)や応答時間(ms)など、google.com
との通信の際に経由した機器のIPアドレスなどが順番に表示されています。
1番が自分のルーターを示すIPアドレスとなっており、一番最後の行に表示されているIPアドレスが、送信先として指定したgoogle.com
のIPアドレスとなります。
このようにしてネットワーク通信の際に、送信先に到達するまでに経由するルーターの情報を確認することが出来ます。
nc(ネットキャット)
nc
コマンドはコンピューターやネットワークを利用して、TCPやUDPを使ったデータ通信を行うためのコマンドです。
通常、Webサーバーにアクセスする際にはHTTPプロトコルを使用しますが、nc
コマンドを使用することでHTTPプロトコルを使わずに、Webサーバーにアクセスすることもできます。また、他のコンピューターやデバイス(機器)との通信を監視することもできます。
このコマンドは、データの送信側と受信側の両方がnc
コマンドを実行する必要があり、リクエスト受信側は-l
オプションと、通信を受け付けるポート番号を指定して実行することで、待機モードになります。
$ nc -l -p [ポート番号]
リクエスト送信側は接続先のIPアドレスとポート番号を指定します。
$ nc [対象のIPアドレス] [対象のポート番号]
これらのコマンドを送信側と受信側で実行することで、双方データ通信が可能になります。 まずは送信側が受信側に用意されているファイルを取得する流れを記述します。
【受信側】
$ nc -l [ポート番号] > [ファイルの保存先パス]
【送信側】
$ nc [対象のIPアドレス] [ポート番号]
これらのコマンドを使用して、どのような結果が得られるか確認してみましょう。
以下の条件で実際にnc
コマンドを使って通信をします。
- 受信側のIPアドレスは
localhost
(localhostの説明は後述します) - 受信側が開放するポート番号は
1234
- 送信するファイルは"Hello!"という文字が記述された
hello.txt
ファイル - 受信した内容は
output.txt
ファイルに出力(中身は空)
localhostについて
本来、2つの異なるコンピュータ間で使用されるnc
コマンドですが、今回のようなテストをする場合、ターミナルを複数立ち上げることで、自身のコンピュータのみで送信側と受信側を担うことが出来ます。
この場合、IPアドレスは自分自身を示すlocalhost
を使用することが出来ます。ここではテストのため、IPアドレスの箇所をlocalhost
と指定します。
1. 【受信側】ポートの開放と出力先を指定する。
$ nc -l 1234 > output.txt
2. 【送信側】hello.txtファイルを送信する。
$ nc localhost 1234
3. 【受信側】catコマンドを使用してoutput.txtの内容を出力する。
$ cat output.txt
Hello!
Hello!
というテキストが受け取れている事が確認できます。
このようにnc
コマンドを使用することで、手軽にデータ通信を行うことが出来るようになります。
dig(ドメインインフォメーショングロッパー)
dig
コマンドは、インターネット上に存在するドメイン名やIPアドレスを調べることができるコマンドです。
インターネット上には多くのドメイン名やIPアドレスが存在しており、それらの情報を管理するのがDNS(ドメインネームシステム)と呼ばれるものです。DNSはドメイン名とIPアドレスとドメイン名を紐付けるもので、その情報がDNSレコードに保持されています。
dig
コマンドは以下のように実行します。
$ dig [対象のドメイン名]
このコマンドを実行することで、対象のドメイン名に関連するDNSレコードを取得することができます。
google.com
を対象にIPアドレスを調べる場合は、以下のように実行します。
$ dig google.com
; > DiG 9.10.6 > google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER
dig
コマンドの結果は、
OPT PSEUDOSECTION
,QUESTION SECTION
,
ANSWER SECTION
など各セクションごとの応答結果が以降に表示されています。
出力結果を確認すると、google.com
のIPアドレスは
ANSWER SECTION
に表示されている
172.217.175.110
ということが確認できます。
nslookup(エヌエスルックアップ)
nslookup
コマンドは対象アドレスのDNSの構成やドメイン名、IPアドレスに関する情報をDNSサーバーから取得することができます。
dig
コマンドと同じようにDNSサーバーに問い合わせを行いますが、出力結果をより人間にとって理解しやすい形で表示することが出来るといった特徴があります。
nslookup
コマンドは以下のように実行します。
$ nslookup [対象のドメインなど]
こちらもgoogle.com
に向けてコマンドを実行してみます。
$ nslookup google.com
Server: 240d:1a:cd7:7d00:4a3e:5eff:feed:8090
Address: 240d:1a:cd7:7d00:4a3e:5eff:feed:8090#53
Non-authoritative answer:
Name: google.com
Address: 142.250.207.46
このように「google.com」というドメイン名は「142.250.207.46」というIPv4アドレスに紐付いているということが分かります。 また、
nslookup
コマンドはインタラクティブモードというものがあります。インタラクティブモードでは、コマンドプロンプト上で
nslookup
コマンドを追加のコマンドを入力しながら実行することで、情報を取得することができます。
試しに、インタラクティブモードを使用してgoogle.com
のAレコードを取得していきます。まずは
nslookup
のみで実行します。
$ nslookup
>
すると>
が表示され、入力待ち状態になっている事が確認できます。この状態で、取得する情報のタイプを入力・実行します。
$ nslookup
> set type=A
>
主なレコードタイプには以下のものがあります。
タイプ | 説明 |
---|---|
A(Address Record) | ドメイン名に対応するIPアドレスを示す |
PTR(Pointer Record) | IPアドレスに対応するドメイン名を示す |
MX(Mail Exchange Record) | メールの配信先となるサーバーのドメイン名やIPアドレスを示す |
CNAME(Canonical Name Record) | 他のドメイン名へのエイリアスを示します |
では、次の>
が表示されるので対象のドメインを入力・実行します。
$ nslookup
> set type=A
> google.com
Server: 2408:210:9728:7800:225:36ff:fec5:5ee4
Address: 2408:210:9728:7800:225:36ff:fec5:5ee4#53
Non-authoritative answer:
Name: google.com
Address: 172.217.161.78
このように必要な入力が実行されると、DNSサーバーから情報が返されます。
このチャプターでnslookup
コマンドを初めて学び、これから使用する際には是非、インタラクティブモードを使用して各入力値の意味などを理解しながら学習を進めてみましょう。
curl(カール)
curl
コマンドは、WebサイトやAPIなどのURLからデータを取得するために使用されるコマンドとして頻繁に使用されます。また、HTTPやHTTPSなどのプロトコルを使用してデータを転送することができます。
curl
コマンドは以下のように実行します。
$ curl [対象のURL]
こちらも試しにGoogleホームページのURLへリクエストを送ってみます。
$ curl https://www.google.com
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="ja">
<head><meta content="
〜 以下省略 〜
とても長い文字列がレスポンスとして返ってきましたが、これは実際にリクエストしたGoogleホームページのHTMLになります。 APIにリクエストを送った場合、そのAPIが持つ処理結果や特定のデータをレスポンスとして受け取ることが出来ます。 API(Application Programming Interface)とは、プログラムから別のプログラムやサービスにアクセスするためのインターフェイスのことです。APIを使用することで、第三者が提供している複数のプログラムやサービスを利用することができます。
例えば、Google MapsのAPIでは地図や位置情報を取得したり、YoutubeのAPIでは動画情報を取得したりすることができます。
また、HTTPリクエストにはメソッドと呼ばれる通信タイプが存在しますが、-X
オプションでメソッドを指定することが出来ます。各メソッドの役割は以下の通りです。
メソッド | 説明 |
---|---|
GET | サーバーからデータを取得する |
POST | サーバーにデータを送信する |
PUT | サーバーにデータを更新する |
DELETE | サーバーからデータを削除する |
先程のGoogleへの問い合わせでは、GETメソッドによってページのHTMLを取得しているため、-X
オプションを使用して厳密にメソッドを定義すると以下のようになります。
curl -X GET https://www.google.com
このコマンドでも、変わらずHTMLがレスポンスとして返っていることが確認できます。
このようにcurl
コマンドを使用することで、サーバーから特定のデータを取得したり、データ更新の要求などをすることが出来るようになります。
tcpdump(ティーシーピーダンプ)
tcpdump
コマンドはコンピューターやネットワークを利用して、ネットワークトラフィックを監視するためのコマンドです。
ネットワーク上で送信されているパケットを取得し、内容を表示することができます。
$ tcpdump [オプション]
主なオプションとしては以下のものがあります。
オプション | 説明 |
---|---|
-A | パケットの内容をASCIIコードで表示 |
-nn | ホスト名やポート番号を変換せずに表示 |
-w | 取得した結果をファイルに保存 |
-r | -w で出力したキャプチャ結果を読み込んで表示 |
-i | ネットワークインターフェースを指定してパケットを取得する |
以下コマンドはeth0
というインターフェースを対象に「22番ポート」を指定してパケットを監視をしています。
$ tcpdump -i eth0 port 22
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
23:10:50.112177 IP example.jp.ssh > hoge.com.62934: Flags [P.], seq 32718:72830, ack 3277,
win 2641, options [nop,nop,TS val 109623997 ecr 553388297], length 112
eht0
というネットワーク・インターフェースが22番ポート上で行っている、ネットワーク通信の情報(通信相手や時間など)を確認することが出来ます。
ここまでお疲れさまでした。以上がLinuxコマンドを使用した、ネットワーク構成の設定や確認、ネットワーク通信を利用した応答結果の確認やデータ送信の方法でした。 このレッスンで学んだ内容は主に、インフラ(サーバーの構成管理)などに使用されることが多いので、そちらに興味がある方はさらに知識を深めていきましょう。
