「Dhcpcd」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
 
 
(7人の利用者による、間の28版が非表示)
1行目: 1行目:
 
{{Lowercase title}}
 
{{Lowercase title}}
[[Category:ネットワーク]]
+
[[Category:DHCP]]
  +
[[Category:コマンド]]
 
[[en:dhcpcd]]
 
[[en:dhcpcd]]
 
[[ru:dhcpcd]]
 
[[ru:dhcpcd]]
  +
[[zh-hans:Dhcpcd]]
 
{{Related articles start}}
 
{{Related articles start}}
{{Related2|Network Configuration|ネットワーク設定}}
+
{{Related|ネットワーク設定}}
{{Related2|Wireless Setup|ワイヤレス設定}}
+
{{Related|ワイヤレスネットワーク設定}}
 
{{Related|dhcpd}}
 
{{Related|dhcpd}}
 
{{Related articles end}}
 
{{Related articles end}}
   
[http://roy.marples.name/projects/dhcpcd/ dhcpcd] は DHCP と DHCPv6 のクライアントです。現在は最も機能豊富なオープンソースの DHCP クライアントであり、ホームページに全ての機能のリストが載っています。
+
[https://roy.marples.name/projects/dhcpcd/ dhcpcd] は DHCP と DHCPv6 のクライアントです。現在は最も機能豊富なオープンソースの DHCP クライアントであり、ホームページに全ての機能のリストが載っています。
   
{{Note|{{ic|dhcpcd}} (DHCP ''client'' デーモン) は {{ic|dhcpd}} (DHCP ''(server)'' デーモン) とは違います。}}
+
{{Note|Roy Marples氏 の {{ic|dhcpcd}} (DHCP '''クライアント'''デーモン) は Internet Systems Consortium の [[dhcpd]] (DHCP '''(サーバー)'''デーモン) とは違います。}}
   
 
== インストール ==
 
== インストール ==
   
{{Pkg|dhcpcd}} パッケージ[[公式リポジトリ]]から入手できます。{{Grp|base}} グループに含まれているため、通常は既にあなたのシステムにインストールされているはずです。
+
[[dhcpcd]] パッケージ[[インストール]]します。
   
また、''dhcpcd'' デーモン (と任意で [[wpa_supplicant]]) の GTK+ フロントエンドである {{AUR|dhcpcd-ui}} を使うことできます。設定ダイアログ、パスフレーズを入力して無線ネットワークに接続することできます。
+
{{AUR|dhcpcd-ui}} は ''dhcpcd'' デーモン [[GTK]] フロントエンドで、オプションで [[wpa_supplicant]] 対応しています。設定ダイアログ無線ネットワークのパスフレーズを入力する機能あります。
   
 
== 実行 ==
 
== 実行 ==
   
  +
すべてのネットワークインターフェースでデーモンを起動するには、{{ic|dhcpcd.service}} を[[起動/有効化]]します。
''dhcpcd'' は基本的にサービスファイル {{ic|dhcpcd@.service}} で操作します、インターフェイス名を引数として指定します (詳しくは [[systemd#ユニットを使う]] を見て下さい):
 
   
  +
特定のインターフェースのみでデーモンを起動するには、テンプレートユニット {{ic|dhcpcd@''interface''.service}} を[[起動/有効化]]します。ここで ''interface'' は [[ネットワーク設定#ネットワークインターフェイスを表示|ネットワークインターフェースの一覧表示]]で確認できます。
# systemctl start dhcpcd@''interface''.service
 
# systemctl enable dhcpcd@''interface''.service
 
   
  +
テンプレートユニットを使用することを推奨します。詳細は [[#dhcpcd と systemd ネットワークインターフェイス|dhcpcd と systemd ネットワークインターフェース]] を参照してください。どちらの場合でも、動的な IP アドレスが割り当てられます。静的な IP アドレスを割り当てるには、[[#静的プロファイル|静的プロファイル]]を参照してください。
手動で ''dhcpcd'' を起動するには、次のコマンドを実行してください:
 
   
  +
{{Note|各ネットワークインターフェースは、1つの[[ネットワーク設定#ネットワークマネージャ|DHCPクライアントまたはネットワークマネージャ]]によってのみ管理されるべきです。そのため、システム上で実行する DHCP クライアントまたはネットワークマネージャは1つだけにすることをお勧めします。現在実行中のサービスの一覧を {{ic|1=systemctl --type=service}} で確認し、競合するものを[[停止]]または再設定してください。}}
{{hc|# dhcpcd ''interface''|
 
dhcpcd: version 5.1.1 starting
 
dhcpcd: ''interface'': broadcasting for a lease
 
...
 
dhcpcd: ''interface'': leased 192.168.1.70 for 86400 seconds
 
}}
 
   
 
== 設定 ==
 
== 設定 ==
   
メインの設定は {{ic|/etc/dhcpcd.conf}} で行います、詳細は {{ic|dhcpcd.conf(5)}} を参照してください。よく使われるオプションについては以下で説明します。
+
メインの設定は {{ic|/etc/dhcpcd.conf}} で行います、詳細は {{man|5|dhcpcd.conf}} を参照してください。よく使われるオプションについては以下で説明します。
   
 
=== DHCP スタティックルート ===
 
=== DHCP スタティックルート ===
   
  +
スタティックルートをクライアント側に追加する必要がある場合、{{ic|/etc/dhcpcd.exit-hook}} に新しい dhcpcd フックスクリプトを作成してください。以下の例は {{ic|192.168.192.5}} のゲートウェイマシンを通じて VPN サブネットにスタティックルートを追加するフックスクリプトです:
If you need to add a static route client-side, create a new dhcpcd hook-script in {{ic|/usr/lib/dhcpcd/dhcpcd-hooks}}. The example shows a new hook-script which adds a static route to a VPN subnet on {{ic|10.11.12.0/24}} via a gateway machine at {{ic|192.168.192.5}}:
 
   
{{hc|/usr/lib/dhcpcd/dhcpcd-hooks/40-vpnroute|
+
{{hc|/etc/dhcpcd.exit-hook|
 
ip route add 10.11.12.0/24 via 192.168.192.5
 
ip route add 10.11.12.0/24 via 192.168.192.5
 
}}
 
}}
   
  +
上記のファイルには複数のルートを追加できます。
The {{ic|40}} prefix means that it is the final hook-script to run when dhcpcd starts.
 
   
 
=== DHCP クライアント ID ===
 
=== DHCP クライアント ID ===
   
  +
複数の方法を使って DHCP クライアントをサーバーから一意に識別させることが可能です:
The DHCP client may be uniquely identified in different ways by the server:
 
  +
* ホストネーム (またはクライアントから送信されたホストネームの値)
* hostname (or the hostname value sent by the client),
 
  +
* 接続を作成するのに使われたネットワークインターフェイスコントローラの MAC アドレス
* MAC address of the network interface controller through which the connection is being made, linked to this is the third,
 
* Identity Association ID (IAID), which is an abstraction layer to differentiate different use-cases and/or interfaces on a single host,
+
* Identity Association ID (IAID)、ホストのユースケースやインターフェイスを区別するための抽象レイヤー
* DHCP Unique Identifier (DUID).
+
* DHCP Unique Identifier (DUID)
For a further description, see [https://tools.ietf.org/html/rfc3315#section-4.2 RFC 3315].
+
詳しい解説は [https://tools.ietf.org/html/rfc3315#section-4.2 RFC 3315] を見てください。
   
  +
DHCP サーバーの設定によって、オプションは設定する必要がなかったり、もしくは DHCP IP リースをリクエストするのに必須であったりします。
It depends on the DHCP-server configuration which options are optional or required to request a DHCP IP lease. If the ''dhcpcd'' default configuration fails to obtain an IP, the following options are available to use in {{ic|dhcpcd.conf}}:
 
* {{ic|hostname}} sends the hostname set in {{ic|/etc/hostname}}
 
* {{ic|clientid}} sends the MAC address as identifier
 
* {{ic|IAID <interface>}} derives the IAID for the {{ic|interface <interface>}} to use for DHCP discovery. Both have to be used [https://bbs.archlinux.org/viewtopic.php?pid=1388376#p1388376 together], but more frequently the next option is used:
 
* {{ic|duid}} triggers using a combination of DUID and IAID as identifier.
 
   
  +
{{Note|大抵は ''dhcpcd'' のデフォルト設定で問題ありません。記載されている識別子は自動的に処理されるので、問題が発生しときにだけ手動で設定を変更してください。}}
The DUID value is set in {{ic|/etc/dhcpcd.duid}}.
 
   
  +
''dhcpcd'' のデフォルト設定で IP が取得できない場合、{{ic|dhcpcd.conf}} で以下のオプションを使うことができます:
Care must be taken on a network running [[Wikipedia:Dynamic DNS|Dynamic DNS]] to ensure that all three are unique. If duplicate DUID values are presented to the DNS server, e.g. in the case where a virtual machine has been cloned and the hostname and MAC have been made unique but the DUID has not been changed, then the result will be that as each client with the duplicated DUID requests a lease the server will remove the predecessor from the DNS record.
 
  +
* {{ic|hostname}} は {{ic|/etc/hostname}} で設定されたホストネームを送信します。
  +
* {{ic|clientid}} は MAC アドレスを識別子として送信します。
  +
* {{ic|iaid <interface>}} は DHCP ディスカバリに使われる IAID を取得します。interface ブロックで使用します ({{ic|interface <interface>}} で始まるブロック、詳しくは [https://bbs.archlinux.org/viewtopic.php?pid=1388376#p1388376] を参照)。ただし、次のオプションの方がよく使われます:
  +
* {{ic|duid}} は DUID と IAID の組み合わせを識別子として使用します。
   
  +
DUID の値は {{ic|/var/lib/dhcpcd/duid}} で設定します。効率的な DHCP リース操作のために DUID はシステム固有の値にして全てのネットワークインターフェイスに適用することが重要です。逆に IAID は各々のインターフェイスを表す識別子です ([https://tools.ietf.org/html/rfc4361#section-6.1 RFC 4361] を参照)。
=== ARP プローブを無効にして DHCP を高速化 ===
 
   
  +
[[Wikipedia:ja:ダイナミックドメインネームシステム|Dynamic DNS]] を使っているネットワークでは3つの ID がそれぞれ異なっていることに注意を払ってください。重複する DUID の値が DNS サーバーに渡された場合 (仮想マシンを複製したときにホストネームと MAC は変更したのに DUID を変更しなかった場合など)、重複した DUID を持ったクライアントがリースをリクエストすることになり、サーバーはクライアントを DNS レコードから削除してしまいます。
''dhcpcd'' contains an implementation of a recommendation of the DHCP standard ([http://www.ietf.org/rfc/rfc2131.txt RFC2131] section 2.2) to check via ARP if the assigned IP address is really not taken. This seems mostly useless in home networks, so you can save about 5 seconds on every connect by adding the following line to {{ic|/etc/dhcpcd.conf}}:
 
   
  +
=== 静的プロファイル ===
noarp
 
   
  +
必要な設定は[[ネットワーク設定|ネットワーク設定]]で説明されています。これらの設定には通常、[[ネットワーク設定#ネットワークインターフェイス|ネットワークインターフェース]]名、''IPアドレス''、''ルーターアドレス''、および''ネームサーバー''が含まれます。
This is equivalent to passing {{ic|--noarp}} to {{ic|dhcpcd}}, and disables the described ARP probing, speeding up connections to networks with DHCP.
 
   
  +
例えば、{{ic|/etc/dhcpcd.conf}} で ''dhcpcd'' の静的プロファイルを以下のように設定します:
=== 予備の固定プロファイル ===
 
   
  +
{{hc|1=/etc/dhcpcd.conf|2=
''dhcpcd'' の中で固定プロファイルを設定して DHCP のリースが失敗したときに、そのプロファイルにフォールバックすることができます。常にマシンに接続できるようにするために固定プロファイルを"リカバリ"プロファイルとして使うことで、特に [[Raspberry Pi|Raspberry Pi]] などの [[wikipedia:Headless computer|ヘッドレスマシン]]で役に立ちます。
 
  +
interface eth0
  +
static ip_address=192.168.0.10/24
  +
static routers=192.168.0.1
  +
static domain_name_servers=192.168.0.1 8.8.8.8
  +
}}
   
  +
{{ic|arping}} オプションを使うなど、もっと複雑な設定をすることもできます。詳しくは {{man|5|dhcpcd.conf}} を見て下さい。
The following example configures a {{ic|static_eth0}} profile with {{ic|192.168.1.1}} as IP address, {{ic|192.168.1.23}} as gateway and name server, and makes this profile fallback for interface {{ic|eth0}}.
 
   
  +
==== フォールバックプロファイル ====
{{hc|/etc/dhcpcd.conf|<nowiki>
 
  +
  +
''dhcpcd'' 内で静的プロファイルを設定し、DHCP リースが失敗した場合にそのプロファイルにフォールバックすることができます。これは特に[[wikipedia:Headless computer|ヘッドレスマシン]]で役立ちます。静的プロファイルは "リカバリー" プロファイルとして使用でき、常にマシンに接続できることを保証するためです。
  +
  +
次の例では、IP アドレス {{ic|192.168.1.23}}、ゲートウェイとネームサーバー {{ic|192.168.1.1}} を持つ {{ic|static_eth0}} プロファイルを設定し、このプロファイルをインターフェース {{ic|eth0}} のフォールバックとしています。
  +
  +
{{hc|1=/etc/dhcpcd.conf|2=
 
# define static profile
 
# define static profile
 
profile static_eth0
 
profile static_eth0
static ip_address=192.168.1.1
+
static ip_address=192.168.1.23/24
static routers=192.168.1.23
+
static routers=192.168.1.1
static domain_name_servers=192.168.1.23
+
static domain_name_servers=192.168.1.1
   
 
# fallback to static profile on eth0
 
# fallback to static profile on eth0
interface eth0
+
interface ''eth0''
 
fallback static_eth0
 
fallback static_eth0
  +
}}
</nowiki>}}
 
 
{{ic|arping}} オプションを使うなど、もっと複雑な設定をすることもできます。詳しくは {{ic|dhcpcd.conf(5)}} を見て下さい。
 
   
 
== フック ==
 
== フック ==
   
''dhcpcd'' は {{ic|/usr/lib/dhcpcd/dhcpcd-hooks/}} にあるスクリプトを辞書順で全て実行します。詳しくは {{ic|dhcpcd(5)}} や {{ic|dhcpcd-run-hooks(8)}} を見て下さい。
+
''dhcpcd'' は {{ic|/usr/lib/dhcpcd/dhcpcd-hooks/}} にあるスクリプトを辞書順で全て実行します。詳しくは {{man|5|dhcpcd}} や {{man|8|dhcpcd-run-hooks}} を見て下さい。
   
 
{{Note|
 
{{Note|
  +
* {{ic|dhcpcd.conf}} で {{ic|nohook}} オプションを使うことで個別のスクリプトを無効化できます。
* Each script can be disabled using the {{ic|nohook}} option in {{ic|dhcpcd.conf}}.
 
  +
* {{ic|env}} オプションを使うことで'''すべての'''フックに環境変数を設定することが可能です。例えば、{{ic|1=env force_hostname=YES}} を使えば hostname フックに常時ホストネームを設定するように指定できます。
* The {{ic|env}} option can be used to set an environment variable for '''all''' hooks. For example, you can force the hostname hook to always set the hostname with {{ic|1=env force_hostname=YES}}.
 
 
}}
 
}}
   
 
=== 10-wpa_supplicant ===
 
=== 10-wpa_supplicant ===
   
The {{ic|10-wpa_supplicant}} hook automatically launches [[WPA supplicant]] on wireless interfaces. It is started only if:
+
{{ic|10-wpa_supplicant}} フックは無線インターフェイスで [[WPA supplicant]] を自動的に起動します。起動するのは以下の条件を満たした場合に限られます:
   
  +
* インターフェイスを使っている ''wpa_supplicant'' プロセスがまだない場合。
* no ''wpa_supplicant'' process is already listening on that interface.
 
  +
* ''wpa_supplicant'' 設定ファイルが存在する場合。''dhcpcd'' はデフォルトで以下のファイルを (この順番で) チェックします:
* a ''wpa_supplicant'' configuration file exists. ''dhcpcd'' checks
 
   
 
/etc/wpa_supplicant/wpa_supplicant-"$interface".conf
 
/etc/wpa_supplicant/wpa_supplicant-"$interface".conf
117行目: 122行目:
 
/etc/wpa_supplicant.conf
 
/etc/wpa_supplicant.conf
   
by default, in that order, but a custom path can be set by adding {{ic|1=env wpa_supplicant_conf=''configuration_file_path''}} into {{ic|/etc/dhcpcd.conf}}.
+
ただし、{{ic|/etc/dhcpcd.conf}} {{ic|1=env wpa_supplicant_conf=''configuration_file_path''}} と追加することでカスタムパスを追加することもできます。
   
  +
{{Note|設定ファイルが最初に見つかった時点でフックは停止します。そのため、''wpa_supplicant'' の設定ファイルが複数存在する場合は注意が必要です。''dhcpcd'' が間違ったファイルを使ってしまう可能性があります。}}
{{Note|The hook stops at the first configuration file found, thus you should take this into consideration if you have several ''wpa_supplicant'' configuration files, otherwise ''dhcpcd'' might end up using the wrong file.}}
 
   
  +
''wpa_supplicant'' で無線接続を管理している場合、フックによって望ましくない接続イベントが作成されてしまう可能性があります。例えば、''wpa_supplicant'' を停止したときにフックによってインターフェイスが再度立ち上げられてしまうかもしれません。また、[[Netctl#プロファイルの自動切り替え|netctl-auto]] を使用している場合、{{ic|/run/network/wpa_supplicant_"$interface".conf}} によって ''wpa_supplicant'' は自動的に起動するため、フックから起動する必要はなくなり、結果としてデフォルトのパッケージに含まれているダミーの値しか記述されていない {{ic|/etc/wpa_supplicant/wpa_supplicant.conf}} ファイルのパースエラーが起動時に発生します。
If you manage wireless connections with ''wpa_supplicant'' itself, the hook may create unwanted connection events. For example, if you stop ''wpa_supplicant'' the hook may bring the interface up again. To disable it, add {{ic|nohook wpa_supplicant}} to {{ic|dhcpcd.conf}}.
 
   
  +
フックを無効にするには、{{ic|dhcpcd.conf}} に {{ic|nohook wpa_supplicant}} を追加してください。
== Tips and tricks ==
 
   
  +
== ヒントとテクニック ==
=== Remove old DHCP lease ===
 
   
  +
=== ARP プローブを無効にして DHCP を高速化 ===
The file {{ic|/var/lib/dhcpcd/dhcpcd-''interface''.lease}}, where {{ic|''interface''}} is the name of the interface on which you have a lease, contains the actual DHCP lease reply sent by the DHCP server. It is used to determine the last lease from the server, and its {{ic|mtime}} attribute is used to determine when it was issued. This last lease information is then used to request the same IP address previously held on a network, if it is available. If you do not want that, simply delete this file.
 
  +
  +
''dhcpcd'' には DHCP 標準 ([https://www.ietf.org/rfc/rfc2131.txt RFC2131] section 2.2) で勧告されている実装が含まれており、割り当てられた IP アドレスが実際に取得できているかどうか ARP でチェックを行います。ホームネットワークではこの機能はあまり意味がないので、{{ic|/etc/dhcpcd.conf}} に以下の行を追加することで、5秒ほど接続のときにかかる時間を減らすことができます:
  +
  +
noarp
  +
  +
上記の設定は {{ic|dhcpcd}} に {{ic|--noarp}} を指定するのと同一の効果を持ち、ARP プローブを無効化します。これにより DHCP によるネットワークの接続が高速化されます。
  +
  +
=== 古い DHCP リースを削除 ===
  +
  +
{{ic|/var/lib/dhcpcd/''interface''.lease}} ({{ic|''interface''}} はリースを得るインターフェイスの名前) ファイルには DHCP サーバーから送信された実際の DHCP リースの応答が含まれています。無線インターフェイスの場合、ファイル名は {{ic|/var/lib/dhcpcd/''interface''-''ssid''.lease}} になります ({{ic|''ssid''}} は無線ネットワークの名前に置き換えてください)。このファイルを使ってサーバーからの最後のリースを判別することができ、また、ファイルの {{ic|mtime}} 属性を使ってリースの発行日時が確認されます。最後のリース情報を使用することで、前回ネットワーク上で確保されたのと同じ IP アドレスをリクエストします。リース情報を使用して欲しくない場合、ファイルを削除してください。
  +
  +
ファイルを削除しても DHCP サーバーから同じ IP アドレスが割り当てられる場合、割り当てを安定化するためにリクエストしてくる DHCP クライアントの ID や DUID を識別するように設定されている可能性があります ([[#DHCP クライアント ID]] を参照)。''dhcpcd'' を停止して {{ic|/var/lib/dhcpcd/duid}} を削除あるいは名前を変更することでテストができます。''dhcpcd'' は次回の起動時に新しいファイルを生成します。
  +
  +
DUID は再起動しても変わらない永続的なマシンの識別子であることに注意してください。システムを新しいコンピュータに移動する場合、ファイルをそのまま持っていくと古いコンピュータとして認識されます。
  +
  +
=== マルチブートするときに IP を変える ===
  +
  +
Arch と OS X あるいは Windows をデュアルブートしていて、それぞれ別の IP アドレスを割り当てたい場合、オペレーティングシステムごとに別々の DUID を指定することでリースされる IP を制御することができます。
  +
  +
(XP 以降の) Windows では以下のレジストリキーに DUID が保存されています:
  +
\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\Dhcpv6DUID
  +
  +
OS X では {{ic|Network\adapter\dhcp preferences panel}} から直接アクセスできます。
  +
  +
[[dnsmasq]] DHCP サーバーを使っている場合、dnsmasq の設定で適切な {{ic|1=dhcp-host=}} ルールを使うことで別々の DUID を使えます。
  +
  +
=== /etc/resolv.conf ===
  +
  +
[[resolvconf]] が利用可能な場合、DNS情報はそちらに送信されます。そうでない場合、''dhcpcd'' 自身が {{ic|/etc/resolv.conf}} に書き込みます。
  +
  +
{{ic|/etc/resolv.conf}} の上書きは、フック {{ic|/usr/lib/dhcpcd/dhcpcd-hooks/20-resolv.conf}} を無効にすることで停止できます。{{ic|/etc/dhcpcd.conf}} の最後のセクションに以下を追加してください。
  +
  +
nohook resolv.conf
  +
  +
このフックを無効にすると、dhcpcd による resolvconf の使用も全体的に無効になることに注意してください。
  +
  +
あるいは、DNSサーバーを含む {{ic|/etc/resolv.conf.head}} というファイルを作成することもできます。''dhcpcd'' はこのファイルを {{ic|/etc/resolv.conf}} の先頭に追加します。
  +
  +
または、dhcpcd が常に同じ DNS サーバーを使用するように設定できます。これを行うには、{{ic|/etc/dhcpcd.conf}} の最後に次の行を追加します。{{ic|''dns-server-ip-addressses''}} は、スペースで区切られた DNS IP アドレスのリストです。
  +
  +
static domain_name_servers=''dns-server-ip-addresses''
  +
  +
例えば、Google の DNS サーバーに設定するには、次のようにします。
  +
  +
static domain_name_servers=8.8.8.8 8.8.4.4
  +
  +
{{Tip|[[openresolv]] を使用している場合、DNS サーバーは代わりに {{ic|/etc/resolvconf.conf}} で設定できます。このようにすると、''resolvconf'' をサポートするソフトウェアによって上書きされることはありません。}}
   
 
== トラブルシューティング ==
 
== トラブルシューティング ==
147行目: 199行目:
 
}}
 
}}
   
こうしないと、DHCP サーバーがあなたの [http://en.wikipedia.org/wiki/DHCPv6 DHCPv6] クライアント ID を正しく読み込めない可能性があります。詳しくは [http://tools.ietf.org/html/rfc4361 RFC 4361] を見て下さい。
+
こうしないと、DHCP サーバーがあなたの [https://en.wikipedia.org/wiki/DHCPv6 DHCPv6] クライアント ID を正しく読み込めない可能性があります。詳しくは [https://tools.ietf.org/html/rfc4361 RFC 4361] を見て下さい。
   
 
=== まず IP を開放して DHCP の問題を確認する ===
 
=== まず IP を開放して DHCP の問題を確認する ===
163行目: 215行目:
 
=== 強情なルーターの問題 ===
 
=== 強情なルーターの問題 ===
   
  +
(厄介な) ルーターによっては、{{ic|/etc/dhcpcd.conf}} にある以下の行をコメントアウトしないと接続が上手くいかないことがあります:
For some (incompliant) routers, you will not be able to connect properly unless you comment the line
 
   
 
require dhcp_server_identifier
 
require dhcp_server_identifier
   
  +
ネットワーク上に複数の DHCP サーバーがあるという状況でないかぎり (こういうことは稀です)、コメントアウトすることで問題が発生することはありません。詳しくは [https://technet.microsoft.com/en-us/library/cc977442.aspx このページ] を参照。
in {{ic|/etc/dhcpcd.conf}}. This should not cause issues unless you have multiple DHCP servers on your network (not typical); see [http://technet.microsoft.com/en-us/library/cc977442.aspx this page] for more information.
 
   
 
=== dhcpcd と systemd ネットワークインターフェイス ===
 
=== dhcpcd と systemd ネットワークインターフェイス ===
   
インターフェイスを指定しないで ''dhcpcd.service'' を[[systemd#ユニットを使う|有効]]にすることもできますが、predictable network interface name を適用する ''systemd-udevd'' と起動時に競合状態になる可能性があります:
+
インターフェイスを指定しないで ''dhcpcd.service'' を[[systemd#ユニットを使う|有効]]にすることもできますが、predictable network interface name を適用する ''systemd-udevd'' と起動時に競合状態になる可能性があります:
 
error changing net interface name wlan0 to wlp4s0: Device or resource busy"
 
error changing net interface name wlan0 to wlp4s0: Device or resource busy"
   
これを避けるために、''dhcpcd'' を有効にするときは [[#実行]] で説明されているようにインターフェイスを指定して下さい。
+
これを避けるために、''dhcpcd'' を有効にするときは[[#実行]]で説明されているようにインターフェイスを指定して下さい。ただしテンプレートユニットでは有線接続のホットプラグをサポートしていないため、ネットワークケーブルが接続されていないと起動に失敗します。問題を回避したい場合、[[#タイムアウト]]を見てください。
  +
  +
{{man|5|dhcpcd.conf}} で {{ic|denyinterfaces}} または {{ic|allowinterfaces}} を使って dhcpcd がカーネル名にバインドしないようにすることもできます。例:
  +
  +
denyinterfaces wlan* eth*
  +
  +
=== タイムアウトと遅延 ===
  +
  +
''dhcpcd'' が単一のインタフェースで動作して30秒後にリースを取得できない場合(たとえば、サーバーが準備ができていない場合、またはケーブルが接続されていない場合)、エラーで終了します。
  +
  +
''dhcpcd'' を1回限り無期限に待機させる場合、ユニットを [https://wiki.archlinux.jp/index.php/Systemd#.E3.83.A6.E3.83.8B.E3.83.83.E3.83.88.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB.E3.81.AE.E7.B7.A8.E9.9B.86 編集] 設定し {{ic|timeout}} オプションを {{ic|0}} に設定します。
  +
  +
{{hc|/etc/systemd/system/dhcpcd@.service.d/timeout.conf|2=
  +
[Service]
  +
ExecStart=
  +
ExecStart=/usr/bin/dhcpcd -w -q '''-t 0''' %I
  +
}}
  +
  +
無期限に待機させるには、ユニットの終了後に再起動させます。
  +
  +
{{hc|/etc/systemd/system/dhcpcd@.service.d/dhcpcdrestart.conf|2=
  +
[Service]
  +
Restart=always
  +
}}
  +
  +
== 既知の問題 ==
  +
  +
=== dhcpcd@.service によって起動が遅くなる ===
  +
  +
デフォルトでは {{ic|dhcpcd@.service}} は IP アドレスが取得されるまで待機して、それから {{ic|-w}} フラグを使って ''dhcpcd'' をバックグラウンドにフォークします。ユニットを有効化すると、IP アドレスが取得されるまで起動が進まなくなってしまう可能性があります。解決するには、以下の内容でユニットの[[systemd#ドロップインファイル|ドロップインファイル]]を作成してください:
  +
  +
{{hc|/etc/systemd/system/dhcpcd@.service.d/no-wait.conf|2=
  +
[Service]
  +
ExecStart=
  +
ExecStart=/usr/bin/dhcpcd -b -q %I
  +
}}
  +
  +
詳しくは {{Bug|49685}} を参照。
   
 
== 参照 ==
 
== 参照 ==
   
  +
* {{man|8|dhcpcd}}
* [http://roy.marples.name/man/html8/dhcpcd.html dhcpcd(8)]
 
* [http://roy.marples.name/man/html5/dhcpcd.conf.html dhcpcd.conf(5)]
+
* {{man|5|dhcpcd.conf}}

2025年2月14日 (金) 06:58時点における最新版

関連記事

dhcpcd は DHCP と DHCPv6 のクライアントです。現在は最も機能豊富なオープンソースの DHCP クライアントであり、ホームページに全ての機能のリストが載っています。

ノート: Roy Marples氏 の dhcpcd (DHCP クライアントデーモン) は Internet Systems Consortium の dhcpd (DHCP (サーバー)デーモン) とは違います。

インストール

dhcpcd パッケージをインストールします。

dhcpcd-uiAURdhcpcd デーモンの GTK フロントエンドで、オプションで wpa_supplicant にも対応しています。設定ダイアログと、無線ネットワークのパスフレーズを入力する機能があります。

実行

すべてのネットワークインターフェースでデーモンを起動するには、dhcpcd.service起動/有効化します。

特定のインターフェースのみでデーモンを起動するには、テンプレートユニット dhcpcd@interface.service起動/有効化します。ここで interfaceネットワークインターフェースの一覧表示で確認できます。

テンプレートユニットを使用することを推奨します。詳細は dhcpcd と systemd ネットワークインターフェース を参照してください。どちらの場合でも、動的な IP アドレスが割り当てられます。静的な IP アドレスを割り当てるには、静的プロファイルを参照してください。

ノート: 各ネットワークインターフェースは、1つのDHCPクライアントまたはネットワークマネージャによってのみ管理されるべきです。そのため、システム上で実行する DHCP クライアントまたはネットワークマネージャは1つだけにすることをお勧めします。現在実行中のサービスの一覧を systemctl --type=service で確認し、競合するものを停止または再設定してください。

設定

メインの設定は /etc/dhcpcd.conf で行います、詳細は dhcpcd.conf(5) を参照してください。よく使われるオプションについては以下で説明します。

DHCP スタティックルート

スタティックルートをクライアント側に追加する必要がある場合、/etc/dhcpcd.exit-hook に新しい dhcpcd フックスクリプトを作成してください。以下の例は 192.168.192.5 のゲートウェイマシンを通じて VPN サブネットにスタティックルートを追加するフックスクリプトです:

/etc/dhcpcd.exit-hook
ip route add 10.11.12.0/24 via 192.168.192.5

上記のファイルには複数のルートを追加できます。

DHCP クライアント ID

複数の方法を使って DHCP クライアントをサーバーから一意に識別させることが可能です:

  • ホストネーム (またはクライアントから送信されたホストネームの値)
  • 接続を作成するのに使われたネットワークインターフェイスコントローラの MAC アドレス
  • Identity Association ID (IAID)、ホストのユースケースやインターフェイスを区別するための抽象レイヤー
  • DHCP Unique Identifier (DUID)

詳しい解説は RFC 3315 を見てください。

DHCP サーバーの設定によって、オプションは設定する必要がなかったり、もしくは DHCP IP リースをリクエストするのに必須であったりします。

ノート: 大抵は dhcpcd のデフォルト設定で問題ありません。記載されている識別子は自動的に処理されるので、問題が発生しときにだけ手動で設定を変更してください。

dhcpcd のデフォルト設定で IP が取得できない場合、dhcpcd.conf で以下のオプションを使うことができます:

  • hostname/etc/hostname で設定されたホストネームを送信します。
  • clientid は MAC アドレスを識別子として送信します。
  • iaid <interface> は DHCP ディスカバリに使われる IAID を取得します。interface ブロックで使用します (interface <interface> で始まるブロック、詳しくは [1] を参照)。ただし、次のオプションの方がよく使われます:
  • duid は DUID と IAID の組み合わせを識別子として使用します。

DUID の値は /var/lib/dhcpcd/duid で設定します。効率的な DHCP リース操作のために DUID はシステム固有の値にして全てのネットワークインターフェイスに適用することが重要です。逆に IAID は各々のインターフェイスを表す識別子です (RFC 4361 を参照)。

Dynamic DNS を使っているネットワークでは3つの ID がそれぞれ異なっていることに注意を払ってください。重複する DUID の値が DNS サーバーに渡された場合 (仮想マシンを複製したときにホストネームと MAC は変更したのに DUID を変更しなかった場合など)、重複した DUID を持ったクライアントがリースをリクエストすることになり、サーバーはクライアントを DNS レコードから削除してしまいます。

静的プロファイル

必要な設定はネットワーク設定で説明されています。これらの設定には通常、ネットワークインターフェース名、IPアドレスルーターアドレス、およびネームサーバーが含まれます。

例えば、/etc/dhcpcd.confdhcpcd の静的プロファイルを以下のように設定します:

/etc/dhcpcd.conf
interface eth0
static ip_address=192.168.0.10/24	
static routers=192.168.0.1
static domain_name_servers=192.168.0.1 8.8.8.8

arping オプションを使うなど、もっと複雑な設定をすることもできます。詳しくは dhcpcd.conf(5) を見て下さい。

フォールバックプロファイル

dhcpcd 内で静的プロファイルを設定し、DHCP リースが失敗した場合にそのプロファイルにフォールバックすることができます。これは特にヘッドレスマシンで役立ちます。静的プロファイルは "リカバリー" プロファイルとして使用でき、常にマシンに接続できることを保証するためです。

次の例では、IP アドレス 192.168.1.23、ゲートウェイとネームサーバー 192.168.1.1 を持つ static_eth0 プロファイルを設定し、このプロファイルをインターフェース eth0 のフォールバックとしています。

/etc/dhcpcd.conf
# define static profile
profile static_eth0
static ip_address=192.168.1.23/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1

# fallback to static profile on eth0
interface eth0
fallback static_eth0

フック

dhcpcd/usr/lib/dhcpcd/dhcpcd-hooks/ にあるスクリプトを辞書順で全て実行します。詳しくは dhcpcd(5)dhcpcd-run-hooks(8) を見て下さい。

ノート:
  • dhcpcd.confnohook オプションを使うことで個別のスクリプトを無効化できます。
  • env オプションを使うことですべてのフックに環境変数を設定することが可能です。例えば、env force_hostname=YES を使えば hostname フックに常時ホストネームを設定するように指定できます。

10-wpa_supplicant

10-wpa_supplicant フックは無線インターフェイスで WPA supplicant を自動的に起動します。起動するのは以下の条件を満たした場合に限られます:

  • インターフェイスを使っている wpa_supplicant プロセスがまだない場合。
  • wpa_supplicant 設定ファイルが存在する場合。dhcpcd はデフォルトで以下のファイルを (この順番で) チェックします:
/etc/wpa_supplicant/wpa_supplicant-"$interface".conf
/etc/wpa_supplicant/wpa_supplicant.conf
/etc/wpa_supplicant-"$interface".conf
/etc/wpa_supplicant.conf

ただし、/etc/dhcpcd.confenv wpa_supplicant_conf=configuration_file_path と追加することでカスタムパスを追加することもできます。

ノート: 設定ファイルが最初に見つかった時点でフックは停止します。そのため、wpa_supplicant の設定ファイルが複数存在する場合は注意が必要です。dhcpcd が間違ったファイルを使ってしまう可能性があります。

wpa_supplicant で無線接続を管理している場合、フックによって望ましくない接続イベントが作成されてしまう可能性があります。例えば、wpa_supplicant を停止したときにフックによってインターフェイスが再度立ち上げられてしまうかもしれません。また、netctl-auto を使用している場合、/run/network/wpa_supplicant_"$interface".conf によって wpa_supplicant は自動的に起動するため、フックから起動する必要はなくなり、結果としてデフォルトのパッケージに含まれているダミーの値しか記述されていない /etc/wpa_supplicant/wpa_supplicant.conf ファイルのパースエラーが起動時に発生します。

フックを無効にするには、dhcpcd.confnohook wpa_supplicant を追加してください。

ヒントとテクニック

ARP プローブを無効にして DHCP を高速化

dhcpcd には DHCP 標準 (RFC2131 section 2.2) で勧告されている実装が含まれており、割り当てられた IP アドレスが実際に取得できているかどうか ARP でチェックを行います。ホームネットワークではこの機能はあまり意味がないので、/etc/dhcpcd.conf に以下の行を追加することで、5秒ほど接続のときにかかる時間を減らすことができます:

noarp

上記の設定は dhcpcd--noarp を指定するのと同一の効果を持ち、ARP プローブを無効化します。これにより DHCP によるネットワークの接続が高速化されます。

古い DHCP リースを削除

/var/lib/dhcpcd/interface.lease (interface はリースを得るインターフェイスの名前) ファイルには DHCP サーバーから送信された実際の DHCP リースの応答が含まれています。無線インターフェイスの場合、ファイル名は /var/lib/dhcpcd/interface-ssid.lease になります (ssid は無線ネットワークの名前に置き換えてください)。このファイルを使ってサーバーからの最後のリースを判別することができ、また、ファイルの mtime 属性を使ってリースの発行日時が確認されます。最後のリース情報を使用することで、前回ネットワーク上で確保されたのと同じ IP アドレスをリクエストします。リース情報を使用して欲しくない場合、ファイルを削除してください。

ファイルを削除しても DHCP サーバーから同じ IP アドレスが割り当てられる場合、割り当てを安定化するためにリクエストしてくる DHCP クライアントの ID や DUID を識別するように設定されている可能性があります (#DHCP クライアント ID を参照)。dhcpcd を停止して /var/lib/dhcpcd/duid を削除あるいは名前を変更することでテストができます。dhcpcd は次回の起動時に新しいファイルを生成します。

DUID は再起動しても変わらない永続的なマシンの識別子であることに注意してください。システムを新しいコンピュータに移動する場合、ファイルをそのまま持っていくと古いコンピュータとして認識されます。

マルチブートするときに IP を変える

Arch と OS X あるいは Windows をデュアルブートしていて、それぞれ別の IP アドレスを割り当てたい場合、オペレーティングシステムごとに別々の DUID を指定することでリースされる IP を制御することができます。

(XP 以降の) Windows では以下のレジストリキーに DUID が保存されています:

\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\Dhcpv6DUID 

OS X では Network\adapter\dhcp preferences panel から直接アクセスできます。

dnsmasq DHCP サーバーを使っている場合、dnsmasq の設定で適切な dhcp-host= ルールを使うことで別々の DUID を使えます。

/etc/resolv.conf

resolvconf が利用可能な場合、DNS情報はそちらに送信されます。そうでない場合、dhcpcd 自身が /etc/resolv.conf に書き込みます。

/etc/resolv.conf の上書きは、フック /usr/lib/dhcpcd/dhcpcd-hooks/20-resolv.conf を無効にすることで停止できます。/etc/dhcpcd.conf の最後のセクションに以下を追加してください。

nohook resolv.conf

このフックを無効にすると、dhcpcd による resolvconf の使用も全体的に無効になることに注意してください。

あるいは、DNSサーバーを含む /etc/resolv.conf.head というファイルを作成することもできます。dhcpcd はこのファイルを /etc/resolv.conf の先頭に追加します。

または、dhcpcd が常に同じ DNS サーバーを使用するように設定できます。これを行うには、/etc/dhcpcd.conf の最後に次の行を追加します。dns-server-ip-addressses は、スペースで区切られた DNS IP アドレスのリストです。

static domain_name_servers=dns-server-ip-addresses

例えば、Google の DNS サーバーに設定するには、次のようにします。

static domain_name_servers=8.8.8.8 8.8.4.4
ヒント: openresolv を使用している場合、DNS サーバーは代わりに /etc/resolvconf.conf で設定できます。このようにすると、resolvconf をサポートするソフトウェアによって上書きされることはありません。

トラブルシューティング

クライアント ID

また、MAC アドレスに基づくクライアント ID をフィルタリングしている DHCPv4 ネットワークを使う場合は、次の行を:

/etc/dhcpcd.conf
# Use the same DUID + IAID as set in DHCPv6 for DHCPv4 Client ID as per RFC4361. 
duid

以下のように変更してください:

/etc/dhcpcd.conf
# Use the hardware address of the interface for the Client ID (DHCPv4).
clientid

こうしないと、DHCP サーバーがあなたの DHCPv6 クライアント ID を正しく読み込めない可能性があります。詳しくは RFC 4361 を見て下さい。

まず IP を開放して DHCP の問題を確認する

DHCP が間違った IP の割り当てを取得している時、問題が起こることがあります。例えば2つのルーターが VPN で結び付けられている場合が考えられます。修正するには、コンソールで、root 権限を使って IP アドレスを開放してください:

# dhcpcd -k

それから新しい IP アドレスをリクエストしてください:

# dhcpcd

おそらくこの2つのコマンドを何度も実行する必要があります。

強情なルーターの問題

(厄介な) ルーターによっては、/etc/dhcpcd.conf にある以下の行をコメントアウトしないと接続が上手くいかないことがあります:

require dhcp_server_identifier

ネットワーク上に複数の DHCP サーバーがあるという状況でないかぎり (こういうことは稀です)、コメントアウトすることで問題が発生することはありません。詳しくは このページ を参照。

dhcpcd と systemd ネットワークインターフェイス

インターフェイスを指定しないで dhcpcd.service有効にすることもできますが、predictable network interface name を適用する systemd-udevd と起動時に競合状態になる可能性があります:

error changing net interface name wlan0 to wlp4s0: Device or resource busy" 

これを避けるために、dhcpcd を有効にするときは#実行で説明されているようにインターフェイスを指定して下さい。ただしテンプレートユニットでは有線接続のホットプラグをサポートしていないため、ネットワークケーブルが接続されていないと起動に失敗します。問題を回避したい場合、#タイムアウトを見てください。

dhcpcd.conf(5)denyinterfaces または allowinterfaces を使って dhcpcd がカーネル名にバインドしないようにすることもできます。例:

denyinterfaces wlan* eth*

タイムアウトと遅延

dhcpcd が単一のインタフェースで動作して30秒後にリースを取得できない場合(たとえば、サーバーが準備ができていない場合、またはケーブルが接続されていない場合)、エラーで終了します。

dhcpcd を1回限り無期限に待機させる場合、ユニットを 編集 設定し timeout オプションを 0 に設定します。

/etc/systemd/system/dhcpcd@.service.d/timeout.conf
[Service]
ExecStart=
ExecStart=/usr/bin/dhcpcd -w -q -t 0 %I

無期限に待機させるには、ユニットの終了後に再起動させます。

/etc/systemd/system/dhcpcd@.service.d/dhcpcdrestart.conf
[Service]
Restart=always

既知の問題

dhcpcd@.service によって起動が遅くなる

デフォルトでは dhcpcd@.service は IP アドレスが取得されるまで待機して、それから -w フラグを使って dhcpcd をバックグラウンドにフォークします。ユニットを有効化すると、IP アドレスが取得されるまで起動が進まなくなってしまう可能性があります。解決するには、以下の内容でユニットのドロップインファイルを作成してください:

/etc/systemd/system/dhcpcd@.service.d/no-wait.conf
[Service]
ExecStart=
ExecStart=/usr/bin/dhcpcd -b -q %I

詳しくは FS#49685 を参照。

参照