Ubuntu Serverの network-config の設定方法【RP4】

Raspberry Pi
この記事は約25分で読めます。

Raspberry Pi 4にUbuntu Server 20.04 LTSをインストールし、 network-config を編集しました。ところが、ネットワークに接続できず、思いの外、苦戦しました。そこで、今回、Ubuntu Serverのネットワークの設定方法をまとめました。

 

スポンサーリンク

はじめに

Raspberry Pi 4にUbuntu Server 20.04 LTSをインストールし、今後、サーバーとして色々と活用していこうと考えていました。
その第一歩として、ネットワークに接続するための設定を試みました。
まず有線接続では、動的IPアドレスでも、固定IPアドレスでも繋がりました。
ところが、無線接続では、色々なサイトを参考にしましたが、全く繋がりませんでした。
他のサイトは、Ubuntu Serverのバージョンが異なると、設定方法も若干異なるようでかなり混乱しました。
今後、Ubuntu Serverのバージョンアップに伴い、ネットワーク接続の設定方法も変更される可能性がありそうです。
そこで、今回のネットワーク接続で自分が試したことや設定ミスなどを備忘録としてまとめておくことにしました。

 

 

ネットワーク接続について

Ubuntu Serverのネットワーク接続の設定は、SDカードのsystem-boot領域にあるnetwork-configをメモ帳などのテキストエディタで編集します。
デフォルトでは、以下に示したように、ethernets:以降が有線接続の設定です。
また、#wifis:以降が無線接続の設定で、デフォルトでは#でコメントアウトされています。
無線接続を設定する場合は、必要な設定があれば、その行の最初にある#を削除します。

# This file contains a netplan-compatible configuration which cloud-init
# will apply on first-boot. Please refer to the cloud-init documentation and
# the netplan reference for full details:
#
# https://cloudinit.readthedocs.io/
# https://netplan.io/reference
#
# Some additional examples are commented out below

version: 2
ethernets:
  eth0:
    dhcp4: true
    optional: true
#wifis:
#  wlan0:
#    dhcp4: true
#    optional: true
#    access-points:
#      myhomewifi:
#        password: "S3kr1t"
#      myworkwifi:
#        password: "correct battery horse staple"
#      workssid:
#        auth:
#          key-management: eap
#          method: peap
#          identity: "me@example.com"
#          password: "passw0rd"
#          ca-certificate: /etc/my_ca.pem

単に有線接続でネットワークに接続をするだけなら上記の設定を変更する必要はありません。
ただし、この場合は、ルーターに自動でIPアドレスが割り当てられる動的IPアドレスとなるため、Raspberry Piの電源を入れ直す度にIPアドレスが変更される場合があります。
Raspberry Piをサーバーとして使用する場合、他のPCはこのIPアドレスを指定してRaspberry Piと通信します。
このIPが変更される場合、その都度、何らかの方法でRaspberry PiのIPアドレスを確認する操作が必要になります。
この操作をRaspberry Piの電源を入れ直す度にするのは面倒です。
そこで、常に同じIPが設定されるようにするためにIPアドレスを固定する必要があります。

 

 

IPアドレスを固定するためには

IPアドレスを固定するためには、以下の情報を確認しておく必要があります。

  • デフォルトゲートウェイ
  • DNSサーバー

また、Raspberry PiのIPアドレスが他のPCのIPアドレスに被らないように確認する必要もあります。

IPアドレスの確認

Windows 10で各設定値を確認する場合、コマンドプロンプトを起動し、以下のコマンドを実行します。

ipconfig /all

以下の図の赤線で示す値をそれぞれ該当する箇所に入力します。

このWindows PCの場合、各値は以下の通りでした。

  • デフォルトゲートウェイ:192.168.1.1
  • DNSサーバー:192.168.1.1

これらの値は環境によって変化するので、適宜変更してください。
また、Raspberry PiとIPアドレスが被らないように、PCのIPアドレスもメモ帳などに控えておくと良いです。

 

 

network-configの編集について

network-configの編集は思っていた以上に厄介でした。
また、編集内容に問題がある場合、Raspberry Piの起動時にエラー箇所が表示されるのですが、表示が速すぎて確認できない場合があります。
このエラーが改善されないと、以下のようなメッセージが表示されて、Ubuntu Serverにログインできない場合があります。

Hangs After Bootup – cloud-init [1781]: YYYY-MM-DD HH:MM:SS,182 – cc_final_message.py[WARNING]: Used fallback datasource

このエラーについては以下のような質問がありました。

Ubuntu Server 20.04.2 LTS - Hangs After Bootup - cloud-init [1781]: YYYY-MM-DD HH:MM:SS,182 - cc_final_message.py[WARNING]: Used fallback datasource
I just installed Ubuntu Server 20.04.2 LTS and have a situation where it 'hangs' after booting up. It gets to (what I gu...

私の場合、このエラーが出た原因は、固定IPの設定をする際に設定項目と設定値との間に半角スペースがないことが原因でした。

良い設定例 gateways4: ***.***.***.*** 半角スペースあり
駄目な設定例 gateways4:***.***.***.*** 半角スペースなし

半角スペースの有無を確認して修正すると、上記のようなエラーは出なくなりました。

また、無線接続の設定でSSIDを入力する箇所(access-points:以降)があります。
デフォルトではこのSSIDは””で囲まれていません。
しかし、Ubuntuのチュートリアルでは、以下のように書かれています。

Note: network name must be enclosed in quotation marks.

では、SSIDを””で囲む場合と囲まない場合とで問題が生じるかというと、実際に試してみましたが、問題はありませんでした。
“”でSSIDを囲まなくても問題なくネットワークに接続されます。
ただ、囲めと書いてあるので、囲っておいて問題はありません。

network-configの設定にはoptionalというものがあります。
このoptionalの設定について調べてみると、以下のサイトに説明が書かれています。

YAML configuration
Top-level configuration structure: The general structure of a Netplan YAML file is shown below. version(number) Defines ...

そこから抜粋したoptionalの説明では、デフォルトはfalseとなっています。

optional (bool)

An optional device is not required for booting. Normally, networkd will wait some time for device to become configured before proceeding with booting. However, if a device is marked as optional, networkd will not wait for it. This is only supported by networkd, and the default is false.

networkdが何なのかさっぱり分かりませんでしたが、以下のサイトで違いが分かりました。

Ubuntu の Network設定 - Qiita
はじめにUbuntu の Network 設定は17.10から netplanベースに変更されている。ただ、Ubuntu を Desktop として利用する場合は従来通りの NetworkMana…

とりあえず、rendererの設定で、Ubuntu DesktopはNetworkManagerで、Ubuntu Serverはnetworkdになるようです。
今回はUbuntu Serverなのでnetworkdになり、optionalをtrueにすることでRaspberry Piの設定完了を待たずに起動を開始させているようです。
要は、Raspberry Piの起動を速めているということでしょうか?

さらにチュートリアルにある固定IPの設定値や説明文が一致していないのが謎でした。
例えば、gateway4:(デフォルトゲートウェイ)とnameservers:addresses:(DNSアドレス)の設定値が他のサイトでは一致しているのに設定例では一致していません。
まぁ、環境次第でデフォルトゲートウェイとDNSアドレスが必ずしも一致する必要はないようです。

インターネットに繋がらないのはデフォルトゲートウェイとDNSが異なるのが原因? | インターネット、IoT関連のお悩み解決
インターネット接続。 なんだかよくわからないけどとりあえずインターネットができる。 利用者側からすると仕組みまで理解せずともスマホやパソコンからお手軽にご利用できてしまいますね。 でも何かトラブルが発生した場合は仕組みを理解していないと直る...

各情報をきちんと調べて自分の環境に合った設定をすれば、私のように設定に時間が掛かることはないと思います。

 

 

有線接続の設定(固定IPの設定のみ)

有線でネットワークに接続する場合、動的IPアドレスを使用する場合はnetwork-configを特に編集する必要はありません。
ただし、固定IPを設定する場合、はnetwork-configの編集は以下のようになります。
ここでは、先に説明したIPアドレスの情報を例に説明します。

  • デフォルトゲートウェイ:192.168.1.1
  • DNSサーバー:192.168.1.1
version: 2
ethernets:
  eth0:
    dhcp4: false
    optional: true
    addresses:
      - 192.168.1.23/24
    gateway4: 192.168.1.1
    nameservers:
      addresses: [192.168.1.1]

固定IPアドレスを設定する場合、dhcp4:をfalseに設定します。
固定するIPアドレスはaddresses:に設定します。
ちなみに、/24は以下のサイトより、「2進数で桁数32桁のIPアドレスが、8桁(32-24)割り当てられるということを示す」そうです。

IPアドレスに付く /24 などの表記

デフォルトゲートウェイはgateway4:に設定します。
DNSサーバーはnameservers:adresses:に設定します。
各アドレスを設定する際にアドレスの先頭に半角スペースが空けられているか注意してください。

 

 

Wi-Fi接続の設定(SSIDステルス無効)

ここでは、SSIDステルスが無効で、動的IPアドレスを使用する場合と固定IPアドレス使用する場合の両方を説明します。
SSIDステルスが無効の場合、動的IPアドレスを使用するにしても、固定IPアドレスを使用するにしても特に混乱はないと思います。
むしろSSIDステルスを有効にしていることの方が稀かもしれません。

 

動的IPアドレス

使用しているWi-FiでSSIDステルス機能を無効にしている場合、設定は以下のようになります。
デフォルトではwifis以降は#があり設定が無効化されています。
このため、以下のように#を削除します。
次に、赤文字の**SSID****PSW**のそれぞれに接続しようとしているWi-FiのSSIDとパスワードを” “内に入力します。
変更する部分は、デフォルトでは、SSIDがmyhomewifi、パスワードがS3kr1tとなっています。

version: 2
ethernets:
  eth0:
    dhcp4: true
    optional: true
wifis:
  wlan0:
    dhcp4: true
    optional: true
    access-points:
      "**SSID**":
        password: "**PSW**"

 

固定IPアドレス

無線接続でSSIDステルスが無効、かつ固定IPアドレスを有効にする場合、設定例は以下の通りです。
デフォルトではwifis以降は#があり設定が無効化されています。
このため、以下のように#を削除します。
先述した有線接続での固定IPアドレスの設定と、無線接続のSSIDとパスワードの設定を組み合わせるだけです。
dhcp4をfalseにするか、削除することを忘れないでください。
また、各アドレスを設定する際にアドレスの先頭に半角スペースが空けられているか注意してください。

version: 2
ethernets:
  eth0:
    dhcp4: true
    optional: true
wifis:
  wlan0:
    dhcp4: false
    optional: true
    addresses:
      - 192.168.1.23/24
    gateway4: 192.168.1.1
    nameservers:
      addresses: [192.168.1.1]
    access-points:
      "**SSID**":
        password: "**PSW**"

 

 

Wi-Fi接続の設定(SSIDステルス有効)

SSIDステルスを有効にしてRaspberry Piをネットワークに接続する場合、相当厄介でした。
最初はとにかく設定方法が分からず、Ubuntu Serverのバージョンなども気にすることなく、目についた設定方法を片っ端から試していました。
途中からはバージョンも意識して設定していたのですが、それでもネットワークに接続できず、ルーターを疑ったり、Raspberry Piとルーターとの位置を疑ったりと色々と試しました。
それでも駄目で全く先に進まず、ホトホト困り果てていました。
そこで、最初はSSIDを無効にして、無線接続できるかどうかを試しましたが、接続できませんでした。
この理由は、設定項目に各アドレスを入力する際、半角スペースが空いていないからでした。
そこで、半角スペースの有無を確認して編集し直したところ、動的IPアドレスの設定では問題なく無線接続ができるようになりました。
このことから、ルーターや位置に問題がないことが分かりました。
その後、Ubuntu Server 20.04に限定してSSIDステルス(Hidden Access Point)への接続方法を調べた結果、以下のサイトが参考になりました。

特に、netplanのバージョン0.100以降で設定方法が異なるという点が大きな収穫でした。
ちなみに、Ubuntuにnetplanが導入されたのはバージョン17.10からだそうです。

さらに、netplanのバージョンが0.100になったのは、Ubuntu 20.04.2(2021年2月3日)からのようです。

FocalFossa/ReleaseNotes - Ubuntu Wiki

以下のサイトの方法も参考にしましたが、netwok-configでの設定では、ネットワークに接続できませんでした。

このサイトのUbuntuのバージョンが20.04.1なので、netplanのバージョンは0.99だと思います。

FocalFossa/ReleaseNotes/ChangeSummary/20.04.1 - Ubuntu Wiki

他の参考サイトではhiddenが有効になったのはnetplanのバージョン0.100以降と書かれています。
しかし、何故、netplanのバージョン0.99でhiddenが利用できたのかは不明です。
netplanの各設定については以下を参照してください。

YAML configuration
Top-level configuration structure: The general structure of a Netplan YAML file is shown below. version(number) Defines ...

ただ、パスワードにwpa_passphraseを利用した方法を紹介しているので、今後の参考として紹介させていただきました。
このサイトではパスワードにwpa_passphraseを利用しており、netplanの.yamlを編集しています。
自分の設定に合わせたwpa_passphraseの作成には以下のサイトを参考にしました。

Raspberry Pi のWi-Fi設定を事前に用意しておこう! | ラズパイダ
デスクトップ環境があっても無くても、Wi-Fiの設定はセットアップ時に用意可能です。Raspberry Pi Imagerが登場してから、オプションでWi-Fiのみならず、事前のセットアップを追加できるようになりました。 ただ、個人的にRa

私の場合は、network-configを編集していたので、その違いが関係していたかもしれません。
それ以外にもコマンドを実行して設定ファイルの生成と適用を行っています。
ただ、wpa_passphraseを利用している以外は内容は変わらないのに、なぜ私の環境下でネットワーク接続ができなかったのか不明です。

とりあえず、以下にnetwork-configでSSIDステルスを有効にした時の動的IPアドレスと固定IPアドレスの設定方法を紹介します。
WiFiの接続は、netplanのバージョンが0.99以前と0.100以降で設定が一部異なります。
動的IPアドレスと固定IPアドレスは、IPアドレスの設定が追加されるだけです。
やることは基本的には先述してきた内容と変わりません。
とはいえ、先述した内容をいちいち見返すのも面倒だと思うので、共通する内容をそのままに変更箇所の説明文を追加して説明します。

 

動的IPアドレス

netplan(0.100以前)

Ubuntu 17.10からUbuntu 20.04.1まではこの設定方法になるかもしれません。
ここで紹介する方法は非推奨なので、設定する際には自己責任でお願いします。
また、私自身、この方法は試していないので、実際にネットワークに繋がるかは不明です。
使用しているWi-FiでSSIDステルスを導入している場合、設定は以下のようになります。
デフォルトではwifis以降は#があり設定が無効化されています。
このため、以下のように#を削除します。
access-pointsの以下の内容が動的IPアドレスの設定と異なり、**SSID**の後に「\"\n scan_ssid=1\n #」が追加されます。
それ以外は、先ほどと同様に赤文字の**SSID****PSW**のそれぞれに接続しようとしているWi-FiのSSIDとパスワードを” “内に入力します。
変更する部分は、デフォルトでは、SSIDがmyhomewifi、パスワードがS3kr1tとなっています。

version: 2
ethernets:
  eth0:
    dhcp4: true
    optional: true
wifis:
  wlan0:
    dhcp4: true
    optional: true
    access-points:
      "**SSID**\"\n scan_ssid=1\n#":
        password: "**PSW**"

netplan(0.100以降)

Ubuntu 20.04.2からは、netplanのバージョンが0.100になるので、この設定方法になるかもしれません。
使用しているWi-FiでSSIDステルスを導入している場合、設定は以下のようになります。
デフォルトではwifis以降は#があり設定が無効化されています。
このため、以下のように#を削除します。
それ以外は、先ほどと同様に赤文字の**SSID****PSW**のそれぞれに接続しようとしているWi-FiのSSIDとパスワードを” “内に入力します。
あとはaccess-points以下にhidden: trueを追加するだけです。
変更する部分は、デフォルトでは、SSIDがmyhomewifi、パスワードがS3kr1tとなっています。

version: 2
ethernets:
  eth0:
    dhcp4: true
    optional: true
wifis:
  wlan0:
    dhcp4: true
    optional: true
    access-points:
      "**SSID**":
        hidden: true
        password: "**PSW**"

 

固定IPアドレス

netplan(0.100以前)

Ubuntu 17.10からUbuntu 20.04.1まではこの設定方法になるかもしれません。
ここで紹介する方法は非推奨なので、設定する際には自己責任でお願いします。
また、私自身、この方法は試していないので、実際にネットワークに繋がるかは不明です。
使用しているWi-FiでSSIDステルスを導入している場合、設定は以下のようになります。
デフォルトではwifis以降は#があり設定が無効化されています。
このため、以下のように#を削除します。
先述した有線接続での固定IPアドレスの設定と、無線接続のSSIDとパスワードの設定を組み合わせるだけです。
dhcp4をfalseにするか、削除することを忘れないでください。
また、各アドレスを設定する際にアドレスの先頭に半角スペースが空けられているか注意してください。
access-pointsの以下の内容が動的IPアドレスの設定と異なり、**SSID**の後に「\"\n scan_ssid=1\n #」が追加されます。
それ以外は、先ほどと同様に赤文字の**SSID****PSW**のそれぞれに接続しようとしているWi-FiのSSIDとパスワードを” “内に入力します。
変更する部分は、デフォルトでは、SSIDがmyhomewifi、パスワードがS3kr1tとなっています。

version: 2
ethernets:
  eth0:
    dhcp4: true
    optional: true
wifis:
  wlan0:
    dhcp4: false
    optional: true
    addresses:
      - 192.168.1.23/24
    gateway4: 192.168.1.1
    nameservers:
      addresses: [192.168.1.1] 
    access-points:
      "**SSID**\"\n scan_ssid=1\n#":
        password: "**PSW**"

netplan(0.100以降)

Ubuntu 20.04.2からは、netplanのバージョンが0.100になるので、この設定方法になるかもしれません。
使用しているWi-FiでSSIDステルスを導入している場合、設定は以下のようになります。
デフォルトではwifis以降は#があり設定が無効化されています。
このため、以下のように#を削除します。
先述した有線接続での固定IPアドレスの設定と、無線接続のSSIDとパスワードの設定を組み合わせるだけです。
dhcp4をfalseにするか、削除することを忘れないでください。
また、各アドレスを設定する際にアドレスの先頭に半角スペースが空けられているか注意してください。
それ以外は、先ほどと同様に赤文字の**SSID****PSW**のそれぞれに接続しようとしているWi-FiのSSIDとパスワードを” “内に入力します。
あとはaccess-points以下にhidden: trueを追加するだけです。
変更する部分は、デフォルトでは、SSIDがmyhomewifi、パスワードがS3kr1tとなっています。

version: 2
ethernets:
  eth0:
    dhcp4: true
    optional: true
wifis:
  wlan0:
    dhcp4: false
    optional: true
    addresses:
      - 192.168.1.23/24
    gateway4: 192.168.1.1
    nameservers:
      addresses: [192.168.1.1] 
    access-points:
      "**SSID**":
        hidden: true
        password: "**PSW**"

 

 

Ubuntu Severの起動に関して

Ubuntu Serverをインストールして、初回起動したとき、読み込みがあまりにも長いのでエンターキーで読み込みを中断していました。
そうすると、ログインIDとパスワードを入力を求められます。
通常であれば、初回はログインIDもパスワードもubuntuと入力すれば、新しいパスワードの設定を求められ、その後でログインできるようになります。
ところが、どういう訳かパスワードのエラーが出て、その先に進めませんでした。
この理由が以下のことでした。

警告
初回起動時にcloud-initと呼ばれるツールが設定を行っています。このツールが終了するのを待ってからログインしてください。通常は2分以内に終了しますが、ログインプロンプトとcloud-initの完了の間には休憩時間があります。もしプロセスを中断した場合は、もう一度始めなければなりません。ログインプロンプトが表示された後、さらに何行か出力されると完了したことになります。

Boot Ubuntu Server より抜粋

要するに、cloud-initの設定を素っ飛ばしていたので、上記のcloud-initの設定によるログインIDとパスワードの設定が行われていなかったようです。
この点に気付いたのは、以下のサイトを読んだからでした。

Raspberry Pi に Ubuntu を入れて SSH でログインするまでの A to B | Aqua Ware つぶやきブログ

cloud-initの設定が完了すると、以下の図のようなSSHに関する情報が表示されます。

Ubuntuのチュートリアルにも書かれているように、初回起動時にはネットワークに接続できません。
後日談として、OpenSSHの設定を試した際、無線接続は初回起動時にネットワークに接続できませんでしたが、不思議なことに有線接続では初回起動時でもネットワークに接続できました。
しかし、PuTTYの設定を試した際は、初回起動時にネットワークに接続できず、Raspberry Piの再起動が必要でした。

During the first boot, your Raspberry Pi will try to connect to this network. It will fail the first time around. Simply reboot sudo reboot and it will work.

ここまでの設定ではログイン名やパスワードの設定変更を行っていません。
このため、ログイン名・パスワードともにubuntuと入力すると新しいパスワードの入力を求められます。
それが完了するとログインするので、あとはチュートリアルに書かれているようにsudo rebootと入力すると再起動されます。

ネットワークに接続されたかどうかはpingで確認できます。
Windowsではコマンドプロンプトを起動し、pingでIPアドレスを指定すると、指定したIPアドレスから応答があります。
以下の図では、実際にnetwork-configで指定したIPアドレスをpingで指定しています。

再起動前は、「宛先ホストに到達できません」というメッセージが表示されています。
しかし、再起動後はバイト数と時間が表示されています。
ping以外ではルーターで接続確認ができますが、ルーターによって方法が異なるので、ここでは割愛します。

もう一つの接続確認方法として、Ubuntuのチュートリアルで紹介されている、コマンドプロンプトやWindows Terminalなどで、以下のarpコマンドを入力する方法もあります。
Windowsでは、コマンドの内容がUbuntuやMacと若干異なるので注意が必要です。
また、Raspberry Piによっても異なり、以下のコマンドはRaspberry Pi 4に対応しています。

arp -a | findstr dc-a6-32

Raspberry Piがネットワークに接続されていると、IPアドレスとMACアドレスが表示されます。

ちなみに、Ubuntuにログインしてsudo rebootを実行せずにRaspberry Piの電源を落として再起動しても同様です。
なぜこんなことをわざわざ書くかというと、今後、Raspberry Piをマウスやキーボードディスプレイを接続せずにヘッドレスで運用する場合が関係します。
ヘッドレス接続では、ディスプレイがないため、Ubuntuへのログインメッセージが表示されているかどうか分かりません。
このため、初回起動時にUbuntuにログインして、sudo rebootと入力して再起動するのは難しいです。
ヘッドレス接続を実行する場合は、network-configを編集して、Raspberry Piの初回起動時に数分間放置してから電源を切り、再び電源を入れればネットワークに接続されます。
実際にはnetwork-config以外も編集する必要がありますが、長くなるので次回にします。

 

 

まとめ

固定IPアドレスを指定したネットワーク接続の設定でnetwork-configを編集しましたが、ネットワークに接続することが出来ませんでした。
これは、まず設定項目とアドレスとの間に半角スペースがなかったことが原因でした。

次に、SSIDステルスを有効にしたルーターに接続を試みるも、これもネットワークに接続することができませんでした。
この原因として、Ubuntu 17.10からネットワーク接続にnetplanが導入され、Ubuntu 20.04.2でかつnetplan 0.100からSSIDステルスを有効にしたルーターへの接続設定が変更されたことが原因でした。

YAML configuration
Top-level configuration structure: The general structure of a Netplan YAML file is shown below. version(number) Defines ...

このような問題はUbuntuがアップデートされる度に起きる可能性があります。
今後、この問題に対処するには、Ubuntu wikiで自分が使用するUbuntuのReleaseからネットワーク接続に何が使用されているかを確認する必要がありそうです。

これまでの設定をしたにも関わらず、ネットワークに接続できないという問題が生じました。
これは、Raspberry Piでは、初回起動時にcloud-initの設定が完了した後で再起動しないとネットワーク接続の設定が反映されないためでした。
network-configの編集に問題がないという前提であれば、cloud-initの設定が完了するまでは数分間待ち、その後、Raspberry Piを再起動すればネットワークに接続されます。

Raspberry Piをnetwork-configの設定でネットワークに接続できるようにするためだけにかなりの時間を費やしてしまいました。
サーバーとしてRaspberry Piを利用する場合、無線ではなく有線の方が安定した接続になります。
このため、今回のように無線接続で、さらにSSIDステルスに対応した設定方法まで調べて説明する必要があったかは疑問です。
それでも、今後、サーバー以外にも利用する可能性がないわけではないので、設定方法を知っておいて損はないと思いました。
とは言え、最終的な目的に到達するには先はまだまだ長そうです…。

コメント

タイトルとURLをコピーしました