「Systemd-networkd」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(1版 をインポートしました)
1行目: 1行目:
 
{{Lowercase title}}
 
{{Lowercase title}}
 
[[Category:ネットワーク]]
 
[[Category:ネットワーク]]
[[Category:Virtualization]]
+
[[Category:仮想化]]
 
[[en:systemd-networkd]]
 
[[en:systemd-networkd]]
 
[[fr:systemd-networkd]]
 
[[fr:systemd-networkd]]
 
{{Related articles start}}
 
{{Related articles start}}
{{Related2|systemd|systemd}}
+
{{Related|systemd}}
{{Related2|systemd-nspawn|systemd-nspawn}}
+
{{Related|systemd-nspawn}}
{{Related2|Network bridge|ネットワークブリッジ}}
+
{{Related|ネットワークブリッジ}}
{{Related2|Network Configuration|ネットワーク設定}}
+
{{Related|ネットワーク設定}}
{{Related2|netctl|netctl}}
+
{{Related|netctl}}
{{Related2|Wireless Setup|ワイヤレス設定}}
+
{{Related|ワイヤレス設定}}
 
{{Related articles end}}
 
{{Related articles end}}
   
バージョン 210 から、systemd は [[udev|udev]] と networkd による基本的なネットワーク設定のサポートを含むようになりました。
+
バージョン 210 から、systemd は [[udev]] と networkd による基本的なネットワーク設定のサポートを含むようになりました。
   
 
''systemd-networkd'' はネットワーク設定を管理するシステムデーモンです。ネットワークデバイスが立ち上がるとそれを検出して設定を行い、仮想ネットワークデバイスを作成することもできます。このサービスは [[netctl|netctl]] などの通常のネットワーク管理ツールと一緒に動かすことが可能で、仮想化する場合、設定によってはツールを置き換えることもできます。特に [[systemd-nspawn|systemd-nspawn]] で管理するコンテナのための基本的な、もしくは複雑なネットワーク設定 (固定 IP、ブリッジ、vlan など) を設定する場合にこのサービスはとても役に立ちます。
 
''systemd-networkd'' はネットワーク設定を管理するシステムデーモンです。ネットワークデバイスが立ち上がるとそれを検出して設定を行い、仮想ネットワークデバイスを作成することもできます。このサービスは [[netctl|netctl]] などの通常のネットワーク管理ツールと一緒に動かすことが可能で、仮想化する場合、設定によってはツールを置き換えることもできます。特に [[systemd-nspawn|systemd-nspawn]] で管理するコンテナのための基本的な、もしくは複雑なネットワーク設定 (固定 IP、ブリッジ、vlan など) を設定する場合にこのサービスはとても役に立ちます。
   
[[udev|udev]] の仕事のようなネットワークインターフェイスの低レベルな設定を行うのには向いていません。
+
[[udev]] の仕事のようなネットワークインターフェイスの低レベルな設定を行うのには向いていません。
   
 
networkd は VM やコンテナなどのシンプルな設定のために作られていますが、イーサネット接続でも問題なく使うことは可能です。WiFi はサポートしていませんが、[[WPA supplicant|wpa_supplicant]] と一緒に使うことでワイヤレス接続を管理することができます。
 
networkd は VM やコンテナなどのシンプルな設定のために作られていますが、イーサネット接続でも問題なく使うことは可能です。WiFi はサポートしていませんが、[[WPA supplicant|wpa_supplicant]] と一緒に使うことでワイヤレス接続を管理することができます。

2015年1月6日 (火) 21:42時点における版

関連記事

バージョン 210 から、systemd は udev と networkd による基本的なネットワーク設定のサポートを含むようになりました。

systemd-networkd はネットワーク設定を管理するシステムデーモンです。ネットワークデバイスが立ち上がるとそれを検出して設定を行い、仮想ネットワークデバイスを作成することもできます。このサービスは netctl などの通常のネットワーク管理ツールと一緒に動かすことが可能で、仮想化する場合、設定によってはツールを置き換えることもできます。特に systemd-nspawn で管理するコンテナのための基本的な、もしくは複雑なネットワーク設定 (固定 IP、ブリッジ、vlan など) を設定する場合にこのサービスはとても役に立ちます。

udev の仕事のようなネットワークインターフェイスの低レベルな設定を行うのには向いていません。

networkd は VM やコンテナなどのシンプルな設定のために作られていますが、イーサネット接続でも問題なく使うことは可能です。WiFi はサポートしていませんが、wpa_supplicant と一緒に使うことでワイヤレス接続を管理することができます。

ノート: Systemd-networkd はまだ開発途上なので、更新する度に設定構文の変更や新しい機能がないか確認してください。changelog/news を読むのが推奨されます。

インストール

systemd 210 以上でサービスが利用可能です。ホストやコンテナで systemd-networkd.service有効化・起動することができます。

デバッグするときのために bridge-utils, net-tools, iproute2 パッケージをインストールすることが強く推奨されます。

ネットワーク設定によっては、systemd-nspawn@.service を編集して ExecStart 行にブートオプションを追加する必要があります。オプションの完全なリストは man 1 systemd-nspawn を参照してください。

DHCP による自動 DNS 設定を利用したい場合は、systemd-resolved を有効にして /run/systemd/resolve/resolv.conf から /etc/resolv.conf にシンボリックリンクを張る必要があります。詳しくは systemd-resolved.service(8) を見て下さい。

設定ファイル

設定ファイルは /usr/lib/systemd/network から、そして一時的な実行時のネットワークディレクトリ /run/systemd/network とローカルのネットワーク管理ディレクトリ /etc/systemd/network から読み込まれます。/etc/systemd/network 内のファイルが一番優先されます。

3つのタイプの設定ファイルが存在します。

  • .network ファイル。マッチするデバイスにネットワーク設定を適用します。
  • .netdev ファイル。マッチする環境に仮想ネットワークデバイスを作成します。
  • .link ファイル。ネットワークデバイスが作られた時、udev は最初にマッチする .link ファイルを探します。

これらの設定ファイルは同じルールに従っています:

  • [Match] セクションの全ての条件がマッチすれば、プロファイルが有効になります。
  • 空の [Match] セクションはどんな場合でもそのセクションを適用することを示します (いわば * ジョーカーのようなものです)。
  • それぞれのエントリは NAME=VALUE 構文によるキーです。
  • 全ての設定ファイルは辞書順でまとめてソートされ処理されます。ファイルがどのディレクトリにあるかは関係ありません。
  • 同じ名前のファイルは互いを置き換えます。
ヒント:
  • /usr/lib/systemd/network にあるシステムによって提供されたファイルを上書きする (アップグレードしても変わらないようにする) には、/etc/systemd/network に同じ名前のファイルを配置して /dev/null にシンボリックリンクを張って下さい。
  • VALUE には * ジョーカーを使うことができます (例: en* は全ての Ethernet デバイスにマッチします)。
  • Arch-general スレッドによれば、特定のコンテナのネットワーク設定は networkd 設定ファイルを使ってコンテナの中で設定するのがベストプラクティスです。

network ファイル

このファイルはネットワーク設定の変数の設定、特にサーバーとコンテナの設定のために存在します。

以下は基本的な構造の MyProfile.network ファイルになります:

/etc/systemd/network/MyProfile.network
[Match]
a vertical list of keys

[Network]
a vertical list of keys

[Address]
a vertical list of keys

[Route]
a vertical list of keys

[Match] セクション

よく使われるキーは:

  • Name= デバイスの名前 (例: Br0, enp4s0)
  • Host= マシンのホストネーム
  • Virtualization= システムが仮想化環境で起動されているかどうかをチェックします。Virtualization=no キーはホストマシンでのみ適用され、逆に Virtualization=yes はコンテナや VM で適用されます。

[Network] セクション

よく使われるキーは:

  • DHCP=DHCPv4 や DHCPv6 サポートを有効にします。both, none, v4, v6 が設定できます。
  • DNS=DNS サーバーのアドレスです。このオプションは複数個指定することができます。
  • Bridge= はリンクに追加するブリッジの名前です。

[Address] セクション

[Address] セクションでよく使われるキーは:

  • Address= は固定の IPv4 または IPv6 アドレスとそのプレフィックス長で、/ を使って区切ります (例: 192.168.1.90/24)。このオプションは必須です。

[Route] セクション

[Route] セクションでよく使われるキーは:

  • Gateway= はマシンのゲートウェイのアドレスです。このオプションは必須です。

完全なキーのリストについては、systemd.network(5) を参照してください。

ヒント: Address= が Address キーだけを含み Gateway= セクションが Gateway キーだけを含む場合、略式表記として [Network] セクションに Address=Gateway= キーを記述することができます。

netdev ファイル

このファイルは仮想ネットワークデバイスを作成します。

以下は基本的な構造の Mydevice.netdev ファイルになります:

/etc/systemd/network/MyDevice.netdev
[Match]
a vertical list of keys

[Netdev]
a vertical list of keys

[Match] セクション

よく使われるキーは Host=Virtualization= です。

[Netdev] セクション

よく使われるキーは:

  • Name= は netdev を作成するときに使うインターフェイスの名前です。このオプションは必須です。
  • Kind= は netdev の種類になります。現在 bridge, bond, vlan, macvlan がサポートされています。このオプションは必須です。

完全なキーのリストについては、systemd.netdev(5) を参照してください。

link ファイル

このファイルはカスタム udev ルールの代わりとなりデバイスが現れた時に udev によって適用されます。

以下は基本的な構造の Mydevice.link ファイルになります:

/etc/systemd/network/MyDevice.link
[Match]
a vertical list of keys

[Link]
a vertical list of keys

[Link] セクションでデバイスの設定を指定した場合、[Match] セクションは指定した link ファイルが指定したデバイスに適用できるかどうかを決めます。

[Match] セクション

よく使われるキーは MACADRESS=, Host=, Virtualization= です。

Type= はデバイスのタイプです (例: vlan)

[Link] セクション

よく使われるキーは:

MACAddressPolicy= は永続的な MAC アドレスをハードウェアに設定する persistent (ほとんどのハードウェアはこちらにするべきです) またはデバイスが現れた時にランダムな MAC アドレスを与える random を指定します。

MACAddressPoicy= を指定しなかった場合は MACAddress= を使います。

ノート: ほとんどの場合システムの /usr/lib/systemd/network/99-default.link で基本的に問題ありません。

使用方法

ヒント: コンテナネットワークの設定を始める前に:
  • netctl サービスを全て無効にしてください。無効にすることで systemd-networkd との危険な衝突を回避することができ設定のテストが楽になります。さらに、有効な netctl プロファイルが残ったまま終了する可能性が少なくなります。$ netctl list コマンドは全てのプロファイルのリストを表示し、有効になっているプロファイルには星印が付きます。
  • systemd-nspawn@.service を無効にしてコンテナを起動するときは # systemd-nspawn -bD /path_to/your_container/ コマンドとオプションを使ってください。ログオフやシャットダウンをするには、コンテナの中で # systemctl poweroff を実行してください。ネットワーク設定が要求を満たすようになったら、systemd-nspawn@.service有効化・起動してください。
  • dhcpcd.service が有効になっている場合は無効にしてください。このサービスは全てのインターフェイスに dhcpcd を使わせます。
  • コンテナで netctl プロファイルや、systemd-networkd.service が有効になっていないことを確認してください。
  • トラフィックをブロックするような iptables ルールが設定されていないことを確認してください。
  • コンテナ上でプライベートネットワークを設定する場合はパケットフォワーディング有効にしてください。
  • 設定ファイルを作った後、networkd デーモンが動作している場合はリロードを行なって下さい: # systemctl restart systemd-networkd
  • デーモンが起動したら systemd の networkctl コマンドでネットワークインターフェイスの状態が表示されます。
ノート: 下で説明している設定について
  • $ ip a コマンドの出力を、関連するインターフェイスにだけ絞っています。
  • ホストは起動しているメインの OS であり、コンテナは仮想マシンのゲストのことです。
  • インターフェイスの名前や IP アドレスは全てあくまでただの例です。

基本的な DHCP ネットワーク

以下はホストとコンテナで DHCP IP を有効にします。この場合、両方のシステムが同じインターフェイスを共有し、同じ IP を共有します。

/etc/systemd/network/MyDhcp.network
[Match]
Name=en*

[Network]
DHCP=v4

そして、コンテナで systemd-networkd起動・有効化してください。

もちろん en*$ ip link コマンドの出力でわかる Ethernet デバイスのフルネームに置き換えることは可能です。

  • ホストとコンテナで:
$ ip a
2: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 14:da:e9:b5:7a:88 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.72/24 brd 192.168.1.255 scope global enp7s0
       valid_lft forever preferred_lft forever
    inet6 fe80::16da:e9ff:feb5:7a88/64 scope link 
       valid_lft forever preferred_lft forever

デフォルトのホストネームは DHCP サーバーから取得され一時的なホストネームとして使用されます。

変更するには [DHCPv4] セクションに UseHostname=false を追加してください:

/etc/systemd/network/MyDhcp.network
[DHCPv4]
UseHostname=false

/etc/resolv.conf で DNS を設定するかわりに DHCP に設定してもらいたい場合、systemd-resolved を有効にして /run/systemd/resolve/resolv.conf から /etc/resolv.conf にシンボリックリンクを作成してください:

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

詳しくは systemd-resolved.service(8) を参照。

2つの別々な IP で DHCP を使う

ブリッジインターフェイス

仮想ブリッジインターフェイスを作成する:

/etc/systemd/network/MyBridge.netdev
[NetDev]
Name=br0
Kind=bridge
  • ホストとコンテナで:
$ ip a
3: br0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default 
    link/ether ae:bd:35:ea:0c:c9 brd ff:ff:ff:ff:ff:ff

インターフェイス br0 が表示されていますが DOWN になっているので注意してください。

イーサネットをブリッジに関連付ける

/etc/systemd/network/MyDhcp.network を編集して DHCP を削除します。ブリッジはどの IP にもバインドされないインターフェイスが必要なので、このデバイスを br0 にバインドするキーを追加してください。名前を適切なものに変更しましょう。

/etc/systemd/network/MyEth.network
[Match]
Name=en*

[Network]
Bridge=br0

ブリッジネットワーク

ブリッジのネットワークプロファイルを作成:

/etc/systemd/network/MyBridge.network
[Match]
Name=br0

[Network]
DHCP=v4

コンテナを起動するオプションを追加する

ホストとコンテナに別々の IP を割り当てたいので、ホストからコンテナのネットワークを切断する必要があります。切断するには、コンテナの起動コマンドに --network-bridge=br0 オプションを追加します。

# systemd-nspawn --network-bridge=br0 -bD /path_to/my_container

結果

  • ホスト側
$ ip a
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 14:da:e9:b5:7a:88 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.87/24 brd 192.168.1.255 scope global br0
       valid_lft forever preferred_lft forever
    inet6 fe80::16da:e9ff:feb5:7a88/64 scope link 
       valid_lft forever preferred_lft forever
6: vb-MyContainer: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
    link/ether d2:7c:97:97:37:25 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::d07c:97ff:fe97:3725/64 scope link 
       valid_lft forever preferred_lft forever
  • コンテナ側
$ ip a
2: host0: <BROADCAST,MULTICAST,ALLMULTI,AUTOMEDIA,NOTRAILERS,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 5e:96:85:83:a8:5d brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.73/24 brd 192.168.1.255 scope global host0
       valid_lft forever preferred_lft forever
    inet6 fe80::5c96:85ff:fe83:a85d/64 scope link 
       valid_lft forever preferred_lft forever

注意

  • ホストの br0 と、コンテナの host0 にそれぞれ IP アドレスが割り当てられました。
  • 2つの新しいインターフェイスが作成されます: ホストの vb-MyContainer とコンテナの host0 です。これは --network-bridge=br0 オプションによるものです。このオプションには --network-veth という別のオプションも含まれており、ホストとコンテナの間に仮想イーサネットリンクが作成されます。
  • host0 の DHCP アドレスはシステムの /usr/lib/systemd/network/80-container-host0.network ファイルから由来します。
  • ホスト側
$ brctl show
bridge name	bridge id		STP enabled	interfaces
br0		8000.14dae9b57a88	no		enp7s0
							vb-MyContainer

上記のコマンドの出力で2つのインターフェイスがバインドされたブリッジが確認できます。

  • ホスト側
$ ip route
default via 192.168.1.254 dev br0 
192.168.1.0/24 dev br0  proto kernel  scope link  src 192.168.1.87
  • コンテナ側
$ ip route
default via 192.168.1.254 dev host0 
192.168.1.0/24 dev host0  proto kernel  scope link  src 192.168.1.73

上記のコマンドの出力で IP アドレスとゲートウェイが 192.168.1.254 の br0host0 インターフェイスが有効になったのが確認できます。ゲートウェイのアドレスは systemd-networkd によって自動的に取得されます。

$ cat /run/systemd/resolve/resolv.conf
nameserver 192.168.1.254

固定 IP ネットワーク

ウェブサービス (例: FTP, http, SSH) を動かしている場合、デバイスごとに固定 IP を設定するのが役に立つかもしれません。システムの /usr/lib/systemd/network/99-default.link ファイルに MACAdressPolicy=persistent オプションがあれば (デフォルトの設定)、各デバイスは再起動しても同じ MAC アドレスを維持します。つまり、ゲートウェイのサービスを簡単に適切なデバイスに設定することができます。 まず、システムの /usr/lib/systemd/network/80-container-host0.network ファイルを除去します。永続的にするために (例: アップグレードしても変わらないように)、ホストとコンテナ両方で以下を行なって下さい。これによって /etc/systemd/network の同じ名前のファイルが /usr/lib/systemd/network のファイルよりも優先されるため /usr/lib/systemd/network/80-container-host0.network ファイルがマスクされます。

# ln -sf /dev/null /etc/systemd/network/80-container-host0.network

次に、コンテナで systemd-networkd有効化・起動してください。

必要な設定ファイル:

  • ホスト側
/etc/systemd/network/MyBridge.netdev
/etc/systemd/network/MyEth.network

MyBridge.network の修正

/etc/systemd/network/MyBridge.network
[Match]
Name=br0

[Network]
DNS=192.168.1.254
Address=192.168.1.87/24
Gateway=192.168.1.254
  • コンテナ側
/etc/systemd/network/MyVeth.network
[Match]
Name=host0

[Network]
DNS=192.168.1.254
Address=192.168.1.94/24
Gateway=192.168.1.254

Et voila!

参照