109.2 レッスン 1
Certificate: |
LPIC-1 |
---|---|
Version: |
5.0 |
Topic: |
109 ネットワークの基礎 |
Objective: |
109.2 永続的なネットワーク構成 |
Lesson: |
1 of 2 |
はじめに
TCP/IPネットワークでは、すべてのノードがそのネットワーク仕様にあわせて構成される必要があります。システム管理者は、オペレーティングシステムが起動するたびに適当なネットワークインターフェイスを、適切にセットアップするようにシステムを構成する必要があります。
ネットワークの仕様はオペレーティングシステムに依存しませんが、その仕様を満たすようにシステムを設定する方法はオペレーティングによってまちまちです。Linuxシステムでは、/etc
ディレクトリにあるプレーンテキストファイルに保存された情報を読み出して、ネットワークインターフェイスを設定します。ネットワークへの接続を確立するためには、これらの設定ファイルの使用方法を理解しておく必要があります。
ネットワークインターフェース
オペレーティングシステムは、システムに接続されたイーサネット(Ethernet)やWi-Fiなどのネットワークデバイスを通してネットワークに接続します。ネットワークとの接続点を ネットワークインターフェイス と呼び、それらのネットワークデバイスをNIC(Network Interface Controller)と呼びます。ネットワークインターフェイスの主な役割は、ローカルデータを送信し、リモートデータを受信する出入り口を提供することです。接続するネットワークにあわせてネットワークインターフェイスを適切に設定しない限り、オペレーティングシステムはネットワーク内の他のマシンと通信することができません。なお、ネットワークインターフェイスの中には、同じマシンで動作するプロセス同士が通信するために使用される ループバックインターフェイス と呼ばれるものもあります。
ほとんどの場合、オペレーティングシステムのインストール中に、正しいネットワークインターフェイスがデフォルト設定されるか、手作業での設定が求められます。インストール後にネットワークが適切に機能していなかったり、ネットワーク設定をカスタマイズする必要がある場合は、これらの設定を検査したり変更したりすることがあります。
システム上のネットワークインターフェイスを一覧表示するコマンドがいくつかありますが、最もポピュラーでほぼすべてのディストリビューションで利用できるのは ip
コマンドです。これはLinuxで標準的に利用されている基本的なネットワークツールである iproute
ないし iproute2
パッケージの一部です。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: enp3s5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 00:16:3e:8d:2b:5b brd ff:ff:ff:ff:ff:ff
nmcli device
コマンドが使用できることがあります。(訳注:デスクトップ環境を備えたLinuxシステムの大部分で利用可能です)。
$ nmcli device DEVICE TYPE STATE CONNECTION enp3s5 ethernet connected Gigabit Powerline Adapter lo loopback unmanaged --
例示したコマンドはシステム設定を変更しないので、一般ユーザーが実行できます。どちらのコマンドでも、lo
(ループバックインターフェース)と enp3s5
(イーサネットインターフェース)の、2つのネットワークインターフェースを表示します。
一般的なデスクトップないしラップトップマシンでは、2〜3個のネットワークインターフェイスが定義されます。1つはループバックインターフェイスであり、もう1つ(ないし2つ)はネットワークハードウェア(イーサネットとWi-Fiなど)です。サーバーには数十のネットワークインターフェイスが定義されることがあります。オペレーティングシステムがデバイスを抽象化するので、どのようなネットワークハードウェアであっても、同じ方法でネットワークインターフェイスを設定することができます。
インターフェイスの基礎となるハードウェアの詳細を知っておくことは、通信が期待通りに機能しないときに何が起こっているのかを理解するのに役立ちます。たくさんのネットワークインターフェイスが利用可能なシステムでは、例えば、どれがWi-Fiでどれがイーサネットなのかを明確にしたいことがあります。このため、Linuxでは、ネットワークインターフェイスがどのデバイスとポートに対応するのかを簡単に識別できるように、ネットワークインターフェイスの命名規則を定めています。
インターフェース名
古いLinuxディストリビューションでは、カーネルがデバイスを見つけた順番に、イーサネットネットワークインターフェイスに eth0
、eth1
などの名前を付け、同様にワイヤレスネットワークインターフェイスには、wlan0
、wlan1
などの名前を付けていました。この命名規則では、例えば、どのイーサネットポートがインターフェイス eth0
になるのかが特定できません。ハードウェアの検出タイミングによって、再起動後に2つのネットワークインターフェイスの名前が入れ替わってしまうことさえありました。
このあいまいさを払拭するために、最近のLinuxシステムでは、ネットワークインターフェイスとハードウェアを確定的に対応付けるための命名規則を採用しています。
systemdによる命名規則を使用するLinuxディストリビューションでは、すべてのネットワークインターフェースに、インターフェースのタイプに応じた2文字のプレフィックスで始まる名前を付けます。
en
-
Ethernet
ib
-
InfiniBand
sl
-
シリアルラインIP(スリップ)
wl
-
Wireless local area network (WLAN)
ww
-
Wireless wide area network (WWAN)
Linuxは、以下の優先度順位に基づいて、ネットワークインターフェイスの名前と番号を付けていきます。
-
BIOSないしデバイスのファームウェアが提供するインデックス値に基づく名前(例:
eno1
)。 -
ファームウェアが提供するPCIエクスプレススロット番号に基づく名前(例:
ens1
)。 -
バスアドレスに基づく名前(例:
enp3s5
)。 -
インターフェイスのMACアドレスに基づく名前(例:
enx78e7d1ea46da
)。 -
レガシー規則に基づく名前(例:
eth0
)。
たとえば、ネットワークインターフェイス enp3s5
は、最初の2つの命名方法に適合しなかったので、3番目のルールによってPCIバスのアドレスに基づいて命名されています。lspci
コマンドの出力から、PCIデバイスアドレス 03:05.0
のデバイスであることが分かります。
$ lspci | fgrep Ethernet 03:05.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8110SC/8169SC Gigabit Ethernet (rev 10)
Linuxカーネルがネットワークインターフェイスを作成し、通常は自動的に構成されます。ネットワークを手動で構成するためのさまざまなコマンドは、名前で指定されたネットワークインターフェイスを通してカーネルとやり取りして、ネットワーク構成を確認・変更します。
インターフェース管理
長年にわたり、Linuxのネットワーク機能を制御するために ifconfig
コマンドが使用されてきました。今でも簡単な調査や設定のために使用する事ができますが、イーサネット以外のサポートが不十分であるため非推奨とされています。現在では、ルーティングやトンネルなどTCP/IPのさまざまな側面を管理できる ip
コマンドを使用します。
ifconfig
コマンドは多機能で分かりにくいため、シンプルにネットワークインターフェイスを有効化・無効化するための ifup
と ifdown
コマンドもあります(訳注:新しいディストリビューションではデフォルトではインストールされないことが多いようです)。これらのコマンドは、/etc/network/interfaces
ファイルに書かれた定義に基づいてネットワークインターフェースを構成します。
ifup
と ifdown
で管理したいネットワークインターフェースは、/etc/network/interfaces
ファイルで定義します。ネットワークインターフェイス名の前に auto
と書かれた行は、ifup -a
コマンドを実行したときにそのインターフェイスが順に有効化されることを示します。システム起動時には ifup -a
が自動的に実行されますから、auto
と書かれたインターフェイスは起動時に有効化されます。
Warning
|
|
iface
という単語で始まる行で、ネットワークインターフェイスの構成方法やパラメータを定義します。iface
に続けて、インターフェイス名、アドレスファミリ、構成方法 を指定します。次の例では、インターフェース lo
(ループバック)と enp3s5
の構成を示しています。
auto lo iface lo inet loopback auto enp3s5 iface enp3s5 inet dhcp
TCP/IPネットワークでは、アドレスファミリ は inet
ないし inet6
です。lo
インターフェイスでは、構成方法 に loopback
を指定します。dhcp
を指定すれば、DHCPサーバーからIP設定情報を取得して使用します。この設定例では、ifup enp3s5
コマンドを実行すると、ネットワークインターフェイス enp3s5
が有効化されます。
# ifup enp3s5 Internet Systems Consortium DHCP Client 4.4.1 Copyright 2004-2018 Internet Systems Consortium. All rights reserved. For info, please visit https://www.isc.org/software/dhcp/ Listening on LPF/enp3s5/00:16:3e:8d:2b:5b Sending on LPF/enp3s5/00:16:3e:8d:2b:5b Sending on Socket/fallback DHCPDISCOVER on enp3s5 to 255.255.255.255 port 67 interval 4 DHCPOFFER of 10.90.170.158 from 10.90.170.1 DHCPREQUEST for 10.90.170.158 on enp3s5 to 255.255.255.255 port 67 DHCPACK of 10.90.170.158 from 10.90.170.1 bound to 10.90.170.158 -- renewal in 1616 seconds.
この例では、enp3s5
インターフェースを dhcp
で構成していますから、ifup enp3s5
コマンドでDHCPクライアントプログラムが呼び出されて、DHCPサーバーからIP設定を取得します。同様に、ifdown enp3s5
コマンドを実行すれば、enp3s5
インターフェースが無効化されます。
DHCPサーバーのないネットワークでは 構成方法 に static
を指定して、/etc/network/interfaces
にIP設定を直接記入します。例を示します。
iface enp3s5 inet static address 192.168.1.2/24 gateway 192.168.1.1
構成方法 が static
であるインターフェイスは、ネットワークハードウェアが検出される毎に自動的に起動されますから、auto
で起動を指定する必要はありません。
同じインターフェースに複数の iface
エントリがある場合、そのインターフェースを起動するとすべてのエントリが有効になります。これは、同じインターフェイスでIPv4アドレスとIPv6アドレスを構成する場合や、1つのインターフェイスに複数のIPアドレスを構成する場合などに有用です。
ローカル名とリモート名
TCP/IPの設定(IPアドレス、ゲートウェイ)だけでは、インターネットを活用することができません。人間が理解しやすい名前で、ホストを指定できることが必要です。
システムが自分をどう名乗るか(ローカル名)は自由に決めることができます。マシンをネットワークに接続しない場合でも、愛着の湧く名前を付けてあげるとよいでしょう。ローカル名にはドット(.
)を含まない1単語として、ドメイン形式のネットワーク名と揃えた名前にするのがお勧めです。オペレーティングシステムは起動時に /etc/hostname
ファイル(通常は1行のみのファイル)を読み込んで、ローカル名を決定します。
/etc/hostname
ファイルを直接編集しても構いませんが、マシンのホスト名は hostnamectl
コマンドで定義することがお勧めです(使用可能文字などがチェックされます)。hostnamectl
コマンドの set-hostname
サブコマンドは、引数に指定された名前を、/etc/hostname
ファイルに書き込みます。
# hostnamectl set-hostname storage # cat /etc/hostname storage
/etc/hostname
に定義する名前は 静的 なホスト名、つまり、起動時にシステムのローカル名としてセットする名前です。静的ホスト名は、64文字以内のASCII小文字のみ(スペースやドットは使用しない)とすることがお勧めです。また、厳密な要件ではありませんが、DNSドメイン名ラベルに使用できる形式(使用できる記号はハイフンのみ、など)とするのが良いでしょう。
hostnamectl
では、静的ホスト名に加えて、2種類のホスト名を設定できます。
- プリティホスト名
-
静的ホスト名とは異なり、プリティホスト名にはあらゆる種類の記号を含めることができます。よりわかりやすい名前を設定するために使います。例:“LAN Shared Storage”
# hostnamectl --pretty set-hostname "LAN Shared Storage"
- 仮ホスト名
-
静的なホスト名が設定されていないか、デフォルトの
localhost
の場合に使用されます。通常は自動設定された名前ですが、hostnamectl
で変更できます。
--pretty
オプションも --transient
オプションも指定しない場合、指定された名前が3種の名前すべてに設定されます。静的ホスト名のみを設定する場合は、--static
オプションを指定します。いずれの場合も、静的ホスト名のみが /etc/hostname
ファイルに保存されます。コマンド hostnamectl
を使用して、実行中のシステムに関するさまざまな説明や識別IDを表示することもできます。
$ hostnamectl status Static hostname: storage Pretty hostname: LAN Shared Storage Transient hostname: generic-host Icon name: computer-server Chassis: server Machine ID: d91962a957f749bbaf16da3c9c86e093 Boot ID: 8c11dcab9c3d4f5aa53f4f4e8fdc6318 Operating System: Debian GNU/Linux 10 (buster) Kernel: Linux 4.19.0-8-amd64 Architecture: x86-64
hostnamectl
コマンドのサブコマンドを省略すると、status
を指定したのと同じになります。
ネットワークノードの名前とIPアドレスを対応付けるための基本的な方法が2つあります。1つはローカルデータベース(ファイル)を参照する方法で、もう1つはDNSサーバーを参照する方法です。両方を併用することができ、優先順位を ネームサービススイッチ (設定ファイルは /etc/nsswitch.conf
)で構成することができます。ネームサービススイッチは、ホスト名とIPアドレスの対応付けだけではなく、さまざまな名前サービスが利用する情報源を決定するためにも使用されます。
ホスト名とIPアドレスの対応付けは、hosts データベースにによって管理されます。/etc/nsswitch.conf
内の hosts
行で、その情報源を提供するサービスを指定します。
hosts: files dns
このエントリ例は、ホスト情報をどこから探すかを指定しています。files
はローカルファイルを参照することを、dns
はDNSサービスを参照することを示していて、この順に検索が行われます。
ホストデータベースのローカルファイルは /etc/hosts
です。これは、IPアドレスとホスト名を関連付ける単純なテキストファイルで、IPアドレスごとに1行です。
127.0.0.1 localhost
IPアドレス 127.0.0.1 は、ループバックインターフェイスのデフォルトアドレスですから、ホスト名 localhost と対応付けられています。
ひとつのIPアドレスに複数のホスト名(エイリアス)を関連付けることもできます。エイリアスには、短いホスト名やスペル違いの名前などに使われます。
192.168.1.10 foo.mydomain.org foo
/etc/hosts
ファイルの書式は次のとおりです。
-
エントリ(行)は、任意個数の空白やタブ文字でフィールドに区切られます。
-
文字
#
から行末までのテキストはコメントとして無視されます。 -
ホスト名には、英数字とハイフンおよびピリオドのみを含めることができます。
-
ホスト名は英字で始まり、英数字で終わる必要があります。
IPv6アドレスを /etc/hosts
に記入することもできます。次のエントリは、IPv6のループバックアドレスを示しています。
::1 localhost ip6-localhost ip6-loopback
files
サービスで求める情報が得られなかった場合には、次の dns
サービスに進みます。文字通りDNSサービスを利用して名前解決を行うものです。DNSサービスは リゾルバ(resolver) によって提供され、その構成ファイルは /etc/resov.conf
です。次の例は、GoogleのパブリックDNSサーバーを利用する場合の /etc/resolv.conf
を示しています。
nameserver 8.8.4.4 nameserver 8.8.8.8
resolv.conf
では、nameserver
エントリで DNSサーバーのIPアドレス を指定します。必要なネームサーバーは1つだけですが、3つまでのネームサーバーを指定でき、フォールバックとして使用されます。nameserver
エントリが存在しない場合は、ローカルマシンのネームサーバーに接続を試みます。
DNSサービスでホスト名を検索する際に、自動的にドメインを補うようにリゾルバを構成することができます。例を示します。
nameserver 8.8.4.4 nameserver 8.8.8.8 domain mydomain.org search mydomain.net mydomain.com
domain
エントリに、ローカルドメイン名 mydomain.org
を設定しておくと、短い(1ワードの)ホスト名を検索する際に、自動的にローカルドメイン名が補われます。search
エントリも同様で、指定されているドメイン名を順に補って検索を試行します。
演習
-
システムに存在するネットワークアダプタを一覧表示するコマンドは何ですか?
-
インターフェイス名
wlo1
は、どの種類のネットワークアダプタですか? -
起動時における
/etc/network/interfaces
ファイルの役割は何ですか? -
ネットワークインターフェイス
eno1
を DHCPで設定するには、/etc/network/interfaces
にどう書きますか?
発展演習
-
hostnamectl
コマンドを使用して、ローカルマシンの 静的な ホスト名のみをfirewall
に変更するにはどうすればよいですか? -
hostnamectl
コマンドで設定できるホスト名以外の情報には何がありますか? -
firewall
およびrouter
という名前で、IPアドレスが10.8.0.1
のホストにアクセスできるように、/etc/hosts
のエントリを書いてください。 -
すべてのDNS要求を
1.1.1.1
に送信するには、/etc/resolv.conf
ファイルにどう書きますか?
まとめ
このレッスンでは、Linuxの標準的なコマンドとファイルを使用して、永続的なネットワーク構成を行う方法を説明しました。インストール時に指定したネットワーク構成を変更する場合もあります。このレッスンでは、以下のトピックを取り上げました。
-
Linuxがネットワークインターフェイスを識別する方法。
-
起動時のネットワークインターフェースの有効化と、基本的なIPネットワークの構成方法。
-
オペレーティングシステムがホストと名前を対応付ける方法。
以下の概念、コマンド、手順を取り上げました。
-
インターフェイスの命名規則。
-
ip
およびnmcli
を使用したネットワークインターフェイスの一覧表示。 -
ifup
とifdown
によるインターフェースのアクティブ化。 -
hostnamectl
コマンドと/etc/hostname
ファイル。 -
設定ファイル:
/etc/nsswitch.conf
、/etc/hosts
、/etc/resolv.conf
。
演習の解答
-
システムに存在するネットワークアダプタを一覧表示するコマンドは何ですか?
ip link show
およびnmcli device
。レガシーなifconfig
が使える事もあります。 -
インターフェイス名
wlo1
は、どの種類のネットワークアダプタですか?名前が
wl
で始まるので、無線LANアダプタです。 -
起動時における
/etc/network/interfaces
ファイルの役割は何ですか?ブート時に有効化するネットワークインターフェイスの構成方法を保存します。(訳注:
/etc/network/interface
を使用するディストリビューションは減りつつあるようです。ディストリビューションに固有の方法を調べてください。) -
ネットワークインターフェイス
eno1
を DHCPで設定するには、/etc/network/interfaces
にどう書きますか?iface eno1 inet dhcp
発展演習の解答
-
hostnamectl
コマンドを使用して、ローカルマシンの 静的な ホスト名のみをfirewall
に変更するにはどうすればよいですか?--static
オプションを使用します:hostnamectl --static set-hostname firewall
。 -
hostnamectl
コマンドで設定できるホスト名以外の情報には何がありますか?hostnamectl
で、ローカルマシンのデフォルトアイコン、その筐体種別、設置場所、設置環境を設定できます。 -
firewall
およびrouter
という名前で、IPアドレスが10.8.0.1
のホストにアクセスできるように、/etc/hosts
のエントリを書いてください。10.8.0.1 firewall router
-
すべてのDNS要求を
1.1.1.1
に送信するには、/etc/resolv.conf
ファイルにどう書きますか?nameserver
エントリとしてnameserver 1.1.1.1
のみを書きます。