停用 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 = 1使用 sudo 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 -lnt6使用 ipv6.disable=1 時,IPv6 proc 階層可能不存在,且無法開啟 IPv6 通訊端。
使用 sysctl 方法時,值為 1 表示已確認所選介面的行為。變更任一
設定後,請測試重要的應用程式:localhost 解析、繫結至 ::1
的服務、僅限 IPv6 的 DNS 記錄、容器網路、VPN 與監控代理程式都可能依賴
IPv6 支援。
評論
在 GitHub 上閱讀或評論(發表評論需要登入)