「Systemd-networkd」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(不要なタグを削除。)
(リンクを修正)
 
(5人の利用者による、間の48版が非表示)
1行目: 1行目:
 
{{Lowercase title}}
 
{{Lowercase title}}
[[Category:ネットワーク]]
+
[[Category:ネットワークマネージャ]]
 
[[Category:仮想化]]
 
[[Category:仮想化]]
 
[[en:systemd-networkd]]
 
[[en:systemd-networkd]]
8行目: 8行目:
 
{{Related articles start}}
 
{{Related articles start}}
 
{{Related|systemd}}
 
{{Related|systemd}}
  +
{{Related|systemd-resolved}}
 
{{Related|systemd-nspawn}}
 
{{Related|systemd-nspawn}}
 
{{Related|ネットワークブリッジ}}
 
{{Related|ネットワークブリッジ}}
 
{{Related|ネットワーク設定}}
 
{{Related|ネットワーク設定}}
{{Related|netctl}}
+
{{Related|ワイヤレスネットワーク設定}}
{{Related|ワイヤレス設定}}
+
{{Related|:Category:ネットーク設定}}
 
{{Related articles end}}
 
{{Related articles end}}
   
  +
''systemd-networkd'' はネットワーク設定を管理するシステムデーモンです。ネットワークデバイスが立ち上がるとそれを検出して設定を行います。また、仮想ネットワークデバイスを作成することもできます。このサービスは [[systemd-nspawn]] で管理されるコンテナまたは仮想マシンの複雑なネットワークを設定する場合にとても役に立ちます。また、単純な接続でも正常に動作します。
バージョン 210 から、systemd は [[udev]] と networkd による基本的なネットワーク設定のサポートを含むようになりました。
 
 
''systemd-networkd'' はネットワーク設定を管理するシステムデーモンです。ネットワークデバイスが立ち上がるとそれを検出して設定を行い、仮想ネットワークデバイスを作成することもできます。このサービスは [[netctl]] などの通常のネットワーク管理ツールと一緒に動かすことが可能で、仮想化する場合、設定によってはツールを置き換えることもできます。特に [[systemd-nspawn]] で管理するコンテナのための基本的な、もしくは複雑なネットワーク設定 (固定 IP、ブリッジ、vlan など) を設定する場合にこのサービスはとても役に立ちます。
 
   
 
== 基本的な使い方 ==
 
== 基本的な使い方 ==
24行目: 23行目:
 
=== 必要なサービスと設定 ===
 
=== 必要なサービスと設定 ===
   
systemd-networkd を使用するには、以下の2つのサービスを[[起動]]して、システムのブート時に実行されるように[[有効化]]する必要があります:
+
systemd-networkd を使用するには、{{ic|systemd-networkd.service}} [[起動/有効化]]ます
   
  +
{{Note|ネットワークを設定したい他のサービスが起動していないことを確認する必要があります。実際、複数のネットワークサービスが競合してしまいます。現在動作しているサービスの一覧は {{ic|1=systemctl --type=service}} で確認でき、それらを [[停止]] して下さい。}}
* {{ic|systemd-networkd.service}}
 
* {{ic|systemd-resolved.service}}
 
   
  +
また、ネットワーク名前解決サービスである [[systemd-resolved]] は,以下の点を考慮して任意に設定して下さい。
{{Note|''systemd-resolved'' が必要になるのは ''.network'' ファイルで DNS エントリを指定したり、networkd の DHCP クライアントから DNS アドレスを取得する場合です。もしくは {{ic|1=/etc/resolv.conf}} を手動で管理することもできます。}}
 
   
  +
* 使用する DNS を適切に設定するためには、[[resolv.conf]] と ''systemd-resolved'' の相互作用を理解することが重要です。 [[systemd-resolved]] にいくつかの解説があります。
[[resolv.conf]] の互換性のために、既存のファイルを削除または名前変更して以下のシンボリックリンクを作成してください (systemd-resolved を使用する場合):
 
  +
* DNS エントリーが ''.network'' ファイルで指定されている場合は ''systemd-resolved'' が必要です。
  +
* ''systemd-resolved'' は、DHCP サーバーまたは IPv6 ルーターから DNS アドレスを取得する場合にも必要です。
  +
({{ic|1=DHCP=}} および {{ic|1=IPv6AcceptRA=}} セクションの {{ic|[Network]}} および {{ic|1=UseDNS=yes}} (デフォルト) 、{{ic|[DHCPv4]}}、{{ic|[DHCPv6]}}、{{ic|[IPv6AcceptRA]}}、{{man|5|systemd.network}} を参照してください。) を設定します。
  +
* ''systemd-networkd'' 無しでも ''systemd-resolved'' を使うことができることに注意してください。
   
  +
=== system-networkd-wait-online ===
# ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
 
   
  +
{{ic|systemd-networkd.service}} を有効にすると、 {{ic|systemd-networkd-wait-online.service}} も有効になります。これは、ネットワークが構成されるのを待つワンショット・システム・サービスです。後者は {{ic|1=WantedBy=network-online.target}} を持っているので、 {{ic|network-online.target}} 自身が有効になっているか、他のユニットに引き寄せられた時にのみ起動します。 [[Systemd#ネットワークが稼働した後にサービスを実行する]]も参照してください。
さらに、''systemd-resolved'' のローカル DNS スタブリゾルバ (インターフェイスごとに LLMNR や DNS マージングが使われます) を使うために、{{ic|/etc/nsswitch.conf}} の {{ic|dns}} を {{ic|resolve}} に置き換えます:
 
   
  +
デフォルトでは、 {{ic|systemd-networkd-wait-online.service}} は、認識され ''systemd-networkd'' によって管理されているすべてのリンクが完全に設定されるか、または失敗しても、少なくとも1つのリンクがオンラインになるまで待機します。
hosts: files ''resolve'' myhostname
 
   
  +
システムに複数のネットワークインタフェースがあるが、常時接続されているとは想定されていないものもある場合 (例えば、 dual-port Ethernet を使用しているが、ケーブルが1本しか接続されていない場合)、 {{ic|system-networkd-wait-online.service}} の起動は、デフォルトのタイムアウトである2分後に失敗します。これにより、起動プロセスに不要な遅延が発生する可能性があります。''すべての'' インターフェイスではなく ''任意の'' インターフェイスがオンラインになるまで待機する動作に変更するには、サービスを[[編集]]し、{{ic|--any}} パラメータを {{ic|ExecStart}} 行に追加します。
{{man|8|systemd-resolved}} や {{man|5|resolved.conf}}、または [https://github.com/systemd/systemd/blob/master/README#L205 Systemd README] を参照してください。
 
  +
  +
{{hc|/etc/systemd/system/systemd-networkd-wait-online.service.d/wait-for-only-one-interface.conf|2=
  +
[Service]
  +
ExecStart=
  +
ExecStart=/usr/lib/systemd/systemd-networkd-wait-online --any
  +
}}
  +
  +
無視されたインターフェイスや動作状態など、その他の動作も設定できます。使用可能なパラメータについては、 {{man|8|systemd-networkd-wait-online}} を参照してください。
   
 
=== 設定ファイルの例 ===
 
=== 設定ファイルの例 ===
このセクションにおける設定はすべて {{ic|/etc/systemd/network}} の中に {{ic|foo.network}} として保存します。利用できるオプションや処理の順番については、[[#設定ファイル]] や {{man|5|systemd.network}} の man ページを見て下さい。
 
   
  +
このセクションにおける設定はすべて {{ic|/etc/systemd/network}} の中に {{ic|foo.network}} として保存します。利用できるオプションや処理の順番については、[[#設定ファイル]] や {{man|5|systemd.network}} を見て下さい。
まずシステムのデバイス名を知る必要があります。昔は、{{ic|eth0}} がシステム上の1番目の NIC に付けられていましたが、現在 udev は別の名前を使用するようになっています。{{ic|networkctl list}} を使ってシステム上のデバイスを確認してください。
 
   
  +
systemd/udev は、予測可能で安定したネットワークインターフェイス名をすべてのローカルイーサネット、WLAN、WWAN インターフェイスに自動で割り当てます。システム上にあるデバイスのリストを得るには {{ic|networkctl list}} を使用してください。
設定ファイルに変更を加えたら、networkd デーモンをリロードしてください:
 
  +
# systemctl restart systemd-networkd
 
  +
設定ファイルに変更を加えたら、{{ic|systemd-networkd.service}} を[[再起動]]してください。
   
 
{{Note|
 
{{Note|
  +
* 設定ファイル内で指定するオプションは大文字と小文字が区別されます。
* 以下の例では、{{ic|enp1s0}} が有線アダプタ、{{ic|wlp2s0}} が無線アダプタです。環境によって名前は変わります。{{ic|1=Name=en*}} のようにワイルドカードを使うこともできます。
 
  +
* 以下の例では、{{ic|enp1s0}} が有線アダプタ、{{ic|wlp2s0}} が無線アダプタです。環境によって名前は変わります。[[ネットワーク設定#ネットワークインターフェイス]] を見てください。
* IPv6 を無効化したい場合、ルーターが IPv6 を喧伝しているときは {{ic|[Network]}} セクションに {{ic|1=IPv6AcceptRA=false}} を追加する必要があります。}}
 
  +
* {{ic|1=Name=en*}} や {{ic|1=Name=wl*}} のようにワイルドカードを使うこともできます。
  +
* デバイスはタイプによってもマッチさせることが可能です。例: イーサネットは {{ic|1=Type=ether}}、Wi-Fi は {{ic|1=Type=wlan}}、WWAN は {{ic|1=Type=wwan}}。注意点として、{{ic|1=Type=ether}} は仮想イーサネットインターフェイス({{ic|veth*}})にもマッチします(この動作は望ましくない場合があるでしょう)。
  +
* IPv6 を無効化したい場合、[[IPv6#systemd-networkd_3]] を見てください。
  +
}}
   
 
==== 有線アダプタで DHCP を使用 ====
 
==== 有線アダプタで DHCP を使用 ====
  +
 
{{hc|/etc/systemd/network/20-wired.network|2=
 
{{hc|/etc/systemd/network/20-wired.network|2=
 
[Match]
 
[Match]
59行目: 74行目:
   
 
[Network]
 
[Network]
DHCP=ipv4
+
DHCP=yes
 
}}
 
}}
   
 
==== 有線アダプタで固定 IP を使用 ====
 
==== 有線アダプタで固定 IP を使用 ====
  +
 
{{hc|/etc/systemd/network/20-wired.network|2=
 
{{hc|/etc/systemd/network/20-wired.network|2=
 
[Match]
 
[Match]
71行目: 87行目:
 
Gateway=10.1.10.1
 
Gateway=10.1.10.1
 
DNS=10.1.10.1
 
DNS=10.1.10.1
#DNS=8.8.8.8
 
 
}}
 
}}
   
IP アドレスを複数指定することもできます。{{ic|1=Address=}} 行を追加して IPv6 アドレスを指定してください。DNS サーバーやブロードキャストアドレスを指定するネットワークオプションは {{man|5|systemd.network}} の man ページを見てさい。
+
{{ic|1=Address=}} は1回以上使用することができ、複数の IPv4 や IPv6 アドレスを指定することができます。さらなるオプションについて [[#network ファイル]] や {{man|5|systemd.network}} を見てください。
   
 
==== 無線アダプタ ====
 
==== 無線アダプタ ====
先に触れた通り、''systemd-networkd'' で無線ネットワークに接続するには、[[wpa_supplicant]] など別のサービスで無線アダプタを設定してから適当なサービスを有効にしてください。以下の例では、{{ic|wpa_supplicant@wlp2s0.service}} としています。以下のサービスは {{ic|/etc/wpa_supplicant/wpa_supplicant-wlp2s0.conf}} 設定ファイルを使って ''wpa_supplicant'' を起動します。ファイルが存在しなかった場合、サービスは起動しません。
 
   
  +
''systemd-networkd'' で無線ネットワークに接続するには、[[wpa_supplicant]] や [[iwd]] などの別のアプリケーションで設定された無線アダプタが必要です。
{{hc|/etc/systemd/network/25-wireless.network|<nowiki>
 
  +
  +
{{hc|/etc/systemd/network/25-wireless.network|2=
 
[Match]
 
[Match]
 
Name=wlp2s0
 
Name=wlp2s0
   
 
[Network]
 
[Network]
DHCP=ipv4
+
DHCP=yes
  +
IgnoreCarrierLoss=3s
</nowiki>}}
 
  +
}}
   
 
無線アダプタで固定 IP アドレスを使っている場合、設定は (インターフェイス名を除いて) [[#有線アダプタで固定 IP を使用|有線アダプタ]]と同じになります。
 
無線アダプタで固定 IP アドレスを使っている場合、設定は (インターフェイス名を除いて) [[#有線アダプタで固定 IP を使用|有線アダプタ]]と同じになります。
  +
  +
{{Tip|{{ic|1=IgnoreCarrierLoss=3s}} により、同じワイヤレスネットワーク(SSID)内でワイヤレスインターフェイスが他のアクセスポイントにローミングする間、''systemd-networkd'' が短期間(この例では 3 秒間)にインターフェイスを再設定(例: DHCP リースの開放と再取得)しないことを保証します。これにより、ローミング時にダウンタイムが短縮されます。}}
  +
  +
無線スネットワークへの認証には、[[wpa_supplicant]] や [[iwd]] などを使用します。
   
 
==== 同一マシンで有線アダプタと無線アダプタ両方を使用 ====
 
==== 同一マシンで有線アダプタと無線アダプタ両方を使用 ====
   
以下の設定では、Metric ディレクティブを使用して、有線と無線両方の接続で DHCP IP を有効にしており、カーネルがオンザフライでどちらを使うか決定します。有線接続が切断されると、即座に無線に切り替わります。接続が途切れることはありません。
+
以下の設定では、metric ディレクティブを使用して、有線と無線両方の接続で DHCP IP を有効にしており、カーネルがその場でどちらを使うか決定します。有線接続が切断されると、即座に無線に切り替わります。接続が途切れることはありません。
   
システム上の無線・有線どちらのデバイスも有効な接続がある場合、カーネルのルーメトリック (''ip'' で設定するのと同一) がパケットを送るのにどちらのルートを使用するか決定します。均衡状態を破るために、カーネルはメトリックを使います。メトリック良い所は、どちらか使えなくなったきに自動的にもう方が有効になです。
+
システム上の無線・有線どちらのデバイスも有効な接続がある場合、カーネルのルーティングのメトリック(''ip'' で設定するのと同一) がパケットを送るのにどちらのルートを使用するか決定します。システム上の有線デバイスと無線デバイスの両方がアクティブな接続を行っている場合がそうです。均衡状態を破るために、カーネルはメトリックを使います。もし一方接続終了しても、何も設定せず、もう方が自動的ギャップを埋めます(進行中の転送はまだうまく対処されいでしょうが、れは他の OSI レイヤーでの問題です)
   
{{Note|'''Metric''' オプションはスタティックルーティングの設定を行います。'''RouteMetric''' オプションはスタティックルーティングの設定をしないセットアップ用です。}}
+
{{Note|{{ic|Metric}} オプションはスタティックルーティングの設定を行います。{{ic|RouteMetric}} オプションはスタティックルーティングの設定をしないセットアップ用です。詳細については {{man|5|systemd.network}} を参照して下さい}}
   
 
{{hc|/etc/systemd/network/20-wired.network|2=
 
{{hc|/etc/systemd/network/20-wired.network|2=
102行目: 123行目:
   
 
[Network]
 
[Network]
DHCP=ipv4
+
DHCP=yes
   
[DHCP]
+
[DHCPv4]
RouteMetric=10}}
+
RouteMetric=10
  +
}}
   
 
{{hc|/etc/systemd/network/25-wireless.network|2=
 
{{hc|/etc/systemd/network/25-wireless.network|2=
112行目: 134行目:
   
 
[Network]
 
[Network]
DHCP=ipv4
+
DHCP=yes
   
[DHCP]
+
[DHCPv4]
RouteMetric=20}}
+
RouteMetric=20
  +
}}
  +
  +
IPv6 を使用している場合は、次のように IPv6 ルートのメトリックも個別に設定する必要があります。
  +
  +
{{hc|/etc/systemd/network/20-wired.network|2=
  +
...
  +
  +
[IPv6AcceptRA]
  +
RouteMetric=10
  +
}}
  +
  +
{{hc|/etc/systemd/network/25-wireless.network|2=
  +
...
  +
  +
[IPv6AcceptRA]
  +
RouteMetric=20
  +
}}
   
 
==== インターフェイスの名前を変更 ====
 
==== インターフェイスの名前を変更 ====
   
[[ネットワーク設定#デバイス名の変更|udev ルールを編集]]するかわりに {{ic|.link}} ファイルを使ってインターフェイスの名前を変更できます。MAC アドレスに基づいて USB-to-Ethernet アダプタに予測可能なインターフェイス名を設定する例 (通常は接続された USB 端子によって名前が変わってしまいます):
+
[[ネットワーク設定#インターフェイス名の変更|udev ルールを編集]]するかわりに ''.link'' ファイルを使ってインターフェイスの名前を変更できます。MAC アドレスに基づいて USB-to-Ethernet アダプタに予測可能なインターフェイス名を設定する例 (通常は接続された USB 端子によって名前が変わってしまいます):
   
 
{{hc|head=/etc/systemd/network/10-ethusb0.link|output=
 
{{hc|head=/etc/systemd/network/10-ethusb0.link|output=
130行目: 169行目:
 
}}
 
}}
   
{{Note|ユーザーが作成した {{ic|.link}} ファイルが先に有効になるように、デフォルト設定の {{ic|99-default.link}} よりも辞書的に早い順番になるような名前を付けてください。例えば、{{ic|ethusb0.link}} という名前を付けたい場合は {{ic|10-ethusb0.link}} としてください。}}
+
{{Note|ユーザーが作成した ''.link'' ファイルが先に有効になるように、デフォルト設定の {{ic|99-default.link}} よりも辞書的に早い順番になるような名前を付けてください。例えば、{{ic|ethusb0.link}} という名前を付けたい場合は {{ic|10-ethusb0.link}} としてください。}}
   
 
== 設定ファイル ==
 
== 設定ファイル ==
   
設定ファイルは {{ic|/usr/lib/systemd/network}} から、そして一時的な実行時のネットワークディレクトリ {{ic|/run/systemd/network}} とローカルのネットワーク管理ディレクトリ {{ic|/etc/systemd/network}} から読み込まれます。{{ic|/etc/systemd/network}} 内のファイルが一番優先されます。
+
設定ファイルは {{ic|/usr/lib/systemd/network/}} から、そして一時的な実行時のネットワークディレクトリ {{ic|/run/systemd/network/}} とローカルのネットワーク管理ディレクトリ {{ic|/etc/systemd/network/}} から読み込まれます。{{ic|/etc/systemd/network/}} 内のファイルが一番優先されます。
   
 
3つのタイプの設定ファイルが存在します。ファイルのフォーマットは [[systemd#ユニットファイル|systemd のユニットファイル]]と似ています。
 
3つのタイプの設定ファイルが存在します。ファイルのフォーマットは [[systemd#ユニットファイル|systemd のユニットファイル]]と似ています。
145行目: 184行目:
   
 
* {{ic|[Match]}} セクションの'''全ての'''条件がマッチすれば、プロファイルが有効になります。
 
* {{ic|[Match]}} セクションの'''全ての'''条件がマッチすれば、プロファイルが有効になります。
* 空の {{ic|[Match]}} セクションはどんな場合でもそのセクションを適用することを示します (いわば {{ic|*}} ジョーカーのようなものです)。
+
* 空の {{ic|[Match]}} セクションはどんな場合でもそのセクションを適用することを示します (いわば {{ic|*}} ワイルドカーのようなものです)。
 
* 全ての設定ファイルは辞書順でまとめてソートされ処理されます。ファイルがどのディレクトリにあるかは関係ありません。
 
* 全ての設定ファイルは辞書順でまとめてソートされ処理されます。ファイルがどのディレクトリにあるかは関係ありません。
 
* 同じ名前のファイルは互いを置き換えます。
 
* 同じ名前のファイルは互いを置き換えます。
   
 
{{Tip|
 
{{Tip|
* {{ic|/usr/lib/systemd/network}} にあるシステムによって提供されたファイルを上書きする (アップグレードても変わらないようにる) には{{ic|/etc/systemd/network}} に同じ名前のファイルを配置して {{ic|/dev/null}} シンボリックリンクを張って下さい
+
* {{ic|/etc/systemd/network/}} 内のファイルは {{ic|/usr/lib/systemd/network/}} 内の対応すシステムによって提供されたファイルを上書きし。また、{{ic|/dev/null}} へのシンボリックリンクを作成することで、システムファイルを"マスク"できます
  +
* systemd は true 真偽値として値 {{ic|1}}、{{ic|true}}、{{ic|yes}}、{{ic|on}} を受け付け、false 真偽値として値 {{ic|0}}、{{ic|false}}、{{ic|no}}、{{ic|off}} を受け付けます。{{man|7|systemd.syntax}} を見てください。
* {{ic|VALUE}} には {{ic|*}} ジョーカーを使うことができます (例: {{ic|en*}} は全ての Ethernet デバイスにマッチします)。
 
* [https://mailman.archlinux.org/pipermail/arch-general/2014-March/035381.html Arch-general スレッド]によれば、特定のコンテナのネットワーク設定は '''networkd''' 設定ファイルを使って''コンテナの中で''設定するのがベストプラクティスです。
 
 
}}
 
}}
   
 
=== network ファイル ===
 
=== network ファイル ===
  +
  +
{{Remove|Duplicates the {{man|5|systemd.network}} man page.}}
   
 
このファイルはネットワーク設定の変数の設定、特にサーバーとコンテナの設定のために存在します。
 
このファイルはネットワーク設定の変数の設定、特にサーバーとコンテナの設定のために存在します。
   
{{ic|.network}} ファイルには次のセクションを記述できます: {{ic|[Match]}}, {{ic|[Link]}}, {{ic|[Network]}}, {{ic|[Address]}}, {{ic|[Route]}}, {{ic|[DHCP]}}。以下ではそれぞれのセクションでよく使われる設定キーを説明します。詳しくは {{man|5|systemd.network}} を見てください。
+
''.network'' ファイルには次のセクションを記述できます: {{ic|[Match]}}{{ic|[Link]}}{{ic|[Network]}}{{ic|[Address]}}{{ic|[Route]}}{{ic|[DHCPv4]}}。以下ではそれぞれのセクションでよく使われる設定キーを説明します。詳細や例は {{man|5|systemd.network}} を見てください。
   
 
==== [Match] ====
 
==== [Match] ====
   
  +
{| class = "wikitable"
* {{ic|1=Name=}} デバイスの名前
 
  +
! パラメータ !! 説明 !! 受け入れる値 !! デフォルト値
* {{ic|1=Host=}} マシンのホストネーム
 
  +
|-
* {{ic|1=Virtualization=}} システムが仮想化環境で起動されているかどうかをチェックします。{{ic|1=Virtualization=no}} キーはホストマシンでのみ適用され、逆に {{ic|1=Virtualization=yes}} はコンテナや VM で適用されます。
 
  +
| {{ic|1=Name=}} || デバイス名のリストにマッチ(例: {{ic|en*}})。プレフィックス {{ic|!}} を付けると、リストを反転できます。|| 空白で区切られた、グロブ付きデバイス名リスト。論理否定 ({{ic|!}}) ||
  +
|-
  +
| {{ic|1=MACAddress=}} || MAC アドレスのリストにマッチ(例: {{ic|1=MACAddress=01:23:45:67:89:ab 00-11-22-33-44-55 AABB.CCDD.EEFF}}) || コロン、ハイフン、またはドットで区切られた完全な 16 進数による、空白で区切られた MAC アドレスリスト ||
  +
|-
  +
| {{ic|1=Host=}} || ホスト名、またはホストのマシン IDにマッチ。 || グロブ付きのホスト名文字列、{{man|5|machine-id}} ||
  +
|-
  +
| {{ic|1=Virtualization=}} || システムが仮想化環境で起動されているかどうかをチェックします。{{ic|1=Virtualization=false}} キーはホストマシンにのみマッチし、逆に {{ic|1=Virtualization=true}} はコンテナや VM にマッチします。特定の仮想化タイプや実装をチェックしたり、({{ic|private-users}} を使って)ユーザ名前空間をチェックしたりできます。 || 真偽値、論理否定({{ic|!}})、タイプ({{ic|vm}}, {{ic|container}})、実装({{man|1|systemd-detect-virt}} を参照)、{{ic|private-users}} ||
  +
|}
   
 
==== [Link] ====
 
==== [Link] ====
   
  +
{| class = "wikitable"
* {{ic|1=MACAddress=}} [[MAC_アドレス偽装#方法 1: systemd-networkd|MAC アドレスを偽装]]することができます。
 
  +
! パラメータ !! 説明 !! 受け入れる値 !! デフォルト値
* {{ic|1=MTUBytes=}} 最大転送単位をバイトで指定 (K, M, G を後ろに付けることができ、1024の倍数として認識されます)。MTU の値を大きくすることでネットワークの転送速度を速くすることが可能です ([[ジャンボフレーム]])。
 
  +
|-
  +
| {{ic|1=MACAddress=}} || ハードウェアアドレスをデバイスに割り当てる。[[MAC_アドレス偽装#方法 1: systemd-networkd|MAC アドレスの偽装]]に便利。|| コロン、ハイフン、ドットで区切られた、完全な 16 進数 MAC アドレス。||
  +
|-
  +
| {{ic|1=MTUBytes=}} || デバイスに対して最大転送単位をバイト単位で指定。IPv6 がインターフェイスで有効化されていて、MTU が 1280 (IPv6 における最低 MTU) 未満に指定されている場合、自動的に 1280 まで増やされます。より大きな MTU 値を設定することで(例: [[ジャンボフレーム]] 使用時)、ネットワーク転送速度を飛躍的に速くできます。 || 整数 (通常の接尾辞 K、M、G がサポートされており、1024 の倍数として認識されます) ||
  +
|-
  +
| {{ic|1=Multicast=}} || [[wikipedia:Multicast_address|マルチキャスト]] の使用を許可。 || 真偽値 || ? ドキュメント化されておらず ?
  +
|}
   
 
==== [Network] ====
 
==== [Network] ====
   
  +
{| class = "wikitable"
* {{ic|1=DHCP=}} DHCP クライアントを有効にします。
 
  +
! パラメータ !! 説明 !! 受け入れる値 !! デフォルト値
* {{ic|1=DHCPServer=}} DHCP サーバーを有効にします。
 
  +
|-
* {{ic|1=DNS=}} DNS サーバーのアドレス
 
  +
| {{ic|1=DHCP=}} || DHCPv4 と DHCPv6 の一方/両方のサポートを制御。 || 真偽値、{{ic|ipv4}}、{{ic|ipv6}} || {{ic|false}}
* {{ic|1=Bridge=}} ブリッジの名前
 
  +
|-
* {{ic|1=IPForward=}} IP パケットの転送を有効にします。
 
  +
| {{ic|1=DHCPServer=}} || 有効化されている場合、DHCPv4 サーバが起動されます。 || 真偽値 || {{ic|false}}
* {{ic|1=Domains=}} DNS によるホスト名解決に使用するドメインのリスト。
 
  +
|-
  +
| {{ic|1=MulticastDNS=}} || [[RFC:6762|マルチキャスト DNS]] のサポートを有効化。{{ic|resolve}} に設定すると、名前解決のみが有効化され、ホストやサービスの登録と広告は行われません。 || 真偽値、{{ic|resolve}} || {{ic|false}}
  +
|-
  +
| {{ic|1=DNSSEC=}} || リンク上での DNSSEC DNS validation のサポートを制御。{{ic|allow-downgrade}} に設定すると、DNSSEC 非対応のネットワークとの互換性が向上します。この場合、DNSSEC は自動でオフになります。 || 真偽値、{{ic|allow-downgrade}} || {{ic|false}}
  +
|-
  +
| {{ic|1=DNS=}} || 固定 [[DNS]] アドレスを設定。1回以上指定できます。 || {{man|3|inet_pton}} ||
  +
|-
  +
| {{ic|1=Domains=}} || リンク上の DNS サーバを利用して解決すべきドメインのリスト。[https://www.freedesktop.org/software/systemd/man/systemd.network.html#Domains= 詳細] || ドメイン名、オプションでチルダ({{ic|~}})のプレフィックス。 ||
  +
|-
  +
| {{ic|1=IPForward=}} || 有効化すると、ネットワークインターフェイス上で受信したパケットを、ルーティングテーブルに従って他のインターフェイスに転送します。詳細は [[インターネット共有#パケット転送の有効化]]。 || 真偽値、{{ic|ipv4}}、{{ic|ipv6}} || {{ic|false}}
  +
|-
  +
| {{ic|1=IPMasquerade=}} || 有効化すると、ネットワークインターフェイスからのパケット転送がローカルホストから来るように見えます。値によっては、{{ic|1=IPForward=ipv4}}、{{ic|1=IPForward=ipv6}}、または {{ic|1=IPForward=yes}} の意味になります。|| {{ic|ipv4}}、{{ic|ipv6}}、{{ic|both}}、{{ic|no}} || {{ic|no}}
  +
|-
  +
| {{ic|1=IPv6PrivacyExtensions=}} || 時間と共に変化するステートレステンポラリアドレスの使用を設定します([[RFC:4941|RFC 4941]] を参照)。{{ic|prefer-public}} を指定すると、プライバシー拡張が有効に名ありますが、テンポラリアドレスよりもパブリックアドレスを優先します。{{ic|kernel}} を指定すると、カーネルのデフォルトの設定のままになります。 || 真偽値、{{ic|prefer-public}}、{{ic|kernel}} || {{ic|false}}
  +
|}
   
 
==== [Address] ====
 
==== [Address] ====
   
  +
{| class = "wikitable"
* {{ic|1=Address=}} 固定の '''IPv4''' または '''IPv6''' アドレスとそのプレフィックス長で、{{ic|/}} を使って区切ります (例: {{ic|192.168.1.90/24}})。DHCP を使用しない場合このオプションは'''必須'''です。
 
  +
! パラメータ !! 説明 !! 受け入れる値 !! デフォルト値
  +
|-
  +
| {{ic|1=Address=}} || 複数のアドレスを設定するには、このキーを複数回指定してください。DHCP を使用しない限り必須です。指定されたアドレスが(IPv4の 場合) {{ic|0.0.0.0}} または (IPv6 の場合) {{ic|::}} である場合、要求されたサイズの新しいアドレス範囲が、システム全体の未使用範囲のプールから自動的に割り当てられます。 || 固定 IPv4 または IPv6 アドレスとプレフィックス長({{man|3|inet_pton}} を参照) ||
  +
|}
   
 
==== [Route] ====
 
==== [Route] ====
   
* {{ic|1=Gateway=}} はマシンのゲートウェイのアドレスです。DHCP を使用しない場合このオプションは'''必須'''です。
+
* {{ic|1=Gateway=}} DHCP を使用しない場合このオプションは'''必須'''です。
* {{ic|1=Destination=}} ルートの宛先プリフィックスです。スラッシュとプリフィックス長を後ろに付けることができます。
+
* {{ic|1=Destination=}} ルートの宛先プリフィックスです。スラッシュとプリフィックス長を後ろに付けることができます。
   
{{ic|[Route]}} セクションに {{ic|1=Destination}} が存在しない場合、デフォルトルートとして扱われます。
+
{{ic|[Route]}} セクションに {{ic|Destination}} が存在しない場合、デフォルトルートとして扱われます。
   
 
{{Tip|{{ic|1=[Address]}} が Address キーだけを含み {{ic|1=[Route]}} セクションが Gateway キーだけを含む場合、略式表記として {{ic|[Network]}} セクションに {{ic|1=Address=}} と {{ic|1=Gateway=}} キーを記述することができます。}}
 
{{Tip|{{ic|1=[Address]}} が Address キーだけを含み {{ic|1=[Route]}} セクションが Gateway キーだけを含む場合、略式表記として {{ic|[Network]}} セクションに {{ic|1=Address=}} と {{ic|1=Gateway=}} キーを記述することができます。}}
   
==== [DHCP] ====
+
==== [DHCPv4] ====
   
  +
{| class = "wikitable
* {{ic|1=UseDomains=true}} systemd-resolved を使用する場合にローカル名の解決を修正します。
 
  +
! パラメータ !! 説明 !! 受け入れる値 !! デフォルト値
  +
|-
  +
| {{ic|1=UseDNS=}} || DHCP サーバにより広告された DNS サーバを使用するかどうかを制御。 || 真偽値 || {{ic|true}}
  +
|-
  +
| {{ic|1=Anonymize=}} || true を指定すると、DHCP サーバに送られるオプションが [[RFC:7844]] (Anonymity Profiles for DHCP Clients) に従って、識別情報の開示を最小限にするようになります。 || 真偽値 || {{ic|false}}
  +
|-
  +
| {{ic|1=UseDomains=}} || DHCP サーバから受け取るドメイン名を DNS 検索ドメインとして使用するかどうかを制御。{{ic|route}} に設定すると、DHCP サーバから受け取るドメイン名が DNS クエリにのみ使用され、検索には使用されなくなります。このオプションは、[[systemd-resolved]] を使用している際にはローカルな名前解決を修正する可能性があります。 || 真偽値、{{ic|route}} || {{ic|false}}
  +
|}
  +
  +
==== [DHCPServer] ====
  +
  +
これは、無線ホットスポットを作成するために [[hostapd]] とうまく連動する DHCP サーバーの設定例です。{{ic|IPMasquerade}} は [[インターネット共有#NAT の有効化|NATを有効にする]] ためのファイアウォールルールを追加し、{{ic|1=IPForward=ipv4}} [[インターネット共有#パケット転送の有効化|パケット転送]] を有効にしています。
  +
  +
{{Accuracy|{{ic|1=IPMasquerade=true}}は{{ic|filter}} テーブルのルールを追加しません、それらは手動で追加する必要があります。[[systemd-nspawn#仮想イーサネットリンクを使用する]] を参照してください}}
  +
  +
{{hc|/etc/systemd/network/''wlan0''.network|<nowiki>
  +
[Match]
  +
Name=wlan0
  +
  +
[Network]
  +
Address=10.1.1.1/24
  +
DHCPServer=true
  +
IPMasquerade=ipv4
  +
  +
[DHCPServer]
  +
PoolOffset=100
  +
PoolSize=20
  +
EmitDNS=yes
  +
DNS=9.9.9.9
  +
</nowiki>}}
   
 
=== netdev ファイル ===
 
=== netdev ファイル ===
   
  +
{{Remove|Duplicates the {{man|5|systemd.netdev}} man page.}}
このファイルは仮想ネットワークデバイスを作成します。{{ic|.netdev}} ファイルには次のセクションを記述できます: {{ic|[Match]}} と {{ic|[NetDev]}}。以下ではそれぞれのセクションでよく使われる設定キーを説明します。詳しくは {{man|5|systemd.netdev}} を見てください。
 
   
  +
netdev ファイル群は仮想ネットワークデバイスを作成します。これらのファイルには次のセクションを記述できます: {{ic|[Match]}} と {{ic|[NetDev]}}。以下ではそれぞれのセクションでよく使われる設定キーを説明します。詳細や例は {{man|5|systemd.netdev}} を見てください。
==== [Match] ====
 
  +
  +
==== [Match] セクション ====
   
 
* {{ic|1=Host=}} ホストネーム
 
* {{ic|1=Host=}} ホストネーム
 
* {{ic|1=Virtualization=}} VM の中で実行されているかどうか確認する。
 
* {{ic|1=Virtualization=}} VM の中で実行されているかどうか確認する。
   
==== [NetDev] ====
+
==== [NetDev] セクション ====
   
* {{ic|1=Name=}} は netdev を作成するときに使うインターフェイス前ですこのオプションは'''必須'''です。
+
* {{ic|1=Name=}} インターフェイス名。'''必須'''
* {{ic|1=Kind=}} は netdev の種類になります。現在 ''bridge'', ''bond'', ''vlan'', ''veth'', ''sit'' などがサポートされていますこのオプションは'''必須'''です。
+
* {{ic|1=Kind=}} 例: ''bridge'', ''bond'', ''vlan'', ''veth'', ''sit''。'''必須'''
   
 
=== link ファイル ===
 
=== link ファイル ===
  +
  +
{{Remove|Duplicates the {{man|5|systemd.link}} man page.}}
   
 
このファイルはカスタム udev ルールの代わりとなりデバイスが現れた時に [[udev]] によって適用されます。2つのセクションを記述します: {{ic|[Match]}} と {{ic|[Link]}}。以下ではそれぞれのセクションでよく使われる設定キーを説明しています。詳しくは {{man|5|systemd.link}} を参照してください。
 
このファイルはカスタム udev ルールの代わりとなりデバイスが現れた時に [[udev]] によって適用されます。2つのセクションを記述します: {{ic|[Match]}} と {{ic|[Link]}}。以下ではそれぞれのセクションでよく使われる設定キーを説明しています。詳しくは {{man|5|systemd.link}} を参照してください。
   
{{Tip|{{ic|.link}} ファイルの問題を診断したいときは {{ic|udevadm test-builtin net_setup_link /sys/path/to/network/device}} を使ってください。}}
+
{{Tip|''.link'' ファイルの問題を診断したいときは {{ic|udevadm test-builtin net_setup_link /sys/path/to/network/device}} を使ってください。}}
   
==== [Match] ====
+
==== [Match] セクション ====
   
 
* {{ic|1=MACAddress=}} MAC アドレス
 
* {{ic|1=MACAddress=}} MAC アドレス
 
* {{ic|1=Host=}} ホストネーム
 
* {{ic|1=Host=}} ホストネーム
* {{ic|1=Virtualization=}}
+
* {{ic|1=Virtualization=}}
 
* {{ic|1=Type=}} デバイスのタイプ (例: vlan)
 
* {{ic|1=Type=}} デバイスのタイプ (例: vlan)
   
==== [Link] ====
+
==== [Link] セクション ====
   
* {{ic|1=MACAddressPolicy=}} 永続的な MAC アドレスをハードウェアに設定する ''persistent'' (ほとんどのハードウェアはこちらにするべきです) またはデバイスが現れた時にランダムな MAC アドレスを与える ''random'' を指定しす。
+
* {{ic|1=MACAddressPolicy=}} 永続的またはランダムなアドレスたは、
 
* {{ic|1=MACAddress=}} 特定のアドレス。
 
* {{ic|1=MACAddress=}} 特定のアドレス。
  +
* {{ic|1=NamePolicy=}} インターフェイス名に対してセットされるべきポリシーのリスト。例: kernel, keep
   
 
{{Note|ほとんどの場合システムの {{ic|/usr/lib/systemd/network/99-default.link}} で基本的に問題ありません。}}
 
{{Note|ほとんどの場合システムの {{ic|/usr/lib/systemd/network/99-default.link}} で基本的に問題ありません。}}
234行目: 343行目:
 
== コンテナでの使用方法 ==
 
== コンテナでの使用方法 ==
   
  +
''systemd-networkd'' は、コンテナ内とホストシステムの両方で使用されている場合、[[systemd-nspawn]] コンテナに対するネットワークの完全自動設定を提供できます。総合的な外観は [[systemd-nspawn#ネットワーキング]] を見てください。
{{Pkg|systemd}} 210 以上でサービスが利用可能です。ホストやコンテナで {{ic|systemd-networkd.service}} を[[systemd#systemctl の基本的な使い方|有効化・起動]]することができます。
 
   
  +
下で説明している設定について、
デバッグするときのために {{Pkg|bridge-utils}}, {{Pkg|net-tools}}, {{Pkg|iproute2}} パッケージを[[pacman|インストール]]することが強く推奨されます。
 
 
''systemd-nspawn'' を使用する場合、ネットワーク設定によっては、{{ic|systemd-nspawn@.service}} を編集して {{ic|ExecStart}} 行にブートオプションを追加する必要があります。オプションの完全なリストは {{man|1|systemd-nspawn}} を参照してください。
 
 
DHCP による自動 DNS 設定を利用したい場合は、{{ic|systemd-resolved}} を有効にして {{ic|/run/systemd/resolve/resolv.conf}} から {{ic|/etc/resolv.conf}} にシンボリックリンクを張る必要があります。詳しくは {{man|8|systemd-resolved.service}} を見て下さい。
 
 
{{Tip|1=コンテナネットワークの設定を始める前に:
 
* [[netctl]] サービスを全て無効にしてください。無効にすることで '''systemd-networkd''' との危険な衝突を回避することができ設定のテストが楽になります。さらに、有効な [[netctl]] プロファイルが残ったまま終了する可能性が少なくなります。{{ic|$ netctl list}} コマンドは全てのプロファイルのリストを表示し、有効になっているプロファイルには星印が付きます。
 
* {{ic|systemd-nspawn@.service}} を無効にしてコンテナを起動するときは {{ic|# systemd-nspawn -bnD /path_to/your_container/}} コマンドとオプションを使ってください。ログオフやシャットダウンをするには、コンテナの中で {{ic|# systemctl poweroff}} を実行してください。ネットワーク設定が要求を満たすようになったら、{{ic|systemd-nspawn@.service}} を[[systemd#systemctl の基本的な使い方|有効化・起動]]してください。
 
* {{ic|dhcpcd.service}} が有効になっている場合は無効にしてください。このサービスは'''全ての'''インターフェイスに dhcpcd を使わせます。
 
* コンテナで [[netctl]] プロファイルや、{{ic|systemd-networkd.service}} が有効になっていないことを確認してください。
 
* トラフィックをブロックするような [[iptables]] ルールが設定されていないことを確認してください。
 
* コンテナ上で''プライベートネットワーク''を設定する場合は''パケットフォワーディング''を[[インターネット共有|有効]]にしてください。
 
* 設定ファイルを作った後、networkd デーモンが動作している場合はリロードを行なって下さい: {{ic|# systemctl restart systemd-networkd}}。
 
* デーモンが起動したら systemd の {{ic|networkctl}} コマンドでネットワークインターフェイスの状態が表示されます。
 
}}
 
 
{{Note|下で説明している設定について
 
 
* {{ic|$ ip a}} コマンドの出力を、関連するインターフェイスにだけ絞っています。
 
* {{ic|$ ip a}} コマンドの出力を、関連するインターフェイスにだけ絞っています。
 
* ''ホスト''は起動しているメインの OS であり、''コンテナ''は仮想マシンのゲストのことです。
 
* ''ホスト''は起動しているメインの OS であり、''コンテナ''は仮想マシンのゲストのことです。
 
* インターフェイスの名前や IP アドレスは全てあくまでただの例です。
 
* インターフェイスの名前や IP アドレスは全てあくまでただの例です。
}}
 
   
=== 基本的な DHCP ネットワーク ===
+
=== DHCP を用いたネットワークブリッジ ===
 
以下はホストとコンテナで DHCP IP を有効にします。この場合、両方のシステムが同じインターフェイスを共有し、同じ IP を共有します。
 
 
{{hc|/etc/systemd/network/''MyDhcp''.network|<nowiki>
 
[Match]
 
Name=en*
 
 
[Network]
 
DHCP=ipv4
 
</nowiki>}}
 
 
そして、コンテナで {{ic|systemd-networkd}} を[[systemd#systemctl の基本的な使い方|起動・有効化]]してください。
 
 
もちろん {{ic|en*}} を {{ic|$ ip link}} コマンドの出力でわかる Ethernet デバイスのフルネームに置き換えることは可能です。
 
 
* ホストとコンテナで:
 
 
{{hc|$ 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 サーバーから取得され一時的なホストネームとして使用されます。
 
 
変更するには {{ic|[DHCPv4]}} セクションに {{ic|1=UseHostname=false}} を追加してください:
 
{{hc|/etc/systemd/network/''MyDhcp''.network|<nowiki>
 
[DHCPv4]
 
UseHostname=false
 
</nowiki>}}
 
 
{{ic|/etc/resolv.conf}} で DNS を設定するかわりに DHCP に設定してもらいたい場合、{{ic|systemd-resolved}} を有効にして {{ic|/run/systemd/resolve/resolv.conf}} から {{ic|/etc/resolv.conf}} にシンボリックリンクを作成してください:
 
 
# systemctl enable systemd-resolved
 
# ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
 
 
詳しくは {{man|8|systemd-resolved.service}} を参照。
 
 
{{Note|{{pkg|arch-install-scripts}} の {{ic|/usr/bin/arch-chroot}} を使ってシステムパーティションにアクセスする場合、マウントしたパーティションに対して chroot の外からシンボリックリンクを作成する必要があります。arch-chroot はファイルからライブ環境にリンクを作成するためです。}}
 
 
=== 2つの別々な IP で DHCP を使う ===
 
   
 
==== ブリッジインターフェイス ====
 
==== ブリッジインターフェイス ====
   
仮想ブリッジインターフェイスを作成する:
+
まず、仮想[[ブリッジ]]インターフェイスを作成してください。systemd に、イーサネットブリッジとして機能する、''br0'' という名前のデバイスを作成するように指示します。
   
{{hc|/etc/systemd/network/''MyBridge''.netdev|<nowiki>
+
{{hc|/etc/systemd/network/''mybridge''.netdev|2=
 
[NetDev]
 
[NetDev]
 
Name=br0
 
Name=br0
Kind=bridge
+
Kind=bridge}}
</nowiki>}}
 
   
  +
{{Tip|''systemd-networkd'' は、インターフェイス名とマシン ID に基づいて生成された MAC アドレスをブリッジに割り当てます。これにより接続の問題が発生する場合があります。例えば、MAC フィルタリングに基づいたルーティングです。そのような問題を回避するには、MAC アドレス(おそらく物理デバイスと同じもの)をブリッジに割り当ててください。上記の ''NetDev'' セクション内に {{ic|1=MACAddress=xx:xx:xx:xx:xx:xx}} という行を追加してください。}}
{{ic|systemd-networkd.service}} を再起動すると systemd はブリッジを作成します。
 
   
  +
{{ic|systemd-networkd.service}} を[[再起動]]すると systemd はブリッジを作成します。
* ホストとコンテナで:
 
  +
  +
新しく追加したブリッジを見るには、ホストとコンテナ上で以下を実行してください:
   
 
{{hc|$ ip a|
 
{{hc|$ ip a|
3: br0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default
+
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
 
link/ether ae:bd:35:ea:0c:c9 brd ff:ff:ff:ff:ff:ff
 
}}
 
}}
   
インターフェイス br0 が表示されていますが DOWN になっているので注意してください。
+
インターフェイス ''br0'' が表示されていますが、この段階ではまだ DOWN になっていることに注意してください。
   
 
==== イーサネットをブリッジに関連付ける ====
 
==== イーサネットをブリッジに関連付ける ====
   
{{ic|/etc/systemd/network/''MyDhcp''.network}} を編集て DHCP を削除ます。ブリッジはどの IP もバインドされないインターフェイスが必要なので、デバイスを br0 にバインドするキーを追加してください。名前を適切なものに変更しましょう
+
次のステップでは、新く作成ブリッジにネットワークインターフェイスを追加します。以下''en*'' という名前にマッチする任意インターフェイスをブリッジ ''br0'' に追加しま
   
{{hc|/etc/systemd/network/''MyEth''.network|<nowiki>
+
{{hc|/etc/systemd/network/''bind''.network|2=
 
[Match]
 
[Match]
 
Name=en*
 
Name=en*
336行目: 384行目:
 
[Network]
 
[Network]
 
Bridge=br0
 
Bridge=br0
  +
}}
</nowiki>}}
 
  +
  +
ブリッジが IP と関連付けられていないインターフェイスを必要とするので、イーサネットインターフェイスは DHCP や IP アドレスと関連付けてはいけません: 対応する {{ic|/etc/systemd/network/''MyEth''.network}} を適宜変更して、アドレッシングを削除してください。
   
 
==== ブリッジネットワーク ====
 
==== ブリッジネットワーク ====
   
  +
ブリッジが作成され、既存のネットワークインターフェイスに関連付けられました。ブリッジインターフェイスの IP 設定を指定する必要があります。これは3番目の ''.network'' で定義されます。以下の例では DHCP を使用します。
ブリッジのネットワークプロファイルを作成:
 
   
{{hc|/etc/systemd/network/''MyBridge''.network|<nowiki>
+
{{hc|/etc/systemd/network/''mybridge''.network|2=
 
[Match]
 
[Match]
 
Name=br0
 
Name=br0
   
 
[Network]
 
[Network]
DHCP=ipv4
+
DHCP=ipv4}}
</nowiki>}}
 
 
==== コンテナを起動するオプションを追加する ====
 
   
  +
==== コンテナの設定 ====
ホストとコンテナに別々の IP を割り当てたいので、ホストからコンテナのネットワークを''切断''する必要があります。切断するには、コンテナの起動コマンドに {{ic|1=--network-bridge=br0}} オプションを追加します。
 
   
  +
コンテナを起動する際は {{ic|1=--network-bridge=br0}} オプションを使用してください。詳細は [[systemd-nspawn#ネットワークブリッジを使用する]] を見てください。
# systemd-nspawn --network-bridge&#61;br0 -bD /path_to/my_container
 
   
 
==== 結果 ====
 
==== 結果 ====
361行目: 408行目:
   
 
{{hc|$ ip a|
 
{{hc|$ ip a|
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
+
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
 
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
 
inet 192.168.1.87/24 brd 192.168.1.255 scope global br0
 
valid_lft forever preferred_lft forever
 
valid_lft forever preferred_lft forever
inet6 fe80::16da:e9ff:feb5:7a88/64 scope link
+
inet6 fe80::16da:e9ff:feb5:7a88/64 scope link
 
valid_lft forever preferred_lft forever
 
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
 
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
 
link/ether d2:7c:97:97:37:25 brd ff:ff:ff:ff:ff:ff
inet6 fe80::d07c:97ff:fe97:3725/64 scope link
+
inet6 fe80::d07c:97ff:fe97:3725/64 scope link
 
valid_lft forever preferred_lft forever
 
valid_lft forever preferred_lft forever
 
}}
 
}}
380行目: 427行目:
 
inet 192.168.1.73/24 brd 192.168.1.255 scope global host0
 
inet 192.168.1.73/24 brd 192.168.1.255 scope global host0
 
valid_lft forever preferred_lft forever
 
valid_lft forever preferred_lft forever
inet6 fe80::5c96:85ff:fe83:a85d/64 scope link
+
inet6 fe80::5c96:85ff:fe83:a85d/64 scope link
 
valid_lft forever preferred_lft forever
 
valid_lft forever preferred_lft forever
 
}}
 
}}
386行目: 433行目:
 
==== 注意 ====
 
==== 注意 ====
   
* ホストの br0 と、コンテナの host0 にそれぞれ IP アドレスが割り当てられました。
+
* ホストの {{ic|br0}} と、コンテナの {{ic|host0}} にそれぞれ IP アドレスが割り当てられました。
* 2つの新しいインターフェイスが作成されます: ホストの {{ic|vb-''MyContainer''}} とコンテナの {{ic|host0}} です。これは {{ic|1=--network-bridge=br0}} オプションによるものです。このオプションに{{ic|--network-veth}} という別のオプションも含まれており、ホストとコンテナの間に''仮想イーサネットリンク''が作成れます
+
* 2つの新しいインターフェイスが作成されます: ホストの {{ic|vb-''MyContainer''}} とコンテナの {{ic|host0}} です。これは {{ic|1=--network-bridge=br0}} オプションによるものです。詳細[[systemd-nspawn#ネットワークブッジを使用する]] を参照してくだ
 
* {{ic|host0}} の DHCP アドレスはシステムの {{ic|/usr/lib/systemd/network/80-container-host0.network}} ファイルから由来します。
 
* {{ic|host0}} の DHCP アドレスはシステムの {{ic|/usr/lib/systemd/network/80-container-host0.network}} ファイルから由来します。
 
* ホスト側
 
* ホスト側
  +
  +
{{Out of date|''brctl'' は非推奨です。{{ic|bridge link}} を使用してください。[[ネットワークブリッジ#iproute2 を使う]] を参照。}}
   
 
{{hc|$ brctl show|
 
{{hc|$ brctl show|
402行目: 451行目:
   
 
{{hc|$ ip route|
 
{{hc|$ ip route|
default via 192.168.1.254 dev br0
+
default via 192.168.1.254 dev br0
 
192.168.1.0/24 dev br0 proto kernel scope link src 192.168.1.87
 
192.168.1.0/24 dev br0 proto kernel scope link src 192.168.1.87
 
}}
 
}}
409行目: 458行目:
   
 
{{hc|$ ip route|
 
{{hc|$ ip route|
default via 192.168.1.254 dev host0
+
default via 192.168.1.254 dev host0
 
192.168.1.0/24 dev host0 proto kernel scope link src 192.168.1.73
 
192.168.1.0/24 dev host0 proto kernel scope link src 192.168.1.73
 
}}
 
}}
419行目: 468行目:
 
}}
 
}}
   
=== 固定 IP ネットワーク ===
+
=== 静的 IP アドレスを持つネットワークブリッジ ===
   
ウェブサービス (例: FTP, http, SSH) を動かしている場合、デバイスごと固定 IP を設定るのが役に立つかもしれません。システム {{ic|/usr/lib/systemd/network/99-default.link}} ファイルに {{ic|1=MACAddressPolicy=persistent}} オプションが(デフォルトの設定)、各デバイスは再起動しても同じ MAC アドレスを持します。つまり、ゲートウェイのサービスを簡単に適切なデバイスに設定することができます。
+
各デバイスに静的 IP アドレスを設定すると、Web サービス (例:FTPhttpSSH) を展開する場合に便利です。システム {{ic|/usr/lib/systemd/network/99-default.link}} ファイルに {{ic|1=MACAddressPolicy=persistent}} オプションが指定さている場合(デフォルトで指されています)、各デバイスは再起動も同じMACアドレスを持します。したがって、ゲートウェイ上の任意のサービスを目的のデバイスに簡単にルーティングできます。
まず、システムの {{ic|/usr/lib/systemd/network/80-container-host0.network}} ファイルを除去します。永続的にするために (例: アップグレードしても変わらないように)、コンテナで以下の設定を行なって下さい。これによって {{ic|/etc/systemd/network}} の同じ名前のファイルが {{ic|/usr/lib/systemd/network}} のファイルよりも優先されるため {{ic|/usr/lib/systemd/network/80-container-host0.network}} ファイルがマスクされます。
 
   
  +
このセットアップでは、次の設定を行う必要があります。
# ln -sf /dev/null /etc/systemd/network/80-container-host0.network
 
   
  +
* ホスト側
次に、コンテナで {{ic|systemd-networkd}} を[[systemd#systemctl の基本的な使い方|有効化・起動]]してください。
 
   
  +
この設定は、[[#DHCP を用いたネットワークブリッジ]] セクションと非常によく似ています。まず、仮想ブリッジインターフェイスを作成し、メインの物理インターフェイスをそのインターフェイスにバインドする必要があります。この作業は、次の2つのファイルを使用して実行できます。これらのファイルの内容は、 DHCP セクションで使用できるものと同じです。
必要な設定ファイル:
 
 
* ホスト側
 
   
 
/etc/systemd/network/''MyBridge''.netdev
 
/etc/systemd/network/''MyBridge''.netdev
 
/etc/systemd/network/''MyEth''.network
 
/etc/systemd/network/''MyEth''.network
   
  +
次に、新しく作成した仮想ブリッジインターフェイスの IP および DNS を設定する必要があります。例:
''MyBridge''.network の修正
 
   
 
{{hc|/etc/systemd/network/''MyBridge''.network|<nowiki>
 
{{hc|/etc/systemd/network/''MyBridge''.network|<nowiki>
449行目: 495行目:
 
* コンテナ側
 
* コンテナ側
   
  +
コンテナに静的 IP アドレスを設定するには、システム {{ic|/usr/lib/systemd/network/80-container-host0.network}} ファイルを上書きする必要があります。このファイルは、コンテナの {{ic|host0}} ネットワークインタフェースに DHCP 構成を提供します。これを行うには、設定を {{ic|/etc/systemd/network/80-container-host0.network}} に置きます。例:
{{hc|/etc/systemd/network/''MyVeth''.network|<nowiki>
 
  +
  +
{{hc|/etc/systemd/network/80-container-host0.network|2=
 
[Match]
 
[Match]
 
Name=host0
 
Name=host0
457行目: 505行目:
 
Address=192.168.1.94/24
 
Address=192.168.1.94/24
 
Gateway=192.168.1.254
 
Gateway=192.168.1.254
  +
}}
  +
  +
コンテナで {{ic|systemd-networkd.service}} が[[有効化]]されていることを確認してください。
  +
  +
== ヒントとテクニック ==
  +
  +
=== 管理やデスクトップの統合 ===
  +
  +
''systemd-networkd'' には[[コマンドラインシェル]]や GUI による適切なインタラクティブ管理インターフェイスがありません。
  +
  +
ただし、ネットワークの現在の状態を表示したり、通知を受信したり、ワイヤレス構成を操作したりするためのツールはあります:
  +
  +
* ''networkctl'' は(CLI を通して)ネットワークインターフェイスの状態の簡単な表示を行います。
  +
* ''networkd'' で [[wpa_supplicant]] を使うように設定した場合、''wpa_cli'' や ''wpa_gui'' を使うことで動的に WLAN インターフェイスを関連付けしたり再設定できます。
  +
* {{AUR|networkd-notify-git}} はネットワークインターフェイスの状態の変化にあわせてシンプルな通知を生成します (接続・切断や再関連付けなど)。
  +
* {{AUR|networkd-dispatcher}} デーモンを使うことで ''NetworkManager-dispatcher'' と同じようにネットワークインターフェイスの状態が変わったときにスクリプトを実行することができます。
  +
* DNS リゾルバの ''systemd-resolved'' は {{ic|resolvectl status}} で現在の DNS サーバーの情報を視覚化できます。
  +
  +
=== SSID (場所) に基づいた静的 IP または DHCP の設定 ===
  +
  +
ホームワイヤレスネットワークが DHCP を使用し、オフィスワイヤレスネットワークが静的 IP を使用する状況がよくあります。この混在したセットアップは、次のように構成できます:
  +
  +
{{Note|ファイル名の番号によって,ファイルの処理順序が決まります。 SSID、 BSSID、 またはその両方に基づいて [Match] できます。}}
  +
  +
{{hc|/etc/systemd/network/24-wireless-office.network|<nowiki>
  +
# special configuration for office WiFi network
  +
[Match]
  +
Name=wlp2s0
  +
SSID=office_ap_name
  +
#BSSID=aa:bb:cc:dd:ee:ff
  +
  +
[Network]
  +
Address=10.1.10.9/24
  +
Gateway=10.1.10.1
  +
DNS=10.1.10.1
  +
#DNS=8.8.8.8
 
</nowiki>}}
 
</nowiki>}}
   
  +
{{hc|/etc/systemd/network/25-wireless-dhcp.network|<nowiki>
Et voila!
 
  +
# use DHCP for any other WiFi network
  +
[Match]
  +
Name=wlp2s0
   
  +
[Network]
== 管理やデスクトップの統合 ==
 
  +
DHCP=ipv4
  +
</nowiki>}}
   
''systemd-networkd'' にはコマンドランや GUI によるインタラクティブな管理インターフェイスがありません。''networkctl'' はネットークインターフェイスの状態を出力するだけです。
+
=== ヤード (有線) インターフェイスイヤレスインターフェイスのボンディング ===
   
  +
[[ワイヤレスボンディング]] も参照してください。
''networkd'' で [[wpa_supplicant]] を使うように設定した場合、''wpa_cli'' や ''wpa_gui'' を使うことで動的に WLAN インターフェイスを関連付けしたり再設定できます。
 
   
  +
ボンディングを使用すると、複数のインターフェイスを介して接続を共有できるため、有線インターフェイスを取り外しても、ワイヤレス接続は維持され、ネットワーク接続はシームレスに維持されます。
{{AUR|networkd-notify-git}} はネットワークインターフェイスの状態の変化にあわせてシンプルな通知を生成します (接続・切断や再関連付けなど)。
 
   
  +
結合インタフェースを作成します。この場合、モードは ''active-backup'' です。つまり、プライマリインターフェイスがダウンした場合、パケットはセカンダリインターフェイスを介してルーティングされます。
{{AUR|networkd-dispatcher}} デーモンを使うことで ''NetworkManager-dispatcher'' と同じようにネットワークインターフェイスの状態が変わったときにスクリプトを実行することができます。
 
   
  +
{{hc|/etc/systemd/network/30-bond0.netdev|<nowiki>
DNS リゾルバの ''systemd-resolved'' は {{ic|systemd-resolve --status}} で現在の DNS サーバーの情報を視覚化できます。
 
  +
[NetDev]
  +
Name=bond0
  +
Kind=bond
  +
  +
[Bond]
  +
Mode=active-backup
  +
PrimaryReselectPolicy=always
  +
MIIMonitorSec=1s
  +
</nowiki>}}
  +
  +
有線インターフェイスをプライマリとして設定します。
  +
  +
{{hc|/etc/systemd/network/30-ethernet-bond0.network|<nowiki>
  +
[Match]
  +
Name=enp0s25
  +
  +
[Network]
  +
Bond=bond0
  +
PrimarySlave=true
  +
</nowiki>}}
  +
  +
ワイヤレスをセカンダリとして設定します。
  +
  +
{{hc|/etc/systemd/network/30-wifi-bond0.network|<nowiki>
  +
[Match]
  +
Name=wlan0
  +
  +
[Network]
  +
Bond=bond0
  +
</nowiki>}}
  +
  +
通常のインターフェイスと同様に、bond インターフェイスを設定します。
  +
  +
{{hc|/etc/systemd/network/30-bond0.network|<nowiki>
  +
[Match]
  +
Name=bond0
  +
  +
[Network]
  +
DHCP=ipv4
  +
</nowiki>}}
  +
  +
有線ネットワークが接続されていない場合は、ワイヤレス接続が維持されます。
  +
  +
{{hc|$ networkctl|<nowiki>
  +
IDX LINK TYPE OPERATIONAL SETUP
  +
1 lo loopback carrier unmanaged
  +
2 enp0s25 ether no-carrier configured
  +
3 bond0 bond degraded-carrier configured
  +
5 wlan0 wlan enslaved configured
  +
  +
4 links listed.
  +
</nowiki>}}
  +
  +
=== TCP スロースタートの速度を上げる ===
  +
  +
遅延が中程度の広帯域リンク (通常、10 Mbit/s を超えるホームインターネット接続) では、TCP スロースタートアルゴリズムのデフォルト設定はやや保守的です。この問題は、ダウンロードがゆっくりと開始され、接続の全帯域幅に到達するまでに加速するのに数秒かかる場合に発生します。特に pacman アップグレードなどで、ダウンロードされた各パッケージがゆっくりと開始し、接続の最大速度に達する前に終了することがよくあります。
  +
  +
これらの設定を調整して、 TCP 接続が既定よりも大きなウィンドウサイズで開始されるようにすることができます。これにより 新しい TCP 接続ごとに自動的に増加する時間を避けることができます [https://www.cdnplanet.com/blog/tune-tcp-initcwnd-for-optimum-performance/] これは通常、損失した多数のパケットを再送信する必要があるため、低速な接続ではパフォーマンスを低下させますが (または値が大きくなりすぎた場合) 、十分な帯域幅を持つ接続ではパフォーマンスを大幅に向上させることができます。
  +
  +
これらの値を変更する前と変更した後にベンチマークを実行して、ネットワーク速度を向上させ、低下させないようにすることが重要です。ダウンロードの開始が遅く、速度が徐々に上がっていない場合は、これらの値を変更する必要はありません。これらの値はすでに接続速度に最適です。ベンチマークを行う際には、低速なサーバへのアクセスをさらに低速にすることを犠牲にして高速なマシンへのアクセスを高速化しないように、高速なリモートサーバと低速なリモートサーバの両方に対してテストするようにしてください。
  +
  +
これらの値を調整するには、接続の ''.network'' ファイルを編集します。
  +
  +
{{hc|/etc/systemd/network/eth0.network|2=
  +
[Match]
  +
Name=eth0
  +
  +
#[Network]
  +
#Gateway=... <-- Remove this if you have it, and put it in the Gateway= line below
  +
  +
[Route]
  +
# This will apply to the gateway supplied via DHCP. If you manually specify
  +
# your gateway, put it here instead.
  +
Gateway=_dhcp4
  +
  +
# The defaults for these values is 10. They are a multiple of the MSS (1460 bytes).
  +
InitialCongestionWindow=10
  +
InitialAdvertisedReceiveWindow=10
  +
}}
   
  +
デフォルトの {{ic|10}} は、 10Mbit/s より遅い接続に適しています。100 Mbit/s 接続の場合、値 {{ic|30}} 位が適切に機能します。マニュアル・ページ {{man|5|systemd.network|<nowiki>[ROUTE] SECTION OPTIONS</nowiki>|fragment=%5BROUTE%5D_SECTION_OPTIONS}} には、{{ic|100}} の値は過剰と見なされると記載されています。
== トラブルシューティング ==
 
=== 起動時にマウントサービスが失敗する ===
 
ネットワークが立ち上がる前に [[Samba]]/[[NFS]] などのサービスが実行されると上手く行きません。そのようなときは {{ic|systemd-networkd-wait-online.service}} を[[有効化]]すると良いでしょう。ただし、ネットワークが設定されていない状態でも、ほとんどのネットワークデーモンは問題なく立ち上がるため必要になる状況はあまりありません。
 
   
  +
[[sysctl]] 設定 {{ic|net.ipv4.tcp_slow_start_after_idle}} が有効になっている場合、しばらくアイドル状態が続くと (多くの場合、ごく短時間) 、接続はこれらの初期設定に戻ります。この設定を無効にすると、パケット転送中に大きいウィンドウがネゴシエートされた場合、接続は大きいウィンドウを維持します。設定に関係なく、新しい各 TCP 接続は上記の {{ic|Initial*}} 設定で始まります。
=== systemd-resolve がローカルドメインを検索してくれない ===
 
   
  +
sysctl 設定 {{ic|net.ipv4.tcp_congestion_control}} は、 TCP リンクがアクティブなとき、特に2つのホスト間のパスが輻輳してスループットを低下させる必要があるときに、輻輳ウィンドウと受信ウィンドウを調整する方法を制御するため、これらの値とは直接関係しません。上記の {{ic|Initial*}} 値は、輻輳アルゴリズムに引き継がれて必要に応じて調整される前に、新しい接続ごとに選択されたデフォルトのウィンドウ値を設定するだけです。高い初期値を設定すると、輻輳アルゴリズムが最適な値 (または、逆に、間違った初期値を設定するとネゴシエーション時間が長くなりますが、輻輳アルゴリズムはそれらを修正するように動作し、新しく確立された各 TCP 接続の速度が数秒間遅くなります。) を見つけようとしている間に、単純にネゴシエーションが短縮されます。
ホストネームを指定しているとき、たとえ {{ic|.network}} ファイルに {{ic|1=UseDomains=yes}} や {{ic|1=Domains=[domain-list]}} を設定している場合 ({{ic|resolv.conf}} に {{ic|search [domain-list]}} が作成されます) でも、Systemd の {{ic|resolve}} はローカルドメインを検索しません。この問題を解決するには:
 
* {{ic|/etc/nsswitch.conf}} の {{ic|hosts}} データベースを切り詰める (例: {{ic|resolve}} サービスの後ろの {{ic|1=[!UNAVAIL=return]}} オプションを削除する)。
 
* 完全修飾ドメイン名を使うようにする。
 
* {{ic|/etc/hosts}} を使ってホストネームを解決する。
 
* systemd の {{ic|resolve}} の代わりに glibc の {{ic|dns}} を使うようにする。
 
   
 
== 参照 ==
 
== 参照 ==
   
  +
* {{man|8|systemd-networkd}}
* [https://www.freedesktop.org/software/systemd/man/systemd-networkd.service.html systemd.networkd man ページ]
 
* [https://plus.google.com/u/0/+TomGundersen/posts systemd-networkd のメイン開発者、Tom Gundersen G+ ホームページ]
+
* [https://web.archive.org/web/20201111213850/https://coreos.com/blog/intro-to-systemd-networkd/ Tom Gundersen posts on Core OS blog]
* [https://coreos.com/blog/intro-to-systemd-networkd/ Core OS のブログにおける Tom Gundersen の投稿]
+
* [https://bbs.archlinux.org/viewtopic.php?pid=1393759#p1393759 How to set up systemd-networkd with wpa_supplicant] (WonderWoofy's walkthrough on Arch forums)
* [https://bbs.archlinux.org/viewtopic.php?pid=1393759#p1393759 systemd-networkd と wpa_supplicant をセットアップする方法] (WonderWoofy's walkthrough on Arch forums)
 

2023年7月10日 (月) 09:52時点における最新版

関連記事

systemd-networkd はネットワーク設定を管理するシステムデーモンです。ネットワークデバイスが立ち上がるとそれを検出して設定を行います。また、仮想ネットワークデバイスを作成することもできます。このサービスは systemd-nspawn で管理されるコンテナまたは仮想マシンの複雑なネットワークを設定する場合にとても役に立ちます。また、単純な接続でも正常に動作します。

基本的な使い方

systemd パッケージは Arch ではデフォルトでインストールされており、有線ネットワークに接続するために必要なファイルは全て揃っています。後で述べているように、wpa_supplicantiwd など他のサービスを使うことで無線アダプタを設定することもできます。

必要なサービスと設定

systemd-networkd を使用するには、systemd-networkd.service 起動/有効化します。

ノート: ネットワークを設定したい他のサービスが起動していないことを確認する必要があります。実際、複数のネットワークサービスが競合してしまいます。現在動作しているサービスの一覧は systemctl --type=service で確認でき、それらを 停止 して下さい。

また、ネットワーク名前解決サービスである systemd-resolved は,以下の点を考慮して任意に設定して下さい。

  • 使用する DNS を適切に設定するためには、resolv.confsystemd-resolved の相互作用を理解することが重要です。 systemd-resolved にいくつかの解説があります。
  • DNS エントリーが .network ファイルで指定されている場合は systemd-resolved が必要です。
  • systemd-resolved は、DHCP サーバーまたは IPv6 ルーターから DNS アドレスを取得する場合にも必要です。

(DHCP= および IPv6AcceptRA= セクションの [Network] および UseDNS=yes (デフォルト) 、[DHCPv4][DHCPv6][IPv6AcceptRA]systemd.network(5) を参照してください。) を設定します。

  • systemd-networkd 無しでも systemd-resolved を使うことができることに注意してください。

system-networkd-wait-online

systemd-networkd.service を有効にすると、 systemd-networkd-wait-online.service も有効になります。これは、ネットワークが構成されるのを待つワンショット・システム・サービスです。後者は WantedBy=network-online.target を持っているので、 network-online.target 自身が有効になっているか、他のユニットに引き寄せられた時にのみ起動します。 Systemd#ネットワークが稼働した後にサービスを実行するも参照してください。

デフォルトでは、 systemd-networkd-wait-online.service は、認識され systemd-networkd によって管理されているすべてのリンクが完全に設定されるか、または失敗しても、少なくとも1つのリンクがオンラインになるまで待機します。

システムに複数のネットワークインタフェースがあるが、常時接続されているとは想定されていないものもある場合 (例えば、 dual-port Ethernet を使用しているが、ケーブルが1本しか接続されていない場合)、 system-networkd-wait-online.service の起動は、デフォルトのタイムアウトである2分後に失敗します。これにより、起動プロセスに不要な遅延が発生する可能性があります。すべての インターフェイスではなく 任意の インターフェイスがオンラインになるまで待機する動作に変更するには、サービスを編集し、--any パラメータを ExecStart 行に追加します。

/etc/systemd/system/systemd-networkd-wait-online.service.d/wait-for-only-one-interface.conf
[Service]
ExecStart=
ExecStart=/usr/lib/systemd/systemd-networkd-wait-online --any

無視されたインターフェイスや動作状態など、その他の動作も設定できます。使用可能なパラメータについては、 systemd-networkd-wait-online(8) を参照してください。

設定ファイルの例

このセクションにおける設定はすべて /etc/systemd/network の中に foo.network として保存します。利用できるオプションや処理の順番については、#設定ファイルsystemd.network(5) を見て下さい。

systemd/udev は、予測可能で安定したネットワークインターフェイス名をすべてのローカルイーサネット、WLAN、WWAN インターフェイスに自動で割り当てます。システム上にあるデバイスのリストを得るには networkctl list を使用してください。

設定ファイルに変更を加えたら、systemd-networkd.service再起動してください。

ノート:
  • 設定ファイル内で指定するオプションは大文字と小文字が区別されます。
  • 以下の例では、enp1s0 が有線アダプタ、wlp2s0 が無線アダプタです。環境によって名前は変わります。ネットワーク設定#ネットワークインターフェイス を見てください。
  • Name=en*Name=wl* のようにワイルドカードを使うこともできます。
  • デバイスはタイプによってもマッチさせることが可能です。例: イーサネットは Type=ether、Wi-Fi は Type=wlan、WWAN は Type=wwan。注意点として、Type=ether は仮想イーサネットインターフェイス(veth*)にもマッチします(この動作は望ましくない場合があるでしょう)。
  • IPv6 を無効化したい場合、IPv6#systemd-networkd_3 を見てください。

有線アダプタで DHCP を使用

/etc/systemd/network/20-wired.network
[Match]
Name=enp1s0

[Network]
DHCP=yes

有線アダプタで固定 IP を使用

/etc/systemd/network/20-wired.network
[Match]
Name=enp1s0

[Network]
Address=10.1.10.9/24
Gateway=10.1.10.1
DNS=10.1.10.1

Address= は1回以上使用することができ、複数の IPv4 や IPv6 アドレスを指定することができます。さらなるオプションについては #network ファイルsystemd.network(5) を見てください。

無線アダプタ

systemd-networkd で無線ネットワークに接続するには、wpa_supplicantiwd などの別のアプリケーションで設定された無線アダプタが必要です。

/etc/systemd/network/25-wireless.network
[Match]
Name=wlp2s0

[Network]
DHCP=yes
IgnoreCarrierLoss=3s

無線アダプタで固定 IP アドレスを使っている場合、設定は (インターフェイス名を除いて) 有線アダプタと同じになります。

ヒント: IgnoreCarrierLoss=3s により、同じワイヤレスネットワーク(SSID)内でワイヤレスインターフェイスが他のアクセスポイントにローミングする間、systemd-networkd が短期間(この例では 3 秒間)にインターフェイスを再設定(例: DHCP リースの開放と再取得)しないことを保証します。これにより、ローミング時にダウンタイムが短縮されます。

無線スネットワークへの認証には、wpa_supplicantiwd などを使用します。

同一マシンで有線アダプタと無線アダプタ両方を使用

以下の設定では、metric ディレクティブを使用して、有線と無線両方の接続で DHCP IP を有効にしており、カーネルがその場でどちらを使うか決定します。有線接続が切断されると、即座に無線に切り替わります。接続が途切れることはありません。

システム上の無線・有線どちらのデバイスも有効な接続がある場合、カーネルのルーティングのメトリック(ip で設定するのと同一) が、パケットを送るのにどちらのルートを使用するか決定します。システム上の有線デバイスと無線デバイスの両方がアクティブな接続を行っている場合がそうです。均衡状態を破るために、カーネルはメトリックを使います。もし一方の接続が終了しても、何も設定せずとも、もう一方が自動的にギャップを埋めます(進行中の転送はまだうまく対処されないでしょうが、これは他の OSI レイヤーでの問題です)。

ノート: Metric オプションはスタティックルーティングの設定を行います。RouteMetric オプションはスタティックルーティングの設定をしないセットアップ用です。詳細については systemd.network(5) を参照して下さい
/etc/systemd/network/20-wired.network
[Match]
Name=enp1s0

[Network]
DHCP=yes

[DHCPv4]
RouteMetric=10
/etc/systemd/network/25-wireless.network
[Match]
Name=wlp2s0

[Network]
DHCP=yes

[DHCPv4]
RouteMetric=20

IPv6 を使用している場合は、次のように IPv6 ルートのメトリックも個別に設定する必要があります。

/etc/systemd/network/20-wired.network
...

[IPv6AcceptRA]
RouteMetric=10
/etc/systemd/network/25-wireless.network
...

[IPv6AcceptRA]
RouteMetric=20

インターフェイスの名前を変更

udev ルールを編集するかわりに .link ファイルを使ってインターフェイスの名前を変更できます。MAC アドレスに基づいて USB-to-Ethernet アダプタに予測可能なインターフェイス名を設定する例 (通常は接続された USB 端子によって名前が変わってしまいます):

/etc/systemd/network/10-ethusb0.link
[Match]
MACAddress=12:34:56:78:90:ab

[Link]
Description=USB to Ethernet Adapter
Name=ethusb0
ノート: ユーザーが作成した .link ファイルが先に有効になるように、デフォルト設定の 99-default.link よりも辞書的に早い順番になるような名前を付けてください。例えば、ethusb0.link という名前を付けたい場合は 10-ethusb0.link としてください。

設定ファイル

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

3つのタイプの設定ファイルが存在します。ファイルのフォーマットは systemd のユニットファイルと似ています。

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

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

  • [Match] セクションの全ての条件がマッチすれば、プロファイルが有効になります。
  • 空の [Match] セクションはどんな場合でもそのセクションを適用することを示します (いわば * ワイルドカードのようなものです)。
  • 全ての設定ファイルは辞書順でまとめてソートされ処理されます。ファイルがどのディレクトリにあるかは関係ありません。
  • 同じ名前のファイルは互いを置き換えます。
ヒント:
  • /etc/systemd/network/ 内のファイルは /usr/lib/systemd/network/ 内の対応する、システムによって提供されたファイルを上書きします。また、/dev/null へのシンボリックリンクを作成することで、システムファイルを"マスク"できます。
  • systemd は true 真偽値として値 1trueyeson を受け付け、false 真偽値として値 0falsenooff を受け付けます。systemd.syntax(7) を見てください。

network ファイル

このセクションは削除するべきか検討が行われています。
Reason: Duplicates the systemd.network(5) man page. (議論: トーク:Systemd-networkd#)

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

.network ファイルには次のセクションを記述できます: [Match][Link][Network][Address][Route][DHCPv4]。以下ではそれぞれのセクションでよく使われる設定キーを説明します。詳細や例は systemd.network(5) を見てください。

[Match]

パラメータ 説明 受け入れる値 デフォルト値
Name= デバイス名のリストにマッチ(例: en*)。プレフィックス ! を付けると、リストを反転できます。 空白で区切られた、グロブ付きデバイス名リスト。論理否定 (!)
MACAddress= MAC アドレスのリストにマッチ(例: MACAddress=01:23:45:67:89:ab 00-11-22-33-44-55 AABB.CCDD.EEFF) コロン、ハイフン、またはドットで区切られた完全な 16 進数による、空白で区切られた MAC アドレスリスト
Host= ホスト名、またはホストのマシン IDにマッチ。 グロブ付きのホスト名文字列、machine-id(5)
Virtualization= システムが仮想化環境で起動されているかどうかをチェックします。Virtualization=false キーはホストマシンにのみマッチし、逆に Virtualization=true はコンテナや VM にマッチします。特定の仮想化タイプや実装をチェックしたり、(private-users を使って)ユーザ名前空間をチェックしたりできます。 真偽値、論理否定(!)、タイプ(vm, container)、実装(systemd-detect-virt(1) を参照)、private-users

[Link]

パラメータ 説明 受け入れる値 デフォルト値
MACAddress= ハードウェアアドレスをデバイスに割り当てる。MAC アドレスの偽装に便利。 コロン、ハイフン、ドットで区切られた、完全な 16 進数 MAC アドレス。
MTUBytes= デバイスに対して最大転送単位をバイト単位で指定。IPv6 がインターフェイスで有効化されていて、MTU が 1280 (IPv6 における最低 MTU) 未満に指定されている場合、自動的に 1280 まで増やされます。より大きな MTU 値を設定することで(例: ジャンボフレーム 使用時)、ネットワーク転送速度を飛躍的に速くできます。 整数 (通常の接尾辞 K、M、G がサポートされており、1024 の倍数として認識されます)
Multicast= マルチキャスト の使用を許可。 真偽値 ? ドキュメント化されておらず ?

[Network]

パラメータ 説明 受け入れる値 デフォルト値
DHCP= DHCPv4 と DHCPv6 の一方/両方のサポートを制御。 真偽値、ipv4ipv6 false
DHCPServer= 有効化されている場合、DHCPv4 サーバが起動されます。 真偽値 false
MulticastDNS= マルチキャスト DNS のサポートを有効化。resolve に設定すると、名前解決のみが有効化され、ホストやサービスの登録と広告は行われません。 真偽値、resolve false
DNSSEC= リンク上での DNSSEC DNS validation のサポートを制御。allow-downgrade に設定すると、DNSSEC 非対応のネットワークとの互換性が向上します。この場合、DNSSEC は自動でオフになります。 真偽値、allow-downgrade false
DNS= 固定 DNS アドレスを設定。1回以上指定できます。 inet_pton(3)
Domains= リンク上の DNS サーバを利用して解決すべきドメインのリスト。詳細 ドメイン名、オプションでチルダ(~)のプレフィックス。
IPForward= 有効化すると、ネットワークインターフェイス上で受信したパケットを、ルーティングテーブルに従って他のインターフェイスに転送します。詳細は インターネット共有#パケット転送の有効化 真偽値、ipv4ipv6 false
IPMasquerade= 有効化すると、ネットワークインターフェイスからのパケット転送がローカルホストから来るように見えます。値によっては、IPForward=ipv4IPForward=ipv6、または IPForward=yes の意味になります。 ipv4ipv6bothno no
IPv6PrivacyExtensions= 時間と共に変化するステートレステンポラリアドレスの使用を設定します(RFC 4941 を参照)。prefer-public を指定すると、プライバシー拡張が有効に名ありますが、テンポラリアドレスよりもパブリックアドレスを優先します。kernel を指定すると、カーネルのデフォルトの設定のままになります。 真偽値、prefer-publickernel false

[Address]

パラメータ 説明 受け入れる値 デフォルト値
Address= 複数のアドレスを設定するには、このキーを複数回指定してください。DHCP を使用しない限り必須です。指定されたアドレスが(IPv4の 場合) 0.0.0.0 または (IPv6 の場合) :: である場合、要求されたサイズの新しいアドレス範囲が、システム全体の未使用範囲のプールから自動的に割り当てられます。 固定 IPv4 または IPv6 アドレスとプレフィックス長(inet_pton(3) を参照)

[Route]

  • Gateway= DHCP を使用しない場合、このオプションは必須です。
  • Destination= ルートの宛先プリフィックスです。スラッシュとプリフィックス長を後ろに付けることができます。

[Route] セクションに Destination が存在しない場合、デフォルトルートとして扱われます。

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

[DHCPv4]

パラメータ 説明 受け入れる値 デフォルト値
UseDNS= DHCP サーバにより広告された DNS サーバを使用するかどうかを制御。 真偽値 true
Anonymize= true を指定すると、DHCP サーバに送られるオプションが RFC:7844 (Anonymity Profiles for DHCP Clients) に従って、識別情報の開示を最小限にするようになります。 真偽値 false
UseDomains= DHCP サーバから受け取るドメイン名を DNS 検索ドメインとして使用するかどうかを制御。route に設定すると、DHCP サーバから受け取るドメイン名が DNS クエリにのみ使用され、検索には使用されなくなります。このオプションは、systemd-resolved を使用している際にはローカルな名前解決を修正する可能性があります。 真偽値、route false

[DHCPServer]

これは、無線ホットスポットを作成するために hostapd とうまく連動する DHCP サーバーの設定例です。IPMasqueradeNATを有効にする ためのファイアウォールルールを追加し、IPForward=ipv4 パケット転送 を有効にしています。

この記事またはセクションの正確性には問題があります。
理由: IPMasquerade=truefilter テーブルのルールを追加しません、それらは手動で追加する必要があります。systemd-nspawn#仮想イーサネットリンクを使用する を参照してください (議論: トーク:Systemd-networkd#)

/etc/systemd/network/wlan0.network
[Match]
Name=wlan0

[Network]
Address=10.1.1.1/24
DHCPServer=true
IPMasquerade=ipv4

[DHCPServer]
PoolOffset=100
PoolSize=20
EmitDNS=yes
DNS=9.9.9.9

netdev ファイル

このセクションは削除するべきか検討が行われています。
Reason: Duplicates the systemd.netdev(5) man page. (議論: トーク:Systemd-networkd#)

netdev ファイル群は仮想ネットワークデバイスを作成します。これらのファイルには次のセクションを記述できます: [Match][NetDev]。以下ではそれぞれのセクションでよく使われる設定キーを説明します。詳細や例は systemd.netdev(5) を見てください。

[Match] セクション

  • Host= ホストネーム
  • Virtualization= VM の中で実行されているかどうか確認する。

[NetDev] セクション

  • Name= インターフェイス名。必須
  • Kind= 例: bridge, bond, vlan, veth, sit必須

link ファイル

このセクションは削除するべきか検討が行われています。
Reason: Duplicates the systemd.link(5) man page. (議論: トーク:Systemd-networkd#)

このファイルはカスタム udev ルールの代わりとなりデバイスが現れた時に udev によって適用されます。2つのセクションを記述します: [Match][Link]。以下ではそれぞれのセクションでよく使われる設定キーを説明しています。詳しくは systemd.link(5) を参照してください。

ヒント: .link ファイルの問題を診断したいときは udevadm test-builtin net_setup_link /sys/path/to/network/device を使ってください。

[Match] セクション

  • MACAddress= MAC アドレス
  • Host= ホストネーム
  • Virtualization=
  • Type= デバイスのタイプ (例: vlan)

[Link] セクション

  • MACAddressPolicy= 永続的、またはランダムなアドレス。または、
  • MACAddress= 特定のアドレス。
  • NamePolicy= インターフェイス名に対してセットされるべきポリシーのリスト。例: kernel, keep
ノート: ほとんどの場合システムの /usr/lib/systemd/network/99-default.link で基本的に問題ありません。

コンテナでの使用方法

systemd-networkd は、コンテナ内とホストシステムの両方で使用されている場合、systemd-nspawn コンテナに対するネットワークの完全自動設定を提供できます。総合的な外観は systemd-nspawn#ネットワーキング を見てください。

下で説明している設定について、

  • $ ip a コマンドの出力を、関連するインターフェイスにだけ絞っています。
  • ホストは起動しているメインの OS であり、コンテナは仮想マシンのゲストのことです。
  • インターフェイスの名前や IP アドレスは全てあくまでただの例です。

DHCP を用いたネットワークブリッジ

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

まず、仮想ブリッジインターフェイスを作成してください。systemd に、イーサネットブリッジとして機能する、br0 という名前のデバイスを作成するように指示します。

/etc/systemd/network/mybridge.netdev
[NetDev]
Name=br0
Kind=bridge
ヒント: systemd-networkd は、インターフェイス名とマシン ID に基づいて生成された MAC アドレスをブリッジに割り当てます。これにより接続の問題が発生する場合があります。例えば、MAC フィルタリングに基づいたルーティングです。そのような問題を回避するには、MAC アドレス(おそらく物理デバイスと同じもの)をブリッジに割り当ててください。上記の NetDev セクション内に MACAddress=xx:xx:xx:xx:xx:xx という行を追加してください。

systemd-networkd.service再起動すると systemd はブリッジを作成します。

新しく追加したブリッジを見るには、ホストとコンテナ上で以下を実行してください:

$ 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 になっていることに注意してください。

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

次のステップでは、新しく作成したブリッジにネットワークインターフェイスを追加します。以下の例では、en* という名前にマッチする任意のインターフェイスをブリッジ br0 に追加します。

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

[Network]
Bridge=br0

ブリッジが IP と関連付けられていないインターフェイスを必要とするので、イーサネットインターフェイスは DHCP や IP アドレスと関連付けてはいけません: 対応する /etc/systemd/network/MyEth.network を適宜変更して、アドレッシングを削除してください。

ブリッジネットワーク

ブリッジが作成され、既存のネットワークインターフェイスに関連付けられました。ブリッジインターフェイスの IP 設定を指定する必要があります。これは3番目の .network で定義されます。以下の例では DHCP を使用します。

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

[Network]
DHCP=ipv4

コンテナの設定

コンテナを起動する際は --network-bridge=br0 オプションを使用してください。詳細は systemd-nspawn#ネットワークブリッジを使用する を見てください。

結果

  • ホスト側
$ 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 オプションによるものです。詳細は systemd-nspawn#ネットワークブリッジを使用する を参照してください。
  • host0 の DHCP アドレスはシステムの /usr/lib/systemd/network/80-container-host0.network ファイルから由来します。
  • ホスト側
この記事またはセクションは情報が古くなっています。
理由: brctl は非推奨です。bridge link を使用してください。ネットワークブリッジ#iproute2 を使う を参照。 (Discuss)
$ 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 アドレスを持つネットワークブリッジ

各デバイスに静的 IP アドレスを設定すると、Web サービス (例:FTP、http、SSH) を展開する場合に便利です。システム /usr/lib/systemd/network/99-default.link ファイルに MACAddressPolicy=persistent オプションが指定されている場合(デフォルトで指定されています)、各デバイスは再起動後も同じMACアドレスを保持します。したがって、ゲートウェイ上の任意のサービスを目的のデバイスに簡単にルーティングできます。

このセットアップでは、次の設定を行う必要があります。

  • ホスト側

この設定は、#DHCP を用いたネットワークブリッジ セクションと非常によく似ています。まず、仮想ブリッジインターフェイスを作成し、メインの物理インターフェイスをそのインターフェイスにバインドする必要があります。この作業は、次の2つのファイルを使用して実行できます。これらのファイルの内容は、 DHCP セクションで使用できるものと同じです。

/etc/systemd/network/MyBridge.netdev
/etc/systemd/network/MyEth.network

次に、新しく作成した仮想ブリッジインターフェイスの IP および DNS を設定する必要があります。例:

/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
  • コンテナ側

コンテナに静的 IP アドレスを設定するには、システム /usr/lib/systemd/network/80-container-host0.network ファイルを上書きする必要があります。このファイルは、コンテナの host0 ネットワークインタフェースに DHCP 構成を提供します。これを行うには、設定を /etc/systemd/network/80-container-host0.network に置きます。例:

/etc/systemd/network/80-container-host0.network
[Match]
Name=host0

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

コンテナで systemd-networkd.service有効化されていることを確認してください。

ヒントとテクニック

管理やデスクトップの統合

systemd-networkd にはコマンドラインシェルや GUI による適切なインタラクティブ管理インターフェイスがありません。

ただし、ネットワークの現在の状態を表示したり、通知を受信したり、ワイヤレス構成を操作したりするためのツールはあります:

  • networkctl は(CLI を通して)ネットワークインターフェイスの状態の簡単な表示を行います。
  • networkdwpa_supplicant を使うように設定した場合、wpa_cliwpa_gui を使うことで動的に WLAN インターフェイスを関連付けしたり再設定できます。
  • networkd-notify-gitAUR はネットワークインターフェイスの状態の変化にあわせてシンプルな通知を生成します (接続・切断や再関連付けなど)。
  • networkd-dispatcherAUR デーモンを使うことで NetworkManager-dispatcher と同じようにネットワークインターフェイスの状態が変わったときにスクリプトを実行することができます。
  • DNS リゾルバの systemd-resolvedresolvectl status で現在の DNS サーバーの情報を視覚化できます。

SSID (場所) に基づいた静的 IP または DHCP の設定

ホームワイヤレスネットワークが DHCP を使用し、オフィスワイヤレスネットワークが静的 IP を使用する状況がよくあります。この混在したセットアップは、次のように構成できます:

ノート: ファイル名の番号によって,ファイルの処理順序が決まります。 SSID、 BSSID、 またはその両方に基づいて [Match] できます。
/etc/systemd/network/24-wireless-office.network
# special configuration for office WiFi network
[Match]
Name=wlp2s0
SSID=office_ap_name
#BSSID=aa:bb:cc:dd:ee:ff

[Network]
Address=10.1.10.9/24
Gateway=10.1.10.1
DNS=10.1.10.1
#DNS=8.8.8.8
/etc/systemd/network/25-wireless-dhcp.network
# use DHCP for any other WiFi network
[Match]
Name=wlp2s0

[Network]
DHCP=ipv4

ワイヤード (有線) インターフェイスとワイヤレスインターフェイスのボンディング

ワイヤレスボンディング も参照してください。

ボンディングを使用すると、複数のインターフェイスを介して接続を共有できるため、有線インターフェイスを取り外しても、ワイヤレス接続は維持され、ネットワーク接続はシームレスに維持されます。

結合インタフェースを作成します。この場合、モードは active-backup です。つまり、プライマリインターフェイスがダウンした場合、パケットはセカンダリインターフェイスを介してルーティングされます。

/etc/systemd/network/30-bond0.netdev
[NetDev]
Name=bond0
Kind=bond

[Bond]
Mode=active-backup
PrimaryReselectPolicy=always
MIIMonitorSec=1s

有線インターフェイスをプライマリとして設定します。

/etc/systemd/network/30-ethernet-bond0.network
[Match]
Name=enp0s25

[Network]
Bond=bond0
PrimarySlave=true

ワイヤレスをセカンダリとして設定します。

/etc/systemd/network/30-wifi-bond0.network
[Match]
Name=wlan0

[Network]
Bond=bond0

通常のインターフェイスと同様に、bond インターフェイスを設定します。

/etc/systemd/network/30-bond0.network
[Match]
Name=bond0

[Network]
DHCP=ipv4

有線ネットワークが接続されていない場合は、ワイヤレス接続が維持されます。

$ networkctl
IDX LINK    TYPE     OPERATIONAL      SETUP
  1 lo      loopback carrier          unmanaged
  2 enp0s25 ether    no-carrier       configured
  3 bond0   bond     degraded-carrier configured
  5 wlan0   wlan     enslaved         configured

4 links listed.

TCP スロースタートの速度を上げる

遅延が中程度の広帯域リンク (通常、10 Mbit/s を超えるホームインターネット接続) では、TCP スロースタートアルゴリズムのデフォルト設定はやや保守的です。この問題は、ダウンロードがゆっくりと開始され、接続の全帯域幅に到達するまでに加速するのに数秒かかる場合に発生します。特に pacman アップグレードなどで、ダウンロードされた各パッケージがゆっくりと開始し、接続の最大速度に達する前に終了することがよくあります。

これらの設定を調整して、 TCP 接続が既定よりも大きなウィンドウサイズで開始されるようにすることができます。これにより 新しい TCP 接続ごとに自動的に増加する時間を避けることができます [1] これは通常、損失した多数のパケットを再送信する必要があるため、低速な接続ではパフォーマンスを低下させますが (または値が大きくなりすぎた場合) 、十分な帯域幅を持つ接続ではパフォーマンスを大幅に向上させることができます。

これらの値を変更する前と変更した後にベンチマークを実行して、ネットワーク速度を向上させ、低下させないようにすることが重要です。ダウンロードの開始が遅く、速度が徐々に上がっていない場合は、これらの値を変更する必要はありません。これらの値はすでに接続速度に最適です。ベンチマークを行う際には、低速なサーバへのアクセスをさらに低速にすることを犠牲にして高速なマシンへのアクセスを高速化しないように、高速なリモートサーバと低速なリモートサーバの両方に対してテストするようにしてください。

これらの値を調整するには、接続の .network ファイルを編集します。

/etc/systemd/network/eth0.network
[Match]
Name=eth0

#[Network]
#Gateway=...  <-- Remove this if you have it, and put it in the Gateway= line below

[Route]
# This will apply to the gateway supplied via DHCP.  If you manually specify
# your gateway, put it here instead.
Gateway=_dhcp4

# The defaults for these values is 10.  They are a multiple of the MSS (1460 bytes).
InitialCongestionWindow=10
InitialAdvertisedReceiveWindow=10

デフォルトの 10 は、 10Mbit/s より遅い接続に適しています。100 Mbit/s 接続の場合、値 30 位が適切に機能します。マニュアル・ページ systemd.network(5) § [ROUTE] SECTION OPTIONS には、100 の値は過剰と見なされると記載されています。

sysctl 設定 net.ipv4.tcp_slow_start_after_idle が有効になっている場合、しばらくアイドル状態が続くと (多くの場合、ごく短時間) 、接続はこれらの初期設定に戻ります。この設定を無効にすると、パケット転送中に大きいウィンドウがネゴシエートされた場合、接続は大きいウィンドウを維持します。設定に関係なく、新しい各 TCP 接続は上記の Initial* 設定で始まります。

sysctl 設定 net.ipv4.tcp_congestion_control は、 TCP リンクがアクティブなとき、特に2つのホスト間のパスが輻輳してスループットを低下させる必要があるときに、輻輳ウィンドウと受信ウィンドウを調整する方法を制御するため、これらの値とは直接関係しません。上記の Initial* 値は、輻輳アルゴリズムに引き継がれて必要に応じて調整される前に、新しい接続ごとに選択されたデフォルトのウィンドウ値を設定するだけです。高い初期値を設定すると、輻輳アルゴリズムが最適な値 (または、逆に、間違った初期値を設定するとネゴシエーション時間が長くなりますが、輻輳アルゴリズムはそれらを修正するように動作し、新しく確立された各 TCP 接続の速度が数秒間遅くなります。) を見つけようとしている間に、単純にネゴシエーションが短縮されます。

参照