「Dhcpcd」の版間の差分
(→タイムアウト: 英語版と同期して情報を更新) |
細 (リンクを修正) |
||
(2人の利用者による、間の7版が非表示) | |||
7行目: | 7行目: | ||
{{Related articles start}} |
{{Related articles start}} |
||
{{Related|ネットワーク設定}} |
{{Related|ネットワーク設定}} |
||
− | {{Related|ワイヤレス設定}} |
+ | {{Related|ワイヤレスネットワーク設定}} |
{{Related|dhcpd}} |
{{Related|dhcpd}} |
||
{{Related articles end}} |
{{Related articles end}} |
||
13行目: | 13行目: | ||
[https://roy.marples.name/projects/dhcpcd/ dhcpcd] は DHCP と DHCPv6 のクライアントです。現在は最も機能豊富なオープンソースの DHCP クライアントであり、ホームページに全ての機能のリストが載っています。 |
[https://roy.marples.name/projects/dhcpcd/ dhcpcd] は DHCP と DHCPv6 のクライアントです。現在は最も機能豊富なオープンソースの DHCP クライアントであり、ホームページに全ての機能のリストが載っています。 |
||
− | {{Note|{{ic|dhcpcd}} (DHCP '' |
+ | {{Note|Roy Marples氏 の {{ic|dhcpcd}} (DHCP '''クライアント'''デーモン) は Internet Systems Consortium の [[dhcpd]] (DHCP '''(サーバー)'''デーモン) とは違います。}} |
== インストール == |
== インストール == |
||
171行目: | 171行目: | ||
[[dnsmasq]] DHCP サーバーを使っている場合、dnsmasq の設定で適切な {{ic|1=dhcp-host=}} ルールを使うことで別々の DUID を使えます。 |
[[dnsmasq]] DHCP サーバーを使っている場合、dnsmasq の設定で適切な {{ic|1=dhcp-host=}} ルールを使うことで別々の DUID を使えます。 |
||
− | === resolv.conf === |
+ | === /etc/resolv.conf === |
デフォルトの設定では ''dhcpcd''' は [[resolv.conf]] を上書きします。 |
デフォルトの設定では ''dhcpcd''' は [[resolv.conf]] を上書きします。 |
||
242行目: | 242行目: | ||
=== タイムアウトと遅延 === |
=== タイムアウトと遅延 === |
||
− | ''dhcpcd'' が単一のインタフェースで動作して30秒後にリースを取得できない場合 |
+ | ''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}} に設定します。 |
''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}} に設定します。 |
||
258行目: | 258行目: | ||
Restart=always |
Restart=always |
||
}} |
}} |
||
+ | |||
+ | == 既知の問題 == |
||
=== dhcpcd@.service によって起動が遅くなる === |
=== dhcpcd@.service によって起動が遅くなる === |
2023年7月10日 (月) 09:52時点における最新版
関連記事
dhcpcd は DHCP と DHCPv6 のクライアントです。現在は最も機能豊富なオープンソースの DHCP クライアントであり、ホームページに全ての機能のリストが載っています。
インストール
公式リポジトリから dhcpcd をインストールしてください。
また、dhcpcd デーモン (と任意で wpa_supplicant) の GTK+ フロントエンドである dhcpcd-uiAUR を使うこともできます。設定ダイアログで、パスフレーズを入力して無線ネットワークに接続することができます。
dhcpcd-ui-patchedAUR は dhcpcd-uiAUR パッケージにパッチを適用したバージョンで、GtkStatusIcon の代わりに AppIndicator を使用して GTK+3 でコンパイルされます。KDE で使用した場合はシャープなトレイアイコンが表示されます。
実行
dhcpcd は基本的にサービスファイル dhcpcd@.service
で操作します、インターフェイス名を引数として指定します (詳しくは systemd#ユニットを使うを見て下さい):
# systemctl start dhcpcd@interface.service # systemctl enable dhcpcd@interface.service
手動で dhcpcd を起動するには、次のコマンドを実行してください:
# dhcpcd interface
dhcpcd: version 5.1.1 starting dhcpcd: interface: broadcasting for a lease ... dhcpcd: interface: leased 192.168.1.70 for 86400 seconds
ネットワークインターフェイスの名前を確認する方法はネットワーク設定#現在のデバイス名を取得を見てください。全てのネットワークインターフェイスでデーモンを起動するには dhcpcd.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 のデフォルト設定で 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 アドレスで説明しています。基本的にはデバイス名, IP アドレス, ルーターアドレス, ネームサーバーが必要になります。
dhcpcd の固定プロファイルは /etc/dhcpcd.conf
で以下のように設定します:
/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 のリースが失敗したときに、そのプロファイルにフォールバックすることができます。常にマシンに接続できるようにするために固定プロファイルを"リカバリ"プロファイルとして使うことで、特に Raspberry Pi などの ヘッドレスマシンで役に立ちます。
以下の例では IP アドレスが 192.168.1.1
で、ゲートウェイとネームサーバが 192.168.1.23
の static_eth0
プロファイルを設定しており、このプロファイルを eth0
インターフェイスのフォールバックに指定しています。
/etc/dhcpcd.conf
# define static profile profile static_eth0 static ip_address=192.168.1.1 static routers=192.168.1.23 static domain_name_servers=192.168.1.23 # fallback to static profile on eth0 interface eth0 fallback static_eth0
フック
dhcpcd は /usr/lib/dhcpcd/dhcpcd-hooks/
にあるスクリプトを辞書順で全て実行します。詳しくは dhcpcd(5) や dhcpcd-run-hooks(8) を見て下さい。
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.conf
に env wpa_supplicant_conf=configuration_file_path
と追加することでカスタムパスを追加することもできます。
wpa_supplicant で無線接続を管理している場合、フックによって望ましくない接続イベントが作成されてしまう可能性があります。例えば、wpa_supplicant を停止したときにフックによってインターフェイスが再度立ち上げられてしまうかもしれません。また、netctl-auto を使用している場合、/run/network/wpa_supplicant_"$interface".conf
によって wpa_supplicant は自動的に起動するため、フックから起動する必要はなくなり、結果としてデフォルトのパッケージに含まれているダミーの値しか記述されていない /etc/wpa_supplicant/wpa_supplicant.conf
ファイルのパースエラーが起動時に発生します。
フックを無効にするには、dhcpcd.conf
に nohook 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
デフォルトの設定では dhcpcd' は resolv.conf を上書きします。
/etc/dhcpcd.conf
の最後のセクションに以下を追加することで上書きしないようにすることができます:
nohook resolv.conf
もしくは /etc/resolv.conf.head
という名前のファイルを作成して DNS サーバーを記述してください。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
トラブルシューティング
クライアント 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 を参照。