systemd-networkd徹底解説:Linuxネットワーク設定完全ガイド

systemd-networkdは、systemdに統合されたネットワーク管理デーモンで、サーバーやコンテナなど軽量なLinux環境でネットワーク構成を効率的に管理する仕組みを提供します。

systemd-networkdとは

systemd-networkdは、ネットワークインターフェイスを自動検出し、定義ファイルに応じて構成・制御を行うシステムデーモンです。
特にデスクトップ向けのNetworkManagerとは異なり、GUIを必要としない軽量な構成が特徴です。
systemd-nspawnコンテナやサーバー用途では標準的なネットワーク管理方法として広く利用されています。

主な特徴:

  • 静的IP・DHCP設定の両対応
  • VLAN、Bonding、Bridgeなどの仮想デバイスサポート
  • systemd-resolvedとの統合によるDNS管理
  • systemctlコマンドで一元的に制御可能

基本構成ファイルの種類

systemd-networkdの設定ファイルはすべて/etc/systemd/network/内に保存されます。

ファイル拡張子用途
.network各ネットワークインターフェイスの詳細設定(DHCPや静的IP)
.netdev仮想デバイス(Bridge, VLAN, Bondなど)の作成
.linkMACアドレス・デバイス名・MTUなどリンク属性を制御

ファイル名の数字が小さい順に読み込まれ、後のファイルが設定を上書きします。たとえば10-eth0.network → 20-bond0.netdevの順です。

サービスの起動と管理

systemd-networkdを利用するには、サービスを有効化および起動します。

sudo systemctl enable systemd-networkd
sudo systemctl start systemd-networkd

状態確認:

systemctl status systemd-networkd.service

また、ネットワーク状態を一覧するには次のコマンドを使用します。

networkctl list
networkctl status eth0

基本設定例

DHCPで自動設定を行う場合

[Match]
Name=eth0

[Network]
DHCP=yes

IPv4・IPv6両方のDHCP取得を有効化します。

固定IPを設定する場合

[Match]
Name=eth0

[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=8.8.8.8

手動で割り当てる場合に利用します。設定を反映するには以下を実行します。

sudo systemctl restart systemd-networkd

VLANの作成例

[NetDev]
Name=vlan10
Kind=vlan

[VLAN]
Id=10
[Match]
Name=vlan10

[Network]
Address=192.168.10.10/24
Gateway=192.168.10.1

VLAN ID 10の仮想デバイスを作成し、静的アドレスを設定します。

Bridge(ブリッジ)の設定例

[NetDev]
Name=br0
Kind=bridge
[Match]
Name=br0

[Network]
Address=192.168.1.10/24
Gateway=192.168.1.1
DNS=8.8.8.8
[Match]
Name=eth0
[Network]
Bridge=br0

これでeth0がbr0ブリッジに接続されます。

systemd-resolved連携

.networkファイルでDNSを指定する場合や、DHCP経由でDNSを取得する場合、systemd-resolvedとの連携が必要です。
以下のコマンドで正しく動作させます。

sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
sudo systemctl enable systemd-resolved
sudo systemctl start systemd-resolved

これによりDNS解決がsystemd-managed方式になります。

主な[Network]セクションオプション

オプション名説明
DHCP=DHCPモードを設定(yes, ipv4, ipv6
Address=静的IPとサブネットを指定(例:192.168.1.10/24
Gateway=既定ゲートウェイ設定
DNS=DNSサーバーのアドレスを指定
Domains=DNS検索ドメインを定義
IPv6PrivacyExtensions=一時IPv6アドレスを使用する
IPv6AcceptRA=ルーター広告受信を許可
BindCarrier=特定インターフェイス有効時のみ起動
LinkLocalAddressing=リンクローカルアドレスの自動生成制御

これらの設定はsystemd.network(5)マニュアルで詳細定義されています。

設定の再読込と確認

設定変更後は以下の手順で再読込します。

sudo systemctl daemon-reload
sudo systemctl restart systemd-networkd

ネットワーク状態は以下で確認できます。

networkctl status

systemd-networkd-wait-onlineとは

systemd-networkd-wait-online.serviceは、ネットワーク接続の確立完了を待機してから他のサービスを起動するためのユニットです。
起動時にネットワーク接続を完全に確立させたいサーバー構成で有用です。デフォルトのタイムアウトは120秒で、--timeoutオプションで変更できます。

トラブルシューティング

・ログの確認

journalctl -u systemd-networkd

・競合サービス(NetworkManager等)が動作中なら停止

sudo systemctl disable NetworkManager

networkctlでインターフェイスがconfiguringのままの場合は設定ミスやDHCPサーバー応答なしが原因です。

まとめ

systemd-networkdは、軽量でスクリプト依存性の少ないネットワーク管理を実現するシステムレベルデーモンです。
.network.netdev.linkファイルを駆使すれば、単一サーバーの静的IP設定から複雑なVLAN・ブリッジ構成まで柔軟に対応します。
NetworkManagerやnetplanと異なり、明示的で再現性の高い設定管理が可能なため、特にサーバーや組み込み環境での利用に最適です。

にいやん

出身 : 関西 居住区 : 関西 職業 : 組み込み機器エンジニア (エンジニア歴13年) 年齢 : 38歳(2022年11月現在) 最近 業務の効率化で噂もありPython言語に興味を持ち勉強しています。 そこで学んだことを記事にして皆さんとシェアさせていただければと思いブログをはじめました!! 興味ある記事があれば皆さん見ていってください!! にほんブログ村