跳转到帖子
在手机APP中查看

一个更好的浏览方法。了解更多

PHP论坛人

主屏幕上的全屏APP,带有推送通知、徽章等。

在iOS和iPadOS上安装此APP
  1. 在Safari中轻敲分享图标
  2. 滚动菜单并轻敲添加到主屏幕
  3. 轻敲右上角的添加按钮。
在安卓上安装此APP
  1. 轻敲浏览器右上角的三个点菜单 (⋮) 。
  2. 轻敲添加到主屏幕安装APP
  3. 轻敲安装进行确认。

Debian 13 從核心層面徹底停用 IPv6

精选回复

Debian 13 從核心層面徹底停用 IPv6


------
前言
------

雖然 IPv6 是未來的網路通訊協定趨勢,但在某些特定場景下,我們可能希望完全關閉 IPv6 功能。常見的應用情境包括:

網路故障排查:釐清問題是否與 IPv6 相關

老舊應用程式相容性:部分舊版軟體對 IPv6 支援不佳

安全性考量:減少網路攻擊面,簡化網路堆疊

資源受限環境:降低系統負載,避免不必要的網路流量

對於 Debian 13 用戶而言,單純透過系統設定「關閉」IPv6 並不夠徹底

本文將從核心引導參數著手,讓 IPv6 協定棧在系統啟動初期就完全停用,從根源杜絕任何 IPv6 流量的產生


-----------------------------
為什麼要從核心層面停用?
-----------------------------

常見的停用方法 (如調整 sysctl 參數) 雖然有效,但存在一個時間窗口:這些設定在系統啟動後的階段才生效

這意味著在參數應用之前,核心的 IPv6 模組已經載入,可能會產生短暫的 IPv6 流量,如鄰居發現 (Neighbor Discovery)、路由器請求 (Router Advertisement) 等流量 

透過核心參數 ipv6.disable=1,可以直接命令核心不初始化 IPv6 子系統,這才是真正意義上的完全關閉



------------------
安全性提醒
------------------

停用 IPv6 可能影響某些雲端服務或 CDN (如 Cloudflare、Google),建議先確認應用場景是否允許




---------------------------
修改 GRUB 核心啟動參數
---------------------------

使用 root 權限開啟 GRUB 設定檔
vi /etc/default/grub



修改核心啟動參數

在檔案中找到 GRUB_CMDLINE_LINUX_DEFAULT 這行,通常預設如下:

GRUB_CMDLINE_LINUX_DEFAULT="quiet"

在引號內追加參數 ipv6.disable=1,修改後應如下:

GRUB_CMDLINE_LINUX_DEFAULT="quiet ipv6.disable=1"


重要提醒:
如果該行中原本有其他參數 (如 splash、net.ifnames=0 等),請務必保留它們,只需在末尾加入 ipv6.disable=1,並用空格與前面的參數隔開


儲存檔案並離開編輯器
按 Esc,輸入 :wq 後按 Enter






-----------------
更新GRUB配置
-----------------

執行以下指令,使修改生效:
update-grub


成功執行後,應看到類似 Found linux image: ... 的輸出,且沒有錯誤訊息




---------
重開機
---------

核心參數的變更需要重啟才能生效

reboot



--------------
驗證與排查
--------------

確認核心參數已套用

重開機後執行
cat /proc/cmdline


應包含:ipv6.disable=1

若沒有出現,表示 GRUB 未成功更新





重開機後,檢查 IPv6 位址是否存在
ip a | grep inet6


沒有任何輸出

或只看到 ::1  (IPv6 的 loopback 位址,在極少數情況下可能仍有顯示)

通常表示已成功停用




測試 IPv6 連線
ping6 google.com


預期結果應顯示:connect: Network is unreachable





檢查核心設定
grep CONFIG_IPV6 /boot/config-$(uname -r)


輸出 CONFIG_IPV6=y 是正常的,這表示 IPv6 是編譯進核心而非模組,我們只能「停用」而非「移除」它



確認核心是否接受停用指令
cat /proc/sys/net/ipv6/conf/all/disable_ipv6


返回 1:完美,IPv6 已停用

返回 0:停用失敗,請檢查 GRUB 設定是否有拼寫錯誤,或是否有其他服務 (如 systemd-networkd) 覆蓋了核心設定




------------------
終極驗證方式
------------------

指令
sysctl net.ipv6.conf.all.disable_ipv6


若出現以下訊息,代表 IPv6 子系統真的完全不存在了:
sysctl: cannot stat /proc/sys/net/ipv6/conf/all/disable_ipv6: No such file or directory



即使核心停用了IPv6,某些應用程式 (如 curl、wget) 或服務在解析DNS時,仍可能會因為 glibc 的位址選擇規則而產生短暫的IPv6連線嘗試

雖然此時網路層會直接拒絕,但為了追求極致純淨,建議額外進行以下操作


編輯 /etc/gai.conf
vi /etc/gai.conf


這個檔案控制了位址解析的優先權。找到如下行並取消註釋,告訴系統優先使用IPv4映射位址:

找到下面這一行,去掉前面的 '#' 號
precedence ::ffff:0:0/96 100


儲存檔案並離開編輯器
按 Esc,輸入 :wq 後按 Enter





-------
補充
-------

後續優化設定

即使核心層面已停用 IPv6,某些應用程式或服務仍可能嘗試使用 IPv6,導致延遲或日誌錯誤。以下提供幾個補充設定,讓系統更純淨


----------------------------
SSH伺服器的「監聽限制」
----------------------------

許多SSH設定預設會監聽 any (包含 v4/v6)。雖然核心關閉了,但建議明確指定IPv4協議

編輯 /etc/ssh/sshd_config
vi /etc/ssh/sshd_config


找到 #AddressFamily any 這行,取消註解並修改為
AddressFamily inet


儲存檔案並離開編輯器
按 Esc,輸入 :wq 後按 Enter



重新啟動SSH服務
systemctl restart ssh


驗證SSH服務狀態是否正常
systemctl status ssh




----------------------------
清理 /etc/hosts 檔案
----------------------------

/etc/hosts 通常包含 ::1 localhost 的條目,雖然不影響網路流量,但某些應用程式會優先嘗試解析 IPv6 位址而導致延遲


編輯 hosts 檔案
vi /etc/hosts


將含有 ::1 的行刪除或加上註解


# ::1         localhost ip6-localhost ip6-loopback
# ff02::1     ip6-allnodes
# ff02::2     ip6-allrouters



儲存檔案並離開編輯器
按 Esc,輸入 :wq 後按 Enter



---------------------
強制 APT 使用 IPv4
---------------------

避免 APT 在更新時嘗試連接 IPv6 鏡像站

echo 'Acquire::ForceIPv4 "true";' | sudo tee /etc/apt/apt.conf.d/99force-ipv4



確認設定已寫入
cat /etc/apt/apt.conf.d/99force-ipv4





----------------------------
黑名單IPv6模組 (進階保護)
----------------------------


建立模組黑名單檔案
vi /etc/modprobe.d/blacklist-ipv6.conf


加入以下內容

blacklist ipv6



儲存檔案並離開編輯器
按 Esc,輸入 :wq 後按 Enter



儲存後,更新 initramfs 使黑名單在開機時生效
update-initramfs -u




-----------------
封包監聽驗證
-----------------

安裝
apt install tcpdump -y


使用 tcpdump 監聽所有介面的 IPv6 封包
tcpdump -i any ip6


正常情況下應沒有任何封包輸出


若在 VPS/雲主機 上仍看到 IPv6 封包,可能是由以下原因造成:

Hypervisor 層級注入的封包

Host bridge 發送的封包

主機商網路層送入的封包

這些情況並非主機內部問題,無需擔心




-----------------
常見問題與排除
-----------------


Q1:為什麼修改 GRUB 後 IPv6 沒有關閉?

可能原因:

GRUB 設定檔拼寫錯誤 (如 ipv6.disable=1 誤寫為 ipv6.disable=0)

忘記執行 update-grub 更新設定

有其他服務 (如 NetworkManager、systemd-networkd) 覆蓋了核心設定


Q2:關閉 IPv6 會影響系統正常運作嗎?

一般不會。大多數應用程式在 IPv6 不可用時會優雅地降級使用 IPv4。但如果某些服務強制依賴 IPv6,可能會出現異常,此時建議保留 IPv6

创建帐户或登录后发表意见

帐户

导航

搜索

配置浏览器推送通知

Chrome (安卓)
  1. 轻敲地址栏旁的锁形图标。
  2. 轻敲权限 → 通知。
  3. 调整你的偏好。
Chrome (台式电脑)
  1. 点击地址栏中的挂锁图标。
  2. 选择网站设置。
  3. 找到通知选项并调整你的偏好。