Fujitsu Cloud Direct ブログ

初心者エンジニア向け技術ブログ

Ubuntuについて知ろう 〜 サーバーのネットワークはNetplanで設定しよう

こんにちは。日本仮想化技術株式会社の水野です。

今時のコンピューターは、ネットワークに繋がらなければ始まりません。そのために必要になるのが、いわゆるネットワーク設定です。

Ubuntuデスクトップの場合は、LANケーブルを挿すだけでネットワークに繋がりますし*1、Wi-FiもGUIからポチポチするだけで設定できるため、特に困ることはないでしょう。ですがサーバーの場合はそうはいきません。サーバーは外部から接続を受け付ける都合上、IPアドレスを固定する必要があります。またGUIを持たないため、CLIでの設定方法を知っておかねばなりません。

現在のUbuntuサーバーでは、Netplanという仕組みでネットワーク設定を行います。今回はこのNetplanについて解説しましょう。

とりあえず挿せば繋がります。書籍は上に置かない方がいいです。

Netplanとは

Netplanとは、Canonicalが開発する抽象的なネットワーク設定レンダラーです。

netplan.io

Linuxにおいて、ネットワークの管理設定を行うツールには、いくつかの実装があります。例えばUbuntuデスクトップではNetworkManagerでネットワークを設定しますし、Ubuntuサーバーではsystemd-networkdを使います。

wiki.gnome.org

そして当然ですが、ツールごとに具体的な設定方法が異なります。IPアドレスやDNSサーバーのアドレス、ゲートウェイのアドレスなど、設定したい項目は決まりきっているのに、ツールごとに異なるお作法に則って、設定ファイルを記述したり、GUIをポチポチしたりする必要があるのです。これは非効率ですよね。

Netplanは、こうした設定値をNetplan用のYAMLファイルとして記述し、そこから各バックエンド向けの設定ファイルを生成する仕組みです。バックエンドの違いを意識せず、ネットワーク設定を抽象化して管理できるというわけです*2

というわけで、Ubuntuサーバーでネットワーク設定を行うためには、Netplanの使い方を覚える必要があるわけです。

インストーラーでネットワーク設定を行う

Netplanでは、Netplan用のYAMLファイルを用意して、そこに各種設定値を書き込みます。……なのですが、実は手動でファイルを編集しないで済ます方法もあります。

というのもUbuntuサーバーは、インストーラーで指定したネットワーク設定をNetplanの設定として書き出し、インストール後も引き継ぐという仕様になっています。そのためサーバーのIPアドレス等が最初から決まっているのであれば、インストール中に対話的に設定を行うことで、Netplanの設定も完了させることができます。
この方法は簡単なのでお勧めです。

インストーラーのネットワーク設定で「Edit IPv4」を選択し、「Manual」でIPアドレス等々を設定します。

インストール時のネットワーク設定は、/etc/netplan/00-installer-config.yamlに出力されています。catしてみると、このようにインストール時に設定したIPアドレス等が記述されているのがわかります。

インストール後に固定IPアドレスを設定する

Ubuntuサーバーはインストーラーでネットワークの手動設定を行わなかった場合、デフォルトでDHCPを使用する設定でインストールされます。/etc/netplan/00-installer-config.yamlは以下のようになっています*3

# This is the network config written by 'subiquity'
network:
  ethernets:
    enp0s3:
      dhcp4: true
  version: 2

Netplanは、/etc/netplan以下にあるYAMLファイルをファイル名順に読み込みます。そして同一項目の設定は、後から読み込んだ内容のみが有効になります。そのためインストール後にネットワーク設定を変更したい場合は、インストーラーが作成した00-installer-config.yamlは編集したり削除したりせず、これよりも後に読み込まれる名前で新しい設定ファイルを作成し、必要な設定項目のみを上書きするとよいでしょう。具体的には「00」よりも大きい数字をプレフィックスにつけたファイルを作りましょう。例えば「/etc/netplan/99-local.yaml」といった具合です。

デフォルトのDHCPをやめ、固定IPアドレスを設定したい場合は、/etc/netplan/99-local.yamlを以下の内容で作成してください*4

network:
  ethernets:
   enp0s3:
     dhcp4: false
     addresses:
     - 192.168.1.20/24
     routes:
       - to: default
         via: 192.168.1.1
     nameservers:
       addresses:
       - 192.168.1.4
       search: []
  version: 2

最後に、「netplan apply」で設定を適用します。

$ sudo netplan apply

netplan tryで万が一のミスに備える

直接アクセスできるPCであればともかく、SSHでしかアクセスできないサーバーのIPアドレスを直接変更するのは非常にリスキーです。というのも、設定の不備があり、新IPでアクセスできなかった場合に、修正すらできず詰んでしまうためです。そこでNetplanには「try」というサブコマンドが用意されています。これは実行すると設定を反映するものの、120秒以内にEnterキーが押されなかった場合に、自動で設定をロールバックします。それでは先ほどの/etc/netplan/99-local.yamlを使って、DHCPから固定IPアドレスに変更する作業を例に解説します。

まずIPコマンドで現在のIPアドレスを確認しておきましょう。筆者の環境では以下のようになりました。ネットワークデバイスenp0s3に192.168.1.112というアドレスが割り当てられているのがわかります。

$ ip -4 -c a s dev enp0s3
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    inet 192.168.1.112/24 metric 100 brd 192.168.1.255 scope global dynamic enp0s3
       valid_lft 258850sec preferred_lft 258850sec

IPアドレスが変更されるとSSH接続が切断されてしまいます。そこでセッションに再アタッチできるよう、byobuを起動します。Ubuntuサーバーであればデフォルトでインストールされていますが、もしもそうでない場合はbyobuパッケージをインストールしてください。

$ sudo apt install byobu
$ byobu

前述のIP固定用のYAMLファイルを用意したら、netplan tryを実行します。

$ sudo netplan try

byobuの上でnetplan tryを実行した状態。IPアドレスが即座に変更されるため、SSH接続は切断されます。

120秒のカウントダウンがはじまるのですが、このタイミングでIPアドレスが変わるため、SSH接続が切断されます。そこでSSHが切断されたら、新IPに対してSSHを繋ぎ直してください。接続に成功したら、再度byobuコマンドを実行して、切断されたセッションに再アタッチします。するとnetplan tryの実行が継続された状態になるので、Enterキーを押して設定を確定させましょう*5

新しいIPアドレスにSSHを繋ぎ直して(ウィンドウのタイトルバーに注目)、byobuに再アタッチした状態。実行中のnetplan tryを再び操作できるようになるため、ここでEnterキーを押して設定を確定させます。

最後にipコマンドを実行してIPアドレスを確認しておきましょう。設定通りのIPアドレスが割り当てられていることが確認できました。

2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    inet 192.168.1.20/24 brd 192.168.1.255 scope global enp0s3
       valid_lft forever preferred_lft forever

netplan tryは、ネットワークの設定を失敗すると復旧が難しくなる遠隔地のサーバーなどで、試しに設定を反映してみたい場合に有効です。

NetplanはIPを固定するといったシンプルな使い方だけでなく、Wi-Fiに接続する、NICをボンディングする、VLANを使うなど、様々な設定が可能です。ドキュメントにはユースケースごとのHow toが用意されていますので、どのようなことができるのか、軽く目を通しておくのがおすすめです。

netplan.readthedocs.io

最後に宣伝です。 今なら、最大半年無料でサーバー主になれるチャンスです。 ぜひ、FJCloud-Vをお試しください。こちらをクリック↓↓↓↓↓↓↓

*1:DHCPが利用できる環境に限りますが、まあ大抵のLANであれば問題ないでしょう。

*2:とはいえ現在では、Netplanが直接設定を管理できるバックエンドはsystemd-networkdのみで、NetworkManagerを使う場合は、NetworkManagerに設定を一任することになっています。ただし将来的にはNetplanでNetworkManagerの設定を管理できるようにする計画も存在します。

*3:デバイス名(enp0s3)は環境によって異なる場合があるため、適宜読み替えてください。

*4:当然ですが、IPアドレス、DNSサーバーのアドレス、ゲートウェイのアドレスは適宜読み替えてください。

*5:新IPだと接続できないというような場合は……楽しいトラブルシューティングの始まりです。netplan tryをタイムアウトさせると、実行前の状態にロールバックされますので、古いIPアドレスで繋ぎ直して原因を調べましょう。