「Systemd-networkd」の版間の差分
Kusakata.bot (トーク | 投稿記録) 細 (文字列「カスタム .service ファイルを書く」を「ユニットファイル」に置換) |
(→ヒントとテクニック: 同期) |
||
| (8人の利用者による、間の65版が非表示) | |||
| 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 アドレスを取得する場合です。もしくは {{ic|1=/etc/resolv.conf}} を手動で管理することもできます。}} |
||
| + | * 使用する DNS を適切に設定するためには、[[resolv.conf]] と ''systemd-resolved'' の相互作用を理解することが重要です。 [[systemd-resolved]] にいくつかの解説があります。 |
||
| − | [[resolv.conf]] の互換性のために、既存のファイルを削除または名前変更して以下のシンボリックリンクを作成してください (systemd-resolved を使用する場合): |
||
| + | * DNS エントリーが ''.network'' ファイルで指定されている場合は ''systemd-resolved'' が必要です。 |
||
| + | * ''systemd-resolved'' は、DHCP サーバーまたは IPv6 ルーターから DNS アドレスを取得する場合にも必要です。 |
||
| + | ({{ic|1=DHCP=}} および {{ic|1=IPv6AcceptRA=}} セクションの {{ic|[Network]}} および {{ic|1=UseDNS=yes}} (デフォルト) 、{{ic|[DHCPv4]}}、{{ic|[DHCPv6]}}、{{ic|[IPv6AcceptRA]}}、{{man|5|systemd.network}} を参照してください。) を設定します。 |
||
| + | * ''systemd-networkd'' 無しでも ''systemd-resolved'' を使うことができることに注意してください。 |
||
| + | === system-networkd-wait-online === |
||
| − | # ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf |
||
| + | {{ic|systemd-networkd.service}} を有効にすると、 {{ic|systemd-networkd-wait-online.service}} も有効になります。これは、ネットワークが構成されるのを待つワンショット・システム・サービスです。後者は {{ic|1=WantedBy=network-online.target}} を持っているので、 {{ic|network-online.target}} 自身が有効になっているか、他のユニットに引き寄せられた時にのみ起動します。 [[Systemd#ネットワークが稼働した後にサービスを実行する]]も参照してください。 |
||
| − | さらに、''systemd-resolved'' のローカル DNS スタブリゾルバ (インターフェイスごとに LLMNR や DNS マージングが使われます) を使うために、{{ic|/etc/nsswitch.conf}} の {{ic|dns}} を {{ic|resolve}} に置き換えます: |
||
| + | デフォルトでは、 {{ic|systemd-networkd-wait-online.service}} は、認識され ''systemd-networkd'' によって管理されているすべてのリンクが完全に設定されるか、または失敗しても、少なくとも1つのリンクがオンラインになるまで待機します。 |
||
| − | hosts: files ''resolve'' myhostname |
||
| − | {{ |
+ | 詳細については、{{man|8|systemd-networkd-wait-online}} を参照してください。 |
| + | ==== 常時接続されていない複数のインターフェース ==== |
||
| − | {{Note|ホストネームを指定しているとき、たとえ {{ic|.network}} ファイルに {{ic|1=UseDomains=yes}} や {{ic|1=Domains=[domain-list]}} を設定している場合 ({{ic|resolv.conf}} に {{ic|search [domain-list]}} が作成されます) でも、Systemd の {{ic|resolve}} はローカルドメインを検索しません。この問題を解決するには: |
||
| + | |||
| − | * {{ic|/etc/nsswitch.conf}} の {{ic|hosts}} データベースを切り詰める (例: {{ic|resolve}} サービスの後ろの {{ic|1=[!UNAVAIL=return]}} オプションを削除する)。 |
||
| + | システムに複数のネットワークインタフェースがあるが、常時接続されているとは想定されていないものもある場合 (例えば、 dual-port Ethernet を使用しているが、ケーブルが1本しか接続されていない場合)、 {{ic|system-networkd-wait-online.service}} の起動は、デフォルトのタイムアウトである2分後に失敗します。これにより、起動プロセスに不要な遅延が発生する可能性があります。''すべての'' インターフェイスではなく ''任意の'' インターフェイスがオンラインになるまで待機する動作に変更するには、サービスを [[編集]] し、{{ic|--any}} パラメータを {{ic|ExecStart}} 行に追加します。 |
||
| − | * 完全修飾ドメイン名を使うようにする。 |
||
| + | |||
| − | * {{ic|/etc/hosts}} を使ってホストネームを解決する。 |
||
| + | {{hc|/etc/systemd/system/systemd-networkd-wait-online.service.d/wait-for-only-one-interface.conf|2= |
||
| − | * systemd の {{ic|resolve}} の代わりに glibc の {{ic|dns}} を使うようにする。}} |
||
| + | [Service] |
||
| + | ExecStart= |
||
| + | ExecStart=/usr/lib/systemd/systemd-networkd-wait-online --any |
||
| + | }} |
||
| + | |||
| + | または、特定のインターフェースを待機するために {{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.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 |
||
| + | }} |
||
=== 設定ファイルの例 === |
=== 設定ファイルの例 === |
||
| − | このセクションにおける設定はすべて {{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 |
+ | 設定ファイルに変更を加えたら、{{ic|systemd-networkd.service}} を[[再起動]]してください。 |
| − | # systemctl restart systemd-networkd |
||
{{Note| |
{{Note| |
||
| + | * 設定ファイル内で指定するオプションは大文字と小文字が区別されます。 |
||
| − | * 以下の例では、{{ic|enp1s0}} が有線アダプタ、{{ic|wlp2s0}} が無線アダプタです。環境によって名前は変わります。 |
||
| + | * 以下の例では、{{ic|enp1s0}} が有線アダプタ、{{ic|wlp2s0}} が無線アダプタです。環境によって名前は変わります。[[ネットワーク設定#ネットワークインターフェイス]] を見てください。 |
||
| − | * IPv6 を無効化したい場合、ルーターが IPv6 を喧伝しているときは {{ic|[Network]}} セクションに {{ic|1=IPv6AcceptRA=false}} を追加する必要があります。}} |
||
| + | * {{ic|1=Name=en*}} や {{ic|1=Name=wl*}} のようにワイルドカードを使うこともできます。 |
||
| + | * デバイスはタイプによってもマッチさせることが可能です。例: イーサネットは {{ic|1=Type=ether}}、Wi-Fi は {{ic|1=Type=wlan}}、WWAN は {{ic|1=Type=wwan}}。注意点として、{{ic|1=Type=ether}} は仮想イーサネットインターフェイス({{ic|veth*}})にもマッチします(この動作は望ましくない場合があるでしょう)。 |
||
| + | * IPv6 を無効化したい場合、[[IPv6#systemd-networkd_3]] を見てください。 |
||
| + | }} |
||
==== 有線アダプタで DHCP を使用 ==== |
==== 有線アダプタで DHCP を使用 ==== |
||
| + | |||
| − | {{hc|/etc/systemd/network/''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 |
||
| 75行目: | 100行目: | ||
[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}} としています。以下のサービスは {{ic|/etc/wpa_supplicant/wpa_supplicant-wlp2s0.conf}} 設定ファイルを使って ''wpa_supplicant'' を起動します。ファイルが存在しなかった場合、サービスは起動しません。 |
||
| + | ''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'' で設定するのと同一) が、パケットを送るのにどちらのルートを使用するか決定します。システム上の有線デバイスと無線デバイスの両方がアクティブな接続を行っている場合がそうです。均衡状態を破るために、カーネルはメトリックを使います。もし一方の接続が終了しても、何も設定せずとも、もう一方が自動的にギャップを埋めます(進行中の転送はまだうまく対処されないでしょうが、これは他の OSI レイヤーでの問題です)。 |
| + | ''systemd-networkd'' は[https://github.com/systemd/systemd/issues/17698 インターフェイスごとのデフォルトルートメトリクスを設定しない]ので、手動で設定する必要があります: |
||
| − | {{Note|'''Metric''' オプションは '''RouteMetric''' オプションがスタティックルーティングを行うよう設定されていない時にその設定を行うためのものです。}} |
||
| + | {{Note|{{ic|Metric}} オプションはスタティックルーティングの設定を行います。{{ic|RouteMetric}} オプションはスタティックルーティングの設定をしないセットアップ用です。詳細については {{man|5|systemd.network}} を参照して下さい}} |
||
| − | {{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 |
| − | [ |
+ | [DHCPv4] |
| − | RouteMetric= |
+ | RouteMetric=100 |
| − | </nowiki>}} |
||
| + | [IPv6AcceptRA] |
||
| − | {{hc|/etc/systemd/network/''wireless''.network|<nowiki> |
||
| + | RouteMetric=100 |
||
| + | }} |
||
| + | |||
| + | {{hc|/etc/systemd/network/25-wireless.network|2= |
||
[Match] |
[Match] |
||
Name=wlp2s0 |
Name=wlp2s0 |
||
[Network] |
[Network] |
||
| − | DHCP= |
+ | DHCP=yes |
| − | [ |
+ | [DHCPv4] |
| − | RouteMetric= |
+ | RouteMetric=600 |
| − | </nowiki>}} |
||
| + | [IPv6AcceptRA] |
||
| − | ==== インターフェイスの名前を変更 ==== |
||
| + | RouteMetric=600 |
||
| − | |||
| − | [[ネットワーク設定#デバイス名の変更|udev ルールを編集]]するかわりに {{ic|.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|ユーザーが作成した {{ic|.link}} ファイルが先に有効になるように、デフォルト設定の {{ic|99-default.link}} よりも辞書的に早い順番になるような名前を付けてください。例えば、{{ic|ethusb0.link}} という名前を付けたい場合は {{ic|10-ethusb0.link}} としてください。}} |
||
== 設定ファイル == |
== 設定ファイル == |
||
| − | 設定ファイルは {{ic|/usr/lib/systemd/network}} から、そして一時的な実行時のネットワークディレクトリ {{ic|/run/systemd/network}} とローカルのネットワーク管理ディレクトリ {{ic|/etc/systemd/network}} から読み込まれます。{{ic|/etc/systemd/network}} 内のファイルが一番優先されます。 |
+ | 設定ファイルは {{ic|/usr/lib/systemd/network/}} から、そして一時的な実行時のネットワークディレクトリ {{ic|/run/systemd/network/}} とローカルのネットワーク管理ディレクトリ {{ic|/etc/systemd/network/}} から読み込まれます。{{ic|/etc/systemd/network/}} 内のファイルが一番優先されます。 |
3つのタイプの設定ファイルが存在します。ファイルのフォーマットは [[systemd#ユニットファイル|systemd のユニットファイル]]と似ています。 |
3つのタイプの設定ファイルが存在します。ファイルのフォーマットは [[systemd#ユニットファイル|systemd のユニットファイル]]と似ています。 |
||
| 151行目: | 176行目: | ||
* {{ic|[Match]}} セクションの'''全ての'''条件がマッチすれば、プロファイルが有効になります。 |
* {{ic|[Match]}} セクションの'''全ての'''条件がマッチすれば、プロファイルが有効になります。 |
||
| − | * 空の {{ic|[Match]}} セクションはどんな場合でもそのセクションを適用することを示します (いわば {{ic|*}} |
+ | * 空の {{ic|[Match]}} セクションはどんな場合でもそのセクションを適用することを示します (いわば {{ic|*}} ワイルドカードのようなものです)。 |
* 全ての設定ファイルは辞書順でまとめてソートされ処理されます。ファイルがどのディレクトリにあるかは関係ありません。 |
* 全ての設定ファイルは辞書順でまとめてソートされ処理されます。ファイルがどのディレクトリにあるかは関係ありません。 |
||
* 同じ名前のファイルは互いを置き換えます。 |
* 同じ名前のファイルは互いを置き換えます。 |
||
{{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}} を見てください。 |
|
==== [Match] ==== |
==== [Match] ==== |
||
| + | {| class = "wikitable" |
||
| − | * {{ic|1=Name=}} デバイスの名前 |
||
| + | ! パラメータ !! 説明 !! 受け入れる値 !! デフォルト値 |
||
| − | * {{ic|1=Host=}} マシンのホストネーム |
||
| + | |- |
||
| − | * {{ic|1=Virtualization=}} システムが仮想化環境で起動されているかどうかをチェックします。{{ic|1=Virtualization=no}} キーはホストマシンでのみ適用され、逆に {{ic|1=Virtualization=yes}} はコンテナや VM で適用されます。 |
||
| + | | {{ic|1=Name=}} || デバイス名のリストにマッチ(例: {{ic|en*}})。プレフィックス {{ic|!}} を付けると、リストを反転できます。|| 空白で区切られた、グロブ付きデバイス名リスト。論理否定 ({{ic|!}}) || |
||
| + | |- |
||
| + | | {{ic|1=MACAddress=}} || MAC アドレスのリストにマッチ(例: {{ic|1=MACAddress=01:23:45:67:89:ab 00-11-22-33-44-55 AABB.CCDD.EEFF}}) || コロン、ハイフン、またはドットで区切られた完全な 16 進数による、空白で区切られた MAC アドレスリスト || |
||
| + | |- |
||
| + | | {{ic|1=Host=}} || ホスト名、またはホストのマシン IDにマッチ。 || グロブ付きのホスト名文字列、{{man|5|machine-id}} || |
||
| + | |- |
||
| + | | {{ic|1=Virtualization=}} || システムが仮想化環境で起動されているかどうかをチェックします。{{ic|1=Virtualization=false}} キーはホストマシンにのみマッチし、逆に {{ic|1=Virtualization=true}} はコンテナや VM にマッチします。特定の仮想化タイプや実装をチェックしたり、({{ic|private-users}} を使って)ユーザ名前空間をチェックしたりできます。 || 真偽値、論理否定({{ic|!}})、タイプ({{ic|vm}}, {{ic|container}})、実装({{man|1|systemd-detect-virt}} を参照)、{{ic|private-users}} || |
||
| + | |} |
||
==== [Link] ==== |
==== [Link] ==== |
||
| + | {| class = "wikitable" |
||
| − | * {{ic|1=MACAddress=}} [[MAC_アドレス偽装#方法 1: systemd-networkd|MAC アドレスを偽装]]することができます。 |
||
| + | ! パラメータ !! 説明 !! 受け入れる値 !! デフォルト値 |
||
| − | * {{ic|1=MTUBytes=}} 最大転送単位をバイトで指定 (K, M, G を後ろに付けることができ、1024の倍数として認識されます)。MTU の値を大きくすることでネットワークの転送速度を速くすることが可能です ([[ジャンボフレーム]])。 |
||
| + | |- |
||
| + | | {{ic|1=MACAddress=}} || ハードウェアアドレスをデバイスに割り当てる。[[MAC_アドレス偽装#方法 1: systemd-networkd|MAC アドレスの偽装]]に便利。|| コロン、ハイフン、ドットで区切られた、完全な 16 進数 MAC アドレス。|| |
||
| + | |- |
||
| + | | {{ic|1=MTUBytes=}} || デバイスに対して最大転送単位をバイト単位で指定。IPv6 がインターフェイスで有効化されていて、MTU が 1280 (IPv6 における最低 MTU) 未満に指定されている場合、自動的に 1280 まで増やされます。より大きな MTU 値を設定することで(例: [[ジャンボフレーム]] 使用時)、ネットワーク転送速度を飛躍的に速くできます。 || 整数 (通常の接尾辞 K、M、G がサポートされており、1024 の倍数として認識されます) || |
||
| + | |- |
||
| + | | {{ic|1=Multicast=}} || [[wikipedia:Multicast_address|マルチキャスト]] の使用を許可。 || 真偽値 || ? ドキュメント化されておらず ? |
||
| + | |} |
||
==== [Network] ==== |
==== [Network] ==== |
||
| + | {| class = "wikitable" |
||
| − | * {{ic|1=DHCP=}} DHCP クライアントを有効にします。 |
||
| + | ! パラメータ !! 説明 !! 受け入れる値 !! デフォルト値 |
||
| − | * {{ic|1=DNS=}} DNS サーバーのアドレス |
||
| + | |- |
||
| − | * {{ic|1=Bridge=}} ブリッジの名前 |
||
| + | | {{ic|1=DHCP=}} || DHCPv4 と DHCPv6 の一方/両方のサポートを制御。 || 真偽値、{{ic|ipv4}}、{{ic|ipv6}} || {{ic|false}} |
||
| − | * {{ic|1=IPForward=}} IP パケットの転送を有効にします。 |
||
| + | |- |
||
| − | * {{ic|1=Domains=}} DNS によるホスト名解決に使用するドメインのリスト。 |
||
| + | | {{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] ==== |
==== [Address] ==== |
||
| + | {| class = "wikitable" |
||
| − | * {{ic|1=Address=}} 固定の '''IPv4''' または '''IPv6''' アドレスとそのプレフィックス長で、{{ic|/}} を使って区切ります (例: {{ic|192.168.1.90/24}})。DHCP を使用しない場合このオプションは'''必須'''です。 |
||
| + | ! パラメータ !! 説明 !! 受け入れる値 !! デフォルト値 |
||
| + | |- |
||
| + | | {{ic|1=Address=}} || 複数のアドレスを設定するには、このキーを複数回指定してください。DHCP を使用しない限り必須です。指定されたアドレスが(IPv4の 場合) {{ic|0.0.0.0}} または (IPv6 の場合) {{ic|::}} である場合、要求されたサイズの新しいアドレス範囲が、システム全体の未使用範囲のプールから自動的に割り当てられます。 || 固定 IPv4 または IPv6 アドレスとプレフィックス長({{man|3|inet_pton}} を参照) || |
||
| + | |} |
||
==== [Route] ==== |
==== [Route] ==== |
||
| − | * {{ic|1=Gateway=}} |
+ | * {{ic|1=Gateway=}} DHCP を使用しない場合、このオプションは'''必須'''です。 |
| + | * {{ic|1=Destination=}} ルートの宛先プリフィックスです。スラッシュとプリフィックス長を後ろに付けることができます。 |
||
| + | * {{ic|1=Metrics=}} このルートの優先順位 |
||
| + | * {{ic|1=Type=}} ルートの種類 |
||
| + | * {{ic|1=Table=}} ルートのテーブル識別子 |
||
| + | * {{ic|1=GatewayOnLink=}} {{ic|yes}} に設定すると、カーネルは現在のマシンがゲートウェイに直接到達可能か (つまりローカルネットワークに接続されているか) を確認する必要がなくなります。一部のルーティング問題の解決に使用できます。 |
||
| + | {{ic|[Route]}} セクションに {{ic|Destination}} が存在しない場合、デフォルトルートとして扱われます。 |
||
| − | {{Tip|{{ic|1=Address=}} が Address キーだけを含み {{ic|1=Gateway=}} セクションが Gateway キーだけを含む場合、略式表記として {{ic|[Network]}} セクションに {{ic|1=Address=}} と {{ic|1=Gateway=}} キーを記述することができます。}} |
||
| + | {{Tip|{{ic|1=[Address]}} が Address キーだけを含み {{ic|1=[Route]}} セクションが Gateway キーだけを含む場合、略式表記として {{ic|[Network]}} セクションに {{ic|1=Address=}} と {{ic|1=Gateway=}} キーを記述することができます。}} |
||
| − | ==== [DHCP] ==== |
||
| + | ==== [RoutingPolicyRule] ==== |
||
| − | * {{ic|1=UseDomains=true}} systemd-resolved を使用する場合にローカル名の解決を修正します。 |
||
| + | 通常のルーティングアルゴリズムは、パケットをどのゲートウェイに送信するかを選択する際に通常、宛先アドレスのみを考慮します。しかし、より複雑なネットワークではそれだけでは不十分です。 |
||
| − | === netdev ファイル === |
||
| + | {{ic|[RoutingPolicyRule]}} セクションでは、指定された条件に一致するパケットにのみ適用される追加ルールを定義できます。 |
||
| − | このファイルは仮想ネットワークデバイスを作成します。{{ic|.netdev}} ファイルには次のセクションを記述できます: {{ic|[Match]}} と {{ic|[NetDev]}}。以下ではそれぞれのセクションでよく使われる設定キーを説明します。詳しくは {{man|5|systemd.netdev}} を見てください。 |
||
| + | 以下はこれらの条件の非網羅的な一覧です: |
||
| − | ==== [Match] ==== |
||
| − | * {{ic|1= |
+ | * {{ic|1=TypeOfService=}} パケットのサービス種別 (0から255の範囲の整数); |
| + | * {{ic|1=From=}} ソースアドレスのプレフィックス; |
||
| − | * {{ic|1=Virtualization=}} VM の中で実行されているかどうか確認する。 |
||
| + | * {{ic|1=To=}} 宛先アドレスのプレフィックス; |
||
| + | * {{ic|1=FirewallMark=}} iptables ファイアウォールのマーク値; |
||
| + | * {{ic|1=IncomingInterface=}} 受信デバイス; |
||
| + | * {{ic|1=OutgoingInterface=}} 送信デバイス; |
||
| + | その他のオプション: |
||
| − | ==== [NetDev] ==== |
||
| + | * {{ic|1=Type=}} ルーティングポリシーデータベースルールの種類; |
||
| − | * {{ic|1=Name=}} は netdev を作成するときに使うインターフェイスの名前です。このオプションは'''必須'''です。 |
||
| + | * {{ic|1=Table=}} パケットがルールに一致した場合に使用するルーティングテーブル; |
||
| − | * {{ic|1=Kind=}} は netdev の種類になります。現在 ''bridge'', ''bond'', ''vlan'', ''veth'', ''sit'' などがサポートされています。このオプションは'''必須'''です。 |
||
| + | * {{ic|1=Priority=}} ルールの優先順位。ルールは優先順位の昇順で評価されるため、低い優先順位のルールが先に適用されます; |
||
| + | * {{ic|1=InvertRule=}} {{ic|true}} に設定するとルールが反転し、条件を1つも満たさないパケットに適用されます; |
||
| + | * {{ic|1=SuppressPrefixLength=}} プレフィックス長が指定された値以下の場合、そのルールは抑制されます; |
||
| − | === |
+ | ==== [DHCPv4] ==== |
| + | {| class = "wikitable |
||
| − | このファイルはカスタム udev ルールの代わりとなりデバイスが現れた時に [[udev]] によって適用されます。2つのセクションを記述します: {{ic|[Match]}} と {{ic|[Link]}}。以下ではそれぞれのセクションでよく使われる設定キーを説明しています。詳しくは {{man|5|systemd.link}} を参照してください。 |
||
| + | ! パラメータ !! 説明 !! 受け入れる値 !! デフォルト値 |
||
| − | |||
| + | |- |
||
| − | {{Tip|{{ic|.link}} ファイルの問題を診断したいときは {{ic|udevadm test-builtin net_setup_link /sys/path/to/network/device}} を使ってください。}} |
||
| + | | {{ic|1=UseDNS=}} || DHCP サーバにより広告された DNS サーバを使用するかどうかを制御。 || 真偽値 || {{ic|true}} |
||
| − | |||
| + | |- |
||
| − | ==== [Match] ==== |
||
| + | | {{ic|1=Anonymize=}} || true を指定すると、DHCP サーバに送られるオプションが [[RFC:7844]] (Anonymity Profiles for DHCP Clients) に従って、識別情報の開示を最小限にするようになります。 || 真偽値 || {{ic|false}} |
||
| − | |||
| + | |- |
||
| − | * {{ic|1=MACAddress=}} MAC アドレス |
||
| + | | {{ic|1=UseDomains=}} || DHCP サーバから受け取るドメイン名を DNS 検索ドメインとして使用するかどうかを制御。{{ic|route}} に設定すると、DHCP サーバから受け取るドメイン名が DNS クエリにのみ使用され、検索には使用されなくなります。このオプションは、[[systemd-resolved]] を使用している際にはローカルな名前解決を修正する可能性があります。 || 真偽値、{{ic|route}} || {{ic|false}} |
||
| − | * {{ic|1=Host=}} ホストネーム |
||
| + | |- |
||
| − | * {{ic|1=Virtualization=}} |
||
| + | | {{ic|1=IPv6OnlyMode=}} || true に設定すると、DHCP クライアントは DHCP サーバーに対し、IPv6 のみの動作をサポートしていることを通知します([[RFC:8925]]、DHCPv4 の IPv6-Only Preferred オプション)。DHCPv4 サーバーがそのオプションを DHCP 応答で返した場合、クライアントは DHCP 要求を中止し、IPv4 アドレスを取得せず、IPv6 のみのネットワークを設定します。」 || 真偽値 || {{ic|true}} IPv6が有効になっている場合 |
||
| − | * {{ic|1=Type=}} デバイスのタイプ (例: vlan) |
||
| + | |} |
||
| − | |||
| − | ==== [Link] ==== |
||
| − | |||
| − | * {{ic|1=MACAddressPolicy=}} は永続的な MAC アドレスをハードウェアに設定する ''persistent'' (ほとんどのハードウェアはこちらにするべきです) またはデバイスが現れた時にランダムな MAC アドレスを与える ''random'' を指定します。 |
||
| − | * {{ic|1=MACAddress=}} 特定のアドレス。 |
||
| − | |||
| − | {{Note|ほとんどの場合システムの {{ic|/usr/lib/systemd/network/99-default.link}} で基本的に問題ありません。}} |
||
| − | |||
| − | == コンテナでの使用方法 == |
||
| − | |||
| − | {{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}} コマンドの出力を、関連するインターフェイスにだけ絞っています。 |
||
| − | * ''ホスト''は起動しているメインの OS であり、''コンテナ''は仮想マシンのゲストのことです。 |
||
| − | * インターフェイスの名前や IP アドレスは全てあくまでただの例です。 |
||
| − | }} |
||
| + | ==== [DHCPServer] ==== |
||
| − | === 基本的な DHCP ネットワーク === |
||
| + | これは、無線ホットスポットを作成するために [[hostapd]] とうまく連動する DHCP サーバーの設定例です。{{ic|IPMasquerade}} は [[インターネット共有#NAT の有効化|NATを有効にする]] ためのファイアウォールルールを追加し、{{ic|1=IPForward=ipv4}} [[インターネット共有#パケット転送の有効化|パケット転送]] を有効にしています。 |
||
| − | 以下はホストとコンテナで DHCP IP を有効にします。この場合、両方のシステムが同じインターフェイスを共有し、同じ IP を共有します。 |
||
| + | {{Accuracy|{{ic|1=IPMasquerade=true}}は{{ic|filter}} テーブルのルールを追加しません、それらは手動で追加する必要があります。[[systemd-nspawn#仮想イーサネットリンクを使用する]] を参照してください}} |
||
| − | {{hc|/etc/systemd/network/''MyDhcp''.network|<nowiki> |
||
| + | |
||
| + | {{hc|/etc/systemd/network/''wlan0''.network|<nowiki> |
||
[Match] |
[Match] |
||
| − | Name= |
+ | Name=wlan0 |
[Network] |
[Network] |
||
| + | Address=10.1.1.1/24 |
||
| − | DHCP=ipv4 |
||
| + | DHCPServer=true |
||
| + | IPMasquerade=ipv4 |
||
| + | |||
| + | [DHCPServer] |
||
| + | PoolOffset=100 |
||
| + | PoolSize=20 |
||
| + | EmitDNS=yes |
||
| + | DNS=9.9.9.9 |
||
</nowiki>}} |
</nowiki>}} |
||
| + | === netdev ファイル === |
||
| − | そして、コンテナで {{ic|systemd-networkd}} を[[systemd#systemctl の基本的な使い方|起動・有効化]]してください。 |
||
| + | {{Remove|Duplicates the {{man|5|systemd.netdev}} man page.}} |
||
| − | もちろん {{ic|en*}} を {{ic|$ ip link}} コマンドの出力でわかる Ethernet デバイスのフルネームに置き換えることは可能です。 |
||
| + | netdev ファイル群は仮想ネットワークデバイスを作成します。これらのファイルには次のセクションを記述できます: {{ic|[Match]}} と {{ic|[NetDev]}}。以下ではそれぞれのセクションでよく使われる設定キーを説明します。詳細や例は {{man|5|systemd.netdev}} を見てください。 |
||
| − | * ホストとコンテナで: |
||
| + | ==== [Match] セクション ==== |
||
| − | {{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 |
||
| − | }} |
||
| + | * {{ic|1=Host=}} ホストネーム |
||
| − | デフォルトのホストネームは DHCP サーバーから取得され一時的なホストネームとして使用されます。 |
||
| + | * {{ic|1=Virtualization=}} VM の中で実行されているかどうか確認する。 |
||
| − | + | ==== [NetDev] セクション ==== |
|
| − | {{hc|/etc/systemd/network/''MyDhcp''.network|<nowiki> |
||
| − | [DHCPv4] |
||
| − | UseHostname=false |
||
| − | </nowiki>}} |
||
| + | * {{ic|1=Name=}} インターフェイス名。'''必須''' |
||
| − | {{ic|/etc/resolv.conf}} で DNS を設定するかわりに DHCP に設定してもらいたい場合、{{ic|systemd-resolved}} を有効にして {{ic|/run/systemd/resolve/resolv.conf}} から {{ic|/etc/resolv.conf}} にシンボリックリンクを作成してください: |
||
| + | * {{ic|1=Kind=}} 例: ''bridge'', ''bond'', ''vlan'', ''veth'', ''sit''。'''必須''' |
||
| + | == コンテナでの使用方法 == |
||
| − | # systemctl enable systemd-resolved |
||
| − | # ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf |
||
| + | ''systemd-networkd'' は、コンテナ内とホストシステムの両方で使用されている場合、[[systemd-nspawn]] コンテナに対するネットワークの完全自動設定を提供できます。総合的な外観は [[systemd-nspawn#ネットワーキング]] を見てください。 |
||
| − | 詳しくは {{ic|systemd-resolved.service(8)}} を参照。 |
||
| + | 下で説明している設定について、 |
||
| − | {{Note|{{pkg|arch-install-scripts}} の {{ic|/usr/bin/arch-chroot}} を使ってシステムパーティションにアクセスする場合、マウントしたパーティションに対して chroot の外からシンボリックリンクを作成する必要があります。arch-chroot はファイルからライブ環境にリンクを作成するためです。}} |
||
| + | * {{ic|$ ip a}} コマンドの出力を、関連するインターフェイスにだけ絞っています。 |
||
| + | * ''ホスト''は起動しているメインの OS であり、''コンテナ''は仮想マシンのゲストのことです。 |
||
| + | * インターフェイスの名前や IP アドレスは全てあくまでただの例です。 |
||
| − | === |
+ | === DHCP を用いたネットワークブリッジ === |
==== ブリッジインターフェイス ==== |
==== ブリッジインターフェイス ==== |
||
| − | 仮想ブリッジインターフェイスを作成する |
+ | まず、仮想[[ブリッジ]]インターフェイスを作成してください。systemd に、イーサネットブリッジとして機能する、{{ic|br0}} という名前のデバイスを作成するように指示します。 |
| − | {{hc|/etc/systemd/network/'' |
+ | {{hc|/etc/systemd/network/''mybridge''.netdev|2= |
[NetDev] |
[NetDev] |
||
Name=br0 |
Name=br0 |
||
| − | Kind=bridge |
+ | Kind=bridge}} |
| + | |||
| − | </nowiki>}} |
||
| + | オプションとして、ブリッジがブリッジ接続されたインターフェースのいずれかから MAC アドレスを継承するようにするため、{{ic|NetDev}} セクションに {{ic|1=MACAddress=none}} を追加します。これには ''25-br0.link'' ファイルの作成も必要です。 |
||
| + | |||
| + | {{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 はブリッジを作成します。 |
| − | + | 新しく追加したブリッジを見るには、ホストとコンテナ上で以下を実行してください: |
|
{{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 になっている |
+ | インターフェイス {{ic|br0}} が表示されていますが、この段階ではまだ DOWN になっていることに注意してください。 |
==== イーサネットをブリッジに関連付ける ==== |
==== イーサネットをブリッジに関連付ける ==== |
||
| − | + | 次のステップでは、新しく作成したブリッジにネットワークインターフェイスを追加します。以下の例では、{{ic|en*}} という名前にマッチする任意のインターフェイスをブリッジ {{ic|br0}} に追加します。 |
|
| − | {{hc|/etc/systemd/network/'' |
+ | {{hc|/etc/systemd/network/''bind''.network|2= |
[Match] |
[Match] |
||
Name=en* |
Name=en* |
||
| 338行目: | 384行目: | ||
[Network] |
[Network] |
||
Bridge=br0 |
Bridge=br0 |
||
| + | }} |
||
| − | </nowiki>}} |
||
| + | |||
| + | Ethernet インターフェースには DHCP や IP アドレスを割り当ててはいけません。ブリッジは IP アドレスがないインターフェースにバインドする必要があるためです。 |
||
| + | |||
| + | {{Note|他の ''.network'' ファイルが {{ic|1=Name=en*}} でインターフェースを一致させようとしないことを確認してください。インターフェースに一致する最初のファイルのみが適用されます。}} |
||
==== ブリッジネットワーク ==== |
==== ブリッジネットワーク ==== |
||
| + | ブリッジが作成され、既存のネットワークインターフェイスに関連付けられました。ブリッジインターフェイスの 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>}} |
||
| − | ==== |
+ | ==== 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 |
||
| + | }} |
||
| + | ==== コンテナの設定 ==== |
||
| − | ホストとコンテナに別々の IP を割り当てたいので、ホストからコンテナのネットワークを''切断''する必要があります。切断するには、コンテナの起動コマンドに {{ic|1=--network-bridge=br0}} オプションを追加します。 |
||
| + | コンテナを起動する際は {{ic|1=--network-bridge=br0}} オプションを使用してください。詳細は [[systemd-nspawn#ネットワークブリッジを使用する]] を見てください。 |
||
| − | # systemd-nspawn --network-bridge=br0 -bD /path_to/my_container |
||
==== 結果 ==== |
==== 結果 ==== |
||
| 363行目: | 429行目: | ||
{{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 |
||
}} |
}} |
||
| 382行目: | 448行目: | ||
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 |
||
}} |
}} |
||
| 388行目: | 454行目: | ||
==== 注意 ==== |
==== 注意 ==== |
||
| − | * ホストの 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| |
||
| 404行目: | 472行目: | ||
{{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 |
||
}} |
}} |
||
| 411行目: | 479行目: | ||
{{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 |
||
}} |
}} |
||
| 421行目: | 489行目: | ||
}} |
}} |
||
| − | === |
+ | === 静的 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> |
||
| 451行目: | 516行目: | ||
* コンテナ側 |
* コンテナ側 |
||
| + | コンテナに静的 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 |
||
| 459行目: | 526行目: | ||
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 === |
||
| + | |||
| + | ホストが 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 |
||
| + | }} |
||
| + | |||
| + | == ヒントとテクニック == |
||
| + | |||
| + | === 管理やデスクトップの統合 === |
||
| + | |||
| + | ''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 接続の速度が数秒間遅くなります。) を見つけようとしている間に、単純にネゴシエーションが短縮されます。 |
||
| + | |||
| + | === 既存のインターフェースに独自の 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]}} セクションに追加します! |
||
| − | ''networkd'' で [[wpa_supplicant]] を使うように設定した場合、''wpa_cli'' や ''wpa_gui'' を使うことで動的に WLAN インターフェイスを関連付けしたり再設定できます。 |
||
| + | この時点で、新しい MAC アドレスをルーターに認識させ、その MAC アドレスを受け入れるように設定するための簡単な方法として、例えば {{ic|sudo arping -I eth210 192.168.132.1}} を実行できます。ルーターで "新しいデバイス" の設定をした後、例えば {{ic|curl --interface 192.168.132.210 ifconfig.me}} を実行して、新しいインターフェースがインターネットに接続できるかどうかをテストできます。このコマンドは、あなたの公開 IP アドレスを表示するはずです。 |
||
| − | [https://github.com/wavexx/networkd-notify networkd-notify] はネットワークインターフェイスの状態の変化にあわせてシンプルな通知を生成します (接続・切断や再関連付けなど)。 |
||
== 参照 == |
== 参照 == |
||
| + | * {{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) |
||
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)