/etc/network/interfacesはもう古い、これからはNetplanの時代
古いDebian系で/etc/network/interfacesを編集することに慣れている方にとって、Ubuntu 18.04以降のNetplanは少し戸惑うかもしれません。Netplanは、バラバラなコマンドで設定するのではなく、YAML形式を使用します。この宣言的(declarative)なアプローチにより、インフラ管理の整合性が向上します。
以前、CentOSからUbuntu 22.04に移行した際、ネットワーク設定ファイルがどこにあるか探すだけで午後を丸一日潰したことがあります。その際、Ubuntu Desktopのパフォーマンス最適化についても同時に調査していました。最初はYAMLのインデント(空白)に対する厳格さに苛立ちを感じることもありました。しかし、50ノード以上のクラスターを展開する際、Netplanが非常に強力であることに気づきました。Ansibleを通じた設定の同期が、従来の方法よりも遥かに迅速かつミスなく行えるからです。
Netplanと従来の手法は何が違うのか?
LinuxエコシステムにおけるNetplanの立ち位置を理解するために、以下の比較表を見てみましょう:
- ifupdown (従来型): シンプルですが、ネットワークカードが10枚以上あったり、複雑なBond/Bridgeを構成したりすると管理が困難になります。
- NetworkManager: Wi-Fi接続が柔軟なため、ノートPCやデスクトップには最適ですが、サーバー環境には少し重すぎます。
- Netplan (現代的): 抽象化レイヤー(Abstraction layer)として機能します。YAMLファイルを記述すると、Netplanがそれを
systemd-networkdやNetworkManagerが処理できる形式に変換します。
運用におけるメリットとデメリット
メリット
- 階層構造: YAMLファイルを見れば、IP、ネットワークカード、ブリッジの関係が一目でわかります。非常に直感的です。
- セーフモード:
netplan tryコマンドは最も価値のある機能です。変更を確定するまでに120秒の猶予があります。設定ミスでSSH接続が切断されても、システムは自動的に元の状態にロールバックされます。 - モジュール管理:
/etc/netplan/内に設定を複数のファイルに分割して保存できるため、メンテナンスが容易です。
デメリット
- YAMLの厳格な構文: 空白が一つ多かったり、スペースの代わりにタブキーを使ったりするだけで、設定全体が機能しなくなります。これは初心者にとって最も多いミスです。
代表的な3つの設定シナリオ
ファイルを編集する前に、ip aコマンドを使用してインターフェース名(例:eth0、enp0s3、ens18など)を正確に確認してください。ネットワークトラブルが発生した場合は、Linuxでのネットワーク接続問題の診断とトラブルシューティングガイドも参考にしてください。
1. 正確な固定IP(Static IP)の設定
設定ディレクトリに移動し、ファイルを開きます(通常は 01-netcfg.yaml):
sudo nano /etc/netplan/01-netcfg.yaml
以下はサーバー向けの標準的な設定サンプルです:
network:
version: 2
renderer: networkd
ethernets:
enp0s3:
dhcp4: no
addresses:
- 192.168.1.100/24
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 1.1.1.1]
重要な注意点: Ubuntu 22.04以降、gateway4というキーワードは非推奨(廃止)となりました。長期的な互換性を確保するため、上記のようにroutes構造を使用することをお勧めします。
2. 仮想化(KVM/LXD)用のネットワークブリッジ作成
仮想マシンやLXDコンテナのインストールと管理を行う場合、VMが外部ネットワークと通信するためのブリッジが必要です。物理カードにIPを割り当てる代わりにブリッジにIPを割り当てますが、より高いパフォーマンスを求めるなら物理ネットワークカードを仮想マシンに直接割り当てる方法もあります。
network:
version: 2
renderer: networkd
ethernets:
enp0s3:
dhcp4: no
bridges:
br0:
interfaces: [enp0s3]
addresses: [192.168.1.100/24]
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses: [8.8.8.8]
parameters:
stp: true
forward-delay: 4
3. 帯域幅拡大と冗長化のためのボンディング(LACP)設定
エンタープライズ環境では、2本のネットワークケーブルを異なる2つのスイッチに接続することで、単一障害点(SPOF)を回避します。Netplanでは、これを非常にスマートに処理できます:
network:
version: 2
renderer: networkd
ethernets:
enp0s3:
dhcp4: no
enp0s8:
dhcp4: no
bonds:
bond0:
interfaces: [enp0s3, enp0s8]
addresses: [10.0.0.50/24]
parameters:
mode: 802.3ad
mii-monitor-interval: 100
lacp-rate: fast
transmit-hash-policy: layer2+3
失敗の許されない設定適用の手順
いきなり sudo netplan apply を実行してはいけません。構文エラーやIP設定ミスがあると、即座にSSHから締め出されます。サーバーが数百キロ離れたデータセンターにある場合、これは致命的なトラブルになります。セキュリティを強化するため、Fail2banでUbuntuサーバーをブルートフォース攻撃から守る設定も併せて行うことをお勧めします。
必ず以下を使用してください:
sudo netplan try
このコマンドは構文をチェックし、テスト実行します。120秒以内に確定操作を行わない場合、システムは自動的に元の設定に戻ります。詳細なエラーを確認したい場合は、デバッグフラグを追加してください:
sudo netplan --debug apply
ケアレスミスを防ぐための実戦経験
- 常に2つの半角スペースを使用する: タブ(Tab)は絶対に使わないでください。YAMLではタブは無効な文字として扱われます。
- インターフェース名の確認: カーネルのアップデートやハードウェアの変更後、
eth0がens18に変わることがあります。ip link showで再確認しましょう。 - 再起動後のエラー:
netplan applyは成功したのに再起動後にネットワークが繋がらない場合は、systemctl status systemd-networkdでサービスの状態を確認してください。
Netplanをマスターすることは、Infrastructure as Code(IaC)へと進むための重要な一歩です。YAMLに慣れてしまえば、ネットワーク管理がより論理的でクリーン、震してプロフェッショナルなものになることに気づくでしょう。
