
systemd-networkdを使って固定IPを簡単に設定する

Debianで固定IPにするとき、以前は/etc/network/interfaces
や/etc/network/interfaces.d/
以下に設定を書いたり、Network-managerのnmcli
を使って設定していましたが今はsystemd-networkdを使えば簡単に固定IPにできるのでメモ。
- 参考
- SystemdNetworkd - Debian Wiki: https://wiki.debian.org/SystemdNetworkd
- systemd-networkd - ArchWiki: https://wiki.archlinux.jp/index.php/Systemd-networkd
- Debian Bullseye(11)での固定IP設定をsystemdでする - Qiita: https://qiita.com/dj5fs/items/995a156a9f161f640a31
はじめに/etc/network/
にあるinterfaces
をリネームして保存します。使わないので無くてもよいのですが念の為に保存しておきます。
cd /etc/network/
sudo mv interfaces interfaces.save
systemd-networkd
を有効にします。
sudo systemctl enable systemd-networkd
ip a
でNICの名前を確認します。名前がens18
とわかったので控えておきます。
ip a
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 5e:9d:bb:f7:83:b6 brd ff:ff:ff:ff:ff:ff
altname enp0s18
inet 192.168.0.110/24 brd 192.168.0.255 scope global ens18
/etc/systemd/network/
以下にlan0.network
という名前で以下のようにNICの設定ファイルを作成します。
[Match]
Name=ens18
[Network]
Address=192.168.0.110/24
Gateway=192.168.0.100
DNS=192.168.0.100
設定ファイルの詳細はman systemd.network
をすると丁寧に説明してあるので、それを見てもらうとして、これを説明するとMatch
セクションのName
に調べておいたNICのデバイス名、Network
セクションには、ネットワークのそれぞれの設定を書いています。
あとはこれでマシンを再起動すれば、NICを固定IPにする設定は終わりです。超簡単!
今回初めてsystemd-networkdを使ったけど、調べてみると細かい設定がいろいろできるようなので、これからネットワーク周りはsystemd-networkdを使うのが良さそう。
systemd-networkdで1つのNICに複数IPを割り当てる
蛇足になるから書かなかったけどやっぱり書いておきます。
- 参考: networking - add multiple static ip addresses to a server with systemd-networkd - Super User: https://superuser.com/questions/775884/add-multiple-static-ip-addresses-to-a-server-with-systemd-networkd
固定IPが必要になったのは、Samba ADで必要になったからだけど、問題はNIC1つしかないマシンにSamba AD用の固定IPを割り当てる必要がありました。
LinuxではNICに複数IPを割り当てられるので、それで割り当てればとすぐに思いつきますが、問題はsystemd-networkdで複数IPを割り当てるにはどうしたらいいかです。
manを見てもよくわからなかったので検索したところ、NetworkセクションにAddressを2つ書けばいいという拍子抜けするぐらい簡単な答えでした。ということで、こんな感じに書くと設定されました。
[Match]
Name=ens18
[Network]
Address=192.168.0.110/24
Address=192.168.0.111/24
Gateway=192.168.0.100
DNS=192.168.0.100
これは複数IPだけ必要だったのでAddressを並べて書いたけど、別の場所とつなぐ場合はAddressセクションを複数作って書けばOK。
こんなに簡単とは。これからネットワーク周りはsystemd-networkd使ったほうがいいな。