在 Debian 12/13 中,直接在 /etc/network/interfaces 里注释掉 IPv4 配置并不能完全禁用 IPv4。

注释掉配置后,虽然系统不会通过该文件自动配置静态 IP 或发起 DHCP 请求,但内核(Kernel)层面的 IPv4 协议栈依然是开启的。如果网络中有其他服务(如 NetworkManager)或某些自动配置机制(如虚拟化环境下的 DHCP 注入),网卡可能还是会拿到 IPv4 地址。


1. 为什么“注释配置”不推荐?

  • 残留地址: 如果你是在网卡已经运行的情况下注释配置并执行 ifdown/up,有时旧的 IPv4 地址会因为缓存或锁死而残留在内存中。
  • 本地回环: lo 接口通常仍会保留 127.0.0.1,这意味着 IPv4 协议栈依然在工作。
  • 报错风险: 某些依赖 IPv4 的系统服务在启动时可能会因为找不到可用的 IPv4 地址而报错或启动缓慢。

2. 更推荐的做法:系统级禁用

根据你的需求(通常是由于 VPS 只需要 IPv6,或者为了彻底的安全隔离),有以下几种更专业的方法:

A. 修改内核参数 (最推荐,最彻底)

通过 sysctl 禁用整个内核协议栈。这会让网卡彻底“无视” IPv4 数据包。

  1. 编辑配置文件:

    nano /etc/sysctl.conf
    
  2. 添加以下内容:

    # 禁用所有网卡的 IPv4
    net.ipv4.conf.all.disable_ipv4 = 1
    net.ipv4.conf.default.disable_ipv4 = 1
    # 如果只想针对特定网卡(如 eth0)
    # net.ipv4.conf.eth0.disable_ipv4 = 1
    
  3. 应用配置:

    sysctl -p
    

B. GRUB 引导禁用 (硬核操作)

如果你希望从系统启动的最早阶段就彻底砍掉 IPv4,可以修改 GRUB。

  1. 编辑 /etc/default/grub:

    GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=0 ipv4.disable=1" 
    

(注意:并非所有内核版本都支持直接传参 ipv4.disable=1,通常 A 方法已足够)

  1. 更新并重启:
    update-grub && reboot

C. 配合 interfaces 文件的正确写法

如果你想在配置文件里显式声明“我不使用 IPv4”,而不是简单的注释,可以这样写:

# 对于 eth0 接口
iface eth0 inet manual
    pre-up echo 1 > /proc/sys/net/ipv4/conf/$IFACE/disable_ipv4

这会在网卡启动前,通过内核指令关闭该接口的 IPv4 功能。


3. 运维小贴士

由于你正在维护 Proxmox 和 Debian 12/13 的 VPS 环境,禁用 IPv4 时请务必确认以下几点:

  • SSH 连接: 确保你已经通过 IPv6 或者 Proxmox 控制台 (VNC) 登录,否则一按下回车你就会和服务器永别。
  • APT 源: 检查 /etc/apt/sources.list。如果源地址只支持 IPv4(或者 DNS 解析出的 IPv4 无法连接),你将无法更新系统。
  • 技巧: 可以强制 APT 使用 IPv6:apt-get -o Acquire::ForceIPv6=true update。
  • DNS 解析: 确保你的 /etc/resolv.conf 中使用的是 IPv6 的 DNS(如 Google 的 2001:4860:4860::8888)。

你想让我帮你写一个脚本,一键检测并安全切换到“仅 IPv6”环境吗?