「Systemd-networkd」の版間の差分
細 (Fix typo) |
(→ヒントとテクニック: 同期) |
||
(3人の利用者による、間の15版が非表示) | |||
12行目: | 12行目: | ||
{{Related|ネットワークブリッジ}} |
{{Related|ネットワークブリッジ}} |
||
{{Related|ネットワーク設定}} |
{{Related|ネットワーク設定}} |
||
− | {{Related|ワイヤレス設定}} |
+ | {{Related|ワイヤレスネットワーク設定}} |
{{Related|:Category:ネットワーク設定}} |
{{Related|:Category:ネットワーク設定}} |
||
{{Related articles end}} |
{{Related articles end}} |
||
41行目: | 41行目: | ||
デフォルトでは、 {{ic|systemd-networkd-wait-online.service}} は、認識され ''systemd-networkd'' によって管理されているすべてのリンクが完全に設定されるか、または失敗しても、少なくとも1つのリンクがオンラインになるまで待機します。 |
デフォルトでは、 {{ic|systemd-networkd-wait-online.service}} は、認識され ''systemd-networkd'' によって管理されているすべてのリンクが完全に設定されるか、または失敗しても、少なくとも1つのリンクがオンラインになるまで待機します。 |
||
+ | 詳細については、{{man|8|systemd-networkd-wait-online}} を参照してください。 |
||
− | システムに複数のネットワークインタフェースがあるが、常時接続されているとは想定されていないものもある場合 (例えば、 dual-port Ethernet を使用しているが、ケーブルが1本しか接続されていない場合)、 {{ic|system-networkd-wait-online.service}} の起動は、デフォルトのタイムアウトである2分後に失敗します。これにより、起動プロセスに不要な遅延が発生する可能性があります。''すべての'' インターフェイスではなく ''任意の'' インターフェイスがオンラインになるまで待機する動作に変更するには、サービスを[[編集]]し、{{ic|--any}} パラメータを {{ic|ExecStart}} 行に追加します。 |
||
+ | |||
+ | ==== 常時接続されていない複数のインターフェース ==== |
||
+ | |||
+ | システムに複数のネットワークインタフェースがあるが、常時接続されているとは想定されていないものもある場合 (例えば、 dual-port Ethernet を使用しているが、ケーブルが1本しか接続されていない場合)、 {{ic|system-networkd-wait-online.service}} の起動は、デフォルトのタイムアウトである2分後に失敗します。これにより、起動プロセスに不要な遅延が発生する可能性があります。''すべての'' インターフェイスではなく ''任意の'' インターフェイスがオンラインになるまで待機する動作に変更するには、サービスを [[編集]] し、{{ic|--any}} パラメータを {{ic|ExecStart}} 行に追加します。 |
||
{{hc|/etc/systemd/system/systemd-networkd-wait-online.service.d/wait-for-only-one-interface.conf|2= |
{{hc|/etc/systemd/system/systemd-networkd-wait-online.service.d/wait-for-only-one-interface.conf|2= |
||
49行目: | 53行目: | ||
}} |
}} |
||
+ | または、特定のインターフェースを待機するために {{ic|systemd-networkd-wait-online@.service}} を使用します。たとえば、{{ic|enp1s0}} を待機する場合、{{ic|systemd-networkd-wait-online.service}} を無効化し、{{ic|systemd-networkd-wait-online@enp1s0.service}} を有効化します。 |
||
− | 無視されたインターフェイスや動作状態など、その他の動作も設定できます。使用可能なパラメータについては、 {{man|8|systemd-networkd-wait-online}} を参照してください。 |
||
+ | |||
+ | ==== ネットワークインターフェースがルーティング可能なアドレスを取得するまで待機する ==== |
||
+ | |||
+ | {{man|8|systemd-networkd-wait-online.service}} によると、"オンラインとは、リンクの動作状態が "degraded" 以上であることを意味します" とされています ("degraded" やその他の動作状態の定義については {{man|1|networkctl}} を参照してください。) |
||
+ | |||
+ | {{ic|systemd-networkd-wait-online.service}} がネットワークインターフェースにルーティング可能な IP アドレスを取得する前に終了しないようにするため(その結果、ネットワーク接続が必要な他のサービスが早すぎて起動するのを防ぐため)''.network'' ファイルの {{ic|[Link]}} セクションに {{ic|1=RequiredForOnline=routable}} を追加してください。 |
||
+ | |||
+ | {{bc|1= |
||
+ | [Link] |
||
+ | RequiredForOnline=routable |
||
+ | }} |
||
=== 設定ファイルの例 === |
=== 設定ファイルの例 === |
||
112行目: | 127行目: | ||
==== 同一マシンで有線アダプタと無線アダプタ両方を使用 ==== |
==== 同一マシンで有線アダプタと無線アダプタ両方を使用 ==== |
||
− | 以下の設定では、 |
+ | 以下の設定では、metric ディレクティブを使用して、有線と無線両方の接続で DHCP IP を有効にしており、カーネルがその場でどちらを使うか決定します。有線接続が切断されると、即座に無線に切り替わります。接続が途切れることはありません。 |
+ | |||
+ | システム上の無線・有線どちらのデバイスも有効な接続がある場合、カーネルのルーティングのメトリック(''ip'' で設定するのと同一) が、パケットを送るのにどちらのルートを使用するか決定します。システム上の有線デバイスと無線デバイスの両方がアクティブな接続を行っている場合がそうです。均衡状態を破るために、カーネルはメトリックを使います。もし一方の接続が終了しても、何も設定せずとも、もう一方が自動的にギャップを埋めます(進行中の転送はまだうまく対処されないでしょうが、これは他の OSI レイヤーでの問題です)。 |
||
+ | ''systemd-networkd'' は[https://github.com/systemd/systemd/issues/17698 インターフェイスごとのデフォルトルートメトリクスを設定しない]ので、手動で設定する必要があります: |
||
− | システム上の無線・有線どちらのデバイスも有効な接続がある場合、カーネルのルートメトリック (''ip'' で設定するのと同一) がパケットを送るのにどちらのルートを使用するか決定します。システム上の有線デバイスと無線デバイスの両方がアクティブな接続を行っている場合がそうです。均衡状態を破るために、カーネルはメトリックを使います。もし一方の接続が終了しても、何も設定せずとも、もう一方が自動的にギャップを埋めます(進行中の転送はまだうまく対処されないでしょうが、これは他の OSI レイヤーでの問題です)。 |
||
{{Note|{{ic|Metric}} オプションはスタティックルーティングの設定を行います。{{ic|RouteMetric}} オプションはスタティックルーティングの設定をしないセットアップ用です。詳細については {{man|5|systemd.network}} を参照して下さい}} |
{{Note|{{ic|Metric}} オプションはスタティックルーティングの設定を行います。{{ic|RouteMetric}} オプションはスタティックルーティングの設定をしないセットアップ用です。詳細については {{man|5|systemd.network}} を参照して下さい}} |
||
126行目: | 143行目: | ||
[DHCPv4] |
[DHCPv4] |
||
− | RouteMetric= |
+ | RouteMetric=100 |
+ | |||
+ | [IPv6AcceptRA] |
||
+ | RouteMetric=100 |
||
}} |
}} |
||
137行目: | 157行目: | ||
[DHCPv4] |
[DHCPv4] |
||
− | RouteMetric= |
+ | RouteMetric=600 |
− | }} |
||
− | |||
− | IPv6 を使用している場合は、次のように IPv6 ルートのメトリックも個別に設定する必要があります。 |
||
− | |||
− | {{hc|/etc/systemd/network/20-wired.network|2= |
||
− | ... |
||
[IPv6AcceptRA] |
[IPv6AcceptRA] |
||
− | RouteMetric= |
+ | RouteMetric=600 |
}} |
}} |
||
− | |||
− | {{hc|/etc/systemd/network/25-wireless.network|2= |
||
− | ... |
||
− | |||
− | [IPv6AcceptRA] |
||
− | RouteMetric=20 |
||
− | }} |
||
− | |||
− | ==== インターフェイスの名前を変更 ==== |
||
− | |||
− | [[ネットワーク設定#インターフェイス名の変更|udev ルールを編集]]するかわりに ''.link'' ファイルを使ってインターフェイスの名前を変更できます。MAC アドレスに基づいて USB-to-Ethernet アダプタに予測可能なインターフェイス名を設定する例 (通常は接続された USB 端子によって名前が変わってしまいます): |
||
− | |||
− | {{hc|head=/etc/systemd/network/10-ethusb0.link|output= |
||
− | [Match] |
||
− | MACAddress=12:34:56:78:90:ab |
||
− | |||
− | [Link] |
||
− | Description=USB to Ethernet Adapter |
||
− | Name=ethusb0 |
||
− | }} |
||
− | |||
− | {{Note|ユーザーが作成した ''.link'' ファイルが先に有効になるように、デフォルト設定の {{ic|99-default.link}} よりも辞書的に早い順番になるような名前を付けてください。例えば、{{ic|ethusb0.link}} という名前を付けたい場合は {{ic|10-ethusb0.link}} としてください。}} |
||
== 設定ファイル == |
== 設定ファイル == |
||
190行目: | 182行目: | ||
{{Tip| |
{{Tip| |
||
* {{ic|/etc/systemd/network/}} 内のファイルは {{ic|/usr/lib/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}} を見てください。 |
+ | * 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]]. |
}} |
}} |
||
236行目: | 228行目: | ||
| {{ic|1=DHCPServer=}} || 有効化されている場合、DHCPv4 サーバが起動されます。 || 真偽値 || {{ic|false}} |
| {{ic|1=DHCPServer=}} || 有効化されている場合、DHCPv4 サーバが起動されます。 || 真偽値 || {{ic|false}} |
||
|- |
|- |
||
− | | {{ic|1=MulticastDNS=}} || [[RFC:6762|マルチキャスト 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=DNSSEC=}} || リンク上での DNSSEC DNS validation のサポートを制御。{{ic|allow-downgrade}} に設定すると、DNSSEC 非対応のネットワークとの互換性が向上します。この場合、DNSSEC は自動でオフになります。 || 真偽値、{{ic|allow-downgrade}} || {{ic|false}} |
||
263行目: | 255行目: | ||
* {{ic|1=Gateway=}} DHCP を使用しない場合、このオプションは'''必須'''です。 |
* {{ic|1=Gateway=}} DHCP を使用しない場合、このオプションは'''必須'''です。 |
||
* {{ic|1=Destination=}} ルートの宛先プリフィックスです。スラッシュとプリフィックス長を後ろに付けることができます。 |
* {{ic|1=Destination=}} ルートの宛先プリフィックスです。スラッシュとプリフィックス長を後ろに付けることができます。 |
||
+ | * {{ic|1=Metrics=}} このルートの優先順位 |
||
+ | * {{ic|1=Type=}} ルートの種類 |
||
+ | * {{ic|1=Table=}} ルートのテーブル識別子 |
||
+ | * {{ic|1=GatewayOnLink=}} {{ic|yes}} に設定すると、カーネルは現在のマシンがゲートウェイに直接到達可能か (つまりローカルネットワークに接続されているか) を確認する必要がなくなります。一部のルーティング問題の解決に使用できます。 |
||
{{ic|[Route]}} セクションに {{ic|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=}} キーを記述することができます。}} |
||
+ | |||
+ | ==== [RoutingPolicyRule] ==== |
||
+ | |||
+ | 通常のルーティングアルゴリズムは、パケットをどのゲートウェイに送信するかを選択する際に通常、宛先アドレスのみを考慮します。しかし、より複雑なネットワークではそれだけでは不十分です。 |
||
+ | |||
+ | {{ic|[RoutingPolicyRule]}} セクションでは、指定された条件に一致するパケットにのみ適用される追加ルールを定義できます。 |
||
+ | |||
+ | 以下はこれらの条件の非網羅的な一覧です: |
||
+ | |||
+ | * {{ic|1=TypeOfService=}} パケットのサービス種別 (0から255の範囲の整数); |
||
+ | * {{ic|1=From=}} ソースアドレスのプレフィックス; |
||
+ | * {{ic|1=To=}} 宛先アドレスのプレフィックス; |
||
+ | * {{ic|1=FirewallMark=}} iptables ファイアウォールのマーク値; |
||
+ | * {{ic|1=IncomingInterface=}} 受信デバイス; |
||
+ | * {{ic|1=OutgoingInterface=}} 送信デバイス; |
||
+ | |||
+ | その他のオプション: |
||
+ | |||
+ | * {{ic|1=Type=}} ルーティングポリシーデータベースルールの種類; |
||
+ | * {{ic|1=Table=}} パケットがルールに一致した場合に使用するルーティングテーブル; |
||
+ | * {{ic|1=Priority=}} ルールの優先順位。ルールは優先順位の昇順で評価されるため、低い優先順位のルールが先に適用されます; |
||
+ | * {{ic|1=InvertRule=}} {{ic|true}} に設定するとルールが反転し、条件を1つも満たさないパケットに適用されます; |
||
+ | * {{ic|1=SuppressPrefixLength=}} プレフィックス長が指定された値以下の場合、そのルールは抑制されます; |
||
==== [DHCPv4] ==== |
==== [DHCPv4] ==== |
||
278行目: | 297行目: | ||
|- |
|- |
||
| {{ic|1=UseDomains=}} || DHCP サーバから受け取るドメイン名を DNS 検索ドメインとして使用するかどうかを制御。{{ic|route}} に設定すると、DHCP サーバから受け取るドメイン名が DNS クエリにのみ使用され、検索には使用されなくなります。このオプションは、[[systemd-resolved]] を使用している際にはローカルな名前解決を修正する可能性があります。 || 真偽値、{{ic|route}} || {{ic|false}} |
| {{ic|1=UseDomains=}} || DHCP サーバから受け取るドメイン名を DNS 検索ドメインとして使用するかどうかを制御。{{ic|route}} に設定すると、DHCP サーバから受け取るドメイン名が DNS クエリにのみ使用され、検索には使用されなくなります。このオプションは、[[systemd-resolved]] を使用している際にはローカルな名前解決を修正する可能性があります。 || 真偽値、{{ic|route}} || {{ic|false}} |
||
+ | |- |
||
+ | | {{ic|1=IPv6OnlyMode=}} || true に設定すると、DHCP クライアントは DHCP サーバーに対し、IPv6 のみの動作をサポートしていることを通知します([[RFC:8925]]、DHCPv4 の IPv6-Only Preferred オプション)。DHCPv4 サーバーがそのオプションを DHCP 応答で返した場合、クライアントは DHCP 要求を中止し、IPv4 アドレスを取得せず、IPv6 のみのネットワークを設定します。」 || 真偽値 || {{ic|true}} IPv6が有効になっている場合 |
||
|} |
|} |
||
317行目: | 338行目: | ||
* {{ic|1=Name=}} インターフェイス名。'''必須''' |
* {{ic|1=Name=}} インターフェイス名。'''必須''' |
||
* {{ic|1=Kind=}} 例: ''bridge'', ''bond'', ''vlan'', ''veth'', ''sit''。'''必須''' |
* {{ic|1=Kind=}} 例: ''bridge'', ''bond'', ''vlan'', ''veth'', ''sit''。'''必須''' |
||
− | |||
− | === link ファイル === |
||
− | |||
− | {{Remove|Duplicates the {{man|5|systemd.link}} man page.}} |
||
− | |||
− | このファイルはカスタム udev ルールの代わりとなりデバイスが現れた時に [[udev]] によって適用されます。2つのセクションを記述します: {{ic|[Match]}} と {{ic|[Link]}}。以下ではそれぞれのセクションでよく使われる設定キーを説明しています。詳しくは {{man|5|systemd.link}} を参照してください。 |
||
− | |||
− | {{Tip|''.link'' ファイルの問題を診断したいときは {{ic|udevadm test-builtin net_setup_link /sys/path/to/network/device}} を使ってください。}} |
||
− | |||
− | ==== [Match] セクション ==== |
||
− | |||
− | * {{ic|1=MACAddress=}} MAC アドレス |
||
− | * {{ic|1=Host=}} ホストネーム |
||
− | * {{ic|1=Virtualization=}} |
||
− | * {{ic|1=Type=}} デバイスのタイプ (例: vlan) |
||
− | |||
− | ==== [Link] セクション ==== |
||
− | |||
− | * {{ic|1=MACAddressPolicy=}} 永続的、またはランダムなアドレス。または、 |
||
− | * {{ic|1=MACAddress=}} 特定のアドレス。 |
||
− | * {{ic|1=NamePolicy=}} インターフェイス名に対してセットされるべきポリシーのリスト。例: kernel, keep |
||
− | |||
− | {{Note|ほとんどの場合システムの {{ic|/usr/lib/systemd/network/99-default.link}} で基本的に問題ありません。}} |
||
== コンテナでの使用方法 == |
== コンテナでの使用方法 == |
||
354行目: | 352行目: | ||
==== ブリッジインターフェイス ==== |
==== ブリッジインターフェイス ==== |
||
− | まず、仮想[[ブリッジ]]インターフェイスを作成してください。systemd に、イーサネットブリッジとして機能する、 |
+ | まず、仮想[[ブリッジ]]インターフェイスを作成してください。systemd に、イーサネットブリッジとして機能する、{{ic|br0}} という名前のデバイスを作成するように指示します。 |
{{hc|/etc/systemd/network/''mybridge''.netdev|2= |
{{hc|/etc/systemd/network/''mybridge''.netdev|2= |
||
361行目: | 359行目: | ||
Kind=bridge}} |
Kind=bridge}} |
||
+ | オプションとして、ブリッジがブリッジ接続されたインターフェースのいずれかから MAC アドレスを継承するようにするため、{{ic|NetDev}} セクションに {{ic|1=MACAddress=none}} を追加します。これには ''25-br0.link'' ファイルの作成も必要です。 |
||
− | {{Tip|''systemd-networkd'' は、インターフェイス名とマシン ID に基づいて生成された MAC アドレスをブリッジに割り当てます。これにより接続の問題が発生する場合があります。例えば、MAC フィルタリングに基づいたルーティングです。そのような問題を回避するには、MAC アドレス(おそらく物理デバイスと同じもの)をブリッジに割り当ててください。上記の ''NetDev'' セクション内に {{ic|1=MACAddress=xx:xx:xx:xx:xx:xx}} という行を追加してください。}} |
||
+ | |||
+ | {{Tip|''systemd-networkd'' は、インターフェイス名とマシン ID に基づいて生成された MAC アドレスをブリッジに割り当てます。これにより接続の問題が発生する場合があります。例えば、MAC フィルタリングに基づいたルーティングです。そのような問題を回避するには、MAC アドレス(おそらく物理デバイスと同じもの)をブリッジに割り当ててください。上記の {{ic|NetDev}} セクション内に {{ic|1=MACAddress=xx:xx:xx:xx:xx:xx}} という行を追加してください。}} |
||
{{ic|systemd-networkd.service}} を[[再起動]]すると systemd はブリッジを作成します。 |
{{ic|systemd-networkd.service}} を[[再起動]]すると systemd はブリッジを作成します。 |
||
372行目: | 372行目: | ||
}} |
}} |
||
− | インターフェイス |
+ | インターフェイス {{ic|br0}} が表示されていますが、この段階ではまだ DOWN になっていることに注意してください。 |
==== イーサネットをブリッジに関連付ける ==== |
==== イーサネットをブリッジに関連付ける ==== |
||
− | 次のステップでは、新しく作成したブリッジにネットワークインターフェイスを追加します。以下の例では、 |
+ | 次のステップでは、新しく作成したブリッジにネットワークインターフェイスを追加します。以下の例では、{{ic|en*}} という名前にマッチする任意のインターフェイスをブリッジ {{ic|br0}} に追加します。 |
{{hc|/etc/systemd/network/''bind''.network|2= |
{{hc|/etc/systemd/network/''bind''.network|2= |
||
386行目: | 386行目: | ||
}} |
}} |
||
− | + | Ethernet インターフェースには DHCP や IP アドレスを割り当ててはいけません。ブリッジは IP アドレスがないインターフェースにバインドする必要があるためです。 |
|
+ | |||
+ | {{Note|他の ''.network'' ファイルが {{ic|1=Name=en*}} でインターフェースを一致させようとしないことを確認してください。インターフェースに一致する最初のファイルのみが適用されます。}} |
||
==== ブリッジネットワーク ==== |
==== ブリッジネットワーク ==== |
||
398行目: | 400行目: | ||
[Network] |
[Network] |
||
DHCP=ipv4}} |
DHCP=ipv4}} |
||
+ | |||
+ | ==== MAC アドレスを継承する(オプション) ==== |
||
+ | |||
+ | ブリッジ型インターフェイスの1つから MAC アドレスを吸入するブリッジの場合、{{ic|1=macAddress=none}} および {{ic|1=macaddresspolicy=none}} を設定します。 |
||
+ | |||
+ | {{hc|/etc/systemd/network/25-br0.netdev|2= |
||
+ | [NetDev] |
||
+ | Name=br0 |
||
+ | Kind=bridge |
||
+ | MACAddress=none |
||
+ | }} |
||
+ | |||
+ | {{hc|/etc/systemd/network/25-br0.link|2= |
||
+ | [Match] |
||
+ | OriginalName=br0 |
||
+ | |||
+ | [Link] |
||
+ | MACAddressPolicy=none |
||
+ | }} |
||
==== コンテナの設定 ==== |
==== コンテナの設定 ==== |
||
508行目: | 529行目: | ||
コンテナで {{ic|systemd-networkd.service}} が[[有効化]]されていることを確認してください。 |
コンテナで {{ic|systemd-networkd.service}} が[[有効化]]されていることを確認してください。 |
||
+ | |||
+ | === MACVLAN bridge === |
||
+ | |||
+ | ホストが MacVlan を介して接続されたコンテナに到達できるためには、ホスト自体が MacVLan を介して接続する必要があり、基礎となるイーサネットネットワークインターフェイスに直接接続する必要があります。 |
||
+ | |||
+ | ホスト上で、基盤となる Ethernet ネットワークインターフェースを MACVLAN に接続し、IP アドレスが割り当てられないようにします。例えば、MACVLAN インターフェース名として {{ic|mv-0}} を使用し、ホストの Ethernet インターフェースとして {{ic|enp1s0}} を使用する場合: |
||
+ | |||
+ | {{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|1=RequiredForOnline=carrier}} は、接続が IP アドレスを取得するのを待つ(最終的に失敗する)ことを防ぎますが、このプロセスは絶対に起こりません。 |
||
+ | * 基盤となるネットワークインターフェースは必ずしも物理的な Ethernet インターフェースである必要はありません。例えば、MACVLAN ブリッジはボンドに接続することができます。 |
||
+ | }} |
||
+ | |||
+ | Macvlan Bridge を作成 {{ic|MV-0}}: |
||
+ | |||
+ | {{hc|/etc/systemd/network/25-mv-0.netdev|2= |
||
+ | [NetDev] |
||
+ | Name=mv-0 |
||
+ | Kind=macvlan |
||
+ | |||
+ | [MACVLAN] |
||
+ | Mode=bridge |
||
+ | }} |
||
+ | |||
+ | MacVlan ブリッジでホストのネットワーク接続を設定します({{ic|mv-0}})次の例では、DHCP を使用して、必要に応じてオプションを置き換えます。 |
||
+ | |||
+ | {{hc|/etc/systemd/network/35-mv-0.network|2= |
||
+ | [Match] |
||
+ | Name=mv-0 |
||
+ | |||
+ | [Link] |
||
+ | RequiredForOnline=routable |
||
+ | |||
+ | [Network] |
||
+ | BindCarrier=enp1s0 |
||
+ | DHCP=yes |
||
+ | }} |
||
+ | |||
+ | コンテナには、'''基盤となる Ethernet ネットワークインターフェース''' (上記の例では {{ic|enp1s0}}) に MACVLAN を接続します。例えば、{{ic|/etc/systemd/nspawn/''container_name''.nspawn}} で次のように指定します: |
||
+ | |||
+ | {{bc|1= |
||
+ | [Network] |
||
+ | MACVLAN=enp1s0 |
||
+ | }} |
||
+ | |||
+ | コマンドラインから開始されたコンテナの場合、{{ic|1=-network-macvlan = enp1s0}} オプションを渡します。 |
||
+ | |||
+ | コンテナ内では、MACVLAN インターフェースの名前は {{ic|mv-''underlying_interface_name''}} になります(例:{{ic|mv-enp1s0}})インターフェース名に一致させて、ネットワーク接続を必要に応じて設定します(ホストと同様に)例えば、DHCP を使用する場合: |
||
+ | |||
+ | {{hc|/etc/systemd/network/30-mv-enp1s0.network|2= |
||
+ | [Match] |
||
+ | Name=mv-enp1s0 |
||
+ | |||
+ | [Link] |
||
+ | RequiredForOnline=routable |
||
+ | |||
+ | [Network] |
||
+ | DHCP=yes |
||
+ | }} |
||
== ヒントとテクニック == |
== ヒントとテクニック == |
||
646行目: | 741行目: | ||
sysctl 設定 {{ic|net.ipv4.tcp_congestion_control}} は、 TCP リンクがアクティブなとき、特に2つのホスト間のパスが輻輳してスループットを低下させる必要があるときに、輻輳ウィンドウと受信ウィンドウを調整する方法を制御するため、これらの値とは直接関係しません。上記の {{ic|Initial*}} 値は、輻輳アルゴリズムに引き継がれて必要に応じて調整される前に、新しい接続ごとに選択されたデフォルトのウィンドウ値を設定するだけです。高い初期値を設定すると、輻輳アルゴリズムが最適な値 (または、逆に、間違った初期値を設定するとネゴシエーション時間が長くなりますが、輻輳アルゴリズムはそれらを修正するように動作し、新しく確立された各 TCP 接続の速度が数秒間遅くなります。) を見つけようとしている間に、単純にネゴシエーションが短縮されます。 |
sysctl 設定 {{ic|net.ipv4.tcp_congestion_control}} は、 TCP リンクがアクティブなとき、特に2つのホスト間のパスが輻輳してスループットを低下させる必要があるときに、輻輳ウィンドウと受信ウィンドウを調整する方法を制御するため、これらの値とは直接関係しません。上記の {{ic|Initial*}} 値は、輻輳アルゴリズムに引き継がれて必要に応じて調整される前に、新しい接続ごとに選択されたデフォルトのウィンドウ値を設定するだけです。高い初期値を設定すると、輻輳アルゴリズムが最適な値 (または、逆に、間違った初期値を設定するとネゴシエーション時間が長くなりますが、輻輳アルゴリズムはそれらを修正するように動作し、新しく確立された各 TCP 接続の速度が数秒間遅くなります。) を見つけようとしている間に、単純にネゴシエーションが短縮されます。 |
||
+ | |||
+ | === 既存のインターフェースに独自の MAC アドレスを持つ2番目の静的 IP を設定する === |
||
+ | |||
+ | ルーターに対してコンピュータを完全に異なる2台のデバイスとして認識させるには、異なる IP アドレスだけでなく、異なる MAC アドレスを持つ仮想インターフェースを作成する必要があります。 |
||
+ | |||
+ | これを実現するために、物理インターフェースの上に一意の MAC アドレスを持つ仮想インターフェース(macvlan)を作成します。例えば、次のように作成します: |
||
+ | |||
+ | {{hc|/etc/systemd/network/25-eth210.netdev|2= |
||
+ | [NetDev] |
||
+ | Name=eth210 |
||
+ | Kind=macvlan |
||
+ | MACAddress=00:11:22:33:44:55 |
||
+ | |||
+ | [MACVLAN] |
||
+ | Mode=bridge |
||
+ | SourceDevice=enp1s0 |
||
+ | }} |
||
+ | |||
+ | 次に、同じサブネットとゲートウェイを使用して、通常通りネットワークファイルを追加し、静的 IP を設定する場合は DHCP に使用される IP 番号の範囲を回避します。例えば: |
||
+ | {{hc|/etc/systemd/network/25-eth210.network|2= |
||
+ | [Match] |
||
+ | Name=eth210 |
||
+ | |||
+ | [Network] |
||
+ | Address=192.168.132.210/24 |
||
+ | Gateway=192.168.132.1 |
||
+ | |||
+ | [Route] |
||
+ | Destination=192.168.132.0/24 |
||
+ | Metric=2 |
||
+ | }} |
||
+ | macvlan インターフェースのルートにはメトリック2が設定されています。これにより、トラフィックはメインインターフェースを優先して通過するようになります。なぜなら、メインインターフェースにはデフォルトルートがメトリック1で(暗黙的に)設定されているからです。ただし、特に macvlan インターフェースを使用するよう指示した場合は別です。 |
||
+ | |||
+ | 最後に、{{ic|1=MACVLAN=eth210}} をメインインターフェースの {{ic|.network}} ファイルの {{ic|[Network]}} セクションに追加します! |
||
+ | |||
+ | この時点で、新しい MAC アドレスをルーターに認識させ、その MAC アドレスを受け入れるように設定するための簡単な方法として、例えば {{ic|sudo arping -I eth210 192.168.132.1}} を実行できます。ルーターで "新しいデバイス" の設定をした後、例えば {{ic|curl --interface 192.168.132.210 ifconfig.me}} を実行して、新しいインターフェースがインターネットに接続できるかどうかをテストできます。このコマンドは、あなたの公開 IP アドレスを表示するはずです。 |
||
== 参照 == |
== 参照 == |
2025年2月1日 (土) 17:06時点における最新版
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つのリンクがオンラインになるまで待機します。
詳細については、systemd-networkd-wait-online(8) を参照してください。
常時接続されていない複数のインターフェース
システムに複数のネットワークインタフェースがあるが、常時接続されているとは想定されていないものもある場合 (例えば、 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@.service
を使用します。たとえば、enp1s0
を待機する場合、systemd-networkd-wait-online.service
を無効化し、systemd-networkd-wait-online@enp1s0.service
を有効化します。
ネットワークインターフェースがルーティング可能なアドレスを取得するまで待機する
systemd-networkd-wait-online.service(8) によると、"オンラインとは、リンクの動作状態が "degraded" 以上であることを意味します" とされています ("degraded" やその他の動作状態の定義については networkctl(1) を参照してください。)
systemd-networkd-wait-online.service
がネットワークインターフェースにルーティング可能な IP アドレスを取得する前に終了しないようにするため(その結果、ネットワーク接続が必要な他のサービスが早すぎて起動するのを防ぐため).network ファイルの [Link]
セクションに RequiredForOnline=routable
を追加してください。
[Link] RequiredForOnline=routable
設定ファイルの例
このセクションにおける設定はすべて /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=
ルートの宛先プリフィックスです。スラッシュとプリフィックス長を後ろに付けることができます。Metrics=
このルートの優先順位Type=
ルートの種類Table=
ルートのテーブル識別子GatewayOnLink=
yes
に設定すると、カーネルは現在のマシンがゲートウェイに直接到達可能か (つまりローカルネットワークに接続されているか) を確認する必要がなくなります。一部のルーティング問題の解決に使用できます。
[Route]
セクションに Destination
が存在しない場合、デフォルトルートとして扱われます。
[RoutingPolicyRule]
通常のルーティングアルゴリズムは、パケットをどのゲートウェイに送信するかを選択する際に通常、宛先アドレスのみを考慮します。しかし、より複雑なネットワークではそれだけでは不十分です。
[RoutingPolicyRule]
セクションでは、指定された条件に一致するパケットにのみ適用される追加ルールを定義できます。
以下はこれらの条件の非網羅的な一覧です:
TypeOfService=
パケットのサービス種別 (0から255の範囲の整数);From=
ソースアドレスのプレフィックス;To=
宛先アドレスのプレフィックス;FirewallMark=
iptables ファイアウォールのマーク値;IncomingInterface=
受信デバイス;OutgoingInterface=
送信デバイス;
その他のオプション:
Type=
ルーティングポリシーデータベースルールの種類;Table=
パケットがルールに一致した場合に使用するルーティングテーブル;Priority=
ルールの優先順位。ルールは優先順位の昇順で評価されるため、低い優先順位のルールが先に適用されます;InvertRule=
true
に設定するとルールが反転し、条件を1つも満たさないパケットに適用されます;SuppressPrefixLength=
プレフィックス長が指定された値以下の場合、そのルールは抑制されます;
[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
|
IPv6OnlyMode= |
true に設定すると、DHCP クライアントは DHCP サーバーに対し、IPv6 のみの動作をサポートしていることを通知します(RFC:8925、DHCPv4 の IPv6-Only Preferred オプション)。DHCPv4 サーバーがそのオプションを DHCP 応答で返した場合、クライアントは DHCP 要求を中止し、IPv4 アドレスを取得せず、IPv6 のみのネットワークを設定します。」 | 真偽値 | true IPv6が有効になっている場合
|
[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
オプションとして、ブリッジがブリッジ接続されたインターフェースのいずれかから MAC アドレスを継承するようにするため、NetDev
セクションに MACAddress=none
を追加します。これには 25-br0.link ファイルの作成も必要です。
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
Ethernet インターフェースには DHCP や IP アドレスを割り当ててはいけません。ブリッジは IP アドレスがないインターフェースにバインドする必要があるためです。
ブリッジネットワーク
ブリッジが作成され、既存のネットワークインターフェイスに関連付けられました。ブリッジインターフェイスの IP 設定を指定する必要があります。これは3番目の .network で定義されます。以下の例では DHCP を使用します。
/etc/systemd/network/mybridge.network
[Match] Name=br0 [Network] DHCP=ipv4
MAC アドレスを継承する(オプション)
ブリッジ型インターフェイスの1つから MAC アドレスを吸入するブリッジの場合、macAddress=none
および macaddresspolicy=none
を設定します。
/etc/systemd/network/25-br0.netdev
[NetDev] Name=br0 Kind=bridge MACAddress=none
/etc/systemd/network/25-br0.link
[Match] OriginalName=br0 [Link] MACAddressPolicy=none
コンテナの設定
コンテナを起動する際は --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
ホストが MacVlan を介して接続されたコンテナに到達できるためには、ホスト自体が MacVLan を介して接続する必要があり、基礎となるイーサネットネットワークインターフェイスに直接接続する必要があります。
ホスト上で、基盤となる Ethernet ネットワークインターフェースを MACVLAN に接続し、IP アドレスが割り当てられないようにします。例えば、MACVLAN インターフェース名として mv-0
を使用し、ホストの Ethernet インターフェースとして enp1s0
を使用する場合:
/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
Macvlan Bridge を作成 MV-0
:
/etc/systemd/network/25-mv-0.netdev
[NetDev] Name=mv-0 Kind=macvlan [MACVLAN] Mode=bridge
MacVlan ブリッジでホストのネットワーク接続を設定します(mv-0
)次の例では、DHCP を使用して、必要に応じてオプションを置き換えます。
/etc/systemd/network/35-mv-0.network
[Match] Name=mv-0 [Link] RequiredForOnline=routable [Network] BindCarrier=enp1s0 DHCP=yes
コンテナには、基盤となる Ethernet ネットワークインターフェース (上記の例では enp1s0
) に MACVLAN を接続します。例えば、/etc/systemd/nspawn/container_name.nspawn
で次のように指定します:
[Network] MACVLAN=enp1s0
コマンドラインから開始されたコンテナの場合、-network-macvlan = enp1s0
オプションを渡します。
コンテナ内では、MACVLAN インターフェースの名前は mv-underlying_interface_name
になります(例:mv-enp1s0
)インターフェース名に一致させて、ネットワーク接続を必要に応じて設定します(ホストと同様に)例えば、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 接続の速度が数秒間遅くなります。) を見つけようとしている間に、単純にネゴシエーションが短縮されます。
既存のインターフェースに独自の MAC アドレスを持つ2番目の静的 IP を設定する
ルーターに対してコンピュータを完全に異なる2台のデバイスとして認識させるには、異なる IP アドレスだけでなく、異なる MAC アドレスを持つ仮想インターフェースを作成する必要があります。
これを実現するために、物理インターフェースの上に一意の MAC アドレスを持つ仮想インターフェース(macvlan)を作成します。例えば、次のように作成します:
/etc/systemd/network/25-eth210.netdev
[NetDev] Name=eth210 Kind=macvlan MACAddress=00:11:22:33:44:55 [MACVLAN] Mode=bridge SourceDevice=enp1s0
次に、同じサブネットとゲートウェイを使用して、通常通りネットワークファイルを追加し、静的 IP を設定する場合は DHCP に使用される IP 番号の範囲を回避します。例えば:
/etc/systemd/network/25-eth210.network
[Match] Name=eth210 [Network] Address=192.168.132.210/24 Gateway=192.168.132.1 [Route] Destination=192.168.132.0/24 Metric=2
macvlan インターフェースのルートにはメトリック2が設定されています。これにより、トラフィックはメインインターフェースを優先して通過するようになります。なぜなら、メインインターフェースにはデフォルトルートがメトリック1で(暗黙的に)設定されているからです。ただし、特に macvlan インターフェースを使用するよう指示した場合は別です。
最後に、MACVLAN=eth210
をメインインターフェースの .network
ファイルの [Network]
セクションに追加します!
この時点で、新しい MAC アドレスをルーターに認識させ、その MAC アドレスを受け入れるように設定するための簡単な方法として、例えば sudo arping -I eth210 192.168.132.1
を実行できます。ルーターで "新しいデバイス" の設定をした後、例えば curl --interface 192.168.132.210 ifconfig.me
を実行して、新しいインターフェースがインターネットに接続できるかどうかをテストできます。このコマンドは、あなたの公開 IP アドレスを表示するはずです。
参照
- 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)