「Systemd-networkd」の版間の差分
(同期) |
Kusanaginoturugi (トーク | 投稿記録) (→設定ファイル: 英語版より追記) |
||
(8人の利用者による、間の62版が非表示) | |||
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| |
+ | {{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 など) を設定する場合にこのサービスはとても役に立ちます。 |
||
== 基本的な使い方 == |
== 基本的な使い方 == |
||
− | {{Pkg|systemd}} パッケージは Arch ではデフォルトでインストールされており、有線ネットワークに接続するために必要なファイルは全て揃っています。後で述べているように、[[wpa_supplicant]] など他のサービスを使うことで無線アダプタを設定することもできます。 |
+ | {{Pkg|systemd}} パッケージは Arch ではデフォルトでインストールされており、有線ネットワークに接続するために必要なファイルは全て揃っています。後で述べているように、[[wpa_supplicant]] や [[iwd]] など他のサービスを使うことで無線アダプタを設定することもできます。 |
=== 必要なサービスと設定 === |
=== 必要なサービスと設定 === |
||
− | systemd-networkd を使用するには、 |
+ | 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 アドレスを取得する場合です。}} |
||
+ | * 使用する DNS を適切に設定するためには、[[resolv.conf]] と ''systemd-resolved'' の相互作用を理解することが重要です。 [[systemd-resolved]] にいくつかの解説があります。 |
||
− | [[resolv.conf]] の互換性のために、既存のファイルを削除または名前変更して以下のシンボリックリンクを作成してください: |
||
+ | * 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}} 行に追加します。 |
||
− | {{ic|man systemd-resolved}} や {{ic|man 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= |
||
− | {{Note|ホストネームを指定しているとき、たとえ {{ic|.network}} ファイルに {{ic|1=UseDomains=yes}} や {{ic|1=Domains=[domain-list]}} を設定している場合 ({{ic|resolv.conf}} に {{ic|search [domain-list]}} が作成されます) でも、Systemd の {{ic|resolve}} はローカルドメインを検索しません。この問題を解決するには: |
||
+ | [Service] |
||
− | * 完全修飾ドメイン名を使うようにする。 |
||
+ | ExecStart= |
||
− | * {{ic|/etc/hosts}} を使ってホストネームを解決する。 |
||
+ | ExecStart=/usr/lib/systemd/systemd-networkd-wait-online --any |
||
− | * systemd の {{ic|resolve}} の代わりに glibc の {{ic|dns}} を使うようにする。}} |
||
+ | }} |
||
+ | |||
+ | 無視されたインターフェイスや動作状態など、その他の動作も設定できます。使用可能なパラメータについては、 {{man|8|systemd-networkd-wait-online}} を参照してください。 |
||
=== 設定ファイルの例 === |
=== 設定ファイルの例 === |
||
− | このセクションにおける設定はすべて {{ic|/etc/systemd/network}} の中に {{ic|foo.network}} として保存します。利用できるオプションや処理の順番については、[[#設定ファイル]] や {{ic|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|以下の例では、'''enp1s0''' が有線アダプタ、'''wlp2s0''' が無線アダプタです。環境によって名前は変わります。}} |
||
+ | |||
+ | {{Note| |
||
+ | * 設定ファイル内で指定するオプションは大文字と小文字が区別されます。 |
||
+ | * 以下の例では、{{ic|enp1s0}} が有線アダプタ、{{ic|wlp2s0}} が無線アダプタです。環境によって名前は変わります。[[ネットワーク設定#ネットワークインターフェイス]] を見てください。 |
||
+ | * {{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/''wired''.network|<nowiki> |
||
+ | {{hc|/etc/systemd/network/20-wired.network|2= |
||
[Match] |
[Match] |
||
Name=enp1s0 |
Name=enp1s0 |
||
[Network] |
[Network] |
||
− | DHCP= |
+ | DHCP=yes |
}} |
}} |
||
==== 有線アダプタで固定 IP を使用 ==== |
==== 有線アダプタで固定 IP を使用 ==== |
||
+ | |||
− | {{hc|/etc/systemd/network/''wired''.network|<nowiki> |
||
+ | {{hc|/etc/systemd/network/20-wired.network|2= |
||
[Match] |
[Match] |
||
Name=enp1s0 |
Name=enp1s0 |
||
72行目: | 85行目: | ||
[Network] |
[Network] |
||
Address=10.1.10.9/24 |
Address=10.1.10.9/24 |
||
− | Gateway=10.1.10.1 |
+ | Gateway=10.1.10.1 |
+ | DNS=10.1.10.1 |
||
}} |
}} |
||
− | + | {{ic|1=Address=}} は1回以上使用することができ、複数の IPv4 や IPv6 アドレスを指定することができます。さらなるオプションについては [[#network ファイル]] や {{man|5|systemd.network}} を見てください。 |
|
==== 無線アダプタ ==== |
==== 無線アダプタ ==== |
||
− | 先に触れた通り、''systemd-networkd'' で無線ネットワークに接続するには、[[wpa_supplicant]] など別のサービスで無線アダプタを設定してから適当なサービスを有効にしてください。以下の例では、{{ic|wpa_supplicant@wlp2s0.service}} としています。 |
||
+ | ''systemd-networkd'' で無線ネットワークに接続するには、[[wpa_supplicant]] や [[iwd]] などの別のアプリケーションで設定された無線アダプタが必要です。 |
||
− | {{hc|/etc/systemd/network/''wireless''.network|<nowiki> |
||
+ | |||
+ | {{hc|/etc/systemd/network/25-wireless.network|2= |
||
[Match] |
[Match] |
||
Name=wlp2s0 |
Name=wlp2s0 |
||
[Network] |
[Network] |
||
− | DHCP= |
+ | 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 を有効にしており、カーネルがオンザフライでどちらを使うか決定します。有線接続が切断されると、即座に無線に切り替わります。接続が途切れることはありません。 |
||
+ | ==== 同一マシンで有線アダプタと無線アダプタ両方を使用 ==== |
||
− | システム上の無線・有線どちらのデバイスも有効な接続がある場合、カーネルのルートメトリック (''ip'' で設定するのと同一) がパケットを送るのにどちらのルートを使用するか決定します。均衡状態を破るために、カーネルはメトリックを使います。メトリックの良い所は、どちらかが使えなくなったときに、自動的にもう片方が有効になることです。 |
||
+ | 以下の設定では、metric ディレクティブを使用して、有線と無線両方の接続で DHCP IP を有効にしており、カーネルがその場でどちらを使うか決定します。有線接続が切断されると、即座に無線に切り替わります。接続が途切れることはありません。 |
||
− | {{Note|'''Metric''' オプションは '''RouteMetric''' オプションがスタティックルーティングを行うよう設定されていない時にその設定を行うためのものです。}} |
||
+ | システム上の無線・有線どちらのデバイスも有効な接続がある場合、カーネルのルーティングのメトリック(''ip'' で設定するのと同一) が、パケットを送るのにどちらのルートを使用するか決定します。システム上の有線デバイスと無線デバイスの両方がアクティブな接続を行っている場合がそうです。均衡状態を破るために、カーネルはメトリックを使います。もし一方の接続が終了しても、何も設定せずとも、もう一方が自動的にギャップを埋めます(進行中の転送はまだうまく対処されないでしょうが、これは他の OSI レイヤーでの問題です)。 |
||
− | {{hc|/etc/systemd/network/''wired''.network|<nowiki> |
||
− | [Match] |
||
− | Name=enp1s0 |
||
+ | ''systemd-networkd'' は[https://github.com/systemd/systemd/issues/17698 インターフェイスごとのデフォルトルートメトリクスを設定しない]ので、手動で設定する必要があります: |
||
− | [Network] |
||
− | DHCP=ipv4 |
||
+ | {{Note|{{ic|Metric}} オプションはスタティックルーティングの設定を行います。{{ic|RouteMetric}} オプションはスタティックルーティングの設定をしないセットアップ用です。詳細については {{man|5|systemd.network}} を参照して下さい}} |
||
− | [DHCP] |
||
− | RouteMetric=10 |
||
− | </nowiki>}} |
||
− | {{hc|/etc/systemd/network/ |
+ | {{hc|/etc/systemd/network/20-wired.network|2= |
[Match] |
[Match] |
||
− | Name= |
+ | Name=enp1s0 |
[Network] |
[Network] |
||
− | DHCP= |
+ | DHCP=yes |
− | [ |
+ | [DHCPv4] |
− | RouteMetric= |
+ | RouteMetric=100 |
− | </nowiki>}} |
||
+ | [IPv6AcceptRA] |
||
− | ==== IPv6 プライバシー拡張 ==== |
||
+ | RouteMetric=100 |
||
− | |||
+ | }} |
||
− | IPv6 を使用する場合、{{ic|IPv6PrivacyExtensions}} オプションも設定すると良いでしょう。{{ic|/etc/sysctl.d/40-ipv6.conf}} の設定は反映されません。 |
||
− | {{hc|/etc/systemd/network/ |
+ | {{hc|/etc/systemd/network/25-wireless.network|2= |
[Match] |
[Match] |
||
Name=wlp2s0 |
Name=wlp2s0 |
||
130行目: | 140行目: | ||
[Network] |
[Network] |
||
DHCP=yes |
DHCP=yes |
||
− | IPv6PrivacyExtensions=true |
||
− | [ |
+ | [DHCPv4] |
− | RouteMetric= |
+ | RouteMetric=600 |
+ | |||
− | </nowiki>}} |
||
+ | [IPv6AcceptRA] |
||
+ | RouteMetric=600 |
||
+ | }} |
||
== 設定ファイル == |
== 設定ファイル == |
||
− | 設定ファイルは {{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つのタイプの設定ファイルが存在します。 |
+ | 3つのタイプの設定ファイルが存在します。ファイルのフォーマットは [[systemd#ユニットファイル|systemd のユニットファイル]]と似ています。 |
* '''.network''' ファイル。''マッチする''デバイスにネットワーク設定を適用します。 |
* '''.network''' ファイル。''マッチする''デバイスにネットワーク設定を適用します。 |
||
149行目: | 161行目: | ||
* {{ic|[Match]}} セクションの'''全ての'''条件がマッチすれば、プロファイルが有効になります。 |
* {{ic|[Match]}} セクションの'''全ての'''条件がマッチすれば、プロファイルが有効になります。 |
||
− | * 空の {{ic|[Match]}} セクションはどんな場合でもそのセクションを適用することを示します (いわば {{ic|*}} |
+ | * 空の {{ic|[Match]}} セクションはどんな場合でもそのセクションを適用することを示します (いわば {{ic|*}} ワイルドカードのようなものです)。 |
− | * それぞれのエントリは {{ic|1=NAME=VALUE}} 構文によるキーです。 |
||
* 全ての設定ファイルは辞書順でまとめてソートされ処理されます。ファイルがどのディレクトリにあるかは関係ありません。 |
* 全ての設定ファイルは辞書順でまとめてソートされ処理されます。ファイルがどのディレクトリにあるかは関係ありません。 |
||
* 同じ名前のファイルは互いを置き換えます。 |
* 同じ名前のファイルは互いを置き換えます。 |
||
{{Tip| |
{{Tip| |
||
− | * {{ic|/usr/lib/systemd/network}} |
+ | * {{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}} を見てください。For example, see [[WireGuard#Connection lost after sleep using systemd-networkd]]. |
||
− | * {{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.}} |
||
このファイルはネットワーク設定の変数の設定、特にサーバーとコンテナの設定のために存在します。 |
このファイルはネットワーク設定の変数の設定、特にサーバーとコンテナの設定のために存在します。 |
||
+ | ''.network'' ファイルには次のセクションを記述できます: {{ic|[Match]}}、{{ic|[Link]}}、{{ic|[Network]}}、{{ic|[Address]}}、{{ic|[Route]}}、{{ic|[DHCPv4]}}。以下ではそれぞれのセクションでよく使われる設定キーを説明します。詳細や例は {{man|5|systemd.network}} を見てください。 |
||
− | 以下は基本的な構造の {{ic|''MyProfile''.network}} ファイルになります: |
||
+ | ==== [Match] ==== |
||
− | {{hc|/etc/systemd/network/''MyProfile''.network| |
||
− | [Match] |
||
− | ''a vertical list of keys'' |
||
+ | {| class = "wikitable" |
||
− | [Network] |
||
+ | ! パラメータ !! 説明 !! 受け入れる値 !! デフォルト値 |
||
− | ''a vertical list of keys'' |
||
+ | |- |
||
+ | | {{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] ==== |
||
− | [Address] |
||
− | ''a vertical list of keys'' |
||
+ | {| class = "wikitable" |
||
− | [Route] |
||
+ | ! パラメータ !! 説明 !! 受け入れる値 !! デフォルト値 |
||
− | ''a vertical list of keys'' |
||
+ | |- |
||
− | }} |
||
+ | | {{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] ==== |
+ | {| class = "wikitable" |
||
− | よく使われるキーは: |
||
+ | ! パラメータ !! 説明 !! 受け入れる値 !! デフォルト値 |
||
+ | |- |
||
+ | | {{ic|1=DHCP=}} || DHCPv4 と DHCPv6 の一方/両方のサポートを制御。 || 真偽値、{{ic|ipv4}}、{{ic|ipv6}} || {{ic|false}} |
||
+ | |- |
||
+ | | {{ic|1=DHCPServer=}} || 有効化されている場合、DHCPv4 サーバが起動されます。 || 真偽値 || {{ic|false}} |
||
+ | |- |
||
+ | | {{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] ==== |
||
− | * {{ic|1=Name=}} デバイスの名前 (例: Br0, enp4s0, en*) |
||
− | * {{ic|1=Host=}} マシンのホストネーム |
||
− | * {{ic|1=Virtualization=}} システムが仮想化環境で起動されているかどうかをチェックします。{{ic|1=Virtualization=no}} キーはホストマシンでのみ適用され、逆に {{ic|1=Virtualization=yes}} はコンテナや VM で適用されます。 |
||
+ | {| class = "wikitable" |
||
− | ==== [Link] セクション ==== |
||
+ | ! パラメータ !! 説明 !! 受け入れる値 !! デフォルト値 |
||
+ | |- |
||
+ | | {{ic|1=Address=}} || 複数のアドレスを設定するには、このキーを複数回指定してください。DHCP を使用しない限り必須です。指定されたアドレスが(IPv4の 場合) {{ic|0.0.0.0}} または (IPv6 の場合) {{ic|::}} である場合、要求されたサイズの新しいアドレス範囲が、システム全体の未使用範囲のプールから自動的に割り当てられます。 || 固定 IPv4 または IPv6 アドレスとプレフィックス長({{man|3|inet_pton}} を参照) || |
||
+ | |} |
||
+ | ==== [Route] ==== |
||
− | よく使われるキーは: |
||
+ | * {{ic|1=Gateway=}} DHCP を使用しない場合、このオプションは'''必須'''です。 |
||
− | * {{ic|1=MACAddress=}} [[MAC_アドレス偽装#方法 1: systemd-networkd|MAC アドレスを偽装]]することができます。 |
||
+ | * {{ic|1=Destination=}} ルートの宛先プリフィックスです。スラッシュとプリフィックス長を後ろに付けることができます。 |
||
− | * {{ic|1=MTUBytes=}} 最大転送単位をバイトで指定 (K, M, G を後ろに付けることができ、1024の倍数として認識されます)。MTU の値を大きくすることでネットワークの転送速度を速くすることが可能です ([[ジャンボフレーム]])。 |
||
+ | {{ic|[Route]}} セクションに {{ic|Destination}} が存在しない場合、デフォルトルートとして扱われます。 |
||
− | ==== [Network] セクション ==== |
||
+ | {{Tip|{{ic|1=[Address]}} が Address キーだけを含み {{ic|1=[Route]}} セクションが Gateway キーだけを含む場合、略式表記として {{ic|[Network]}} セクションに {{ic|1=Address=}} と {{ic|1=Gateway=}} キーを記述することができます。}} |
||
− | よく使われるキーは: |
||
+ | ==== [DHCPv4] ==== |
||
− | * {{ic|1=DHCP=}} は [[Wikipedia:ja:Dynamic Host Configuration Protocol|DHCPv4]] や DHCPv6 サポートを有効にします。{{ic|yes}}, {{ic|no}}, {{ic|ipv4}}, {{ic|ipv6}} が設定できます。 |
||
− | * {{ic|1=DNS=}} は [[Wikipedia:ja:Domain Name System|DNS]] サーバーのアドレスです。このオプションは複数個指定することができます。 |
||
− | * {{ic|1=Bridge=}} はリンクに追加するブリッジの名前です。 |
||
− | * {{ic|1=IPForward=}} は IP フォワーディングを有効にして、ルーティングテーブルに基づいてフォワーディングを実行します。[[インターネット共有]]を設定する場合は必須になります。設定できる値は: {{ic|yes}}, {{ic|no}}, {{ic|ipv4}}, {{ic|ipv6}}, {{ic|kernel}}。{{ic|1=IPForward}} のデフォルトは 0 となっており、''.network'' ファイルで {{ic|1=IPForward}} の設定をしないかぎり、たとえ {{ic|sysctl}} を使ったり {{ic|/proc/sys}} に書き込んだりして IP フォワーディングをオンにしていても、インターフェイスの IP フォワーディングはオフになります。 |
||
− | * {{ic|1=Domains=}} DNS によるホスト名解決に使用するドメインのリスト。 |
||
+ | {| class = "wikitable |
||
− | 詳しくは {{ic|systemd.network(5)}} を参照。 |
||
+ | ! パラメータ !! 説明 !! 受け入れる値 !! デフォルト値 |
||
+ | |- |
||
+ | | {{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] ==== |
− | {{ic|[Address]}} セクションでよく使われるキーは: |
||
+ | これは、無線ホットスポットを作成するために [[hostapd]] とうまく連動する DHCP サーバーの設定例です。{{ic|IPMasquerade}} は [[インターネット共有#NAT の有効化|NATを有効にする]] ためのファイアウォールルールを追加し、{{ic|1=IPForward=ipv4}} [[インターネット共有#パケット転送の有効化|パケット転送]] を有効にしています。 |
||
− | * {{ic|1=Address=}} は固定の '''IPv4''' または '''IPv6''' アドレスとそのプレフィックス長で、{{ic|/}} を使って区切ります (例: {{ic|192.168.1.90/24}})。このオプションは'''必須'''です。 |
||
+ | {{Accuracy|{{ic|1=IPMasquerade=true}}は{{ic|filter}} テーブルのルールを追加しません、それらは手動で追加する必要があります。[[systemd-nspawn#仮想イーサネットリンクを使用する]] を参照してください}} |
||
− | ==== [Route] セクション ==== |
||
+ | |
||
− | {{ic|[Route]}} セクションでよく使われるキーは: |
||
+ | {{hc|/etc/systemd/network/''wlan0''.network|<nowiki> |
||
+ | [Match] |
||
+ | Name=wlan0 |
||
+ | [Network] |
||
− | * {{ic|1=Gateway=}} はマシンのゲートウェイのアドレスです。このオプションは'''必須'''です。 |
||
+ | Address=10.1.1.1/24 |
||
− | 完全なキーのリストについては、{{ic|systemd.network(5)}} を参照してください。 |
||
+ | DHCPServer=true |
||
+ | IPMasquerade=ipv4 |
||
+ | [DHCPServer] |
||
− | {{Tip|{{ic|1=Address=}} が Address キーだけを含み {{ic|1=Gateway=}} セクションが Gateway キーだけを含む場合、略式表記として {{ic|[Network]}} セクションに {{ic|1=Address=}} と {{ic|1=Gateway=}} キーを記述することができます。 |
||
+ | PoolOffset=100 |
||
− | }} |
||
+ | PoolSize=20 |
||
+ | EmitDNS=yes |
||
+ | DNS=9.9.9.9 |
||
+ | </nowiki>}} |
||
=== netdev ファイル === |
=== netdev ファイル === |
||
+ | {{Remove|Duplicates the {{man|5|systemd.netdev}} man page.}} |
||
− | このファイルは仮想ネットワークデバイスを作成します。 |
||
+ | netdev ファイル群は仮想ネットワークデバイスを作成します。これらのファイルには次のセクションを記述できます: {{ic|[Match]}} と {{ic|[NetDev]}}。以下ではそれぞれのセクションでよく使われる設定キーを説明します。詳細や例は {{man|5|systemd.netdev}} を見てください。 |
||
− | 以下は基本的な構造の ''Mydevice''.netdev ファイルになります: |
||
− | |||
− | {{hc|/etc/systemd/network/''MyDevice''.netdev| |
||
− | [Match] |
||
− | ''a vertical list of keys'' |
||
− | |||
− | [NetDev] |
||
− | ''a vertical list of keys'' |
||
− | }} |
||
==== [Match] セクション ==== |
==== [Match] セクション ==== |
||
+ | * {{ic|1=Host=}} ホストネーム |
||
− | よく使われるキーは {{ic|1=Host=}} と {{ic|1=Virtualization=}} です。 |
||
+ | * {{ic|1=Virtualization=}} VM の中で実行されているかどうか確認する。 |
||
==== [NetDev] セクション ==== |
==== [NetDev] セクション ==== |
||
+ | * {{ic|1=Name=}} インターフェイス名。'''必須''' |
||
− | よく使われるキーは: |
||
+ | * {{ic|1=Kind=}} 例: ''bridge'', ''bond'', ''vlan'', ''veth'', ''sit''。'''必須''' |
||
− | |||
− | * {{ic|1=Name=}} は netdev を作成するときに使うインターフェイスの名前です。このオプションは'''必須'''です。 |
||
− | * {{ic|1=Kind=}} は netdev の種類になります。現在 ''bridge'', ''bond'', ''vlan'', ''veth'', ''sit'' などがサポートされています。このオプションは'''必須'''です。 |
||
− | |||
− | 完全なキーのリストについては、{{ic|systemd.netdev(5)}} を参照してください。 |
||
− | |||
− | === link ファイル === |
||
− | |||
− | このファイルはカスタム udev ルールの代わりとなりデバイスが現れた時に [[udev|udev]] によって適用されます。 |
||
− | |||
− | 以下は基本的な構造の ''Mydevice''.link ファイルになります: |
||
− | |||
− | {{hc|/etc/systemd/network/''MyDevice''.link| |
||
− | [Match] |
||
− | ''a vertical list of keys'' |
||
− | |||
− | [Link] |
||
− | ''a vertical list of keys'' |
||
− | }} |
||
− | |||
− | {{ic|[Link]}} セクションでデバイスの設定を指定した場合、{{ic|[Match]}} セクションは指定した link ファイルが指定したデバイスに適用できるかどうかを決めます。 |
||
− | |||
− | ==== [Match] セクション ==== |
||
− | |||
− | よく使われるキーは {{ic|1=MACAddress=}}, {{ic|1=Host=}}, {{ic|1=Virtualization=}} です。 |
||
− | |||
− | {{ic|1=Type=}} はデバイスのタイプです (例: vlan) |
||
− | |||
− | ==== [Link] セクション ==== |
||
− | |||
− | よく使われるキーは: |
||
− | |||
− | {{ic|1=MACAddressPolicy=}} は永続的な MAC アドレスをハードウェアに設定する ''persistent'' (ほとんどのハードウェアはこちらにするべきです) またはデバイスが現れた時にランダムな MAC アドレスを与える ''random'' を指定します。 |
||
− | |||
− | {{ic|1=MACAddressPolicy=}} を指定しなかった場合は {{ic|1=MACAddress=}} を使います。 |
||
− | |||
− | {{Note|ほとんどの場合システムの {{ic|/usr/lib/systemd/network/99-default.link}} で基本的に問題ありません。}} |
||
== コンテナでの使用方法 == |
== コンテナでの使用方法 == |
||
+ | ''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}} 行にブートオプションを追加する必要があります。オプションの完全なリストは {{ic|man 1 systemd-nspawn}} を参照してください。 |
||
− | |||
− | DHCP による自動 DNS 設定を利用したい場合は、{{ic|systemd-resolved}} を有効にして {{ic|/run/systemd/resolve/resolv.conf}} から {{ic|/etc/resolv.conf}} にシンボリックリンクを張る必要があります。詳しくは {{ic|systemd-resolved.service(8)}} を見て下さい。 |
||
− | |||
− | {{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 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 |
||
− | |||
− | 詳しくは {{ic|systemd-resolved.service(8)}} を参照。 |
||
− | === |
+ | === DHCP を用いたネットワークブリッジ === |
==== ブリッジインターフェイス ==== |
==== ブリッジインターフェイス ==== |
||
− | 仮想ブリッジインターフェイスを作成する |
+ | まず、仮想[[ブリッジ]]インターフェイスを作成してください。systemd に、イーサネットブリッジとして機能する、''br0'' という名前のデバイスを作成するように指示します。 |
− | {{hc|/etc/systemd/network/'' |
+ | {{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 になっていることに注意してください。 |
==== イーサネットをブリッジに関連付ける ==== |
==== イーサネットをブリッジに関連付ける ==== |
||
− | + | 次のステップでは、新しく作成したブリッジにネットワークインターフェイスを追加します。以下の例では、''en*'' という名前にマッチする任意のインターフェイスをブリッジ ''br0'' に追加します。 |
|
− | {{hc|/etc/systemd/network/'' |
+ | {{hc|/etc/systemd/network/''bind''.network|2= |
[Match] |
[Match] |
||
Name=en* |
Name=en* |
||
382行目: | 338行目: | ||
[Network] |
[Network] |
||
Bridge=br0 |
Bridge=br0 |
||
+ | }} |
||
− | </nowiki>}} |
||
+ | |||
+ | ブリッジが IP と関連付けられていないインターフェイスを必要とするので、イーサネットインターフェイスは DHCP や IP アドレスと関連付けてはいけません: 対応する {{ic|/etc/systemd/network/''MyEth''.network}} を適宜変更して、アドレッシングを削除してください。 |
||
==== ブリッジネットワーク ==== |
==== ブリッジネットワーク ==== |
||
+ | ブリッジが作成され、既存のネットワークインターフェイスに関連付けられました。ブリッジインターフェイスの IP 設定を指定する必要があります。これは3番目の ''.network'' で定義されます。以下の例では DHCP を使用します。 |
||
− | ブリッジのネットワークプロファイルを作成: |
||
− | {{hc|/etc/systemd/network/'' |
+ | {{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=br0 -bD /path_to/my_container |
||
==== 結果 ==== |
==== 結果 ==== |
||
407行目: | 362行目: | ||
{{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 |
||
}} |
}} |
||
426行目: | 381行目: | ||
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 |
||
}} |
}} |
||
432行目: | 387行目: | ||
==== 注意 ==== |
==== 注意 ==== |
||
− | * ホストの br0 と、コンテナの host0 にそれぞれ IP アドレスが割り当てられました。 |
+ | * ホストの {{ic|br0}} と、コンテナの {{ic|host0}} にそれぞれ IP アドレスが割り当てられました。 |
− | * 2つの新しいインターフェイスが作成されます: ホストの {{ic|vb-''MyContainer''}} とコンテナの {{ic|host0}} です。これは {{ic|1=--network-bridge=br0}} オプションによるものです。 |
+ | * 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| |
||
448行目: | 405行目: | ||
{{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 |
||
}} |
}} |
||
455行目: | 412行目: | ||
{{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 |
||
}} |
}} |
||
465行目: | 422行目: | ||
}} |
}} |
||
− | === |
+ | === 静的 IP アドレスを持つネットワークブリッジ === |
− | + | 各デバイスに静的 IP アドレスを設定すると、Web サービス (例:FTP、http、SSH) を展開する場合に便利です。システム {{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> |
||
495行目: | 449行目: | ||
* コンテナ側 |
* コンテナ側 |
||
+ | コンテナに静的 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 |
||
503行目: | 459行目: | ||
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}} が[[有効化]]されていることを確認してください。 |
||
+ | |||
+ | === MACVLAN bridge === |
||
+ | |||
+ | For the host to be able to reach containers connected via MACVLAN, the host itself also needs to connect via MACVLAN and not directly to the underlying Ethernet network interface. |
||
+ | |||
+ | On the host, attach the underlying Ethernet network interface to MACVLAN and make sure it does not get assigned IP addresses. For example, using {{ic|mv-0}} as the MACVLAN interface name and with {{ic|enp1s0}} as the host's Ethernet interface: |
||
+ | |||
+ | {{hc|/etc/systemd/network/30-enp1s0.network|2= |
||
+ | [Match] |
||
+ | Name=enp1s0 |
||
+ | |||
+ | [Link] |
||
+ | RequiredForOnline=carrier |
||
+ | |||
+ | [Network] |
||
+ | MACVLAN=mv-0 |
||
+ | DHCP=no |
||
+ | IPv6AcceptRA=false |
||
+ | LinkLocalAddressing=no |
||
+ | MulticastDNS=false |
||
+ | LLMNR=false |
||
+ | }} |
||
+ | |||
+ | {{Tip| |
||
+ | * {{ic|RequiredForOnline{{=}}carrier}} prevents [[#systemd-networkd-wait-online|systemd-networkd-wait-online.service]] from waiting (and eventually failing) for the connection to acquire an IP address, which will never happen. |
||
+ | * The underlying network interface does not necessarily need to be a physical Ethernet interface. For example, a MACVLAN bridge can be attached to a bond. |
||
+ | }} |
||
+ | |||
+ | Create the MACVLAN bridge {{ic|mv-0}}: |
||
+ | |||
+ | {{hc|/etc/systemd/network/25-mv-0.netdev|2= |
||
+ | [NetDev] |
||
+ | Name=mv-0 |
||
+ | Kind=macvlan |
||
+ | |||
+ | [MACVLAN] |
||
+ | Mode=bridge |
||
+ | }} |
||
+ | |||
+ | Configure the host's network connection on the MACVLAN bridge ({{ic|mv-0}}). The following example uses DHCP, replace the options as necessary. |
||
+ | |||
+ | {{hc|/etc/systemd/network/35-mv-0.network|2= |
||
+ | [Match] |
||
+ | Name=mv-0 |
||
+ | |||
+ | [Link] |
||
+ | RequiredForOnline=routable |
||
+ | |||
+ | [Network] |
||
+ | BindCarrier=enp1s0 |
||
+ | DHCP=yes |
||
+ | }} |
||
+ | |||
+ | For the container, attach a MACVLAN to the '''underlying Ethernet network interface''' ({{ic|enp1s0}} in the examples above). For example, in {{ic|/etc/systemd/nspawn/''container_name''.nspawn}} specify: |
||
+ | |||
+ | {{bc|1= |
||
+ | [Network] |
||
+ | MACVLAN=enp1s0 |
||
+ | }} |
||
+ | |||
+ | For containers started from the command line, pass them the {{ic|--network-macvlan{{=}}enp1s0}} option. |
||
+ | |||
+ | In the container, the MACVLAN interface will have the name {{ic|mv-''underlying_interface_name''}} (e.g. {{ic|mv-enp1s0}}). Configure the network connection as necessary (just like in the host) by matching the interface name. For example, using DHCP: |
||
+ | |||
+ | {{hc|/etc/systemd/network/30-mv-enp1s0.network|2= |
||
+ | [Match] |
||
+ | Name=mv-enp1s0 |
||
+ | |||
+ | [Link] |
||
+ | RequiredForOnline=routable |
||
+ | |||
+ | [Network] |
||
+ | DHCP=yes |
||
+ | }} |
||
+ | |||
+ | == ヒントとテクニック == |
||
+ | |||
+ | === 管理やデスクトップの統合 === |
||
+ | |||
+ | ''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>}} |
||
+ | |||
+ | === ワイヤード (有線) インターフェイスとワイヤレスインターフェイスのボンディング === |
||
+ | |||
+ | [[ワイヤレスボンディング]] も参照してください。 |
||
+ | |||
+ | ボンディングを使用すると、複数のインターフェイスを介して接続を共有できるため、有線インターフェイスを取り外しても、ワイヤレス接続は維持され、ネットワーク接続はシームレスに維持されます。 |
||
+ | |||
+ | 結合インタフェースを作成します。この場合、モードは ''active-backup'' です。つまり、プライマリインターフェイスがダウンした場合、パケットはセカンダリインターフェイスを介してルーティングされます。 |
||
+ | |||
+ | {{hc|/etc/systemd/network/30-bond0.netdev|<nowiki> |
||
+ | [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}} の値は過剰と見なされると記載されています。 |
||
+ | |||
+ | [[sysctl]] 設定 {{ic|net.ipv4.tcp_slow_start_after_idle}} が有効になっている場合、しばらくアイドル状態が続くと (多くの場合、ごく短時間) 、接続はこれらの初期設定に戻ります。この設定を無効にすると、パケット転送中に大きいウィンドウがネゴシエートされた場合、接続は大きいウィンドウを維持します。設定に関係なく、新しい各 TCP 接続は上記の {{ic|Initial*}} 設定で始まります。 |
||
+ | |||
+ | sysctl 設定 {{ic|net.ipv4.tcp_congestion_control}} は、 TCP リンクがアクティブなとき、特に2つのホスト間のパスが輻輳してスループットを低下させる必要があるときに、輻輳ウィンドウと受信ウィンドウを調整する方法を制御するため、これらの値とは直接関係しません。上記の {{ic|Initial*}} 値は、輻輳アルゴリズムに引き継がれて必要に応じて調整される前に、新しい接続ごとに選択されたデフォルトのウィンドウ値を設定するだけです。高い初期値を設定すると、輻輳アルゴリズムが最適な値 (または、逆に、間違った初期値を設定するとネゴシエーション時間が長くなりますが、輻輳アルゴリズムはそれらを修正するように動作し、新しく確立された各 TCP 接続の速度が数秒間遅くなります。) を見つけようとしている間に、単純にネゴシエーションが短縮されます。 |
||
== 参照 == |
== 参照 == |
||
+ | * {{man|8|systemd-networkd}} |
||
− | * [http://www.freedesktop.org/software/systemd/man/systemd-networkd.service.html systemd.networkd man ページ] |
||
− | * [https:// |
+ | * [https://web.archive.org/web/20201111213850/https://coreos.com/blog/intro-to-systemd-networkd/ Tom Gundersen posts on Core OS blog] |
− | * [https:// |
+ | * [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) |
2024年5月1日 (水) 18:58時点における最新版
systemd-networkd はネットワーク設定を管理するシステムデーモンです。ネットワークデバイスが立ち上がるとそれを検出して設定を行います。また、仮想ネットワークデバイスを作成することもできます。このサービスは systemd-nspawn で管理されるコンテナまたは仮想マシンの複雑なネットワークを設定する場合にとても役に立ちます。また、単純な接続でも正常に動作します。
基本的な使い方
systemd パッケージは Arch ではデフォルトでインストールされており、有線ネットワークに接続するために必要なファイルは全て揃っています。後で述べているように、wpa_supplicant や iwd など他のサービスを使うことで無線アダプタを設定することもできます。
必要なサービスと設定
systemd-networkd を使用するには、systemd-networkd.service
起動/有効化します。
また、ネットワーク名前解決サービスである systemd-resolved は,以下の点を考慮して任意に設定して下さい。
- 使用する DNS を適切に設定するためには、resolv.conf と systemd-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
を再起動してください。
有線アダプタで 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_supplicant や iwd などの別のアプリケーションで設定された無線アダプタが必要です。
/etc/systemd/network/25-wireless.network
[Match] Name=wlp2s0 [Network] DHCP=yes IgnoreCarrierLoss=3s
無線アダプタで固定 IP アドレスを使っている場合、設定は (インターフェイス名を除いて) 有線アダプタと同じになります。
無線スネットワークへの認証には、wpa_supplicant や iwd などを使用します。
同一マシンで有線アダプタと無線アダプタ両方を使用
以下の設定では、metric ディレクティブを使用して、有線と無線両方の接続で DHCP IP を有効にしており、カーネルがその場でどちらを使うか決定します。有線接続が切断されると、即座に無線に切り替わります。接続が途切れることはありません。
システム上の無線・有線どちらのデバイスも有効な接続がある場合、カーネルのルーティングのメトリック(ip で設定するのと同一) が、パケットを送るのにどちらのルートを使用するか決定します。システム上の有線デバイスと無線デバイスの両方がアクティブな接続を行っている場合がそうです。均衡状態を破るために、カーネルはメトリックを使います。もし一方の接続が終了しても、何も設定せずとも、もう一方が自動的にギャップを埋めます(進行中の転送はまだうまく対処されないでしょうが、これは他の OSI レイヤーでの問題です)。
systemd-networkd はインターフェイスごとのデフォルトルートメトリクスを設定しないので、手動で設定する必要があります:
/etc/systemd/network/20-wired.network
[Match] Name=enp1s0 [Network] DHCP=yes [DHCPv4] RouteMetric=100 [IPv6AcceptRA] RouteMetric=100
/etc/systemd/network/25-wireless.network
[Match] Name=wlp2s0 [Network] DHCP=yes [DHCPv4] RouteMetric=600 [IPv6AcceptRA] RouteMetric=600
設定ファイル
設定ファイルは /usr/lib/systemd/network/
から、そして一時的な実行時のネットワークディレクトリ /run/systemd/network/
とローカルのネットワーク管理ディレクトリ /etc/systemd/network/
から読み込まれます。/etc/systemd/network/
内のファイルが一番優先されます。
3つのタイプの設定ファイルが存在します。ファイルのフォーマットは systemd のユニットファイルと似ています。
- .network ファイル。マッチするデバイスにネットワーク設定を適用します。
- .netdev ファイル。マッチする環境に仮想ネットワークデバイスを作成します。
- .link ファイル。ネットワークデバイスが作られた時、udev は最初にマッチする .link ファイルを探します。
これらの設定ファイルは同じルールに従っています:
[Match]
セクションの全ての条件がマッチすれば、プロファイルが有効になります。- 空の
[Match]
セクションはどんな場合でもそのセクションを適用することを示します (いわば*
ワイルドカードのようなものです)。 - 全ての設定ファイルは辞書順でまとめてソートされ処理されます。ファイルがどのディレクトリにあるかは関係ありません。
- 同じ名前のファイルは互いを置き換えます。
network ファイル
このファイルはネットワーク設定の変数の設定、特にサーバーとコンテナの設定のために存在します。
.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 の一方/両方のサポートを制御。 | 真偽値、ipv4 、ipv6 |
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= |
有効化すると、ネットワークインターフェイス上で受信したパケットを、ルーティングテーブルに従って他のインターフェイスに転送します。詳細は インターネット共有#パケット転送の有効化。 | 真偽値、ipv4 、ipv6 |
false
|
IPMasquerade= |
有効化すると、ネットワークインターフェイスからのパケット転送がローカルホストから来るように見えます。値によっては、IPForward=ipv4 、IPForward=ipv6 、または IPForward=yes の意味になります。 |
ipv4 、ipv6 、both 、no |
no
|
IPv6PrivacyExtensions= |
時間と共に変化するステートレステンポラリアドレスの使用を設定します(RFC 4941 を参照)。prefer-public を指定すると、プライバシー拡張が有効に名ありますが、テンポラリアドレスよりもパブリックアドレスを優先します。kernel を指定すると、カーネルのデフォルトの設定のままになります。 |
真偽値、prefer-public 、kernel |
false
|
[Address]
パラメータ | 説明 | 受け入れる値 | デフォルト値 |
---|---|---|---|
Address= |
複数のアドレスを設定するには、このキーを複数回指定してください。DHCP を使用しない限り必須です。指定されたアドレスが(IPv4の 場合) 0.0.0.0 または (IPv6 の場合) :: である場合、要求されたサイズの新しいアドレス範囲が、システム全体の未使用範囲のプールから自動的に割り当てられます。 |
固定 IPv4 または IPv6 アドレスとプレフィックス長(inet_pton(3) を参照) |
[Route]
Gateway=
DHCP を使用しない場合、このオプションは必須です。Destination=
ルートの宛先プリフィックスです。スラッシュとプリフィックス長を後ろに付けることができます。
[Route]
セクションに Destination
が存在しない場合、デフォルトルートとして扱われます。
[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 サーバーの設定例です。IPMasquerade
は NATを有効にする ためのファイアウォールルールを追加し、IPForward=ipv4
パケット転送 を有効にしています。
/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 ファイル
netdev ファイル群は仮想ネットワークデバイスを作成します。これらのファイルには次のセクションを記述できます: [Match]
と [NetDev]
。以下ではそれぞれのセクションでよく使われる設定キーを説明します。詳細や例は systemd.netdev(5) を見てください。
[Match] セクション
Host=
ホストネームVirtualization=
VM の中で実行されているかどうか確認する。
[NetDev] セクション
Name=
インターフェイス名。必須Kind=
例: bridge, bond, vlan, veth, sit。必須
コンテナでの使用方法
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.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 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 の br0
と host0
インターフェイスが有効になったのが確認できます。ゲートウェイのアドレスは 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
が有効化されていることを確認してください。
MACVLAN bridge
For the host to be able to reach containers connected via MACVLAN, the host itself also needs to connect via MACVLAN and not directly to the underlying Ethernet network interface.
On the host, attach the underlying Ethernet network interface to MACVLAN and make sure it does not get assigned IP addresses. For example, using mv-0
as the MACVLAN interface name and with enp1s0
as the host's Ethernet interface:
/etc/systemd/network/30-enp1s0.network
[Match] Name=enp1s0 [Link] RequiredForOnline=carrier [Network] MACVLAN=mv-0 DHCP=no IPv6AcceptRA=false LinkLocalAddressing=no MulticastDNS=false LLMNR=false
Create the MACVLAN bridge mv-0
:
/etc/systemd/network/25-mv-0.netdev
[NetDev] Name=mv-0 Kind=macvlan [MACVLAN] Mode=bridge
Configure the host's network connection on the MACVLAN bridge (mv-0
). The following example uses DHCP, replace the options as necessary.
/etc/systemd/network/35-mv-0.network
[Match] Name=mv-0 [Link] RequiredForOnline=routable [Network] BindCarrier=enp1s0 DHCP=yes
For the container, attach a MACVLAN to the underlying Ethernet network interface (enp1s0
in the examples above). For example, in /etc/systemd/nspawn/container_name.nspawn
specify:
[Network] MACVLAN=enp1s0
For containers started from the command line, pass them the --network-macvlanテンプレート:=enp1s0
option.
In the container, the MACVLAN interface will have the name mv-underlying_interface_name
(e.g. mv-enp1s0
). Configure the network connection as necessary (just like in the host) by matching the interface name. For example, using DHCP:
/etc/systemd/network/30-mv-enp1s0.network
[Match] Name=mv-enp1s0 [Link] RequiredForOnline=routable [Network] DHCP=yes
ヒントとテクニック
管理やデスクトップの統合
systemd-networkd にはコマンドラインシェルや GUI による適切なインタラクティブ管理インターフェイスがありません。
ただし、ネットワークの現在の状態を表示したり、通知を受信したり、ワイヤレス構成を操作したりするためのツールはあります:
- networkctl は(CLI を通して)ネットワークインターフェイスの状態の簡単な表示を行います。
- networkd で wpa_supplicant を使うように設定した場合、wpa_cli や wpa_gui を使うことで動的に WLAN インターフェイスを関連付けしたり再設定できます。
- networkd-notify-gitAUR はネットワークインターフェイスの状態の変化にあわせてシンプルな通知を生成します (接続・切断や再関連付けなど)。
- networkd-dispatcherAUR デーモンを使うことで NetworkManager-dispatcher と同じようにネットワークインターフェイスの状態が変わったときにスクリプトを実行することができます。
- DNS リゾルバの systemd-resolved は
resolvectl status
で現在の DNS サーバーの情報を視覚化できます。
SSID (場所) に基づいた静的 IP または DHCP の設定
ホームワイヤレスネットワークが DHCP を使用し、オフィスワイヤレスネットワークが静的 IP を使用する状況がよくあります。この混在したセットアップは、次のように構成できます:
/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 接続の速度が数秒間遅くなります。) を見つけようとしている間に、単純にネゴシエーションが短縮されます。
参照
- systemd-networkd(8)
- Tom Gundersen posts on Core OS blog
- How to set up systemd-networkd with wpa_supplicant (WonderWoofy's walkthrough on Arch forums)