ʍoɹɐɥsのブ口グ

ส็็็็็็็็็็็็็็็็็็็็็็็็็ ส็็็็็็็็็็็็็็็็็็็็็็็็็ ส็็็็็็็็็็็็็็็็็็็็็็็็็ ส็็็็็็็็็็็็็็็็็็็็็็็็็ ส็็็็็็็็็็็็็็็็็็็็็็็็็ ส็็็็็็็็็็็็็็็็็็็็็็็็็ ส็็็็็็็็็็็็็็็็็็็็็็็็็ ส็็็็็็็็็็็็็็็็็็็็็็็็็ ส็็็็็็็็็็็็็็็็็็็็็็็็็ ส็็็็็็็็็็็

LinuxがDHCPサーバからアドレスを貰えない時

これでハマって1日潰したのでメモ。

おそらくクライアントがDHCPv6を話している

当たり前だが純DHCPv4のサーバとは通じない。でもそのための設定が分散していて面倒くさかったのでメモ。例えばArchLinuxのnetctl/etc/netctl/examples/ethernet-dhcpは以下のようになっている。

Description='A basic dhcp ethernet connection'
Interface=eth0
Connection=ethernet
IP=dhcp
#DHCPClient=dhcpcd
#DHCPReleaseOnStop=no
## for DHCPv6
#IP6=dhcp
#DHCP6Client=dhclient
## for IPv6 autoconfiguration
#IP6=stateless

IP6をコメントアウトしなければDHCPv4が使われると思うじゃん?

netctlはデフォルトでdhcpcdクライアントを立ち上げる。それのdhcpcd.confはこうなっている。

# Use the hardware address of the interface for the Client ID.
#clientid
# or
# Use the same DUID + IAID as set in DHCPv6 for DHCPv4 ClientID as per RFC4361.
# Some non-RFC compliant DHCP servers do not reply with this set.
# In this case, comment out duid and enable clientid above.
duid

デフォルトでduidを送る設定になっているのだ。duidコメントアウトしてclientdを追加にするとRFC2131でいうclient identifierとしてMACアドレスが使われるようになる(どうなんだこの設定でこの名前)。 DHCPv4/v6両方に対応したDHCPサーバ(RFC4361)だとduidでOKらしい。

ちなみにsystemd-networkdの場合は以下のようにする。

[Match]
Name=eth0

[Network]
DHCP=ipv4

[DHCP]
ClientIdentifier=mac

こっちのほうがdhcpcdよりも設定がキレいだよね。RFC2131でいうclient identifierとしてMACアドレスを送る、というそのまんまの意味になっている。


そういえばOSXで一部のサイトが見れない、とかいう症状をきいたことがある。ルーターやプロバイダがDHCPv6/IPv6に対応しているのだが、観覧先のサイトが対応していないというケース。Googleは見れるがYomiuriやWikipediaが見れない、みたいな現象になるらしい。

OS X Yosemiteに変えてから、あるWebサイトにアクセスできなくなった。Chrome... | Apple サポートコミュニティ