はじめに (対象読者・この記事でわかること)

この記事は、VMwareの軽量Linuxディストリビューション「Photon OS」を使って仮想マシンを構築し、IPv4アドレスをDHCPで自動取得したい方を対象としています。特に、最小構成のOSで動作させたいが、ネットワーク設定で躓いてしまった方に最適です。

この記事を読むことで、Photon OSでネットワークインターフェースを特定し、systemd-networkdを使ってDHCPでIPv4アドレスを取得する方法がわかります。また、設定が反映されない場合のトラブルシューティングも併せて解説するため、実務で即活用できる知識を習得できます。

前提知識

この記事を読み進める上で、以下の知識があるとスムーズです。 - Linuxの基本的なコマンド操作(lscpviなど) - systemdに関する基礎知識 - TCP/IPにおけるDHCPの仕組みの概要

Photon OSのネットワーク管理の仕組み

Photon OSは、CentOSやUbuntuとは異なりsystemd-networkdを標準で採用しており、従来の/etc/network/interfacesNetworkManagerは使いません。そのため、Debian系やRedHat系の知識だけでは設定が難しく、公式Wikiも断片的な情報に留まっています。

また、Photon OS 3.0以降、インストール時に「Minimal」や「Developer」などのプロファイルを選べますが、Minimalを選ぶとsystemd-networkdが有効になっていないこともあり、手動での有効化が必要です。本記事では、この「有効化が必要なケース」を含めて解説します。

systemd-networkdでDHCPを有効にする手順

ここでは、実際にPhoton OS 4.0を新規インストールした直後の状態から、IPv4アドレスをDHCPで取得するまでの手順を示します。作業はrootユーザーで実施することを推奨します。

ステップ1: インターフェース名を確認する

まず、対象となるネットワークインターフェース名を確認します。

Bash
ip link

出力例

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: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 00:0c:29:12:34:56 brd ff:ff:ff:ff:ff:ff

上記例ではeth0が存在しますが、state DOWNとある通り無効化されています。インターフェース名は環境によりens192ens33など異なる場合があります。

ステップ2: systemd-networkdを有効にする

Minimalインストール時にはsystemd-networkdが無効化されている場合があるため、有効化します。

Bash
systemctl enable --now systemd-networkd

有効化されたことを確認します。

Bash
systemctl is-active systemd-networkd

activeと表示されればOKです。inactiveの場合は以下で起動してください。

Bash
systemctl start systemd-networkd

ステップ3: .networkファイルを作成する

/etc/systemd/network/以下に、設定ファイルを作成します。ファイル名は任意ですが、今回は10-dhcp.networkとします。

Bash
vi /etc/systemd/network/10-dhcp.network

以下内容を記述します。[Match]セクションで対象インターフェースを指定し、[Network]セクションでDHCPを有効化します。

[Match]
Name=eth0

[Network]
DHCP=yes

複数インターフェースに対してDHCPを有効化したい場合は、Name=eth*のようにワイルドカードも利用可能です。

ステップ4: 設定をリロード&ネットワーク再起動

設定を即座に反映させるため、デーモンリロード後にネットワークを再起動します。

Bash
systemctl daemon-reload systemctl restart systemd-networkd

ステップ5: DHCPでアドレスが取得できたことを確認

ip addrでIPアドレスが付与されたことを確認します。

Bash
ip addr show eth0

出力例

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:12:34:56 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.123/24 brd 192.168.1.255 scope global dynamic eth0
       valid_lft 86400sec preferred_lft 86400sec

inet 192.168.1.123/24と表示されればDHCP取得成功です。

ハマった点・エラー解決

現象1: 「ファイルを作ったのにDHCPが動作しない」

systemd-networkdのログを確認すると、以下のようなエラーが出ることがあります。

eth0: Could not bring up interface: No such file or directory

これは、インターフェースがDOWN状態のまま設定が適用されたためです。手動でUPしてから再度リスタートすると解消します。

Bash
ip link set eth0 up systemctl restart systemd-networkd

現象2: 「設定ファイルの名前が紛らわしい」

.networkファイルの名前をdhcp.networkのように数字を付け忘れると、後から別の設定を追加したときに読み込み順序が制御できなくなります。10-20-のように番号を付けることで、適用優先度を明確にできます。

現象3: 「DNSが取得できない」

DHCPでIPは取得できても、/etc/resolv.confにDNSサーバーが書き込まれない場合があります。これは、systemd-resolvedが有効で競合していることが原因です。

以下のように、.networkファイルにUseDNS=trueを明示してから、再読込します。

[Match]
Name=eth0

[Network]
DHCP=yes

[DHCPv4]
UseDNS=true
Bash
networkctl reload

まとめ

本記事では、Photon OSでIPv4アドレスをDHCPで取得する手順と、想定されるトラブルシューティングを解説しました。

  • Photon OSはsystemd-networkdを標準採用しており、設定ファイルは/etc/systemd/network/配下に.network形式で作成する
  • Minimalインストール時はsystemd-networkdが無効化されていることがあるため、systemctl enable --nowで有効化する
  • .networkファイルの[Match]でインターフェースを、[Network]DHCP=yesを指定するだけで自動取得が可能
  • 設定が反映されない場合は、ip link set eth0 upでインターフェースを手動でUPしてからデーモンをリスタートする

この記事を通して、軽量ながらもDockerやKubernetesを動かすのに十分なPhoton OSを、最短でネットワーク接続可能な状態にできるようになりました。次回は、Photon OSでDocker Composeをインストールし、コンテナ開発環境を構築する方法を紹介します。

参考資料

  • VMware公式: Photon OS Wiki - Network Configuration with systemd-networkd https://github.com/vmware/photon/wiki/Networking-with-systemd-networkd
  • freedesktop.org: systemd.network(5) マニュアル https://www.freedesktop.org/software/systemd/man/systemd.network.html
  • VMware ブログ: Getting Started with Photon OS https://blogs.vmware.com/vsphere/2019/04/photon-os-3-0.html