IPv6
Arch Linux では、IPv6 はデフォルトで有効になっています。IPv6 トンネルに関する情報を探している場合は、IPv6 tunnel broker setup を見ると良いでしょう。
目次
プライバシー拡張
RFC 4941 にあるように IPv6 の Privacy Extensions for Stateless Address Autoconfiguration を有効にするには、以下の手順に従って下さい:
以下の行を /etc/sysctl.d/40-ipv6.conf
に追加:
# Enable IPv6 Privacy Extensions net.ipv6.conf.all.use_tempaddr = 2 net.ipv6.conf.default.use_tempaddr = 2 net.ipv6.conf.nic0.use_tempaddr = 2 ... net.ipv6.conf.nicN.use_tempaddr = 2
nic0
から nicN
はあなたのネットワークインターフェイスカード (Network Interface Card) に置き換えて下さい。sysctl の設定を実行する場合、all.use_tempaddr
や default.use_tempaddr
パラメータは既存の nic には適用されません。
再起動後、Privacy Extensions が有効になります。
dhcpcd
dhcpcd のデフォルト設定ファイルには、バージョン 6.4.0 から slaac private
オプションが含まれており、RFC 7217 の実装である、"Stable Private IPv6 Addresses instead of hardware based ones" を有効にします (commit)。従って、新しいネットワークに接続するとき以外に IPv6 アドレスに変更するような場合を除いて、何も変更する必要はありません。
NetworkManager
NetworkManager には /etc/sysctl.d/40-ipv6.conf
の設定は反映されません。このことは再起動した後に $ ip -6 addr show interface
を実行することで確認できます: 標準のアドレスの隣に scope global temporary
アドレスは表示されないでしょう。
対応方法は NetworkManager#IPv6 Privacy Extensions を有効にする を見て下さい。
近隣探索
Pinging the multicast address ff02::1
results in all hosts in link-local scope responding. An interface has to be specified:
$ ping6 ff02::1%eth0
With a ping to the multicast address ff02::2
only routers will respond.
If you add an option -I your-global-ipv6
, link-local hosts will respond with their link-global scope addresses. The interface can be omitted in this case:
$ ping6 -I 2001:4f8:fff6::21 ff02::1
固定アドレス
固定アドレスを使うことによって場合によりセキュリティが向上することがあります。例えば、あなたのローカルなルーターが近隣探索や radvd (RFC 2461) を使う場合、インターフェイスは MAC アドレスに基づいて自動的に割り当てられます (IPv6 の Stateless Autoconfiguration を使用)。これだと IP アドレスのネットワークが変更されたとしてもシステムを追跡することが出来るため、セキュリティ上あまりよろしくないということがあるでしょう。
netctl を使って固定 IP アドレスを割り当てるには、/etc/netctl/examples/ethernet-static
のサンプルファイルを見て下さい。以下の行が重要です:
... # For IPv6 static address configuration IP6=static Address6=('1234:5678:9abc:def::1/64' '1234:3456::123/96') Routes6=('abcd::1234') Gateway6='1234:0:123::abcd'
Comcast の IPv6
dhcpcd -4
or dhcpcd -6
worked using a Motorola SURFBoard 6141 and a Realtek RTL8168d/8111d. Either would work, but would not run dual stack: both protocols and addresses on one interface. (The -6
command would not work if -4
ran first, even after resetting the interface. And when it did, it gave the NIC a /128 address.) Try these commands:
# dhclient -4 enp3s0 # dhclient -P -v enp3s0
The -P
argument grabs a lease of the IPv6 prefix only. -v
writes to stdout
what is also written to /var/lib/dhclient/dhclient6.leases
:
Bound to *:546 Listening on Socket/enp3s0 Sending on Socket/enp3s0 PRC: Confirming active lease (INIT-REBOOT). XMT: Forming Rebind, 0 ms elapsed. XMT: X-- IA_PD a1:b2:cd:e2 XMT: | X-- Requested renew +3600 XMT: | X-- Requested rebind +5400 XMT: | | X-- IAPREFIX 1234:5:6700:890::/64
IAPREFIX
is the necessary value. Substitute ::1
before the CIDR slash to make the prefix a real address:
# ip -6 addr add 1234:5:6700:890::1/64 dev enp3s0
IPv6 の無効化
機能を無効にする
カーネル行に ipv6.disable=1
を追加すると IPv6 スタック全体が無効化されるので、問題が発生している場合の対処法として使うことができます。詳しくはカーネルパラメータを見て下さい。
もしくは、ipv6.disable_ipv6=1
を追加すると IPv6 スタックの機能は維持されつつも、どのネットワークデバイスにも IPv6 アドレスが割り当てられなくなります。
以下の sysctl 設定を /etc/sysctl.d/40-ipv6.conf
に追加することで、特定のネットワークインターフェイスへの IPv6 アドレスの割り当てを止めさせることも可能です:
# Disable IPv6 net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.nic0.disable_ipv6 = 1 ... net.ipv6.conf.nicN.disable_ipv6 = 1
無効にするインターフェイスはちゃんと全て確認してください。sysctl の設定を適用する場合、all.disable_ipv6
の無効化は既に立ち上がっているインターフェイスには適用されないためです。
また、sysctl で IPv6 を無効化するときは、/etc/hosts
の IPv6 ホストをコメントアウトしたほうが良いでしょう:
#<ip-address> <hostname.domain.org> <hostname> 127.0.0.1 localhost.localdomain localhost #::1 localhost.localdomain localhost
コメントアウトしておかないと、利用できない IPv6 アドレスでホストが解決されて接続エラーが起こる可能性があります。
他のプログラム
カーネルの IPv6 機能を無効化しても他のプログラムが IPv6 を使用するのを止めることはできません。ほとんどの場合、止めなくても全く問題ありませんが、プログラムに何か問題が発生するようでしたら、プログラムのマニュアルページを読んでプログラムが IPv6 を使用しないように設定してください。
dhcpcd
dhcpcd will continue to harmlessly attempt to perform IPv6 router solicitation. To disable this, as stated in the dhcpcd.conf (5)
man page, add the following to /etc/dhcpcd.conf
:
noipv6rs noipv6
NetworkManager
NetworkManager で IPv6 を無効化するには、ネットワークの状態アイコンを右クリックして、Edit Connections > Wired > Network name > Edit > IPv6 Settings > Method > Ignore/Disabled を選択してください。
そして "Save" をクリックします。
ntpd
Systemd#ドロップインスニペット に書いてあるように、systemd が ntpd.service
を起動する方法を変更します:
# systemctl edit ntpd.service
This will create a drop-in snippet that will be run instead of the default ntpd.service
. The -4
flag prevents IPv6 from being used by the ntp daemon. Put the following into the drop-in snippet:
[Service] ExecStart= ExecStart=/usr/bin/ntpd -4 -g -u ntp:ntp
which first clears the previous ExecStart
, and then replaces it with one that includes the -4
flag.
参照
- IPv6 - kernel.org ドキュメント
- IPv6 temporary addresses - a summary about temporary addresses and privacy extensions
- IPv6 prefixes - a summary of prefix types
- net.ipv6 options - カーネルパラメータのドキュメント