「Systemd-networkd」の版間の差分
(同期) |
(同期) |
||
29行目: | 29行目: | ||
* {{ic|systemd-resolved.service}} |
* {{ic|systemd-resolved.service}} |
||
− | {{Note|''systemd-resolved'' が必要になるのは ''.network'' ファイルで DNS エントリを指定したり、networkd の DHCP クライアントから DNS アドレスを取得する場合です。}} |
+ | {{Note|''systemd-resolved'' が必要になるのは ''.network'' ファイルで DNS エントリを指定したり、networkd の DHCP クライアントから DNS アドレスを取得する場合です。もしくは {{ic|1=/etc/resolv.conf}} を手動で管理することもできます。}} |
− | [[resolv.conf]] の互換性のために、既存のファイルを削除または名前変更して以下のシンボリックリンクを作成してください: |
+ | [[resolv.conf]] の互換性のために、既存のファイルを削除または名前変更して以下のシンボリックリンクを作成してください (systemd-resolved を使用する場合): |
# ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf |
# ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf |
||
42行目: | 42行目: | ||
{{Note|ホストネームを指定しているとき、たとえ {{ic|.network}} ファイルに {{ic|1=UseDomains=yes}} や {{ic|1=Domains=[domain-list]}} を設定している場合 ({{ic|resolv.conf}} に {{ic|search [domain-list]}} が作成されます) でも、Systemd の {{ic|resolve}} はローカルドメインを検索しません。この問題を解決するには: |
{{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]}} オプションを削除する)。 |
||
* 完全修飾ドメイン名を使うようにする。 |
* 完全修飾ドメイン名を使うようにする。 |
||
* {{ic|/etc/hosts}} を使ってホストネームを解決する。 |
* {{ic|/etc/hosts}} を使ってホストネームを解決する。 |
||
54行目: | 55行目: | ||
# systemctl restart systemd-networkd |
# systemctl restart systemd-networkd |
||
+ | {{Note| |
||
− | {{Note|以下の例では、'''enp1s0''' が有線アダプタ、'''wlp2s0''' が無線アダプタです。環境によって名前は変わります。}} |
||
+ | * 以下の例では、{{ic|enp1s0}} が有線アダプタ、{{ic|wlp2s0}} が無線アダプタです。環境によって名前は変わります。 |
||
+ | * IPv6 を無効化したい場合、ルーターが IPv6 を喧伝しているときは {{ic|[Network]}} セクションに {{ic|1=IPv6AcceptRA=false}} を追加する必要があります。}} |
||
==== 有線アダプタで DHCP を使用 ==== |
==== 有線アダプタで DHCP を使用 ==== |
||
75行目: | 78行目: | ||
}} |
}} |
||
− | DNS サーバーやブロードキャストアドレスを指定するネットワークオプションは {{ic|systemd.network(5)}} の man ページを見て下さい。 |
+ | IP アドレスを複数指定することもできます。{{ic|1=Address=}} 行を追加して IPv6 アドレスを指定してください。DNS サーバーやブロードキャストアドレスを指定するネットワークオプションは {{ic|systemd.network(5)}} の man ページを見て下さい。 |
==== 無線アダプタ ==== |
==== 無線アダプタ ==== |
||
− | 先に触れた通り、''systemd-networkd'' で無線ネットワークに接続するには、[[wpa_supplicant]] など別のサービスで無線アダプタを設定してから適当なサービスを有効にしてください。以下の例では、{{ic|wpa_supplicant@wlp2s0.service}} としています。 |
+ | 先に触れた通り、''systemd-networkd'' で無線ネットワークに接続するには、[[wpa_supplicant]] など別のサービスで無線アダプタを設定してから適当なサービスを有効にしてください。以下の例では、{{ic|wpa_supplicant@wlp2s0.service}} としています。以下のサービスは {{ic|/etc/wpa_supplicant/wpa_supplicant-wlp2s0.conf}} 設定ファイルを使って ''wpa_supplicant'' を起動します。ファイルが存在しなかった場合、サービスは起動しません。 |
{{hc|/etc/systemd/network/''wireless''.network|<nowiki> |
{{hc|/etc/systemd/network/''wireless''.network|<nowiki> |
||
120行目: | 123行目: | ||
</nowiki>}} |
</nowiki>}} |
||
− | ==== |
+ | ==== インターフェイスの名前を変更 ==== |
+ | [[ネットワーク設定#デバイス名の変更|udev ルールを編集]]するかわりに {{ic|.link}} ファイルを使ってインターフェイスの名前を変更できます。MAC アドレスに基づいて USB-to-Ethernet アダプタに予測可能なインターフェイス名を設定する例 (通常は接続された USB 端子によって名前が変わってしまいます): |
||
− | IPv6 を使用する場合、{{ic|IPv6PrivacyExtensions}} オプションも設定すると良いでしょう。{{ic|/etc/sysctl.d/40-ipv6.conf}} の設定は反映されません。 |
||
− | {{hc|/etc/systemd/network/ |
+ | {{hc|head=/etc/systemd/network/10-ethusb0.link|output= |
[Match] |
[Match] |
||
+ | MACAddress=12:34:56:78:90:ab |
||
− | Name=wlp2s0 |
||
− | [ |
+ | [Link] |
+ | Description=USB to Ethernet Adapter |
||
− | DHCP=yes |
||
+ | Name=ethusb0 |
||
− | IPv6PrivacyExtensions=true |
||
+ | }} |
||
+ | {{Note|ユーザーが作成した {{ic|.link}} ファイルが先に有効になるように、デフォルト設定の {{ic|99-default.link}} よりも辞書的に早い順番になるような名前を付けてください。例えば、{{ic|ethusb0.link}} という名前を付けたい場合は {{ic|10-ethusb0.link}} としてください。}} |
||
− | [DHCP] |
||
− | RouteMetric=20 |
||
− | </nowiki>}} |
||
== 設定ファイル == |
== 設定ファイル == |
||
140行目: | 142行目: | ||
設定ファイルは {{ic|/usr/lib/systemd/network}} から、そして一時的な実行時のネットワークディレクトリ {{ic|/run/systemd/network}} とローカルのネットワーク管理ディレクトリ {{ic|/etc/systemd/network}} から読み込まれます。{{ic|/etc/systemd/network}} 内のファイルが一番優先されます。 |
設定ファイルは {{ic|/usr/lib/systemd/network}} から、そして一時的な実行時のネットワークディレクトリ {{ic|/run/systemd/network}} とローカルのネットワーク管理ディレクトリ {{ic|/etc/systemd/network}} から読み込まれます。{{ic|/etc/systemd/network}} 内のファイルが一番優先されます。 |
||
− | 3つのタイプの設定ファイルが存在します。 |
+ | 3つのタイプの設定ファイルが存在します。ファイルのフォーマットは [[systemd#カスタム .service ファイルを書く|systemd のユニットファイル]]と似ています。 |
* '''.network''' ファイル。''マッチする''デバイスにネットワーク設定を適用します。 |
* '''.network''' ファイル。''マッチする''デバイスにネットワーク設定を適用します。 |
||
150行目: | 152行目: | ||
* {{ic|[Match]}} セクションの'''全ての'''条件がマッチすれば、プロファイルが有効になります。 |
* {{ic|[Match]}} セクションの'''全ての'''条件がマッチすれば、プロファイルが有効になります。 |
||
* 空の {{ic|[Match]}} セクションはどんな場合でもそのセクションを適用することを示します (いわば {{ic|*}} ジョーカーのようなものです)。 |
* 空の {{ic|[Match]}} セクションはどんな場合でもそのセクションを適用することを示します (いわば {{ic|*}} ジョーカーのようなものです)。 |
||
− | * それぞれのエントリは {{ic|1=NAME=VALUE}} 構文によるキーです。 |
||
* 全ての設定ファイルは辞書順でまとめてソートされ処理されます。ファイルがどのディレクトリにあるかは関係ありません。 |
* 全ての設定ファイルは辞書順でまとめてソートされ処理されます。ファイルがどのディレクトリにあるかは関係ありません。 |
||
* 同じ名前のファイルは互いを置き換えます。 |
* 同じ名前のファイルは互いを置き換えます。 |
||
164行目: | 165行目: | ||
このファイルはネットワーク設定の変数の設定、特にサーバーとコンテナの設定のために存在します。 |
このファイルはネットワーク設定の変数の設定、特にサーバーとコンテナの設定のために存在します。 |
||
+ | {{ic|.network}} ファイルには次のセクションを記述できます: {{ic|[Match]}}, {{ic|[Link]}}, {{ic|[Network]}}, {{ic|[Address]}}, {{ic|[Route]}}, {{ic|[DHCP]}}。以下ではそれぞれのセクションでよく使われる設定キーを説明します。詳しくは {{man|5|systemd.network}} を見てください。 |
||
− | 以下は基本的な構造の {{ic|''MyProfile''.network}} ファイルになります: |
||
− | |||
− | {{hc|/etc/systemd/network/''MyProfile''.network| |
||
− | [Match] |
||
− | ''a vertical list of keys'' |
||
− | |||
− | [Network] |
||
− | ''a vertical list of keys'' |
||
− | |||
− | [Address] |
||
− | ''a vertical list of keys'' |
||
− | |||
− | [Route] |
||
− | ''a vertical list of keys'' |
||
− | }} |
||
− | |||
− | ==== [Match] セクション ==== |
||
+ | ==== [Match] ==== |
||
− | よく使われるキーは: |
||
− | * {{ic|1=Name=}} デバイスの名前 |
+ | * {{ic|1=Name=}} デバイスの名前 |
* {{ic|1=Host=}} マシンのホストネーム |
* {{ic|1=Host=}} マシンのホストネーム |
||
* {{ic|1=Virtualization=}} システムが仮想化環境で起動されているかどうかをチェックします。{{ic|1=Virtualization=no}} キーはホストマシンでのみ適用され、逆に {{ic|1=Virtualization=yes}} はコンテナや VM で適用されます。 |
* {{ic|1=Virtualization=}} システムが仮想化環境で起動されているかどうかをチェックします。{{ic|1=Virtualization=no}} キーはホストマシンでのみ適用され、逆に {{ic|1=Virtualization=yes}} はコンテナや VM で適用されます。 |
||
− | ==== [Link] |
+ | ==== [Link] ==== |
− | |||
− | よく使われるキーは: |
||
* {{ic|1=MACAddress=}} [[MAC_アドレス偽装#方法 1: systemd-networkd|MAC アドレスを偽装]]することができます。 |
* {{ic|1=MACAddress=}} [[MAC_アドレス偽装#方法 1: systemd-networkd|MAC アドレスを偽装]]することができます。 |
||
* {{ic|1=MTUBytes=}} 最大転送単位をバイトで指定 (K, M, G を後ろに付けることができ、1024の倍数として認識されます)。MTU の値を大きくすることでネットワークの転送速度を速くすることが可能です ([[ジャンボフレーム]])。 |
* {{ic|1=MTUBytes=}} 最大転送単位をバイトで指定 (K, M, G を後ろに付けることができ、1024の倍数として認識されます)。MTU の値を大きくすることでネットワークの転送速度を速くすることが可能です ([[ジャンボフレーム]])。 |
||
− | ==== [Network] |
+ | ==== [Network] ==== |
+ | * {{ic|1=DHCP=}} DHCP クライアントを有効にします。 |
||
− | よく使われるキーは: |
||
+ | * {{ic|1=DNS=}} DNS サーバーのアドレス |
||
− | |||
+ | * {{ic|1=Bridge=}} ブリッジの名前 |
||
− | * {{ic|1=DHCP=}} は [[Wikipedia:ja:Dynamic Host Configuration Protocol|DHCPv4]] や DHCPv6 サポートを有効にします。{{ic|yes}}, {{ic|no}}, {{ic|ipv4}}, {{ic|ipv6}} が設定できます。 |
||
+ | * {{ic|1=IPForward=}} IP パケットの転送を有効にします。 |
||
− | * {{ic|1=DNS=}} は [[Wikipedia:ja:Domain Name System|DNS]] サーバーのアドレスです。このオプションは複数個指定することができます。 |
||
− | * {{ic|1=Bridge=}} はリンクに追加するブリッジの名前です。 |
||
− | * {{ic|1=IPForward=}} は IP フォワーディングを有効にして、ルーティングテーブルに基づいてフォワーディングを実行します。[[インターネット共有]]を設定する場合は必須になります。設定できる値は: {{ic|yes}}, {{ic|no}}, {{ic|ipv4}}, {{ic|ipv6}}, {{ic|kernel}}。{{ic|1=IPForward}} のデフォルトは 0 となっており、''.network'' ファイルで {{ic|1=IPForward}} の設定をしないかぎり、たとえ {{ic|sysctl}} を使ったり {{ic|/proc/sys}} に書き込んだりして IP フォワーディングをオンにしていても、インターフェイスの IP フォワーディングはオフになります。 |
||
* {{ic|1=Domains=}} DNS によるホスト名解決に使用するドメインのリスト。 |
* {{ic|1=Domains=}} DNS によるホスト名解決に使用するドメインのリスト。 |
||
+ | ==== [Address] ==== |
||
− | 詳しくは {{ic|systemd.network(5)}} を参照。 |
||
+ | * {{ic|1=Address=}} 固定の '''IPv4''' または '''IPv6''' アドレスとそのプレフィックス長で、{{ic|/}} を使って区切ります (例: {{ic|192.168.1.90/24}})。DHCP を使用しない場合このオプションは'''必須'''です。 |
||
− | ==== [Address] セクション ==== |
||
− | {{ic|[Address]}} セクションでよく使われるキーは: |
||
+ | ==== [Route] ==== |
||
− | * {{ic|1=Address=}} は固定の '''IPv4''' または '''IPv6''' アドレスとそのプレフィックス長で、{{ic|/}} を使って区切ります (例: {{ic|192.168.1.90/24}})。このオプションは'''必須'''です。 |
||
+ | * {{ic|1=Gateway=}} はマシンのゲートウェイのアドレスです。DHCP を使用しない場合このオプションは'''必須'''です。 |
||
− | ==== [Route] セクション ==== |
||
− | {{ic|[Route]}} セクションでよく使われるキーは: |
||
+ | {{Tip|{{ic|1=Address=}} が Address キーだけを含み {{ic|1=Gateway=}} セクションが Gateway キーだけを含む場合、略式表記として {{ic|[Network]}} セクションに {{ic|1=Address=}} と {{ic|1=Gateway=}} キーを記述することができます。}} |
||
− | * {{ic|1=Gateway=}} はマシンのゲートウェイのアドレスです。このオプションは'''必須'''です。 |
||
− | 完全なキーのリストについては、{{ic|systemd.network(5)}} を参照してください。 |
||
+ | ==== [DHCP] ==== |
||
− | {{Tip|{{ic|1=Address=}} が Address キーだけを含み {{ic|1=Gateway=}} セクションが Gateway キーだけを含む場合、略式表記として {{ic|[Network]}} セクションに {{ic|1=Address=}} と {{ic|1=Gateway=}} キーを記述することができます。 |
||
+ | |||
− | }} |
||
+ | * {{ic|1=UseDomains=true}} systemd-resolved を使用する場合にローカル名の解決を修正します。 |
||
=== netdev ファイル === |
=== netdev ファイル === |
||
− | このファイルは仮想ネットワークデバイスを作成します。 |
+ | このファイルは仮想ネットワークデバイスを作成します。{{ic|.netdev}} ファイルには次のセクションを記述できます: {{ic|[Match]}} と {{ic|[NetDev]}}。以下ではそれぞれのセクションでよく使われる設定キーを説明します。詳しくは {{man|5|systemd.netdev}} を見てください。 |
+ | ==== [Match] ==== |
||
− | 以下は基本的な構造の ''Mydevice''.netdev ファイルになります: |
||
+ | * {{ic|1=Host=}} ホストネーム |
||
− | {{hc|/etc/systemd/network/''MyDevice''.netdev| |
||
+ | * {{ic|1=Virtualization=}} VM の中で実行されているかどうか確認する。 |
||
− | [Match] |
||
− | ''a vertical list of keys'' |
||
− | [NetDev] |
+ | ==== [NetDev] ==== |
− | ''a vertical list of keys'' |
||
− | }} |
||
− | |||
− | ==== [Match] セクション ==== |
||
− | |||
− | よく使われるキーは {{ic|1=Host=}} と {{ic|1=Virtualization=}} です。 |
||
− | |||
− | ==== [NetDev] セクション ==== |
||
− | |||
− | よく使われるキーは: |
||
* {{ic|1=Name=}} は netdev を作成するときに使うインターフェイスの名前です。このオプションは'''必須'''です。 |
* {{ic|1=Name=}} は netdev を作成するときに使うインターフェイスの名前です。このオプションは'''必須'''です。 |
||
* {{ic|1=Kind=}} は netdev の種類になります。現在 ''bridge'', ''bond'', ''vlan'', ''veth'', ''sit'' などがサポートされています。このオプションは'''必須'''です。 |
* {{ic|1=Kind=}} は netdev の種類になります。現在 ''bridge'', ''bond'', ''vlan'', ''veth'', ''sit'' などがサポートされています。このオプションは'''必須'''です。 |
||
− | |||
− | 完全なキーのリストについては、{{ic|systemd.netdev(5)}} を参照してください。 |
||
=== link ファイル === |
=== link ファイル === |
||
− | このファイルはカスタム udev ルールの代わりとなりデバイスが現れた時に [[ |
+ | このファイルはカスタム udev ルールの代わりとなりデバイスが現れた時に [[udev]] によって適用されます。2つのセクションを記述します: {{ic|[Match]}} と {{ic|[Link]}}。以下ではそれぞれのセクションでよく使われる設定キーを説明しています。詳しくは {{man|5|systemd.link}} を参照してください。 |
− | |||
− | 以下は基本的な構造の ''Mydevice''.link ファイルになります: |
||
− | |||
− | {{hc|/etc/systemd/network/''MyDevice''.link| |
||
− | [Match] |
||
− | ''a vertical list of keys'' |
||
− | |||
− | [Link] |
||
− | ''a vertical list of keys'' |
||
− | }} |
||
− | |||
− | {{ic|[Link]}} セクションでデバイスの設定を指定した場合、{{ic|[Match]}} セクションは指定した link ファイルが指定したデバイスに適用できるかどうかを決めます。 |
||
− | |||
− | ==== [Match] セクション ==== |
||
− | |||
− | よく使われるキーは {{ic|1=MACAddress=}}, {{ic|1=Host=}}, {{ic|1=Virtualization=}} です。 |
||
+ | {{Tip|{{ic|.link}} ファイルの問題を診断したいときは {{ic|udevadm test-builtin net_setup_link /sys/path/to/network/device}} を使ってください。}} |
||
− | {{ic|1=Type=}} はデバイスのタイプです (例: vlan) |
||
− | ==== [ |
+ | ==== [Match] ==== |
+ | * {{ic|1=MACAddress=}} MAC アドレス |
||
− | よく使われるキーは: |
||
+ | * {{ic|1=Host=}} ホストネーム |
||
+ | * {{ic|1=Virtualization=}} |
||
+ | * {{ic|1=Type=}} デバイスのタイプ (例: vlan) |
||
+ | ==== [Link] ==== |
||
− | {{ic|1=MACAddressPolicy=}} は永続的な MAC アドレスをハードウェアに設定する ''persistent'' (ほとんどのハードウェアはこちらにするべきです) またはデバイスが現れた時にランダムな MAC アドレスを与える ''random'' を指定します。 |
||
+ | * {{ic|1=MACAddressPolicy=}} は永続的な MAC アドレスをハードウェアに設定する ''persistent'' (ほとんどのハードウェアはこちらにするべきです) またはデバイスが現れた時にランダムな MAC アドレスを与える ''random'' を指定します。 |
||
− | {{ic|1=MACAddressPolicy=}} を指定しなかった場合は {{ic|1=MACAddress=}} を使います。 |
||
+ | * {{ic|1=MACAddress=}} 特定のアドレス。 |
||
{{Note|ほとんどの場合システムの {{ic|/usr/lib/systemd/network/99-default.link}} で基本的に問題ありません。}} |
{{Note|ほとんどの場合システムの {{ic|/usr/lib/systemd/network/99-default.link}} で基本的に問題ありません。}} |
||
348行目: | 302行目: | ||
詳しくは {{ic|systemd-resolved.service(8)}} を参照。 |
詳しくは {{ic|systemd-resolved.service(8)}} を参照。 |
||
+ | |||
+ | {{Note|{{pkg|arch-install-scripts}} の {{ic|/usr/bin/arch-chroot}} を使ってシステムパーティションにアクセスする場合、マウントしたパーティションに対して chroot の外からシンボリックリンクを作成する必要があります。arch-chroot はファイルからライブ環境にリンクを作成するためです。}} |
||
=== 2つの別々な IP で DHCP を使う === |
=== 2つの別々な IP で DHCP を使う === |
||
506行目: | 462行目: | ||
Et voila! |
Et voila! |
||
+ | |||
+ | == 管理やデスクトップの統合 == |
||
+ | |||
+ | ''systemd-networkd'' にはコマンドラインや GUI によるインタラクティブな管理インターフェイスがありません。''networkctl'' はネットワークインターフェイスの状態を出力するだけです。 |
||
+ | |||
+ | ''networkd'' で [[wpa_supplicant]] を使うように設定した場合、''wpa_cli'' や ''wpa_gui'' を使うことで動的に WLAN インターフェイスを関連付けしたり再設定できます。 |
||
+ | |||
+ | [https://github.com/wavexx/networkd-notify networkd-notify] はネットワークインターフェイスの状態の変化にあわせてシンプルな通知を生成します (接続・切断や再関連付けなど)。 |
||
== 参照 == |
== 参照 == |
2016年12月29日 (木) 23:37時点における版
バージョン 210 から、systemd は udev と networkd による基本的なネットワーク設定のサポートを含むようになりました。
systemd-networkd はネットワーク設定を管理するシステムデーモンです。ネットワークデバイスが立ち上がるとそれを検出して設定を行い、仮想ネットワークデバイスを作成することもできます。このサービスは netctl などの通常のネットワーク管理ツールと一緒に動かすことが可能で、仮想化する場合、設定によってはツールを置き換えることもできます。特に systemd-nspawn で管理するコンテナのための基本的な、もしくは複雑なネットワーク設定 (固定 IP、ブリッジ、vlan など) を設定する場合にこのサービスはとても役に立ちます。
基本的な使い方
systemd パッケージは Arch ではデフォルトでインストールされており、有線ネットワークに接続するために必要なファイルは全て揃っています。後で述べているように、wpa_supplicant など他のサービスを使うことで無線アダプタを設定することもできます。
必要なサービスと設定
systemd-networkd を使用するには、以下の2つのサービスを起動して、システムのブート時に実行されるように有効化する必要があります:
systemd-networkd.service
systemd-resolved.service
resolv.conf の互換性のために、既存のファイルを削除または名前変更して以下のシンボリックリンクを作成してください (systemd-resolved を使用する場合):
# ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
さらに、systemd-resolved のローカル DNS スタブリゾルバ (インターフェイスごとに LLMNR や DNS マージングが使われます) を使うために、/etc/nsswitch.conf
の dns
を resolve
に置き換えます:
hosts: files resolve myhostname
man systemd-resolved
や man resolved.conf
、または Systemd README を参照してください。
設定ファイルの例
このセクションにおける設定はすべて /etc/systemd/network
の中に foo.network
として保存します。利用できるオプションや処理の順番については、#設定ファイル や systemd.network
の man ページを見て下さい。
まずシステムのデバイス名を知る必要があります。昔は、eth0
がシステム上の1番目の NIC に付けられていましたが、現在 udev は別の名前を使用するようになっています。networkctl list
を使ってシステム上のデバイスを確認してください。
設定ファイルに変更を加えたら、networkd デーモンをリロードしてください:
# systemctl restart systemd-networkd
有線アダプタで DHCP を使用
/etc/systemd/network/wired.network
[Match] Name=enp1s0 [Network] DHCP=ipv4
有線アダプタで固定 IP を使用
/etc/systemd/network/wired.network
[Match] Name=enp1s0 [Network] Address=10.1.10.9/24 Gateway=10.1.10.1
IP アドレスを複数指定することもできます。Address=
行を追加して IPv6 アドレスを指定してください。DNS サーバーやブロードキャストアドレスを指定するネットワークオプションは systemd.network(5)
の man ページを見て下さい。
無線アダプタ
先に触れた通り、systemd-networkd で無線ネットワークに接続するには、wpa_supplicant など別のサービスで無線アダプタを設定してから適当なサービスを有効にしてください。以下の例では、wpa_supplicant@wlp2s0.service
としています。以下のサービスは /etc/wpa_supplicant/wpa_supplicant-wlp2s0.conf
設定ファイルを使って wpa_supplicant を起動します。ファイルが存在しなかった場合、サービスは起動しません。
/etc/systemd/network/wireless.network
[Match] Name=wlp2s0 [Network] DHCP=ipv4
無線アダプタで固定 IP アドレスを使っている場合、設定は (インターフェイス名を除いて) 有線アダプタと同じになります。
同一マシンで有線アダプタと無線アダプタ両方を使用
以下の設定では、Metric ディレクティブを使用して、有線と無線両方の接続で DHCP IP を有効にしており、カーネルがオンザフライでどちらを使うか決定します。有線接続が切断されると、即座に無線に切り替わります。接続が途切れることはありません。
システム上の無線・有線どちらのデバイスも有効な接続がある場合、カーネルのルートメトリック (ip で設定するのと同一) がパケットを送るのにどちらのルートを使用するか決定します。均衡状態を破るために、カーネルはメトリックを使います。メトリックの良い所は、どちらかが使えなくなったときに、自動的にもう片方が有効になることです。
/etc/systemd/network/wired.network
[Match] Name=enp1s0 [Network] DHCP=ipv4 [DHCP] RouteMetric=10
/etc/systemd/network/wireless.network
[Match] Name=wlp2s0 [Network] DHCP=ipv4 [DHCP] RouteMetric=20
インターフェイスの名前を変更
udev ルールを編集するかわりに .link
ファイルを使ってインターフェイスの名前を変更できます。MAC アドレスに基づいて USB-to-Ethernet アダプタに予測可能なインターフェイス名を設定する例 (通常は接続された USB 端子によって名前が変わってしまいます):
/etc/systemd/network/10-ethusb0.link
[Match] MACAddress=12:34:56:78:90:ab [Link] Description=USB to Ethernet Adapter Name=ethusb0
設定ファイル
設定ファイルは /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]
, [DHCP]
。以下ではそれぞれのセクションでよく使われる設定キーを説明します。詳しくは systemd.network(5) を見てください。
[Match]
Name=
デバイスの名前Host=
マシンのホストネームVirtualization=
システムが仮想化環境で起動されているかどうかをチェックします。Virtualization=no
キーはホストマシンでのみ適用され、逆にVirtualization=yes
はコンテナや VM で適用されます。
[Link]
MACAddress=
MAC アドレスを偽装することができます。MTUBytes=
最大転送単位をバイトで指定 (K, M, G を後ろに付けることができ、1024の倍数として認識されます)。MTU の値を大きくすることでネットワークの転送速度を速くすることが可能です (ジャンボフレーム)。
[Network]
DHCP=
DHCP クライアントを有効にします。DNS=
DNS サーバーのアドレスBridge=
ブリッジの名前IPForward=
IP パケットの転送を有効にします。Domains=
DNS によるホスト名解決に使用するドメインのリスト。
[Address]
Address=
固定の IPv4 または IPv6 アドレスとそのプレフィックス長で、/
を使って区切ります (例:192.168.1.90/24
)。DHCP を使用しない場合このオプションは必須です。
[Route]
Gateway=
はマシンのゲートウェイのアドレスです。DHCP を使用しない場合このオプションは必須です。
[DHCP]
UseDomains=true
systemd-resolved を使用する場合にローカル名の解決を修正します。
netdev ファイル
このファイルは仮想ネットワークデバイスを作成します。.netdev
ファイルには次のセクションを記述できます: [Match]
と [NetDev]
。以下ではそれぞれのセクションでよく使われる設定キーを説明します。詳しくは systemd.netdev(5) を見てください。
[Match]
Host=
ホストネームVirtualization=
VM の中で実行されているかどうか確認する。
[NetDev]
Name=
は netdev を作成するときに使うインターフェイスの名前です。このオプションは必須です。Kind=
は netdev の種類になります。現在 bridge, bond, vlan, veth, sit などがサポートされています。このオプションは必須です。
link ファイル
このファイルはカスタム udev ルールの代わりとなりデバイスが現れた時に udev によって適用されます。2つのセクションを記述します: [Match]
と [Link]
。以下ではそれぞれのセクションでよく使われる設定キーを説明しています。詳しくは systemd.link(5) を参照してください。
[Match]
MACAddress=
MAC アドレスHost=
ホストネームVirtualization=
Type=
デバイスのタイプ (例: vlan)
[Link]
MACAddressPolicy=
は永続的な MAC アドレスをハードウェアに設定する persistent (ほとんどのハードウェアはこちらにするべきです) またはデバイスが現れた時にランダムな MAC アドレスを与える random を指定します。MACAddress=
特定のアドレス。
コンテナでの使用方法
systemd 210 以上でサービスが利用可能です。ホストやコンテナで systemd-networkd.service
を有効化・起動することができます。
デバッグするときのために bridge-utils, net-tools, iproute2 パッケージをインストールすることが強く推奨されます。
systemd-nspawn を使用する場合、ネットワーク設定によっては、systemd-nspawn@.service
を編集して ExecStart
行にブートオプションを追加する必要があります。オプションの完全なリストは man 1 systemd-nspawn
を参照してください。
DHCP による自動 DNS 設定を利用したい場合は、systemd-resolved
を有効にして /run/systemd/resolve/resolv.conf
から /etc/resolv.conf
にシンボリックリンクを張る必要があります。詳しくは systemd-resolved.service(8)
を見て下さい。
基本的な DHCP ネットワーク
以下はホストとコンテナで DHCP IP を有効にします。この場合、両方のシステムが同じインターフェイスを共有し、同じ IP を共有します。
/etc/systemd/network/MyDhcp.network
[Match] Name=en* [Network] DHCP=ipv4
そして、コンテナで systemd-networkd
を起動・有効化してください。
もちろん en*
を $ ip link
コマンドの出力でわかる Ethernet デバイスのフルネームに置き換えることは可能です。
- ホストとコンテナで:
$ ip a
2: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 14:da:e9:b5:7a:88 brd ff:ff:ff:ff:ff:ff inet 192.168.1.72/24 brd 192.168.1.255 scope global enp7s0 valid_lft forever preferred_lft forever inet6 fe80::16da:e9ff:feb5:7a88/64 scope link valid_lft forever preferred_lft forever
デフォルトのホストネームは DHCP サーバーから取得され一時的なホストネームとして使用されます。
変更するには [DHCPv4]
セクションに UseHostname=false
を追加してください:
/etc/systemd/network/MyDhcp.network
[DHCPv4] UseHostname=false
/etc/resolv.conf
で DNS を設定するかわりに DHCP に設定してもらいたい場合、systemd-resolved
を有効にして /run/systemd/resolve/resolv.conf
から /etc/resolv.conf
にシンボリックリンクを作成してください:
# systemctl enable systemd-resolved # ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
詳しくは systemd-resolved.service(8)
を参照。
2つの別々な IP で DHCP を使う
ブリッジインターフェイス
仮想ブリッジインターフェイスを作成する:
/etc/systemd/network/MyBridge.netdev
[NetDev] Name=br0 Kind=bridge
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 になっているので注意してください。
イーサネットをブリッジに関連付ける
/etc/systemd/network/MyDhcp.network
を編集して DHCP を削除します。ブリッジはどの IP にもバインドされないインターフェイスが必要なので、このデバイスを br0 にバインドするキーを追加してください。名前を適切なものに変更しましょう。
/etc/systemd/network/MyEth.network
[Match] Name=en* [Network] Bridge=br0
ブリッジネットワーク
ブリッジのネットワークプロファイルを作成:
/etc/systemd/network/MyBridge.network
[Match] Name=br0 [Network] DHCP=ipv4
コンテナを起動するオプションを追加する
ホストとコンテナに別々の IP を割り当てたいので、ホストからコンテナのネットワークを切断する必要があります。切断するには、コンテナの起動コマンドに --network-bridge=br0
オプションを追加します。
# systemd-nspawn --network-bridge=br0 -bD /path_to/my_container
結果
- ホスト側
$ ip a
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 14:da:e9:b5:7a:88 brd ff:ff:ff:ff:ff:ff inet 192.168.1.87/24 brd 192.168.1.255 scope global br0 valid_lft forever preferred_lft forever inet6 fe80::16da:e9ff:feb5:7a88/64 scope link valid_lft forever preferred_lft forever 6: vb-MyContainer: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000 link/ether d2:7c:97:97:37:25 brd ff:ff:ff:ff:ff:ff inet6 fe80::d07c:97ff:fe97:3725/64 scope link valid_lft forever preferred_lft forever
- コンテナ側
$ ip a
2: host0: <BROADCAST,MULTICAST,ALLMULTI,AUTOMEDIA,NOTRAILERS,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 5e:96:85:83:a8:5d brd ff:ff:ff:ff:ff:ff inet 192.168.1.73/24 brd 192.168.1.255 scope global host0 valid_lft forever preferred_lft forever inet6 fe80::5c96:85ff:fe83:a85d/64 scope link valid_lft forever preferred_lft forever
注意
- ホストの br0 と、コンテナの host0 にそれぞれ IP アドレスが割り当てられました。
- 2つの新しいインターフェイスが作成されます: ホストの
vb-MyContainer
とコンテナのhost0
です。これは--network-bridge=br0
オプションによるものです。このオプションには--network-veth
という別のオプションも含まれており、ホストとコンテナの間に仮想イーサネットリンクが作成されます。 host0
の DHCP アドレスはシステムの/usr/lib/systemd/network/80-container-host0.network
ファイルから由来します。- ホスト側
$ brctl show
bridge name bridge id STP enabled interfaces br0 8000.14dae9b57a88 no enp7s0 vb-MyContainer
上記のコマンドの出力で2つのインターフェイスがバインドされたブリッジが確認できます。
- ホスト側
$ ip route
default via 192.168.1.254 dev br0 192.168.1.0/24 dev br0 proto kernel scope link src 192.168.1.87
- コンテナ側
$ ip route
default via 192.168.1.254 dev host0 192.168.1.0/24 dev host0 proto kernel scope link src 192.168.1.73
上記のコマンドの出力で IP アドレスとゲートウェイが 192.168.1.254 の br0
と host0
インターフェイスが有効になったのが確認できます。ゲートウェイのアドレスは systemd-networkd によって自動的に取得されます。
$ cat /run/systemd/resolve/resolv.conf
nameserver 192.168.1.254
固定 IP ネットワーク
ウェブサービス (例: FTP, http, SSH) を動かしている場合、デバイスごとに固定 IP を設定するのが役に立つかもしれません。システムの /usr/lib/systemd/network/99-default.link
ファイルに MACAddressPolicy=persistent
オプションがあれば (デフォルトの設定)、各デバイスは再起動しても同じ MAC アドレスを維持します。つまり、ゲートウェイのサービスを簡単に適切なデバイスに設定することができます。
まず、システムの /usr/lib/systemd/network/80-container-host0.network
ファイルを除去します。永続的にするために (例: アップグレードしても変わらないように)、コンテナで以下の設定を行なって下さい。これによって /etc/systemd/network
の同じ名前のファイルが /usr/lib/systemd/network
のファイルよりも優先されるため /usr/lib/systemd/network/80-container-host0.network
ファイルがマスクされます。
# ln -sf /dev/null /etc/systemd/network/80-container-host0.network
次に、コンテナで systemd-networkd
を有効化・起動してください。
必要な設定ファイル:
- ホスト側
/etc/systemd/network/MyBridge.netdev /etc/systemd/network/MyEth.network
MyBridge.network の修正
/etc/systemd/network/MyBridge.network
[Match] Name=br0 [Network] DNS=192.168.1.254 Address=192.168.1.87/24 Gateway=192.168.1.254
- コンテナ側
/etc/systemd/network/MyVeth.network
[Match] Name=host0 [Network] DNS=192.168.1.254 Address=192.168.1.94/24 Gateway=192.168.1.254
Et voila!
管理やデスクトップの統合
systemd-networkd にはコマンドラインや GUI によるインタラクティブな管理インターフェイスがありません。networkctl はネットワークインターフェイスの状態を出力するだけです。
networkd で wpa_supplicant を使うように設定した場合、wpa_cli や wpa_gui を使うことで動的に WLAN インターフェイスを関連付けしたり再設定できます。
networkd-notify はネットワークインターフェイスの状態の変化にあわせてシンプルな通知を生成します (接続・切断や再関連付けなど)。
参照
- systemd.networkd man ページ
- systemd-networkd のメイン開発者、Tom Gundersen の G+ ホームページ
- Core OS のブログにおける Tom Gundersen の投稿
- systemd-networkd と wpa_supplicant をセットアップする方法 (WonderWoofy's walkthrough on Arch forums)