Linux Professional Institute Learning Logo.
main contentにスキップ
  • ホーム
    • 全てのリソース
    • LPI学習教材
    • コントリビューターになる
    • Publishing Partners
    • Publishing Partnerになる
    • About
    • FAQ
    • コントリビューター
    • Roadmap
    • 連絡先
  • LPI.org
4.4 レッスン 1
課題 1: Linuxコミュニティとオープンソースのキャリア
1.1 ポピュラーなOSとLinuxの発展
  • 1.1 レッスン 1
1.2 主なオープンソースのアプリケーション
  • 1.2 レッスン 1
1.3 オープンソースソフトウエアとライセンス
  • 1.3 レッスン 1
1.4 ICTスキルとLinuxでの作業
  • 1.4 レッスン 1
課題 2: Linuxシステムで自分の手法を見つける
2.1 コマンドラインの基本
  • 2.1 レッスン 1
  • 2.1 レッスン 2
2.2 コマンドラインのヘルプ機能の利用
  • 2.2 レッスン 1
2.3 ディレクトリの利用とファイルの一覧
  • 2.3 レッスン 1
  • 2.3 レッスン 2
2.4 ファイルの作成、移動と削除
  • 2.4 レッスン 1
課題 3: コマンドラインの力
3.1 コマンドラインでのファイル圧縮
  • 3.1 レッスン 1
3.2 ファイルの検索と展開
  • 3.2 レッスン 1
  • 3.2 レッスン 2
3.3 コマンドをスクリプトにする
  • 3.3 レッスン 1
  • 3.3 レッスン 2
課題 4: Linuxオペレーティングシステム
4.1 オペレーティングシステムの選択
  • 4.1 レッスン 1
4.2 コンピュータハードウエアの理解
  • 4.2 レッスン 1
4.3 データの保管場所
  • 4.3 レッスン 1
  • 4.3 レッスン 2
4.4 ネットワーク上のコンピュータ
  • 4.4 レッスン 1
課題 5: セキュリティとファイルパーミッション
5.1 セキュリティの基本と、ユーザタイプの確認
  • 5.1 レッスン 1
5.2 ユーザとグループの作成
  • 5.2 レッスン 1
5.3 ファイルのパーミッションと所有権の管理
  • 5.3 レッスン 1
5.4 特別なディレクトリとファイル
  • 5.4 レッスン 1
How to get certified
  1. 課題 4: Linuxオペレーティングシステム
  2. 4.4 ネットワーク上のコンピュータ
  3. 4.4 レッスン 1

4.4 レッスン 1

Certificate:

Linux Essentials

Version:

1.6

Topic:

4 Linuxオペレーティングシステム

Objective:

4.4 ネットワーク上のコンピュータ

Lesson:

1 of 1

はじめに

今日の世界では、コンピュータデバイスがネットワークを通してあらゆる種類の情報を交換しています。コンピュータネットワークの中心となる概念は、コンピュータデバイスと相手(ピア)との物理的な接続です。そのコネクションを リンク と呼び、2つのデバイス間の最も基本的な接続になります。リンクは、銅線、光ファイバー、無線、レーザーなど、さまざななメディアを介して確立されます。

コンピュータデバイスのインターフェイスがリンクを提供します。デバイスは複数のインターフェイスを持つことができるので、複数のリンクと接続できます。相互に直接接続したデバイスの一群によって、コンピュータ同士がリンクしてネットワークを形作ります。このようなネットワークが世界中にたくさんあります。リンク層のネットワーク範囲を超えて通信するためにはルーターを使用します。リンク層のネットワークを島と考えれば、ルーターは島々を繋ぐ橋に例えることができます。情報は橋を通って、別の島のデバイスに至ることができます。

このモデルは、ネットワークの階層構造に繋がりまります:

リンク層

直接接続しているデバイス間の通信を処理します、

ネットワーク層

個々のネットワークから外に出るための経路と、リンク層のネットワークを超えてデバイスに与えた一意のアドレスを処理します。

アプリケーション層

独立したプログラム同士が相互接続できるようにします。

最初に発明されたとき、コンピュータネットワークは電話と同様の回線交換を使用していました。つまり、2つのノードを間に専用の直接リンクを作り通信していたのです。この方法は上手く機能しましたが、たった2つのホストの通信で、リンクの全容量を使っていました。

やがて、コンピュータネットワークは パケットスイッチ と呼ばれる方法に移行しました。この方法では、どこからどこへ行く情報であるのかを示すヘッダーを使ってデータをグループ化します。データ本体はフレームに格納されて、フレームのヘッダが示す受信先にリンクを使って送られます。これにより、複数のデバイスが1つのリンクを共有して、ほぼ同時に通信できるようになりました。

リンク層のネットワーク

パケットの役割は、デバイス間を繋ぐリンクを通して、発信元から受信先にデータを運ぶことです。デバイス同士は相互に相手を識別する方法が必要で、そのために使用するのが リンク層アドレス (link layer address)です。Ethernet(イーサネット)では、それぞれのデバイスを識別するために 48ビットから成る MAC (Media Access Control)アドレスを使用します。それらは全世界で一意である必要はありませんし、リンクの外で通信相手を特定するために使用することもありません。つまり、リンク層アドレスを、他のリンクに宛てたパケットをルーティングするために使用することはできません。パケットの受信者は、宛先アドレスが自身のリンク層アドレスであることをチェックして、一致したときにのみパケットを処理し、一致しない場合はパケットを破棄します。ブロードキャスト パケット(ローカルネットワークすべてに送られるパケット)はこのルールの例外で、常に受け入れられます。

ip link show コマンドは、利用可能なネットワークインターフェイスとそのリンク層アドレス、最大パケットサイズなどの情報を表示します。

$ ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 00:0c:29:33:3b:25 brd ff:ff:ff:ff:ff:ff

上記の出力は、コンピュータデバイスが2つのインターフェイス lo と ens33 を持つことを示しています。lo は ループバックインターフェイス で MACアドレスは 00:00:00:00:00:00、ens33 は Ethernetインターフェイスで MACアドレスは 00:0c:29:33:3b:25 です。

IPv4 ネットワーク

Googleや Twitterなどの Webサイトにアクセスしたり、電子メールをチェックしたり、企業が相互に接続すると、パケットが1つのリンク層ネットワークから別のネットワークに旅をします。多くの場合、これらのネットワークは間接的に接続されていて、パケットが最終的な目的地に到着するためには、いくつものリンク層ネットワークを通過していかねばなりません。

ネットワークインターフェイスのリンク層アドレスは、そのネットワークの外では使えません。他のリンク層ネットワークに属するデバイスにとってこのこのアドレスは必要ないので、グローバルに一意のアドレス形式を使ってルーティングを行います。そのアドレス形式とルーティングの全体的な概念が、IP (Internet Protocol)によって実現されています。

Note

プロトコル とは、それに従う当事者が互いに共有する一連の手順で、多くの規格として定義されています。コンピュータの世界ではさまざまな製造メーカーによる製品が相互に通信できるように、全員が合意した規格です。

IPv4 アドレス

IPアドレスは(MACアドレスと同様に)データパケットがどこから来てどこに行くかを示す方法です。IPv4は(IPの)元のプロトコルです。IPv4アドレスは32ビットで、論理上は4,294,967,296個のアドレスが使えますが、一部の範囲はブロードキャスト(特定のネットワーク内の全ての受信者に届けられる)やマルチキャスト(ブロードキャストと同様だがラジオのように選局することが必要)、私的利用などのために特別に予約されているため、利用できるアドレスはずっと少なくなっています。

IPv4アドレスを表記するときは、ドットで区切った4つの数値を使います。それぞれの数値の範囲は、0から255です。いくつかを例示します:

192.168.0.1

これらの数値は、技術的には8つのビットを表しています。すなわち、上記のアドレスは次のようにも書けます:

11000000.10101000.00000000.00000001

実際には10進数表記が使われますが、サブネットを理解するためにはビット単位の表現も有用です。

IPv4のサブネット

ルーティングを行うために、IPアドレスをネットワーク部とホスト部の2つに分けて考えます。ネットワーク部は、デバイスが属するネットワークを識別するもので、パケットをそのネットワークに届けるルーティングに使用します。ホスト部は、あるネットワークにおけるデバイスを識別するもので、到着したリンク層ネットワークにおいて特定の受信者にパケットを引き渡すために使用します。

IPアドレスはいつでもサブネットとホスト部に分けられます。そこで、どこで分割するかを示すために サブネットマスク を使います。前述のIPアドレスの2進数表現を、再度見ていきましょう:

11000000.10101000.00000000.00000001

IPアドレスに対して、サブネットマスクではネットワーク部にあたるビットを 1 に、ホスト部にあたるビットを 0 にセットします。

11111111.11111111.11111111.00000000

実際には、ネットマスクも10進数表記します。

255.255.255.0

これは、ネットワークの範囲 192.168.0.0 から 192.168.0.255 を意味します。ネットマスクにおける先頭からの3つの数値は全てのビットが1ですが、IPアドレスに変更はありません。

サブネットマスクには、CIDR (Classless Inter-Domain Routing/サイダー)と呼ばれる別の表記方法もあります。この表記方法は、サブネットマスクに何ビットを使用するかを、IPアドレスの後に示すものです。例では 32ビットの内の24ビットを 1 にセットしていますから、CIDR表記では 192.168.0.1/24 となります。

プライベート IPv4アドレス

先に述べましたが、IPv4アドレス空間の一部は、特別な用途のために予約されています。その1つがプライベートアドレスで、以下のサブネットがそれに当たります:

  • 10.0.0.0/8

  • 172.16.0.0/12

  • 192.168.0.0/16

これらのサブネット内のアドレスは、誰でも使用することができます。その代わり、これらのサブネットは多くのネットワークで同時に使用される可能性があるので、公共のインターネット上ではルーティングされません。

今日、ほとんどのネットワークは内部アドレス(訳注: プライベートアドレスと同じ意味)を使用しています。これにより、外部アドレスを割り当てなくても、内部ネットワークでの通信が可能です。今日のインターネット接続では、1つの外部IPv4アドレスのみを使用します。ルーターは、パケットをインターネットに転送する際に、全ての内部アドレスをその1つの外部IPアドレスにマップします。これを NAT (Network Address Translation/ナット)と呼びます。NATの特別な場合として、ルーターが(複数かつ任意の)内部アドレスを1つの外部アドレスにマップすることを マスカレード (masquerade)と呼びます。この役割は、内部ネットワークのあらゆるデバイスが、インターネット上の任意のIPアドレスに接続できるようにすることです。

Note

マスカレードでは、内部デバイスはグローバルに有効なアドレスを持たないので、インターネット側からは見えません。ただし、これはセキュリティ機能ではありません。マスカレードを使用している場合でも、ファイアウォールは必要です。

IPv4アドレスの設定

コンピュータにIPv4アドレスを設定するには、主に2つの方法があります。アドレスを手作業で割り当てるか、DHCP (Dynamic Host Configuration Protocol/ディ・エイチ・シー・ピー)で自動割り当てを行うか、です。

DHCPを使用すると、中央のサーバーがどのアドレスをどのデバイスに割り当てるかを制御します。サーバーは、DNSサーバーのIPアドレスやデフォルトのルーターのIPアドレスなど、ネットワークに関する他の情報をデバイスに提供したり、より複雑な設定によって、ネットワークからオペレーティングシステムを起動することもできます。多くのシステムではDHCPがデフォルトで有効になっていますから、ネットワークに接続したときにはすでにIPアドレスを持っている可能性が高いでしょう。

ip addr add コマンドを使って、インターフェイスに手動でIPアドレスを追加することもできます。ここでは、インターフェイス ens33 にアドレス 192.168.0.5 を割り当ててみましょう。ネットワークのネットマスクは 255.255.255.0 で、CIDR表記では /24 になります。

$ sudo ip addr add 192.168.0.5/255.255.255.0 dev ens33

続いて、ip addr show コマンドでアドレスが追加されたことを確認してみましょう。

$ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
25: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:33:3b:25 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.5/24 192.168.0.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::010c:29ff:fe33:3b25/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

上の実行例では lo インターフェイスと ens33 インターフェイスに、アドレスが割り当てられています。

デバイスへの到達性を確認するには ping コマンドを使います。これは エコー要求 (echo request)という特別な種類のメッセージを送り、送信者は受信者に応答を求めます。2つのデバイスのが接続に成功すると、受信者はエコー応答を返送して、接続を確認します。

$ ping -c 3 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=2.16 ms
64 bytes from 192.168.0.1: icmp_seq=2 ttl=64 time=1.85 ms
64 bytes from 192.168.0.1: icmp_seq=3 ttl=64 time=3.41 ms

--- 192.168.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 5ms
rtt min/avg/max/mdev = 1.849/2.473/3.410/0.674 ms

-c 3 パラメータは3つのエコー要求を送った後に ping を停止します。オプションを指定しないと、ping は永遠に実行を続けるので、 Ctrl+C を押して止める必要があります。

IPv4のルーティング

ルーティングとは、パケットが送信元のネットワークから宛先のネットワークに到達するまでのプロセスです。それぞれのデバイスはルーティングテーブルを維持していて、そこには、デバイスが接続しているリンク層のネットワーク経由で至ることができるIPネットワークと、ルーターにパケットを渡して中継して貰うことで至ることができるIPネットワークのリストが収められています。テーブルの最後には、デフォルトルート として、他のルートに一致しなかったパケットをすべて受け取るルーターが定義されています。

接続しようとするときに、デバイスは宛先のIPアドレスをルーティングテーブルで探します。アドレスが一致すれば、いずれかのリンク層ネットワーク、ないしはルーティングテーブルに掲載されているルーターに宛てて、パケットが送出されます。

ルーター自体もルーティングテーブルを維持しています。パケットを受け取ると、自分自身のルーティングテーブルから宛先アドレスを探し、パケットを次のルーターに送ります。パケットが宛先ネットワークのルーターに届くまで繰り返されます。このパケットの旅に関与するルーターそれぞれを ホップ (hop)と呼びます。最後のルーターは、ルーティングテーブルから宛先アドレスが直接接続されているリンクを見つけて、パケットをそのリンクのインターフェイスから送出するのです。

ほとんどのホームネットワークでは、ISP (internet service provider)から提供された1台のルーターしか出口がありません。この場合、デバイスは、直接接続されているネットワーク宛てではない全てのパケットをホームルーターに送信し、ホームルーターはそれをプロバイダのルーターにさらに転送します。これがデフォルトルートの例です。

ip route show コマンドは、現在のIPv4ルーティングテーブルを表示します:

$ ip route show
127.0.0.0/8 via 127.0.0.1 dev lo0
192.168.0.0/24 dev ens33 scope link

デフォルトルートを設定するには、デフォルトのゲートウェイとなるルーターのアドレスが必要です。例えば、ルーターのアドレスが 192.168.0.1 だとすると、以下のコマンドでデフォルトルートを設定します。

$ sudo ip route add default via 192.168.0.1

再度、ip route show を実行して確認しましょう:

$ ip route show
default via 192.168.0.1 dev ens33
127.0.0.0/8 via 127.0.0.1 dev lo0
192.168.0.0/24 dev ens33 scope link

IPv6ネットワーキング

IPv6は、IPv4の欠点、主にはオンラインになるデバイスの大幅な増加によるアドレス不足に対処できるように設計されました。さらに、自動ネットワーク設定のための新しいプロトコルなども含まれています。アドレスは32ビットではなく128ビットで、概ね 2128 ものアドレスが使えます。ただし、IPv4と同様に、他の用途に予約されている割り当て範囲があるため、グローバルに利用可能なパブリックアドレス数はかなり少なくなります。それでも、この膨大なアドレスは、現在インターネットに接続されているものだけでなく、将来の増加に対しても十分なものです。これにより、変換に伴う遅延や、インターネット側からマスカレードされたデバイスに接続できないという問題を含めて、マスカレードの必要性がほぼ無くなります。

IPv6アドレス

アドレスは、4桁の16進数のグループをコロンで区切った8つのグループで表記します:

2001:0db8:0000:abcd:0000:0000:0000:7334
Note

16進数の数字は 0 から f です。つまり、各桁に16の値があります。

表記を簡単にするため、グループ毎に先頭のゼロは省略できます。ただし、各グループは少なくとも1桁の数字が必要です:

2001:db8:0:abcd:0:0:0:7334

また、ゼロのグループが連続する場合には、そのグループ全体を :: で置き換えることができます:

2001:db8:0:abcd::7334

ただし、:: による置き換えは、アドレス毎に1回限りです。

IPv6プレフィックス

IPv6アドレスの前半64ビットを ルーティングプレフィックス (routing prefix)と呼び、ルーターがデバイスが属するネットワークを識別して送り先への経路を決定するために使われます。サブネット化はプレフィックス部のみを使って行われます。ISPは通常 /48 ないし /58 のプレフイックスを顧客に割り当て、残りの 16 ないし 8 ビットを内部のサブネットに使用します。

IPv6には主要なプレフィックスが3種類あります:

グローバル ユニーク アドレス(Global Unique Address)

グローバルアドレス用に予約されたブロックから割り当てられるプレフィックスです。

ユニーク ローカル アドレス(Unique Local Address)

インターネットではルーティングされませんが、組織内ではルーティングされるプレフィックスです。インターネットに接続していない場合であっても、デバイスがアドレスを保持できるようにします。IPv4におけるプライベートアドレス範囲に相当します。先頭の8ビットは fc ないし fd で、続く40ビットは乱数です。

リンクローカル アドレス(Link Local Address)

リンク内でのみ有効なプレフィックスです。全てのIPv6対応ネットワークインターフェイスは、fe80 で始まるこのようなアドレスを1つ持っています。これらのアドレスは、自動構成を使って追加のアドレスを要求したり、近隣探索プロトコル(Neighbor Discovery protocol)を使ってネットワーク内の他のコンピュータを見つけるために、IPv6が内部的に使用します。

IPv6 インターフェイス識別子

プレフィックスはデバイスがどのネットワークに属するかを示しますが、ネットワーク内のデバイスを列挙するためにインターフェイス識別子を使います。IPアドレスの後半64ビットが、IPv4アドレスの後半と同様の、インターフェイス識別子となります。

IPv6アドレスを手動で割り当てる場合は、インターフェイス識別子がアドレスの一部となります。アドレスの自動割り当てを使用すると、デバイス識別子は、乱数から選択されるか、デバイスのリンク層アドレスから導出されます。つまり、IPv6アドレスの中に、リンク層アドレスのバリエーションが含まれることがあります。

IPv6のアドレス設定

IPv4と同様に、IPv6もアドレスを手作業ないし自動的に割り当てられます。ただし、IPv6では自動構成に DHCPv6 と SLAAC (Stateless Address Autoconfiguration)の2種類があります。

SLAACは、2つの自動構成方法の中では簡単で、IPv6規格の中に含まれています。デバイスは、新しい 近隣探索プロトコル (Neighbor Discovery Protocol)のメッセージを使って、通信相手を見つけたり、ネットワークの情報を要求するメッセージを送ります。ネットワーク情報を返すのはルーターで、IPv6プレフィックスを含んでいます。デバイスはそのプレフィックスと自身が選択したインターフェイス識別子を組み合わせてアドレスを生成し、まだ未使用であればそのアドレスを使用します。なお、デバイスは選択した実際のアドレスをルーターにフィードバックすることは行いません(訳注: ステートレスの由来です)。

一方、DHCPv6は(IPv4の)DHCPをIPv6にあわせてアップデートしたものです。毎回同じアドレスを同じクライアントに渡したり、SLAACよりも多くのオプションをクライアントに送ることができるなど、クライアントに渡す情報をより細かく制御することができます。なお、クライアントはアドレスを使用するためにDHCPv6サーバーの明示的な許可を得る必要があります。

IPv6アドレスを手動でインターフェイスに割り当てる方法は、IPv4の場合と同じです。

$ sudo ip addr add 2001:db8:0:abcd:0:0:0:7334/64 dev ens33

割り当てがうまくいったことを確認するには、IPv4と同じく ip addr show コマンドをいます。

$ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
25: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:33:3b:25 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.5/24 192.168.0.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::010c:29ff:fe33:3b25/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
    inet6 2001:db8:0:abcd::7334/64 scope global
       valid_lft forever preferred_lft forever

実行例には、リンクローカルアドレス fe80::010c:29ff:fe33:3b25/64 も表示されています。

IPv4と同様に、ping コマンドで IPv6でのデバイス間の到達可能性を確認できます。

$ ping 2001:db8:0:abcd::1
PING 2001:db8:0:abcd::1(2001:db8:0:abcd::1) 56 data bytes
64 bytes from 2001:db8:0:abcd::1: icmp_seq=1 ttl=64 time=0.030 ms
64 bytes from 2001:db8:0:abcd::1: icmp_seq=2 ttl=64 time=0.040 ms
64 bytes from 2001:db8:0:abcd::1: icmp_seq=3 ttl=64 time=0.072 ms

--- 2001:db8:0:abcd::1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 43ms
rtt min/avg/max/mdev = 0.030/0.047/0.072/0.018 ms
Note

一部のLinuxシステムでは、ping がIPv6をサポートしていません。そのようなシステムでは、代わりに ping6 コマンドを使います。

リンクローカルアドレスを再度確認するには、同じく ping を使用します。しかし、すべてのインターフェースはプレフィックス fe80::/64 を使用するので、アドレスと共にインターフェイス名を指定する必要があります。

$ ping6 -c 1 fe80::010c:29ff:fe33:3b25%ens33
PING fe80::010c:29ff:fe33:3b25(fe80::010c:29ff:fe33:3b25) 56 data bytes
64 bytes from fe80::010c:29ff:fe33:3b25%ens33: icmp_seq=1 ttl=64 time=0.049 ms

--- fe80::010c:29ff:fe33:3b25 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.049/0.049/0.049/0.000 ms

DNS

IPアドレスは覚えにくいだけでなく、サービスや製品を販売しようとしている場合にはクールな印象を与えることはできません。そこで、DNS (Domain Name System)の出番です。DNSの最も簡単な例は、example.com のような覚えやすいドメインメインをIPアドレスに対応づける分散電話帳です。例えば、ユーザーがWebサイトを見ようとする場合、URLの一部としてDNSホスト名を入力します。Webブラウザは、構成に従ってDNSリゾルバにそのDNS名を送ります。次に、DNSリゾルバはドメインに関連するアドレスを探します。そして、リゾルバがアドレスをWebブラウザに返して、WebブラウザはそのIPアドレスのサーバーへの接続を試みます。

LinuxがDNSデータの検索に使用するリゾルバーは、設定ファイル /etc/resolv.conf で設定します:

$ cat /etc/resolv.conf
search lpi
nameserver 192.168.0.1

名前を解決しようとするときに、リゾルバはまず /etc/hosts ファイル見て、要求された名前に対するアドレスがないかを探します。 あればそのアドレスを返して、DNSにはアクセスしません。これにより、ネットワーク管理者は、DNSサーバーを設定する手間をかけずに名前解決を行えます。ファイルのそれぞれの行には、IPアドレスと、1つ以上の名前が書かれます:

127.0.0.1          localhost.localdomain   localhost
::1                localhost.localdomain   localhost
192.168.0.10       server
2001:db8:0:abcd::f server

DNSを検索するには host コマンドを使います:

$ host learning.lpi.org
learning.lpi.org has address 208.94.166.198

より詳細な情報を得るには、dig を使います:

$ dig learning.lpi.org
; <<>> DiG 9.14.3 <<>> learning.lpi.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21525
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 2ac55879b1adef30a93013705d3306d2128571347df8eadf (bad)
;; QUESTION SECTION:
;learning.lpi.org.		IN	A

;; ANSWER SECTION:
learning.lpi.org.	550	IN	A	208.94.166.198

;; Query time: 3 msec
;; SERVER: 192.168.0.1#53(192.168.0.1)
;; WHEN: Sat Jul 20 14:20:21 EST 2019
;; MSG SIZE  rcvd: 89

ここでは、DNSレコードの種類を見ることもできて、ここではIPv4アドレスを示す A です。

ソケット

ソケット は、2つのプログラムが通信する際のエンドポイント(端点)です。ソケットがネットワーク経由で繋がると、異なるデバイス上でプログラムが実行できます。例えば、Webブラウザが手元のラップトップで、Webサーバーは会社のデータセンターで実行されるといった具合です。

ソケットには3つの種類があります:

Unix ソケット

同じマシン上で実行されるプロセス同士を繋ぎます。

UDP (User Datagram Protocol) ソケット

高速だが信頼性のないプロトコル(UDP)を使って、アプリケーション同士を繋ぎます。

TCP (Transmission Control Protocol) ソケット

UDPより信頼性が高く、例えばデータの受信確認などが行えるソケットです。

Unixソケットは、同じデバイスで実行されているアプリケーション同士のみを繋ぎます。TCPソケットとUDPソケットは、ネットワーク越しで接続できます。TCPは、送られたものが常に同じ順番で届くストリームデータを扱えます。UDPは打ちっ放しで、パケットを送りますがそれが相手に届くことは保証されません。UDPの方がTCPよりもオーバーヘッドが少ないので、オンラインビデオゲームなどの低遅延アプリケーションに適しています。

TCPとUDPは、1つのIPアドレスで複数のソケットを識別するためにポート番号を使います。発信側のポート番号は通常ランダムですが、待ち受け側のポート番号はサービス毎に標準化されています。例えば、HTTPはポート80を、HTTPSは443を、リモートのLinuxシステムにログインするためのSSHはポート22で、それぞれ待ち受けます。

管理者がLinuxコンピュータのソケットを調査するために、ss コマンドを使います。送信元のアドレス(source address)、受信先のアドレス(destination addres)、ソケット種別など、あらゆるものを表示します。特に便利な機能にフィルターがあり、指定の接続状態のソケットを監視できます。ss では、情報を選択するフィルター式などのオプションを使用できます。

オプションなしで実行すると、接続が確立されている全てのソケットを表示します。-p オプションはソケットを使用しているプロセスの情報を、-s は ソケットの概要を、それぞれ表示します。たくさんのオプションがありますが、主要なオプションをいくつか示します。-4 と -6 は、IPプロトコルを IPv4 ないし IPv6 のいずれかに絞り込みます。-t と -u は、それぞれ TCP と UDP ソケットを選択します。-l は新しい接続を待ち受けているソケットのみを表示します。

例えば、次のコマンドは使用中の TCPソケットのみを表示します:

$ ss -t
State       Recv-Q  Send-Q    Local Address:Port      Peer Address:Port
ESTAB       0       0           192.168.0.5:49412      192.168.0.1:https
ESTAB       0       0           192.168.0.5:37616      192.168.0.1:https
ESTAB       0       0           192.168.0.5:40114      192.168.0.1:https
ESTAB       0       0           192.168.0.5:54948      192.168.0.1:imap
...

演習

  1. ホストの ens33 インターフェイスに2つのIPアドレスを割り当てます。ひとつは IPv4 アドレス 192.168.10.10/24 で、ひとつは IPv6 アドレス 2001:0:0:abcd:0:8a2e:0370:7334/64 です。これらを実現するにはどのようなコマンドを入力しますか?

  2. 以下のアドレスリストの内、プライベートなものはどれでしょう?

    192.168.10.1

    120.56.78.35

    172.16.57.47

    10.100.49.162

    200.120.42.6

  3. example.com に 192.168.0.15 を割り当てるために、hosts ファイルに追加するエントリは何ですか?

  4. 次のコマンドで何が起きますか?

    sudo ip -6 route add default via 2001:db8:0:abcd::1

発展演習

  1. 以下のリクエストに対応する DNSレコード種別は何ですか:

    • テキストデータ

    • IPアドレスの逆引き

    • 独自のアドレスを持たず、別のドメインに依存するドメイン

    • メールサーバー

  2. Linuxには ブリッジと呼ばれる機能があります。これは何で、どのように役立つのですか?

  3. ss コマンドで、接続済の UDPソケットを表示するオプションは何ですか?

  4. Linuxデバイスで動作している全てのソケットの統計集計を表示するコマンドは何ですか?

  5. 前問のコマンドで次の出力が得られました。TCPとUDPのソケットは、それぞれ幾つがアクティブですか?

    Total: 978 (kernel 0)
    TCP:   4 (estab 0, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0
    
    Transport Total     IP        IPv6
    *	  0         -         -
    RAW	  1         0         1
    UDP	  7         5         2
    TCP	  4         3         1
    INET	  12        8         4
    FRAG	  0         0         0

まとめ

このトピックでは、Linuxコンピュータのネットワークを取り上げました。最初に、ネットワークのさまざまなレイヤーについて学びました。

  • リンク層は、デバイスを直接接続する

  • ネットワーク層は、グローバルなアドレス空間とネットワーク間のルーティングを提供する

  • アプリケーション層は、アプリケーション同士が互いに接続する

IPv4 と IPv6 で、個々のコンピュータのアドレスを指定する方法と、アプリケーションが相互接続する際に使用するソケットを調べる方法を見てきました。また、名前をIPアドレスに変換するDNSも学びました。

演習で使用したコマンド:

dig

DNS情報を問い合わせて、その問い合わせと応答に関するさまざまな情報を表示します。

host

DNS情報を問い合わせて、要約を出力します。

ip

ネットワークインターフェイスやアドレス、ルーティングなど、Linuxのネットワークを設定します:。

ping

リモートデバイスとの接続性をテストします。

ss

ソケットに関連する情報を表示します。

演習の解答

  1. ホストの ens33 インターフェイスに2つのIPアドレスを割り当てます。ひとつは IPv4 アドレス 192.168.10.10/24 で、ひとつは IPv6 アドレス 2001:0:0:abcd:0:8a2e:0370:7334/64 です。これらを実現するにはどのようなコマンドを入力しますか?

    sudo ip addr add 192.168.10.10/24 dev ens33
    sudo ip addr add 2001:0:0:abcd:0:8a2e:0370:7334/64 dev ens33
  2. 以下のアドレスリストの内、プライベートなものはどれでしょう?

    192.168.10.1

    ○

    120.56.78.35

    172.16.57.47

    ○

    10.100.49.162

    ○

    200.120.42.6

  3. example.com に 192.168.0.15 を割り当てるために、hosts ファイルに追加するエントリは何ですか?

    192.168.0.15  example.com
  4. 次のコマンドで何が起きますか?

    sudo ip -6 route add default via 2001:db8:0:abcd::1

    デフォルトルートをテーブルに追加して、すべての IPv6トラフィックをアドレス 2001:db8:0:abcd::1 のルーターに送ります。

発展演習

  1. 以下のリクエストに対応する DNSレコード種別は何ですか:

    • テキストデータ

      TXT

    • IPアドレスの逆引き

      PTR

    • 独自のアドレスを持たず、別のドメインに依存するドメイン

      CNAME

    • メールサーバー

      MX

  2. . Linuxには ブリッジと呼ばれる機能があります。これは何で、どのように役立つのですか?

    ブリッジは複数のネットワークインターフェイスを(論理的に1つのインターフェイスに)まとめます。ブリッジに接続されたインターフェイスは、それらが同じリンク層ネットワークあるかのように通信できます。すべてのデバイスは同じサブネットからのIPアドレスを使用し、接続するためにルータを必要としません。

  3. ss コマンドで、接続済の UDPソケットを表示するオプションは何ですか?

    -u オプションで、接続済のUDPソケットがすべて表示されます。

  4. Linuxデバイスで動作している全てのソケットの統計集計を表示するコマンドは何ですか?

    ss -s コマンドは、すべてのソケットの統計集計を表示します。

  5. 前問のコマンドで次の出力が得られました。TCPとUDPのソケットは、それぞれ幾つがアクティブですか?

    Total: 978 (kernel 0)
    TCP:   4 (estab 0, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0
    
    Transport Total     IP        IPv6
    *	  0         -         -
    RAW	  1         0         1
    UDP	  7         5         2
    TCP	  4         3         1
    INET	  12        8         4
    FRAG	  0         0         0

    TCPとUDPを合わせて11個のソケットがアクティブです。

Linux Professional Insitute Inc. All rights reserved. 学習資料をご覧ください: https://learning.lpi.org
ここでの作成物は、Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Licenseの下でライセンスされています。

次のレッスン

5.1 セキュリティの基本と、ユーザタイプの確認 (5.1 レッスン 1)

次のレッスンを読む

Linux Professional Insitute Inc. All rights reserved. 学習資料をご覧ください: https://learning.lpi.org
ここでの作成物は、Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Licenseの下でライセンスされています。

LPIは非営利団体です。

© 2023 Linux Professional Institute(LPI)は、オープンソースプロフェッショナル向けのグローバルな認定基準およびキャリアサポート組織です。200,000人以上の認定保持者を擁する、世界初かつ最大のベンダー中立Linuxおよびオープンソース認定機関です。LPIは180か国以上で認定プロフェッショナルを擁し、複数の言語で試験を実施し、何百ものトレーニングパートナーを擁しています。

私たちの目的は、オープンソースの知識とスキルの認定資格を世界中からアクセスできるようにすることで、誰にとっても経済的で創造的な機会を可能にすることです。

  • LinkedIn
  • flogo-RGB-HEX-Blk-58 Facebook
  • Twitter
  • お問い合わせ
  • 個人情報とCookieポリシー

間違いを見つけたり、このページを改善したいですか? 私たちに知らせてください。.

© 1999–2023 The Linux Professional Institute Inc. All rights reserved.