109.2 レッスン 2
Certificate: |
LPIC-1 |
---|---|
Version: |
5.0 |
Topic: |
109 ネットワークの基礎 |
Objective: |
109.2 永続的なネットワーク構成 |
Lesson: |
2 of 2 |
はじめに
Linuxは、デスクトップ、サーバー、コンテナ、仮想マシン、モバイルデバイスなどが接続に使用する、ほぼすべてのネットワークテクノロジーをサポートしています。さまざまなテクノロジーが混在する場面におけるネットワークノード間の接続は動的でもあるため、オペレーティングシステムはネットワークを適切に管理できる必要があります。
ちょっと前まで、動的なネットワークインフラストラクチャを管理する方法は、ディストリビューションごとに独自のものでした。今日では、NetworkManager や systemd のようなツールが、より包括的で統合された機能を提供していて、あらゆる要求に応えています。
NetworkManager
ほとんどのLinuxディストリビューションは、ネットワーク接続を設定・制御するために、NetworkManager サービスを採用しています。NetworkManagerの目的は、ネットワーク設定をできるだけシンプルかつ自動的に行うことです。例えばDHCPを使用する場合であれば、必要に応じてNetworkManagerがIPアドレスの取得、経路の変更、DNSサーバーの切り替えを手配します。有線接続と無線接続の両方が利用可能な場合、NetworkManagerはデフォルトで有線接続を優先します。NetworkManagerは、可能な限り、常に少なくとも1つの接続をアクティブに保ち続けます。
Note
|
ネットワークへのリンクが確立されるとすぐに、ネットワークアダプタからDHCP(Dynamic Host Configuration Protocol)リクエストが送信されます。ネットワーク上でアクティブなDHCPサーバーは、IP通信のために必要な設定情報(IPアドレス、ネットワークマスク、デフォルトルートなど)を、クライアント(要求を送ったホスト)に返送します。 |
NetworkManagerデーモンは、デフォルトでは /etc/network/interfaces
ファイルに記載されていないネットワークインターフェースのみを制御します。これは、他のネットワーク構成ツールとの干渉を防ぐためで、制御されていないネットワークインターフェースのみを扱います。
NetworkManagerサービスはroot権限で実行され、システムをオンラインに保つために必要な処理を行います。root権限を持たない一般ユーザーであっても、NetworkManagerデーモンと通信するクライアントアプリケーションを使用して、ネットワーク接続を作成したり変更したりできます。
NetworkManagerのクライアントアプリケーションには、コマンドライン環境で使用するものと、グラフィカル環境で使用するものがあります。グラフィカル環境で使用するものには、デスクトップ環境に応じて nm-tray、network-manager-gnome、nm-applet、plasma-nm などがあります。これらはデスクトップ環境のアクセサリとして提供されていて、通常はデスクトップバーのインジケーターアイコン、ないし、システム構成ユーティリティからアクセスできます。
コマンドライン環境では、NetworkManager自体が nmcli
と nmtui
という2つのクライアントプログラムを提供しています。どちらのプログラムも基本的な機能は同じですが、nmtui
はcursesベースのメニューインターフェイスがあり、nmcli
はスクリプトでも使用できる包括的なコマンドです。nmcli
コマンドでは、NetworkManagerが制御するネットワーク関連プロパティを オブジェクト と呼ぶカテゴリに分類しています。
general
-
ステータスと操作全般
networking
-
ネットワーク制御全般
radio
-
無線接続
connection
-
接続情報
device
-
NetworkManagerが管理するデバイス
agent
-
シークレットエージェントならびにpolkitエージェント
monitor
-
変更の監視
nmcli
コマンドの1番目の引数は、オブジェクトです。たとえば、システムの接続ステータスを表示するには、引数に general
を指定します。
$ nmcli general STATE CONNECTIVITY WIFI-HW WIFI WWAN-HW WWAN connected full enabled enabled enabled enabled
STATE
欄は、システムがネットワークに接続されているかどうかを示します。設定ミスやアクセス制限のために外部への接続が制限されている場合、CONNECTIVITY
欄には full
以外のステータスが表示されます。CONNECTIVITY
欄に Portal
と表示されている場合は、接続するために(通常はウェブブラウザ経由で)特別な認証ステップが必要です。その他の欄は無線接続の状態を示します。2種類の無線接続 WIFI
と WWAN
(Wide Wireless Area Network、つまり携帯電話ネットワーク)がサポートされています。サフィックスが HW
の欄はデバイスの状態を示していて、サフィックスが付かない欄はネットワークの接続状態を示しています。
nmcli
コマンドには、オブジェクト名に続けてその引数を指定します。引数が省略された場合は status
が指定されたものと見なされます。つまり nmcli general
コマンドは、実際には nmcli general status
と解釈されます。
有線ネットワークでアクセスポイント(ルーター)に接続されている場合、行うべきことはほとんどありません。無線ネットワークでは追加の操作が必要になりますが、nmcli
は簡単な操作で接続することができ、その設定が保存されて次回の接続でも自動的に利用されますから、ラップトップやモバイルデバイスではとても便利です。
Wi-Fiに接続する前に、そこで利用可能なネットワークを一覧表示できると便利です。システムにWi-Fiアダプターがある場合、 nmcli device wifi list
で利用可能なWi-Fiネットワークを一覧表示します。
$ nmcli device wifi list IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY 90:F6:52:C5:FA:12 Hypnotoad Infra 11 130 Mbit/s 67 ▂▄▆_ WPA2 10:72:23:C7:27:AC Jumbao Infra 1 130 Mbit/s 55 ▂▄__ WPA2 00:1F:33:33:E9:BE NETGEAR Infra 1 54 Mbit/s 35 ▂▄__ WPA1 WPA2 A4:33:D7:85:6D:B0 AP53 Infra 11 130 Mbit/s 32 ▂▄__ WPA1 WPA2 98:1E:19:1D:CC:3A Bruma Infra 1 195 Mbit/s 22 ▂___ WPA1 WPA2
ほとんどの場合は SSID
欄の名前を使用してネットワークを選択します。SSIDが Hypnotoad
であるネットワークに接続するには、次のようにします。
$ nmcli device wifi connect Hypnotoad
デスクトップ環境のターミナルエミュレータ内でコマンドを実行した場合には、Wi-Fiネットワークのパスフレーズを要求するダイアログボックスが表示されます。コンソールやネットワーク経由でログインしている場合は、次のようにパスワードを引数に指定します。
$ nmcli device wifi connect Hypnotoad password MyPassword
Wi-FiネットワークがSSID名を非表示にしている場合でも、次のように hidden yes
を指定すれば接続できます。
$ nmcli device wifi connect Hypnotoad password MyPassword hidden yes
システムに複数のWi-Fiアダプターがある場合は、使用するアダプターを ifname
で指定します。たとえば、wlo1
という名前のアダプタを使用して接続するには、次のようにします。
$ nmcli device wifi connect Hypnotoad password MyPassword ifname wlo1
Wi−Fi接続に成功すると、NetworkManagerはSSIDに由来する名前を付けて、後の接続のために保存します。nmcli connection show
コマンドで、接続名とそのUUIDを一覧表示します。
$ nmcli connection show NAME UUID TYPE DEVICE Ethernet 53440255-567e-300d-9922-b28f0786f56e ethernet enp3s5 tun0 cae685e1-b0c4-405a-8ece-6d424e1fb5f8 tun tun0 Hypnotoad 6fdec048-bcc5-490a-832b-da83d8cb7915 wifi wlo1 4G a2cf4460-0cb7-42e3-8df3-ccb927f2fd88 gsm --
接続の種類(ethernet
、wifi
、tun
、gsm
、bridge
など)と、接続が使用しているデバイスが表示されます。ある接続に対する操作を行うためには、その名前またはUUIDを指定します。Hypnotoad
への接続を無効化する例を示します。
$ nmcli connection down Hypnotoad Connection 'Hypnotoad' successfully deactivated
逆に nmcli connection up Hypnotoad
コマンドで、接続を有効化できます。既に Hypnoad
への接続はNetworkManagerに保存されていますから、デバイス名やパスワードを指定する必要はありません。インターフェイス名を使用して再接続することもできますが、この場合は connection
オブジェクトではなく device
オブジェクトを使用します。
$ nmcli device disconnect wlo2 Device 'wlo1' successfully disconnected.
デバイス名を使用して、接続を再確立してみましょう。
$ nmcli device connect wlo2 Device 'wlo1' successfully activated with '833692de-377e-4f91-a3dc-d9a2b1fcf6cb'.
接続が確立されるたびにUUIDは変更されるので、接続名(SSID)かデバイス名を使うのがお勧めです。
ワイヤレスデバイスを使用していない場合は、電源をオフにして電力を節約できます。nmcli
に radio オブジェクトを渡します。
$ nmcli radio wifi off
もちろんワイヤレスデバイスは、nmcli radio wifi on
コマンドで再びオンにできます。
NetworkManagerが利用可能な既知のネットワークを見つけると、それらに自動的に接続します。いったん接続を確立すれば、再び手動で操作する必要はありません。NetworkManagerには、機能を拡張するプラグインがあり、VPN接続をサポートするものなどがあります。
systemd-networkd
systemdを採用しているシステムには、組み込みデーモンを使用してネットワーク接続を管理するオプションがあります。systemd-networkd
はネットワークインターフェイスを制御し、systemd-resolved
はローカルの名前解決を管理します。これらのサービスは従来のネットワーク構成方法と互換性がありますが、特にネットワークインターフェイスの構成には、知っておく価値のある機能が備わっています。
systemd-networkdがネットワークインターフェイスを構成するために使用する設定ファイルは、次の3つのディレクトリのいずれかに置かれます。
/lib/systemd/network
-
システムネットワークディレクトリ。
/run/systemd/network
-
揮発性のランタイムネットワークディレクトリ。
/etc/systemd/network
-
ローカル管理ネットワークディレクトリ。
ファイルは辞書順に処理されるので、数字で始まるファイル名を使用すると、順序が分かりやすくて設定しやすくなります。
同名の設定ファイルが複数のディレクトリにある場合は、/etc
にあるファイルの優先度が最もが高く、次に /run
にあるファイル、最後に /lib
にあるファイルの順になります。優先度の低いファイルは無視されます。このようにファイルを配置することで、元のファイルを変更することなくインターフェース設定を変更することができます。たとえば /etc/systemd/network
にあるファイルを変更して、/lib/systemd/network
にあるファイルを無視させることができます。
設定ファイルの役割に応じてサフィックスが異なります。systemd-networkdは、名前が .netdev
で終わるファイルを参照して bridge や tun などの仮想ネットワークデバイスを作成します。また、名前が .link
で終わるファイルを参照して、ネットワークインターフェースの低レベルな(リンク層の)構成を行います。systemd-networkd は、ネットワークデバイスの追加を自動的に検出して設定します — 他の方法で設定されたデバイスは無視します — から、これらのファイルを追加する必要はほとんどありません。
最も重要なファイルはサフィックスが .network
のもので、ネットワークアドレスとルーティングを設定します。ファイル内の [Match]
セクションで、対象とするネットワークインターフェース名を指定します。
たとえば /etc/systemd/network/30-lan.network
ファイルでイーサネットインターフェイス enp3s5
を設定するのであれば、その [Match]
セクションに Name=enp3s5
と記入します。
[Match] Name=enp3s5
複数のインターフェイス名を空白で区切ったり、en*
などのグロブ文字を使うことで、複数のネットワークインターフェイスを一度に指定することができます。また、MACアドレスでネットワークデバイスを指定するなど、さまざまな方法でネットワークインターフェイスを指定できます。
[Match] MACAddress=00:16:3e:8d:2b:5b
デバイスに設定するパラメータは、[Network]
セクションに置きます。単純な静的ネットワークでは、Address
と Gateway
のエントリのみが必要です。
[Match] MACAddress=00:16:3e:8d:2b:5b [Network] Address=192.168.0.100/24 Gateway=192.168.0.1
静的なIPアドレスではなく、DHCPでアドレスを設定するには、DHCP
エントリを使用します。
[Match] MACAddress=00:16:3e:8d:2b:5b [Network] DHCP=yes
DHCPを指定した場合、systemd-networkdサービスは、ネットワークインターフェイスにIPv4アドレスとIPv6アドレスの両方を割り当てようとします。IPv4のみを使用するには、DHCP=ipv4
を、IPv6のみを使用するには DHCP=ipv6
を指定します。
systemd-networkdで、パスワードで保護されたワイヤレスネットワークに接続することもできますが、あらかじめネットワークアダプターにワイヤレスネットワークの認証情報を登録しておくことが必要です。そのためには WPA_supplicant ツールを使用します。
最初のステップは、wpa_passphrase
コマンドで資格情報ファイルを作成することです。
# wpa_passphrase MyWifi > /etc/wpa_supplicant/wpa_supplicant-wlo1.conf
引数は Wi-FiネットワークのSSIDです。このコマンドは、標準入力から MyWifi
ワイヤレスネットワークのパスワードを読取って、そのハッシュ値を /etc/wpa_supplicant/wpa_supplicant-wlo1.conf
に保存します。ファイル名に、ワイヤレスインターフェイスの名前 wlo1
が含まれていることに注意してください。
WPA_supplicant
サービスが実行されていれば、/etc/wpa_supplicant/
にあるWPAパスフレーズファイルを自動的に読み取って、インターフェイスを制御するサービスを作成します。この例であれば、wpa_supplicant@wlo1.service
になります。systemctl start wpa_supplicant@wlo1.service
で、ワイヤレスアダプタをアクセスポイントに接続します。システム起動時に接続したければ、systemctl enable wpa_supplicant@wlo1.service
コマンドを実行します。
最後に、wlo1
インターフェース用の .network
ファイルを /etc/systemd/network/
に作成します。これにより、WPA_Supplicantが wlo1
インターフェイスをアクセスポイントに接続するとすぐに、systemd-networkdが wlo1
インターフェースを構成します。
演習
-
nmcli general status
コマンドの出力において、CONNECTIVITY
欄にPortal
と表示されています。この意味は何ですか? -
コンソール端末からログインしている一般ユーザーが、
nmcli
コマンドでWi-Fiネットワークに接続するにはどうしますか? Wi-FiネットワークのSSIDはMyWifi
、パスワードはMyPassword
とします。 -
以前に使用していたワイヤレスアダプタがOffになっている場合、どのコマンドでワイヤレスアダプタをOnにできますか?
-
systemd-networkdがネットワークインターフェイスを管理している場合、独自の構成ファイルを配置するディレクトリはどこですか?
発展演習
-
nmcli
コマンドで、未使用のHotel Internet
という名前の接続を削除するにはどうしますか? -
NetworkManagerはWi-Fiネットワークを定期的にスキャンしていて、
nmcli device wifi list
コマンドは最後のスキャンで見つかったアクセスポイントのみを一覧表示します。利用可能なアクセスポイントをすぐに再スキャンさせるnmcli
コマンドは何ですか? -
systemd-networkdの構成ファイルにおいて、すべてのイーサネットインターフェイスを指定したい場合に、
[Match]
セクションのname
エントリにどう記入しますか? -
wpa_passphrase
コマンドで、パスワードを標準入力からではなく、引数で指定するにはどうしますか?
まとめ
このレッスンでは、さまざまな動的ネットワーク接続を管理するための一般的なツールについて説明しました。NetworkManager や systemd-networkd などのツールを使用すると、ユーザーの介入を最小限に押さえることができます。レッスンでは、次のトピックについて説明しました。
-
NetworkManagerとsystemd-networkdの役割と関係。
-
NetworkManagerとsystemd-networkdを使い分ける方法。
-
NetworkManagerならびにsystemd-networkdにおける、基本的なネットワークインターフェース構成方法。
以下の概念、コマンド、手順を取り上げました。
-
NetworkManagerのクライアントコマンド:
nmcli
とnmtui
-
nmcli
を使用して、ワイヤレスネットワークをスキャンして接続する方法 -
systemd-networkdとWPA_supplicantを使用したWi-Fiネットワーク接続
演習の解答
-
nmcli general status
コマンドの出力において、CONNECTIVITY
欄にPortal
と表示されています。この意味は何ですか?接続プロセスを完了するために、追加の認証手順(通常はWebブラウザー経由)が必要であることを示しています。
-
コンソール端末からログインしている一般ユーザーが、
nmcli
コマンドでWi-Fiネットワークに接続するにはどうしますか? Wi-FiネットワークのSSIDはMyWifi
、パスワードはMyPassword
とします。コマンドラインの端末では、以下のコマンドを使います。
$ nmcli device wifi connect MyWifi password MyPassword
-
以前に使用していたワイヤレスアダプタがOffになっている場合、どのコマンドでワイヤレスアダプタをOnにできますか?
$ nmcli radio wifi on
-
systemd-networkdがネットワークインターフェイスを管理している場合、独自の構成ファイルを配置するディレクトリはどこですか?
ローカル用のネットワーク管理ディレクトリに置きます:
/etc/systemd/network
。
発展演習の解答
-
nmcli
コマンドで、未使用のHotel Internet
という名前の接続を削除するにはどうしますか?$ nmcli connection delete "Hotel Internet"
-
NetworkManagerはWi-Fiネットワークを定期的にスキャンしていて、
nmcli device wifi list
コマンドは最後のスキャンで見つかったアクセスポイントのみを一覧表示します。利用可能なアクセスポイントをすぐに再スキャンさせるnmcli
コマンドは何ですか?rootユーザーは、
nmcli device wifi rescan
コマンドで、利用可能なアクセスポイントを再スキャンできます。 -
systemd-networkdの構成ファイルにおいて、すべてのイーサネットインターフェイスを指定したい場合に、[Match] セクションの name エントリにどう記入しますか?
name=en*
と記入します。Linuxではイーサネットのインターフェイスはen
がプレフィックスになります。また、systemd-networkdではグロブ文字が使えます。 -
wpa_passphrase コマンドで、パスワードを標準入力からではなく、引数で指定するにはどうしますか?
wpa_passphrase MyWifi MyPassword
のように、SSIDの次にパスワードを指定します。