IPv6 を無効にすると、IPv6 のみによる到達性が失われ、ループバック、 コンテナ、DNS、アプリケーションの前提が破綻する可能性があります。タイムアウトの 解決策として扱う前に、アドレス選択と接続性を診断してください。
まずアドレス選択を診断する #
名前解決では IPv6 と IPv4 の両方のアドレスが返されることがあります。デュアルスタック クライアントはアドレス選択と接続フォールバックのロジックを使用します。接続失敗は、 DNS、経路、ファイアウォールポリシー、パス MTU 探索、または IPv4 のみにバインドされた サービスが原因である可能性もあります。
getent ahosts localhost
ip -6 address show
ip -6 route show
curl -6 --connect-timeout 5 https://example.com/対象とサービスのバインドをテストしてください。127.0.0.1 上のリスナーには
::1 経由で到達できません。意図した IPv4 および IPv6 のリスナーを
明示的に設定してください。障害のある経路を修復すれば、デュアルスタック運用を
維持できます。
ブート時に IPv6 を無効にする #
カーネルコマンドラインパラメーター ipv6.disable=1 は、ブート時から IPv6 機能を
無効にします。IPv6 アドレスと IPv6 ソケットが使用できなくなり、再度有効にするには
再起動が必要です。ブートローダーの永続構成に追加し、ディストリビューションの
文書化されたコマンドを使用してデプロイ済みのブートエントリを再生成し、再起動してください。
GRUB 構成には次のような記述を含められます。
GRUB_CMDLINE_LINUX="ipv6.disable=1"Arch システムでは、編集後に構成を再生成します。
sudo grub-mkconfig -o /boot/grub/grub.cfgインストール先のパスとブートローダーはシステムによって異なります。編集したファイルが
使用されたと想定せず、再起動後に /proc/cmdline を確認してください。ブートローダーが
initramfs または Unified Kernel Image を使用する場合は、対応するビルドプロセスを通じて
そのコマンドラインも更新してください。
sysctl を通じて IPv6 を制御する
#
disable_ipv6 sysctl は、IPv6 カーネルサポートをロードしたまま、インターフェースの
アドレスと IPv6 動作を無効にします。永続的なデフォルト値は sysctl 構成ファイルに
保存してください。
# /etc/sysctl.d/99-disable-ipv6.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1sudo sysctl --system を使用して変更を適用するか、再起動してください。all は既存の
インターフェースに影響し、default は後から作成されるインターフェースに値を
提供します。net.ipv6.conf.<interface>.disable_ipv6 を使用して特定のインターフェースを制御できます。例えば:
sudo sysctl -w net.ipv6.conf.wlan0.disable_ipv6=1ネットワークマネージャー、コンテナ、VPN ソフトウェアはブート後にインターフェースを 作成することがあるため、両方の設定が重要です。この方法では、後から行われる sysctl 書き込みによって IPv6 が再度有効になる可能性があります。
有効な状態と影響を確認する #
cat /proc/cmdline
cat /proc/sys/net/ipv6/conf/all/disable_ipv6
ip -6 address show
ss -lnt6ipv6.disable=1 を使用すると、IPv6 の proc 階層が存在しない場合があり、IPv6 ソケットを
開けません。sysctl 方式では、値 1 によって選択したインターフェースの動作を
確認できます。いずれかの設定を変更した後は、重要なアプリケーションをテストしてください。
localhost の解決、::1 にバインドされたサービス、IPv6 のみの DNS レコード、
コンテナネットワーク、VPN、監視エージェントは、いずれも IPv6 サポートに依存する可能性があります。
コメント
GitHub で閲覧・コメントする(投稿にはログインが必要です)